From 8a19c971964466d967fb19af119f795baf6c0f17 Mon Sep 17 00:00:00 2001 From: echarp Date: Fri, 18 Jul 2014 17:01:51 +0200 Subject: [PATCH] L'administration est plus sympa --- Gemfile | 2 + Gemfile.lock | 5 +- app/admin/admin_user.rb | 2 +- app/admin/dashboard.rb | 12 +- app/admin/lug.rb | 35 ++++- app/admin/region.rb | 16 +-- app/admin/translation.rb | 11 +- app/admin/user.rb | 25 ++-- app/controllers/users_controller.rb | 1 + app/views/events/show.html.haml | 2 +- config/locales/fr.yml | 130 +++++++++--------- .../assets/javascripts/active_admin.js.coffee | 2 + .../assets/stylesheets/active_admin.css.sass | 10 +- 13 files changed, 142 insertions(+), 111 deletions(-) diff --git a/Gemfile b/Gemfile index ea63fd95..f786fa23 100644 --- a/Gemfile +++ b/Gemfile @@ -72,6 +72,8 @@ gem 'simple_calendar' # A generic library to administrate the tool gem 'activeadmin', github: 'gregbell/active_admin' +# A nicer markdown editor in active admin +gem 'activeadmin_pagedown' # Markdown display gem 'redcarpet' diff --git a/Gemfile.lock b/Gemfile.lock index b4b463fd..34e09b2d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -40,6 +40,8 @@ GEM erubis (~> 2.7.0) actionview-encoded_mail_to (1.0.4) rails + activeadmin_pagedown (0.0.2) + activeadmin (>= 0.5.0) activemodel (4.1.4) activesupport (= 4.1.4) builder (~> 3.1) @@ -281,7 +283,7 @@ GEM coffee-rails tzinfo (1.2.1) thread_safe (~> 0.1) - uglifier (2.5.1) + uglifier (2.5.3) execjs (>= 0.3.0) json (>= 1.8.0) warden (1.2.3) @@ -296,6 +298,7 @@ PLATFORMS DEPENDENCIES actionview-encoded_mail_to activeadmin! + activeadmin_pagedown brakeman coffee-rails compass-rails diff --git a/app/admin/admin_user.rb b/app/admin/admin_user.rb index 6ec77e3c..2b7c49a8 100644 --- a/app/admin/admin_user.rb +++ b/app/admin/admin_user.rb @@ -10,7 +10,7 @@ ActiveAdmin.register AdminUser do filter :email form do |f| - f.inputs "Admin Details" do + f.inputs 'Admin Details' do f.input :email f.input :password f.input :password_confirmation diff --git a/app/admin/dashboard.rb b/app/admin/dashboard.rb index c3634d98..ac87c218 100644 --- a/app/admin/dashboard.rb +++ b/app/admin/dashboard.rb @@ -1,10 +1,10 @@ -ActiveAdmin.register_page "Dashboard" do - menu priority: 1, label: proc{ I18n.t("active_admin.dashboard") } +ActiveAdmin.register_page 'Dashboard' do + menu priority: 1, label: proc{ I18n.t('active_admin.dashboard') } - content title: proc{ I18n.t("active_admin.dashboard") } do + content title: proc{ I18n.t('active_admin.dashboard') } do columns do column do - panel "Contributeurs" do + panel 'Modérateurs' do ul do User.all.map do |user| li link_to("#{user.firstname} #{user.lastname} (#{user.login})", user) @@ -14,10 +14,10 @@ ActiveAdmin.register_page "Dashboard" do end column do - panel "Commentaires" do + panel 'Commentaires' do ul do ActiveAdmin::Comment.all.map do |comment| - li link_to(comment.author.email, admin_admin_user_path(comment.author)) + li link_to(comment.author.email, admin_comment_path(comment)) end end end diff --git a/app/admin/lug.rb b/app/admin/lug.rb index a79855ca..e5ddc576 100644 --- a/app/admin/lug.rb +++ b/app/admin/lug.rb @@ -1,3 +1,36 @@ ActiveAdmin.register Lug do - permit_params :name, :department, :url, :city + permit_params :name, :region, :department, :url, :city + + index do + column :name + column :url + column :city + column :department + column :related_region + actions + end + + show do |l| + attributes_table do + row :name + row :url do + link_to l.url, l.url + end + row :related_city + row :department + row :related_region + end + active_admin_comments + end + + form do |f| + f.inputs do + f.input :name + f.input :url + f.input :city + f.input :department + f.input :related_region + end + f.actions + end end diff --git a/app/admin/region.rb b/app/admin/region.rb index cbaf1371..ba6f3a0c 100644 --- a/app/admin/region.rb +++ b/app/admin/region.rb @@ -1,17 +1,3 @@ ActiveAdmin.register Region do - - - # See permitted parameters documentation: - # https://github.com/gregbell/active_admin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters - # - # permit_params :list, :of, :attributes, :on, :model - # - # or - # - # permit_params do - # permitted = [:permitted, :attributes] - # permitted << :other if resource.something? - # permitted - # end - + permit_params :name end diff --git a/app/admin/translation.rb b/app/admin/translation.rb index 175397a3..0f88e8ec 100644 --- a/app/admin/translation.rb +++ b/app/admin/translation.rb @@ -1,6 +1,11 @@ ActiveAdmin.register I18n::Backend::ActiveRecord::Translation do - # See permitted parameters documentation: - # https://github.com/gregbell/active_admin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters - # permit_params :key, :value + + form do |f| + f.inputs do + f.input :key + f.input :value, as: :pagedown_text + f.actions + end + end end diff --git a/app/admin/user.rb b/app/admin/user.rb index c3c2df5a..532e5188 100644 --- a/app/admin/user.rb +++ b/app/admin/user.rb @@ -1,17 +1,14 @@ ActiveAdmin.register User do + permit_params :login, :password, :email, :lastname, :firstname - - # See permitted parameters documentation: - # https://github.com/gregbell/active_admin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters - # - # permit_params :list, :of, :attributes, :on, :model - # - # or - # - # permit_params do - # permitted = [:permitted, :attributes] - # permitted << :other if resource.something? - # permitted - # end - + form do |f| + f.inputs do + f.input :login + f.input :lastname + f.input :firstname + f.input :email + f.input :password + end + f.actions + end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 81c2e74c..198307c6 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,4 +1,5 @@ class UsersController < ApplicationController + before_filter :authenticate_user! before_action :set_user, only: [:show, :edit, :update, :destroy] # GET /users diff --git a/app/views/events/show.html.haml b/app/views/events/show.html.haml index ac524395..09bc743a 100644 --- a/app/views/events/show.html.haml +++ b/app/views/events/show.html.haml @@ -46,7 +46,7 @@ .description - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true) = sanitize markdown.render(@event.description), - tags: %w(p br table tr td ul ol li a strong b em i img), + tags: %w(p br table tr th td ul ol li a strong b em i img), attributes: %w(href src width height) %h3=t '.infos' diff --git a/config/locales/fr.yml b/config/locales/fr.yml index dd3421d6..7ae3616c 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -23,11 +23,11 @@ fr: models: admin_user: Admin comment: Commentaire - user: Contributeur - city: Cité + user: Modérateur + city: Ville region: Région lug: Gull - i18n/backend/active_record/translation: Traduction + i18n/backend/active_record/translation: Contenu attributes: user: login: Login @@ -43,7 +43,7 @@ fr: related_region: Région department: Département url: Adresse web - city: Cité + city: Ville event: title: Titre start_time: Début @@ -97,13 +97,13 @@ fr: application: login: Authentication title: L'Agenda du Libre - subtitle: L'agenda des évènements du Logiciel Libre en France + subtitle: L'agenda des événements du Logiciel Libre en France flag: Drapeau france: France quebec: Québec belgique: Belgique suisse: Suisse - propose: Proposer un évènement + propose: Proposer un événement rss: Flux RSS ical: Calendriers iCal map: Carte @@ -127,25 +127,25 @@ fr: edit: Éditer événement cancel: Annuler événement new: - title: Soumettre un évènement + title: Soumettre un événement create: - ok: Votre évènement a bien été ajouté à la liste des évènements en attente de modération. Il apparaîtra en ligne dès qu'un modérateur l'aura validé. + ok: Votre événement a bien été ajouté à la liste des événements en attente de modération. Il apparaîtra en ligne dès qu'un modérateur l'aura validé. edit: - title: Éditer un évènement - preview: Prévisualisation de l'évènement - warning: Attention, cet évènement est déjà modéré. Toute modification sera immédiatement visible sur le site. + title: Éditer un événement + preview: Prévisualisation de l'événement + warning: Attention, cet événement est déjà modéré. Toute modification sera immédiatement visible sur le site. forbidden: Vous n'êtes pas authorisé à modifier cet événement - edit: Édition de l'évènement + edit: Édition de l'événement update: - ok: Votre évènement a été mis à jour + ok: Votre événement a été mis à jour form: save: Valider visualise: Visualiser cancel: title: Annulation de l'événement - already_moderated: Attention, cet évènement est déjà modéré. Cette annulation le fera disparaître de l'Agenda du Libre. - confirm: Confirmez-vous l'annulation de cet évènement? - preview: Visualisation de l'évènement + already_moderated: Attention, cet événement est déjà modéré. Cette annulation le fera disparaître de l'Agenda du Libre. + confirm: Confirmez-vous l'annulation de cet événement? + preview: Visualisation de l'événement ok: Oui ko: Non destroy: @@ -155,7 +155,7 @@ fr: title: Liste des flux RSS icallist: title: Liste des calendriers iCal - presentation: Chaque calendrier iCal liste les évènements pour les 30 jours à venir dans une région donnée. En vous inscrivant au calendrier de votre région, vous verrez apparaître les évènements de votre région à portée locale, ainsi que tous les évènements à portée nationale, comme les RMLL. Le lien *webcal* permet d'ajouter un calendrier dans votre logiciel favori, tandis que le lien *google* permet d'ajouter un calendrier à votre agenda Google. + presentation: Chaque calendrier iCal liste les événements pour les 30 jours à venir dans une région donnée. En vous inscrivant au calendrier de votre région, vous verrez apparaître les événements de votre région à portée locale, ainsi que tous les événements à portée nationale, comme les RMLL. Le lien *webcal* permet d'ajouter un calendrier dans votre logiciel favori, tandis que le lien *google* permet d'ajouter un calendrier à votre agenda Google. help: "Ce calendrier a été testé avec succès avec: \n \n* [Mozilla Sunbird](http://www.mozilla.org/projects/calendar/sunbird.html), l'application Calendrier indépendante de Mozilla.
@@ -175,16 +175,16 @@ fr: \n \nQuelques fonctionnalités additionnelles des calendriers iCal: \n -\n* Vous pouvez limiter les évènements d'un calendrier iCal à un certain tag, en passant le paramètre `tag`. Cela permet par exemple de récupérer un calendrier iCal des évènements organisés uniquement par votre association, à partir du moment où vous pensez à marquer tous vos évènements avec un tag précis.
+\n* Vous pouvez limiter les événements d'un calendrier iCal à un certain tag, en passant le paramètre `tag`. Cela permet par exemple de récupérer un calendrier iCal des événements organisés uniquement par votre association, à partir du moment où vous pensez à marquer tous vos événements avec un tag précis.
Exemple: `http://www.agendadulibre.org/ical.php?tag=toulibre`." stats: title: Statistiques general: Statistiques générales - all: Nombre d'évènements validés depuis la création de l'Agenda - allModeration: Nombre d'évènements en cours de modération + all: Nombre d'événements validés depuis la création de l'Agenda + allModeration: Nombre d'événements en cours de modération regional: Statistiques par région city: Statistiques par ville - city_conditions: Seules les villes où plus de trois évènements ont été organisés sont mentionnées. + city_conditions: Seules les villes où plus de trois événements ont été organisés sont mentionnées. dates: Statistiques par date web: Statistiques Web webalizer: Des statistiques Web générées par Webalizer [sont disponibles](http://agendadulibre.org/stats/). Elles sont protégées par le login *stats*, mot de passe *Cuntipshaf6* pour éviter le *spam de referers* @@ -192,18 +192,18 @@ Exemple: `http://www.agendadulibre.org/ical.php?tag=toulibre`." index: title: Tags show: - title: Les évènements + title: Les événements future: zero: - one: "Prochainement, %{count} évènement:" - other: "Prochainement, %{count} évènements:" + one: "Prochainement, %{count} événement:" + other: "Prochainement, %{count} événements:" past: zero: - one: "Dans le passé, %{count} évènement:" - other: "Dans le passé, %{count} évènements:" + one: "Dans le passé, %{count} événement:" + other: "Dans le passé, %{count} événements:" moderations: index: - title: Évènements à modérer + title: Événements à modérer rules: Modérateurs, merci de lire et de tenir compte des [recommandations de modération](/application/rules). actions: Actions posted_by: Posté par %{author} le %{date} @@ -212,34 +212,34 @@ Exemple: `http://www.agendadulibre.org/ical.php?tag=toulibre`." createNote: Ajouter une note edit: moderation: Modération - preview: Prévisualisation de l'évènement - warning: Attention, cet évènement est déjà modéré. Toute modification sera immédiatement visible sur le site. - edit: Édition de l'évènement + preview: Prévisualisation de l'événement + warning: Attention, cet événement est déjà modéré. Toute modification sera immédiatement visible sur le site. + edit: Édition de l'événement update: ok: Événement mis à jour validate: - title: Validation de l'évènement - warning: Attention, cet évènement est à portée nationale! - question: Confirmez-vous la validation de cet évènement? + title: Validation de l'événement + warning: Attention, cet événement est à portée nationale! + question: Confirmez-vous la validation de cet événement? ok: Oui ko: Non accept: - ok: Évènement accepté + ok: Événement accepté refuse: - title: Rejet de l'évènement - question: Quel motif souhaitez-vous associer au rejet de cet évènement? + title: Rejet de l'événement + question: Quel motif souhaitez-vous associer au rejet de cet événement? ok: Rejeter ko: Annuler reason_r_1: Hors sujet reason_r_2: Pas assez d'informations - reason_r_3: Évènement déjà enregistré + reason_r_3: Événement déjà enregistré reason_r_4: Raison spécifique (précisez) - reason_r_1_long: Toutefois, l'évènement proposé n'a pour l'instant pas retenu l'attention des modérateurs. En effet, l'évènement proposé ne concerne pas le Logiciel Libre, ou bien le lien avec le Logiciel Libre n'est pas évident dans la formulation actuelle, ou alors il s'agit d'un évènement ou d'une formation payante et coûteuse. Si l'évènement concerne vraiment le Logiciel Libre et qu'il ne s'agit pas d'une formation payante, n'hésitez pas à le soumettre à nouveau avec une description plus claire. - reason_r_2_long: Votre évènement a tout à fait sa place dans l'Agenda du Libre, mais les modérateurs trouvent que la description de celui-ci n'est pas assez complète pour être validée.\n\nLa description doit être compréhensible par un nouveau venu dans le monde du Libre, et doit donc préciser le principe de la rencontre, le public visé, la rôle du ou des Logiciels Libres qui seront exposés, la date et le lieu précis de la rencontre. Même si il s'agit d'une rencontre régulière, n'hésitez pas à répéter à chaque fois ces informations, elles sont importantes.\n\nNous vous invitons donc vivement à soumettre à nouveau cet évènement avec une description plus complète. - reason_r_3_long: Votre évènement a tout à fait sa place dans l'Agenda du Libre, mais il est déjà enregistré dans celui-ci. + reason_r_1_long: Toutefois, l'événement proposé n'a pour l'instant pas retenu l'attention des modérateurs. En effet, l'événement proposé ne concerne pas le Logiciel Libre, ou bien le lien avec le Logiciel Libre n'est pas évident dans la formulation actuelle, ou alors il s'agit d'un événement ou d'une formation payante et coûteuse. Si l'événement concerne vraiment le Logiciel Libre et qu'il ne s'agit pas d'une formation payante, n'hésitez pas à le soumettre à nouveau avec une description plus claire. + reason_r_2_long: Votre événement a tout à fait sa place dans l'Agenda du Libre, mais les modérateurs trouvent que la description de celui-ci n'est pas assez complète pour être validée.\n\nLa description doit être compréhensible par un nouveau venu dans le monde du Libre, et doit donc préciser le principe de la rencontre, le public visé, la rôle du ou des Logiciels Libres qui seront exposés, la date et le lieu précis de la rencontre. Même si il s'agit d'une rencontre régulière, n'hésitez pas à répéter à chaque fois ces informations, elles sont importantes.\n\nNous vous invitons donc vivement à soumettre à nouveau cet événement avec une description plus complète. + reason_r_3_long: Votre événement a tout à fait sa place dans l'Agenda du Libre, mais il est déjà enregistré dans celui-ci. reason: Votre raison destroy: - ok: Évènement rejeté + ok: Événement rejeté notes: new: back: Modération @@ -254,8 +254,8 @@ Exemple: `http://www.agendadulibre.org/ical.php?tag=toulibre`." ko: Annuler maps: index: - title: Carte des évènements - events: Évènements + title: Carte des événements + events: Événements lugs: Lugs users: sign_in: @@ -268,59 +268,59 @@ Exemple: `http://www.agendadulibre.org/ical.php?tag=toulibre`." sign_in: Identifier event_mailer: create: - subject: "[Agenda du Libre] Votre évènement: '%{subject}' est en attente de modération" + subject: "[Agenda du Libre] Votre événement: '%{subject}' est en attente de modération" title: Bonjour, - body: "Votre évènement intitulé '%{subject}', + body: "Votre événement intitulé '%{subject}', \nqui aura lieu le '%{start_time}' a bien été enregistré dans l'Agenda du Libre. \n\nL'équipe de modération le prendra en charge très prochainement. -\n\nPendant la modération et après celle-ci si votre évènement est validé, vous pouvez éditer votre évènement à l'adresse:" +\n\nPendant la modération et après celle-ci si votre événement est validé, vous pouvez éditer votre événement à l'adresse:" delete_link: "et vous pouvez l'annuler en utilisant l'adresse:" signature: "Merci de votre participation!\n\n-- \nAgenda du Libre" accept: - subject: "[Agenda du Libre] Évènement '%{subject}' modéré" + subject: "[Agenda du Libre] Événement '%{subject}' modéré" title: Bonjour, - body: "L'évènement que vous avez soumis a été modéré par %{moderator}. Il est maintenant visible dans l'Agenda à l'adresse:" - edit_link: "Vous pouvez modifier cet évènement ultérieurement pour y ajouter des précisions en vous rendant à l'adresse:" + body: "L'événement que vous avez soumis a été modéré par %{moderator}. Il est maintenant visible dans l'Agenda à l'adresse:" + edit_link: "Vous pouvez modifier cet événement ultérieurement pour y ajouter des précisions en vous rendant à l'adresse:" delete_link: "Vous pouvez également l'annuler en vous rendant à l'adresse:" signature: "Merci de votre contribution à l'Agenda du Libre et à bientôt!\n\n-- \nL'équipe de modération" destroy: - subject: "[Agenda du Libre] Évènement '%{subject}' refusé" + subject: "[Agenda du Libre] Événement '%{subject}' refusé" title: Bonjour, - body: Vous avez soumis l'évènement suivant dans l'Agenda du Libre, et nous vous remercions de cette contribution. - reminder: "Pour rappel, voici le contenu de votre évènement:" + body: Vous avez soumis l'événement suivant dans l'Agenda du Libre, et nous vous remercions de cette contribution. + reminder: "Pour rappel, voici le contenu de votre événement:" reclamation: Pour toute réclamation, n'hésitez pas à contacter l'équipe de modérateurs. signature: "Avec tous nos remerciements pour votre contribution,\n\n-- \nL'équipe de modération" moderation_mailer: create: - subject: "[Agenda du Libre] Nouvel évènement à modérer: '%{subject}'" + subject: "[Agenda du Libre] Nouvel événement à modérer: '%{subject}'" title: Bonjour, - body: Un nouvel évènement est à modérer sur + body: Un nouvel événement est à modérer sur signature: "Merci!\n\n-- \nAgenda du Libre" update: - subject: "[Agenda du Libre] Édition de l'évènement '%{subject}'" + subject: "[Agenda du Libre] Édition de l'événement '%{subject}'" title: Bonjour, - body: "L'évènement '%{subject}' a été modifié par %{author}.\n\nModifications apportées:" + body: "L'événement '%{subject}' a été modifié par %{author}.\n\nModifications apportées:" submitter: le soumetteur signature: "Bonne journée\n\n-- \nL'équipe de modération" accept: - subject: "[Agenda du Libre] Évènement '%{subject}' modéré" + subject: "[Agenda du Libre] Événement '%{subject}' modéré" title: Bonjour, - body: L'évènement a été modéré par %{author}. + body: L'événement a été modéré par %{author}. signature: "-- \nL'équipe de modération" destroy: - subject: "[Agenda du Libre] Évènement '%{subject}' refusé" + subject: "[Agenda du Libre] Événement '%{subject}' refusé" title: Bonjour, - body: "L'évènement '%{subject}' a été rejeté par %{author} pour la raison suivante:\n\n" - reminder: "Pour rappel, l'évènement:" + body: "L'événement '%{subject}' a été rejeté par %{author} pour la raison suivante:\n\n" + reminder: "Pour rappel, l'événement:" signature: "-- \nL'équipe des modérateurs de l'Agenda du Libre" note_mailer: create: - subject: "[Agenda du Libre] Demande d'informations sur l'évènement '%{subject}'" + subject: "[Agenda du Libre] Demande d'informations sur l'événement '%{subject}'" title: Bonjour, - body: "Nous avons bien reçu votre proposition d'évènement '%{subject}', + body: "Nous avons bien reçu votre proposition d'événement '%{subject}', \net celui-ci a toute sa place dans l'Agenda du Libre. Néanmoins, avant \nd'être validé, nous avons besoin de quelques informations -\ncomplémentaires sur cet évènement:" +\ncomplémentaires sur cet événement:" edit_link: "Nous vous invitons à ajouter ces informations en éditant directement -\nl'évènement à l'adresse suivante:" +\nl'événement à l'adresse suivante:" signature: "Avec tous nos remerciements pour votre contribution,\n\n-- \nL'équipe des modérateurs de l'Agenda du Libre" diff --git a/vendor/assets/javascripts/active_admin.js.coffee b/vendor/assets/javascripts/active_admin.js.coffee index 3181ecdc..7cca05bd 100644 --- a/vendor/assets/javascripts/active_admin.js.coffee +++ b/vendor/assets/javascripts/active_admin.js.coffee @@ -1,4 +1,6 @@ #= require active_admin/base +#= require active_admin_pagedown/base +#= require active_admin_pagedown/default #= require jquery #= require jquery_ujs #= require jquery.turbolinks diff --git a/vendor/assets/stylesheets/active_admin.css.sass b/vendor/assets/stylesheets/active_admin.css.sass index 33941972..732ede4a 100644 --- a/vendor/assets/stylesheets/active_admin.css.sass +++ b/vendor/assets/stylesheets/active_admin.css.sass @@ -10,10 +10,12 @@ // Active Admin's got SASS! @import "active_admin/mixins" @import "active_admin/base" +@import "active_admin_pagedown/base" @import "font-awesome" @import "list" -// Overriding any non-variable SASS must be done after the fact. -// For example, to change the default status-tag color: -// -// .status_tag { background: #6090DB; } +// Markdown editor, mostly for translations +.wmd-panel + padding: 1em + margin-left: 0 + margin-right: 0