From f5ded6c84e2bd8b45f3ed31447c8ea56772066d6 Mon Sep 17 00:00:00 2001
From: echarp <emmanuel.charpentier@free.fr>
Date: Sat, 4 Oct 2014 18:12:03 +0200
Subject: [PATCH] =?UTF-8?q?L'Agenda=20du=20Libre=20diffuse=20maintenant=20?=
 =?UTF-8?q?ses=20=C3=A9v=C3=A9nements=20sur=20twitter?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/moderations_controller.rb | 12 +++++
 app/models/event.rb                       |  8 ++++
 app/views/moderations/refuse.html.haml    | 53 +++++++++++------------
 app/views/moderations/validate.html.haml  | 36 +++++++++------
 config/locales/views/en.yml               |  7 ++-
 config/locales/views/fr.yml               |  7 ++-
 6 files changed, 75 insertions(+), 48 deletions(-)

diff --git a/app/controllers/moderations_controller.rb b/app/controllers/moderations_controller.rb
index 518a1b9e3..48158c312 100644
--- a/app/controllers/moderations_controller.rb
+++ b/app/controllers/moderations_controller.rb
@@ -35,6 +35,7 @@ class ModerationsController < ApplicationController
   def accept
     respond_to do |format|
       if @moderation.update(moderated: true) && send_accept_mails
+        tweet
         format.html { redirect_to moderations_path, notice: t('.ok') }
         format.json { head :no_content }
       else
@@ -92,6 +93,17 @@ class ModerationsController < ApplicationController
     ModerationMailer.accept(@moderation, current_user).deliver
   end
 
+  # Tweet this event, if configured using apache/system variables!
+  def tweet
+    client = Twitter::REST::Client.new do |config|
+      config.consumer_key        = ENV['TWITTER_CONSUMER_KEY']
+      config.consumer_secret     = ENV['TWITTER_CONSUMER_SECRET']
+      config.access_token        = ENV['TWITTER_ACCESS_TOKEN']
+      config.access_token_secret = ENV['TWITTER_ACCESS_SECRET']
+    end
+    client.update "#{@event} #{events_url @event}" if client.consumer_key
+  end
+
   def send_destroy_mails
     # Send a notification to its author
     if params[:reason] == 'r_4'
diff --git a/app/models/event.rb b/app/models/event.rb
index 08403be32..c5d6bcea4 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -91,6 +91,14 @@ class Event < ActiveRecord::Base
     [address, city, related_region.name].compact.join ', '
   end
 
+  def hashtags
+    tags.split.map { |tag| "##{tag}" }
+  end
+
+  def to_s
+    "#{start_time.to_date} #{city}: #{title} #{hashtags.join(' ')}"
+  end
+
   private
 
   def end_after_start
diff --git a/app/views/moderations/refuse.html.haml b/app/views/moderations/refuse.html.haml
index c5bea6792..92c481438 100644
--- a/app/views/moderations/refuse.html.haml
+++ b/app/views/moderations/refuse.html.haml
@@ -1,39 +1,38 @@
 %h2
-  %em.fa.fa-thumbs-down
+  %em.fa.fa-exclamation-triangle
   =t '.title'
 
-%fieldset
-  = form_tag moderation_path(@moderation), method: :delete do |f|
-    %h3=t '.question'
-
-    .field.closer(title="#{t '.reason_r_1_long'}")
-      = radio_button_tag :reason, :r_1, params[:event] == 'reason_r_1'
-      = label_tag :reason_r_1, t('.reason_r_1')
+= form_tag moderation_path(@moderation), method: :delete do |f|
+  .field.closer(title="#{t '.reason_r_1_long'}")
+    = radio_button_tag :reason, :r_1, params[:event] == 'reason_r_1'
+    = label_tag :reason_r_1, t('.reason_r_1')
 
-    .field.closer(title="#{t '.reason_r_2_long'}")
-      = radio_button_tag :reason, :r_2, params[:event] == 'reason_r_2'
-      = label_tag :reason_r_2, t('.reason_r_2')
+  .field.closer(title="#{t '.reason_r_2_long'}")
+    = radio_button_tag :reason, :r_2, params[:event] == 'reason_r_2'
+    = label_tag :reason_r_2, t('.reason_r_2')
 
-    .field.closer(title="#{t '.reason_r_3_long'}")
-      = radio_button_tag :reason, :r_3, params[:event] == 'reason_r_3'
-      = label_tag :reason_r_3, t('.reason_r_3')
+  .field.closer(title="#{t '.reason_r_3_long'}")
+    = radio_button_tag :reason, :r_3, params[:event] == 'reason_r_3'
+    = label_tag :reason_r_3, t('.reason_r_3')
 
-    .field.opener(title="#{t '.reason_r_4_long'}")
-      = radio_button_tag :reason, :r_4, params[:event] == 'reason_r_4' || !params[:event]
-      = label_tag :reason_r_4, t('.reason_r_4')
+  .field.opener(title="#{t '.reason_r_4_long'}")
+    = radio_button_tag :reason, :r_4, params[:event] == 'reason_r_4' || !params[:event]
+    = label_tag :reason_r_4, t('.reason_r_4')
 
-    .field
-      = label_tag :reason_text, t('.reason')
-      = text_area_tag :reason_text, nil, cols: 40, rows: 5
+  .field
+    = label_tag :reason_text, t('.reason')
+    = text_area_tag :reason_text, nil, cols: 40, rows: 5
 
-    = link_to moderations_url do
-      %em.fa.fa-arrow-left
-      =t '.ko'
+  = link_to moderations_url do
+    %em.fa.fa-arrow-left
+    =t '.ko'
 
-    = button_tag do
-      %em.fa.fa-thumbs-down
-      =t '.ok'
+  = button_tag do
+    %em.fa.fa-thumbs-down
+    =t '.ok'
 
 %fieldset
-  %legend= Event.model_name.human
+  %legend
+    %em.fa.fa-calendar
+    = Event.model_name.human
   = render file: '/events/show'
diff --git a/app/views/moderations/validate.html.haml b/app/views/moderations/validate.html.haml
index fa3ade31d..dc2d26eeb 100644
--- a/app/views/moderations/validate.html.haml
+++ b/app/views/moderations/validate.html.haml
@@ -1,22 +1,32 @@
 %h2
-  %em.fa.fa-thumbs-up
+  %em.fa.fa-exclamation-triangle
   =t '.title'
 
-%fieldset
-  - if @event.locality?
-    %h2.warning=t '.warning'
+- if @event.locality?
+  %h2.warning=t '.warning'
+
+= form_for @moderation, url: { action: :accept }, html: { method: :put } do |f|
+  = link_to moderations_url do
+    %em.fa.fa-arrow-left
+    =t '.ko'
+
+  = f.button do
+    %em.fa.fa-thumbs-up
+    =t '.ok'
 
-  = form_for @moderation, url: { action: :accept }, html: { method: :put } do |f|
-    %h2=t '.question'
+- if ENV['TWITTER_CONSUMER_KEY'] || Rails.env.development?
+  %fieldset
+    %legend
+      %em.fa.fa-twitter
+      Tweet
 
-    = link_to moderations_url do
-      %em.fa.fa-arrow-left
-      =t '.ko'
+    %h3=t '.tweet_helper'
 
-    = f.button do
-      %em.fa.fa-thumbs-up
-      =t '.ok'
+    = @event
+    = events_url @event
 
 %fieldset
-  %legend=Event.model_name.human
+  %legend
+    %em.fa.fa-calendar
+    =Event.model_name.human
   = render file: '/events/show'
diff --git a/config/locales/views/en.yml b/config/locales/views/en.yml
index 224918a79..d9fbbb7bd 100644
--- a/config/locales/views/en.yml
+++ b/config/locales/views/en.yml
@@ -175,17 +175,16 @@ Example: `%{daylimit}`"
     update:
       ok: Updated events
     validate:
-      title: Event validation
+      title: Do you confirm this event validation?
       warning: Warning, this event is of national scope!
-      question: Do you confirm this event validation?
       ok: Yes
       ko: Moderation
+      tweet_helper: A tweet will be published, here is its content
     accept:
       ok: Event accepted
     refuse:
-      title: Event rejection
+      title: What motive do you wish to associate to this event's rejection?
       motif: Motive
-      question: What motive do you wish to associate to this event's rejection?
       ok: Reject
       ko: Moderation
       reason_r_1: Off-topic
diff --git a/config/locales/views/fr.yml b/config/locales/views/fr.yml
index 63f79d42c..3325197ca 100644
--- a/config/locales/views/fr.yml
+++ b/config/locales/views/fr.yml
@@ -159,17 +159,16 @@ Exemple: `%{daylimit}`"
     update:
       ok: Événement mis à jour
     validate:
-      title: Validation de l'événement
+      title: Confirmez-vous la validation de cet événement?
       warning: Attention, cet événement est à portée nationale!
-      question: Confirmez-vous la validation de cet événement?
       ok: Oui
       ko: Modération
+      tweet_helper: Un tweet sera publié, dont voici le contenu
     accept:
       ok: Événement accepté
     refuse:
-      title: Rejet de l'événement
+      title: Quel motif souhaitez-vous associer au rejet de cet événement?
       motif: Motif
-      question: Quel motif souhaitez-vous associer au rejet de cet événement?
       ok: Rejeter
       ko: Modération
       reason_r_1: Hors sujet
-- 
GitLab