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