Browse Source

Les écrans de modération avancent

recurrent
echarp 8 years ago
parent
commit
450f52ef43
  1. 3
      app/assets/javascripts/moderations.js.coffee
  2. 39
      app/assets/stylesheets/moderations.css.sass
  3. 9
      app/controllers/events_controller.rb
  4. 44
      app/controllers/moderations_controller.rb
  5. 2
      app/helpers/moderations_helper.rb
  6. 1
      app/models/event.rb
  7. 4
      app/models/note.rb
  8. 1
      app/models/user.rb
  9. 48
      app/views/events/_form.html.haml
  10. 5
      app/views/events/new.html.haml
  11. 2
      app/views/events/show.html.haml
  12. 2
      app/views/layouts/application.html.haml
  13. 13
      app/views/moderations/edit.html.haml
  14. 49
      app/views/moderations/index.html.haml
  15. 14
      config/locales/fr.yml
  16. 1
      config/routes.rb
  17. 7
      test/controllers/moderations_controller_test.rb
  18. 13
      test/fixtures/notes.yml
  19. 4
      test/helpers/moderations_helper_test.rb
  20. 7
      test/models/note_test.rb

3
app/assets/javascripts/moderations.js.coffee

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/

39
app/assets/stylesheets/moderations.css.sass

@ -0,0 +1,39 @@
.moderations
table.list
width: 100%
margin-top: 15px
thead tr
background-color: transparent
td
padding-top: 0.5em
padding-bottom: 0.5em
&.empty
background-color: white
pre
width: 70%
margin: auto
padding: 5px
overflow: auto
text-align: left
background-color: #eee
em.author
display: block
font-size: smaller
text-align: right
font-style: italic
margin-top: 15px
main > h3
font-size: inherit
line-height: 1.3em
font-weight: normal
margin-left: 5em
margin-right: 5em
background-color: #CCC
.box
width: 70%
margin: auto
padding: 1em
margin-bottom: 10px
background-color: #CCC

9
app/controllers/events_controller.rb

@ -55,6 +55,12 @@ class EventsController < InheritedResources::Base
# PATCH/PUT /events/1
# PATCH/PUT /events/1.json
def update
if params[:visu]
@event.attributes = params[:event]
render action: 'edit'
return
end
respond_to do |format|
# This is a special case, required to handle the region attribute with same foreign key name
@event.region = Region.find(params[:event][:region])
@ -80,6 +86,7 @@ class EventsController < InheritedResources::Base
# Never trust parameters from the scary internet, only allow the white list through.
def event_params
params.require(:event).permit(:title, :start_time, :end_time, :description, :city, :locality, :url, :contact, :submitter, :tags)
params.require(:event)
.permit :title, :start_time, :end_time, :description, :city, :locality, :url, :contact, :submitter, :tags
end
end

44
app/controllers/moderations_controller.rb

@ -0,0 +1,44 @@
class ModerationsController < InheritedResources::Base
before_action :set_event, only: [:show, :edit, :update, :destroy]
def index
@events = Event.unscoped.where moderated: 0
end
# PATCH/PUT /moderations/1
# PATCH/PUT /moderations/1.json
def update
if params[:visu]
@event.attributes = event_params
render action: 'edit'
return
end
respond_to do |format|
if @event.update(event_params)
format.html { redirect_to moderations_path, notice: 'Event was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
private
def permitted_params
params.permit event: [:title, :start_time, :end_time, :description, :city, :locality, :url, :contact, :submitter, :tags]
end
# Use callbacks to share common setup or constraints between actions.
def set_event
@event = Event.unscoped.find params[:id]
@moderation = @event
end
# Never trust parameters from the scary internet, only allow the white list through.
def event_params
params.require(:event)
.permit :title, :start_time, :end_time, :description, :city, :locality, :url, :contact, :submitter, :tags
end
end

2
app/helpers/moderations_helper.rb

@ -0,0 +1,2 @@
module ModerationsHelper
end

1
app/models/event.rb

@ -1,5 +1,6 @@
class Event < ActiveRecord::Base
belongs_to :region, foreign_key: 'region'
has_many :notes
validates_presence_of :region

4
app/models/note.rb

@ -0,0 +1,4 @@
class Note < ActiveRecord::Base
belongs_to :event
belongs_to :author, class_name: User
end

1
app/models/user.rb

@ -1,2 +1,3 @@
class User < ActiveRecord::Base
has_many :notes
end

48
app/views/events/_form.html.haml

@ -1,9 +1,4 @@
- if @event && params[:visu]
%hr/
= render file: '/events/show'
%hr/
= form_for @event do |f|
= form_for @event, url: moderation_path(@event) do |f|
- if @event.errors.any?
#error_explanation
%h2= "#{pluralize(@event.errors.count, "error")} prohibited this event from being saved:"
@ -11,29 +6,30 @@
- @event.errors.full_messages.each do |msg|
%li= msg
:markdown
Cette page permet de soumettre un évènement dans l'Agenda du Libre. Celui-ci n'apparaîtra pas automatiquement dans l'Agenda, il sera tout d'abord validé par un modérateur. Un courrier électronique vous sera envoyé à l'adresse e-mail de contact donnée ci-dessous lorsque l'évènement aura été modéré.
- unless @event.id
:markdown
Cette page permet de soumettre un évènement dans l'Agenda du Libre. Celui-ci n'apparaîtra pas automatiquement dans l'Agenda, il sera tout d'abord validé par un modérateur. Un courrier électronique vous sera envoyé à l'adresse e-mail de contact donnée ci-dessous lorsque l'évènement aura été modéré.
#advises
%h1 Recommandations importantes
#advises
%h1 Recommandations importantes
:markdown
Ces quelques recommandations vous permettront de proposer un évènement qui sera validé plus rapidement, et dont la lisibilité sera meilleure pour les utilisateurs de l'Agenda du Libre.
:markdown
Ces quelques recommandations vous permettront de proposer un évènement qui sera validé plus rapidement, et dont la lisibilité sera meilleure pour les utilisateurs de l'Agenda du Libre.
* L'évènement doit concerner le **Logiciel Libre**. L'agenda n'a pas vocation à publier d'autres types d'évènements.
* Le texte des évènements doit être rédigé en français, en **évitant les fautes de grammaire et d'orthographe**.
* Donnez une description **rédigée** de l'évènement, avec des phrases, plutôt qu'un style télégraphique.
* Commencez la description de votre évènement par une phrase reprenant les informations principales, telle que : _« L'association [Zorglub](http://www.asso-zorglub.org) organise une conférence sur le thème des **modèles économiques du Logiciel Libre** le samedi 21 mars de 18h à 20h à la médiathèque Champillion de Montpellier. »_
* Pensez que le lecteur peut ne pas connaître votre association, le logiciel dont il sera question, etc., donc donnez à chaque fois toutes les informations nécessaires. Rappelez **le principe de l'évènement, le public visé, le lieu exact, la date, l'heure**, même si il est régulier (repas, rencontre régulière, etc.) et que vous avez déjà soumis un évènement du même type dans l'Agenda.
* **Égayez au maximum la description** de votre évènement: lien vers le site de votre association, vers le logiciel ou le langage dont il sera question, vers les organismes partenaires, etc. Pour cela, utilisez les balises HTML pour mettre en gras, en italique, faire des paragraphes et des liens.
* Ne mettez pas l'intégralité des mots en majuscule, que ce soit dans le titre, le nom de la ville ou la description.
* Donnez l'**adresse directe** d'un site Web donnant plus d'informations sur l'évènement. Si l'adresse est la page d'accueil du site de votre organisation, veillez à ce que l'évènement soit clairement visible, et que le lecteur n'ait pas à chercher trop longtemps avant de trouver l'information qu'il cherche.
* La description de l'évènement ne doit pas ressembler à une publicité éhontée pour votre entreprise, projet ou logiciel. Le ton d'un communiqué de presse, par exemple, ne convient pas pour l'Agenda du Libre.
* Les évènements de type professionnel sont acceptés dès lors qu'ils sont accessibles et ouverts à tous. Les évènements payants sont acceptés si le prix de l'entrée ne réserve pas l'évènement à un public uniquement professionnel.
* L'évènement doit concerner le **Logiciel Libre**. L'agenda n'a pas vocation à publier d'autres types d'évènements.
* Le texte des évènements doit être rédigé en français, en **évitant les fautes de grammaire et d'orthographe**.
* Donnez une description **rédigée** de l'évènement, avec des phrases, plutôt qu'un style télégraphique.
* Commencez la description de votre évènement par une phrase reprenant les informations principales, telle que : _« L'association [Zorglub](http://www.asso-zorglub.org) organise une conférence sur le thème des **modèles économiques du Logiciel Libre** le samedi 21 mars de 18h à 20h à la médiathèque Champillion de Montpellier. »_
* Pensez que le lecteur peut ne pas connaître votre association, le logiciel dont il sera question, etc., donc donnez à chaque fois toutes les informations nécessaires. Rappelez **le principe de l'évènement, le public visé, le lieu exact, la date, l'heure**, même si il est régulier (repas, rencontre régulière, etc.) et que vous avez déjà soumis un évènement du même type dans l'Agenda.
* **Égayez au maximum la description** de votre évènement: lien vers le site de votre association, vers le logiciel ou le langage dont il sera question, vers les organismes partenaires, etc. Pour cela, utilisez les balises HTML pour mettre en gras, en italique, faire des paragraphes et des liens.
* Ne mettez pas l'intégralité des mots en majuscule, que ce soit dans le titre, le nom de la ville ou la description.
* Donnez l'**adresse directe** d'un site Web donnant plus d'informations sur l'évènement. Si l'adresse est la page d'accueil du site de votre organisation, veillez à ce que l'évènement soit clairement visible, et que le lecteur n'ait pas à chercher trop longtemps avant de trouver l'information qu'il cherche.
* La description de l'évènement ne doit pas ressembler à une publicité éhontée pour votre entreprise, projet ou logiciel. Le ton d'un communiqué de presse, par exemple, ne convient pas pour l'Agenda du Libre.
* Les évènements de type professionnel sont acceptés dès lors qu'ils sont accessibles et ouverts à tous. Les évènements payants sont acceptés si le prix de l'entrée ne réserve pas l'évènement à un public uniquement professionnel.
L'équipe de modération se réserve le droit de modifier la description de l'évènement pour la rendre plus complète, plus lisible ou plus attrayante.
L'équipe de modération se réserve le droit de modifier la description de l'évènement pour la rendre plus complète, plus lisible ou plus attrayante.
Si vous soumettez souvent un évènement régulier dans l'Agenda du Libre, vous pouvez automatiser cette procédure à l'aide d'un [script que nous vous proposons](http://agendadulibre.org/submit-script-doc.php).
Si vous soumettez souvent un évènement régulier dans l'Agenda du Libre, vous pouvez automatiser cette procédure à l'aide d'un [script que nous vous proposons](http://agendadulibre.org/submit-script-doc.php).
.field
%p.helper
@ -66,11 +62,11 @@
.field
= f.label Event.human_attribute_name :region
= f.select :region,
options_from_collection_for_select(Region.all, 'id', 'name', params[:region])
options_from_collection_for_select(Region.all, 'id', 'name', @event.region.id)
.field
= f.label Event.human_attribute_name :locality
= f.select :locality,
options_for_select([[t('attributes.locality_0'), 0], [t('attributes.locality_1'), 1]], params[:locality])
options_for_select([[t('attributes.locality_0'), 0], [t('attributes.locality_1'), 1]], @event.locality)
.field
%p.helper
%em

5
app/views/events/new.html.haml

@ -1,3 +1,8 @@
%h2=t '.title'
- if @event && params[:visu]
%hr/
= render file: 'show'
%hr/
= render 'form'

2
app/views/events/show.html.haml

@ -1,4 +1,4 @@
- if request.format == 'text/html'
- if request.format == 'text/html' && controller.controller_name != 'moderations'
%p#notice= notice
#lug-list

2
app/views/layouts/application.html.haml

@ -66,4 +66,4 @@
= link_to t('.infos'), users_url
= link_to t('.stats'), stats_regions_url
= link_to t('.contact'), users_url
= link_to t('.moderation'), users_url
= link_to t('.moderation'), moderations_url

13
app/views/moderations/edit.html.haml

@ -0,0 +1,13 @@
%h3
= link_to t('.moderation'), moderations_path
>>>
=t '.preview'
.box= render file: '/events/show'
%h3
= link_to t('.moderation'), moderations_path
>>>
=t '.edit'
.box= render '/events/form'

49
app/views/moderations/index.html.haml

@ -0,0 +1,49 @@
%h2=t '.title'
%strong<
Modérateurs, merci de lire et de tenir compte des
= link_to 'recommandations de modération', 'http://agendadulibre.org/moderation-howto.php'
\.
%table.list
%thead
%tr
%th= Event.human_attribute_name :title
%th=t '.date'
%th= Event.human_attribute_name :city
%th= Event.human_attribute_name :region
%th= Event.human_attribute_name :submission_time
%th=t '.actions'
%tbody
- @events.each do |event|
%tr
%td= event.title
%td
- if event.same_day?
Le #{l event.start_time.to_date, format: :long},
de #{l event.start_time, format: :hours} à #{l event.end_time, format: :hours}
- else
Du
=l event.start_time, format: :at
au
#{l event.end_time, format: :at}
%td= event.city
%td= event.region.name
%td= time_ago_in_words event.submission_time.to_date
%td
= link_to t('edit'), edit_moderation_path(event)
\-
= link_to t('validate'), edit_moderation_path(event)
\-
= link_to t('refuse'), edit_moderation_path(event)
- event.notes.each do |note|
%tr
%td.empty/
%td(colspan="5")
=raw note.contents
%em.author
=t '.posted_by',
author: "#{note.author.firstname} #{note.author.lastname}",
date: l(note.date, format: :at)

14
config/locales/fr.yml

@ -1,9 +1,10 @@
fr:
show: Voir
edit: Éditer
validate: Valider
refuse: Refuser
destroy: Supprimer
attributes:
id: ID
name: Nom
@ -50,6 +51,7 @@ fr:
url: URL
contact: Contact
submitter: Soumetteur
submission_time: En attente depuis
region:
name_values:
all: Toutes les régions
@ -133,3 +135,13 @@ fr:
zero:
one: "<strong>Dans le passé</strong>, %{count} évènement:"
other: "<strong>Dans le passé</strong>, %{count} évènements:"
moderations:
index:
title: Évènements à modérer
actions: Actions
posted_by: Posté par %{author} le %{date}
date: Date
edit:
moderation: Modération
preview: Prévisualisation de l'évènement
edit: Édition de l'évènement

1
config/routes.rb

@ -6,6 +6,7 @@ AgendaDuLibreRails::Application.routes.draw do
resources :events
resources :users
resources :tags, only: [ :index, :show ]
resources :moderations
get 'ical.php' => 'events#index', format: :ics
get ':format.php' => 'events#index'

7
test/controllers/moderations_controller_test.rb

@ -0,0 +1,7 @@
require 'test_helper'
class ModerationsControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

13
test/fixtures/notes.yml

@ -0,0 +1,13 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
contents: MyText
date: 2014-01-05 23:34:46
event_id:
author_id:
two:
contents: MyText
date: 2014-01-05 23:34:46
event_id:
author_id:

4
test/helpers/moderations_helper_test.rb

@ -0,0 +1,4 @@
require 'test_helper'
class ModerationsHelperTest < ActionView::TestCase
end

7
test/models/note_test.rb

@ -0,0 +1,7 @@
require 'test_helper'
class NoteTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end
Loading…
Cancel
Save