L'administration est plus sympa

This commit is contained in:
echarp 2014-07-18 17:01:51 +02:00
parent fdaab6a562
commit 8a19c97196
13 changed files with 142 additions and 111 deletions

View File

@ -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'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,5 @@
class UsersController < ApplicationController
before_filter :authenticate_user!
before_action :set_user, only: [:show, :edit, :update, :destroy]
# GET /users

View File

@ -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'

View File

@ -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.<br />
@ -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.<br />
\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.<br />
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: "<strong>Prochainement</strong>, %{count} évènement:"
other: "<strong>Prochainement</strong>, %{count} évènements:"
one: "<strong>Prochainement</strong>, %{count} événement:"
other: "<strong>Prochainement</strong>, %{count} événements:"
past:
zero:
one: "<strong>Dans le passé</strong>, %{count} évènement:"
other: "<strong>Dans le passé</strong>, %{count} évènements:"
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
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"

View File

@ -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

View File

@ -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