Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Articles index #15

Merged
merged 2 commits into from Nov 9, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/assets/stylesheets/fiches.scss
@@ -0,0 +1,3 @@
// Place all the styles related to the fiches controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
8 changes: 8 additions & 0 deletions app/assets/stylesheets/footer.scss
@@ -0,0 +1,8 @@
.footer-main {
display: flex;
background-color: rgba(0, 0, 0, .1);
position: relative;
justify-content: space-around;
padding: 3rem;
margin-top: 80px;
}
4 changes: 4 additions & 0 deletions app/controllers/dashboards_controller.rb
Expand Up @@ -7,6 +7,10 @@ def user_dashboard
items: 10,
link_extra: 'data-remote="true"'
)

@article = Article.new
@fiche = Fiche.new

if params[:filter_data]
respond_to do |format|
format.html { redirect_to profile_path }
Expand Down
18 changes: 18 additions & 0 deletions app/controllers/fiches_controller.rb
@@ -0,0 +1,18 @@
class FichesController < ApplicationController

def index
@fiches = policy_scope(Fiche).where(status: 'published')
@pagy, @fiches = pagy(
helpers.index_search(@fiches, params),
items: 10,
link_extra: 'data-remote="true"'
)

if params[:query] || params[:filter]
respond_to do |format|
format.html { redirect_to fiches_path }
format.js
end
end
end
end
2 changes: 2 additions & 0 deletions app/helpers/fiches_helper.rb
@@ -0,0 +1,2 @@
module FichesHelper
end
22 changes: 22 additions & 0 deletions app/models/fiche.rb
@@ -0,0 +1,22 @@
class Fiche < ApplicationRecord
belongs_to :user

STATUS = %w(draft published submitted)
ANIMALS = %w(Chiens Chats Rongeurs Reptiles Oiseaux)

validates :title, presence: true
validates :description, presence: true
validates :animal, inclusion: { in: ANIMALS }
validates :status, inclusion: { in: STATUS }
validates :race, presence: true
validates :origin, presence: true

ANIMALS_ICONS = {
'Chiens': '<i class="fas fa-dog"></i>',
'Chats': '<i class="fas fa-cat"></i>',
'Rongeurs': '<i class="fas fa-horse"></i>',
'Reptiles': '<i class="fas fa-frog"></i>',
'Oiseaux': '<i class="fas fa-crow"></i>'
}

end
1 change: 1 addition & 0 deletions app/models/user.rb
Expand Up @@ -8,6 +8,7 @@ class User < ApplicationRecord

has_one_attached :avatar

validates :avatar, presence: true
validates :first_name, presence: true
validates :last_name, presence: true
validates :profession, presence: true
Expand Down
31 changes: 31 additions & 0 deletions app/policies/fiche_policy.rb
@@ -0,0 +1,31 @@
class FichePolicy < ApplicationPolicy
class Scope < Scope
def resolve
scope.all
end
end

def show?
true
end

def new?
user.is_writter? || user.is_admin?
end

def create?
new?
end

def edit?
record.user == user
end

def update?
edit?
end

def submit?
edit?
end
end
33 changes: 1 addition & 32 deletions app/views/articles/index.html.erb
Expand Up @@ -4,38 +4,7 @@
<div class="container translate-nav page-container">
<div class="row">
<div class="col-xs-12 col-md-9 content-left">
<div class="articles-nav row">
<ul class="articles-nav-list">
<li class="articles-nav-item">
<div class="article-nav-item-content-wrapper">
<div class="article-nav-item-content-container">
Fiches
</div>
</div>
</li>
<li class="articles-nav-item">
<div class="article-nav-item-content-wrapper">
<div class="article-nav-item-content-container">
Conseils
</div>
</div>
</li>
<li class="articles-nav-item">
<div class="article-nav-item-content-wrapper">
<div class="article-nav-item-content-container">
Marques
</div>
</div>
</li>
<li class="articles-nav-item">
<div class="article-nav-item-content-wrapper">
<div class="article-nav-item-content-container">
Boutique
</div>
</div>
</li>
</ul>
</div>
<%= render "shared/inner_nav" %>
<div class="articles-container row">

<div class="articles-header">
Expand Down
28 changes: 1 addition & 27 deletions app/views/articles/new.html.erb
@@ -1,27 +1 @@
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
<div class="container translate-nav">
<div class="form-content pt-5">
<h2>New Article</h2>
<hr>
<%= simple_form_for(@article) do |f| %>

<div class="row">
<div class="col">
<%= f.input :title, label: false, placeholder: 'Titre' %>
<%= f.input :subtitle, label: false, placeholder: 'Sous-Titre' %>
<%= f.input :animal, collection: Article::ANIMALS %>
<%= f.input :theme, collection: Article::THEMES %>
<%= f.hidden_field :body %>
<%= f.input :thumbnail, direct_upload: true %>
<%= f.submit id: 'real-submit', class: 'd-none' %>
<button id="fake-submit" class="btn btn-primary">Submit</button>
</div>

<div class="col-9">
<div id="editor"></div>
</div>
</div>

<% end %>
</div>
</div>
<%= render "shared/article_form" %>
2 changes: 1 addition & 1 deletion app/views/dashboards/_articles_tab.html.erb
Expand Up @@ -34,4 +34,4 @@
</div>
<% end %>
<%= raw pagy_nav(@pagy) %>
</div>
</div>
45 changes: 45 additions & 0 deletions app/views/dashboards/_nav_articles_tab.html.erb
@@ -0,0 +1,45 @@
<div class="tab-pane fade show active" id="nav-articles" role="tabpanel" aria-labelledby="nav-articles-tab">
<div class="dashboard-articles">
<%= form_tag profile_path, method: :get, id: 'search-form' do %>
<%= text_field_tag :query,
params[:query],
placeholder: "Recherche"
%>
<%= submit_tag "Search", class: 'd-none' %>
<% end %>
<% @articles.each do |article| %>
<div class="dashboard-article-card">
<%= image_tag url_for(article.thumbnail) %>

<div class="artcile-infos">
<span>id: <%= article.id %></span>
<span>title: <%= article.title %></span>
<span>Subtitle: <%= article.subtitle %></span>
<span>Theme: <%= article.theme %></span>
<span>Author: <%= article.author_name %></span>
</div>

<div class="article-status-info">
<span class="status">Status</span>
<% if article.status == 'draft' %>
<div class="article-status draft"><%= article.status %></div>
<% end %>

<% if article.status == 'published' %>
<div class="article-status published"><%= article.status %></div>
<% end %>

<% if article.status == 'submitted' %>
<span class="article-status submitted"><%= article.status %></span>
<% end %>
</div>

<div class="article-controls">
<%= link_to 'Submit', submit_article_path(article), method: :post if article.status == 'draft' %>
<%= link_to 'Editer', edit_article_path(article) %>
<%= link_to 'Voir', article_path(article) %>
</div>
</div>
<% end %>
</div>
</div>
42 changes: 42 additions & 0 deletions app/views/dashboards/_nav_profile_tab.html.erb
@@ -0,0 +1,42 @@
<div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
<div class="user-card">
<div class="row">
<div class="col d-flex justify-content-center align-items-center">
<div>
<img src="<%= url_for(current_user.avatar) %>" alt="" class="rounded-circle" width="200px">
</div>
</div>
<div class="col">
<div class="user-data-column">
<div class="data-block">
<span class="data-title">Prénom</span>
<span class="user-data"><%= current_user.first_name %></span>
</div>
<div class="data-block">
<span class="data-title">Signature</span>
<span class="user-data"><%= current_user.signature %></span>
</div>
<div class="data-block">
<span class="data-title">Profession</span>
<span class="user-data"><%= current_user.profession %></span>
</div>
</div>
</div>
<div class="col">
<div class="user-data-column">
<div class="data-block">
<span class="data-title">Nom de famille</span>
<span class="user-data"><%= current_user.last_name %></span>
</div>
<div class="data-block">
<span class="data-title">email</span>
<span class="user-data"><%= current_user.email %></span>
</div>
<div class="data-block">
<%= link_to 'Modifier Mon Profile', edit_user_registration_path %>
</div>
</div>
</div>
</div>
</div>
</div>
18 changes: 18 additions & 0 deletions app/views/dashboards/_nav_write_tab.html.erb
@@ -0,0 +1,18 @@
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
<div class="tab-pane fade" id="nav-write" role="tabpanel" aria-labelledby="nav-write-tab">
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<a class="nav-item nav-link" id="nav-fiche-button" href="#fiche-form" data-toggle="tab" role="tab" aria-controls="fiche-form" aria-selected="true">Fiche</a>
<a class="nav-item nav-link" id="nav-article-button" href="#article-form" data-toggle="tab" role="tab" aria-controls="article-form" aria-selected="false">Conseil</a>

</div>
</nav>

<div class="container pt-5">
<div class="tab-content" id="nav-tabContent">
<%= render "shared/fiche_form" %>
<%= render "shared/article_form" %>
</div>
</div>

</div>
7 changes: 4 additions & 3 deletions app/views/dashboards/user_dashboard.html.erb
Expand Up @@ -7,13 +7,12 @@
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<a class="nav-item nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Mon Profile</a>
<a class="nav-item nav-link active" id="nav-articles-tab" data-toggle="tab" href="#nav-articles" role="tab" aria-controls="nav-articles" aria-selected="true">Mes Articles</a>
<a class="nav-item nav-link" id="nav-contact-tab" data-toggle="tab" href="#nav-contact" role="tab" aria-controls="nav-contact" aria-selected="false">Mes Fiches</a>
<a class="nav-item nav-link" id="nav-write-tab" data-toggle="tab" href="#nav-write" role="tab" aria-controls="nav-write" aria-selected="false">Ecrire du contenu</a>
</div>
</nav>
</div>

<div class="container pt-5">

<div class="tab-content" id="nav-tabContent">

<div class="tab-pane fade show active" id="nav-articles" role="tabpanel" aria-labelledby="nav-articles-tab">
Expand Down Expand Up @@ -86,7 +85,9 @@

<div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">...</div>

<%= render "nav_articles_tab" %>
<%= render "nav_profile_tab" %>
<%= render "nav_write_tab" %>
</div>

</div>
</div>
28 changes: 28 additions & 0 deletions app/views/fiches/_fiches_list.html.erb
@@ -0,0 +1,28 @@
<div class="row mb-5">
<% fiches.each_with_index do |fiche, index| %>
<% if index == 0 %>
<div class="col-12 card-container">
<%= link_to fiche_path(fiche) do %>
<div class="article-card article-card-main d-flex justify-content-left">
<%= image_tag url_for(fiche.thumbnail) %>
<div class="card-desc">
<h4><%= fiche.title %></h4>
</div>
</div>
<% end %>
</div>
<% else %>
<div class="col-xs-12 col-sm-6 col-md-3 d-flex justify-content-center card-container">
<%= link_to fiche_path(fiche) do %>
<div class="article-card">
<%= image_tag url_for(fiche.thumbnail) %>
<div class="card-desc">
<h4><%= fiche.title %></h4>
</div>
</div>
<% end %>
</div>
<% end %>
<% end %>
</div>
<%= raw pagy_nav(@pagy) %>
20 changes: 20 additions & 0 deletions app/views/fiches/_filter.html.erb
@@ -0,0 +1,20 @@
<div class="filter">
<i class="fas fa-grip-lines-vertical" id="filter-toggle"></i>
<div class="filter-form">
<%= simple_form_for :filter_data, url: fiches_path, method: :get, remote: true do |f| %>
<div class="animals-filter">
<h5>Animaux</h5>
<hr>
<div class="row">
<% Fiche::ANIMALS.each do |animal| %>
<div class="col-4">
<%= f.input animal.to_sym, as: :boolean, input_html: { class: 'd-none check-box' },
label: Fiche::ANIMALS_ICONS[animal.to_sym].html_safe %>
</div>
<% end %>
</div>
</div>
<%= f.submit 'Filtrer', class: 'filter-btn' %>
<% end %>
</div>
</div>
22 changes: 22 additions & 0 deletions app/views/fiches/index.html.erb
@@ -0,0 +1,22 @@
<div class="articles-wrapper">
<%= render "filter" %>

<div class="container translate-nav page-container">
<div class="row">
<div class="col-xs-12 col-md-9 content-left">
<%= render "shared/inner_nav" %>
<div class="articles-container row">

<div class="articles-header">
<h2>Fiches à la une !</h2>
</div>

<div id="articles-list">
<%= render 'fiches_list', fiches: @fiches %>
</div>

</div>
</div>
</div>
</div>
</div>