From 87150cc97e0279e0359c8db800d68d26db3a9242 Mon Sep 17 00:00:00 2001
From: Olivier PEREZ <olivier@olivierperez.fr>
Date: Sat, 17 Jan 2015 01:22:03 +0100
Subject: [PATCH] Add column receiveNewComments to poll table, to send
 notification when a user wrote a comment.

---
 admin/migration.php                           |   6 +-
 app/classes/Framadate/Form.php                |   5 +
 .../Migration/From_0_0_to_0_8_Migration.php   |   1 -
 .../Migration/From_0_8_to_0_9_Migration.php   |   1 -
 .../Migration/From_0_9_to_0_9_1_Migration.php |  51 +++++++
 .../Framadate/Services/PollService.php        |   6 +-
 app/inc/constants.php.template                |   3 +-
 infos_sondage.php                             | 124 +++++++++++-------
 locale/de_DE/LC_MESSAGES/Studs.mo             | Bin 18237 -> 18532 bytes
 locale/de_DE/LC_MESSAGES/Studs.po             |  18 ++-
 locale/en_GB/LC_MESSAGES/Studs.mo             | Bin 17771 -> 18057 bytes
 locale/en_GB/LC_MESSAGES/Studs.po             |  18 ++-
 locale/es_ES/LC_MESSAGES/Studs.mo             | Bin 16216 -> 16502 bytes
 locale/es_ES/LC_MESSAGES/Studs.po             |  16 ++-
 locale/fr_FR/LC_MESSAGES/Studs.mo             | Bin 19547 -> 19903 bytes
 locale/fr_FR/LC_MESSAGES/Studs.po             |  18 ++-
 studs.php                                     |  42 ++++--
 17 files changed, 233 insertions(+), 76 deletions(-)
 create mode 100644 app/classes/Framadate/Migration/From_0_9_to_0_9_1_Migration.php

diff --git a/admin/migration.php b/admin/migration.php
index 07ffb2e2..cade588b 100644
--- a/admin/migration.php
+++ b/admin/migration.php
@@ -1,6 +1,7 @@
 <?php
 use Framadate\Migration\From_0_0_to_0_8_Migration;
 use Framadate\Migration\From_0_8_to_0_9_Migration;
+use Framadate\Migration\From_0_9_to_0_9_1_Migration;
 use Framadate\Migration\Migration;
 use Framadate\Utils;
 
@@ -9,7 +10,8 @@ include_once __DIR__ . '/../app/inc/init.php';
 // List a Migration sub classes to execute
 $migrations = [
     new From_0_0_to_0_8_Migration(),
-    new From_0_8_to_0_9_Migration()
+    new From_0_8_to_0_9_Migration(),
+    new From_0_9_to_0_9_1_Migration()
 ];
 // ---------------------------------------
 
@@ -28,8 +30,6 @@ CREATE TABLE IF NOT EXISTS `' . $prefixedMigrationTable . '` (
 )
   ENGINE = MyISAM
   DEFAULT CHARSET = utf8;');
-
-    output('Table ' . $prefixedMigrationTable . ' created.');
 }
 
 $selectStmt = $pdo->prepare('SELECT id FROM ' . $prefixedMigrationTable . ' WHERE name=?');
diff --git a/app/classes/Framadate/Form.php b/app/classes/Framadate/Form.php
index c0029977..76a4a4df 100644
--- a/app/classes/Framadate/Form.php
+++ b/app/classes/Framadate/Form.php
@@ -39,6 +39,11 @@ class Form
      */
     public $receiveNewVotes;
 
+    /**
+     * If true, notify poll administrator when new comment is posted.
+     */
+    public $receiveNewComments;
+
     /**
      * List of available choices
      */
diff --git a/app/classes/Framadate/Migration/From_0_0_to_0_8_Migration.php b/app/classes/Framadate/Migration/From_0_0_to_0_8_Migration.php
index dbdb59eb..013c6ddb 100644
--- a/app/classes/Framadate/Migration/From_0_0_to_0_8_Migration.php
+++ b/app/classes/Framadate/Migration/From_0_0_to_0_8_Migration.php
@@ -75,4 +75,3 @@ CREATE TABLE IF NOT EXISTS `user_studs` (
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;');
     }
 }
- 
\ No newline at end of file
diff --git a/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php b/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php
index ea69991f..e6aab474 100644
--- a/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php
+++ b/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php
@@ -207,4 +207,3 @@ INSERT INTO `' . Utils::table('vote') . '`
     }
 
 }
- 
\ No newline at end of file
diff --git a/app/classes/Framadate/Migration/From_0_9_to_0_9_1_Migration.php b/app/classes/Framadate/Migration/From_0_9_to_0_9_1_Migration.php
new file mode 100644
index 00000000..19c9a255
--- /dev/null
+++ b/app/classes/Framadate/Migration/From_0_9_to_0_9_1_Migration.php
@@ -0,0 +1,51 @@
+<?php
+namespace Framadate\Migration;
+
+use Framadate\Utils;
+
+/**
+ * This class executes the aciton in database to migrate data from version 0.9 to 0.9.1.
+ *
+ * @package Framadate\Migration
+ */
+class From_0_9_to_0_9_1_Migration implements Migration {
+
+    function __construct() {
+    }
+
+    /**
+     * This method could check if the execute method should be called.
+     * It is called before the execute method.
+     *
+     * @param \PDO $pdo The connection to database
+     * @return bool true is the Migration should be executed.
+     */
+    function preCondition(\PDO $pdo) {
+        $stmt = $pdo->query('SHOW TABLES');
+        $tables = $stmt->fetchAll(\PDO::FETCH_COLUMN);
+
+        // Check if tables of v0.8 are presents
+        $diff = array_diff([Utils::table('poll'), Utils::table('slot'), Utils::table('vote'), Utils::table('comment')], $tables);
+        return count($diff) === 0;
+    }
+
+    /**
+     * This methode is called only one time in the migration page.
+     *
+     * @param \PDO $pdo The connection to database
+     * @return bool true is the execution succeeded
+     */
+    function execute(\PDO $pdo) {
+        $this->alterPollTable($pdo);
+
+        return true;
+    }
+
+    private function alterPollTable(\PDO $pdo) {
+        $pdo->exec('
+ALTER TABLE `' . Utils::table('poll') . '`
+        ADD `receiveNewComments` TINYINT(1) DEFAULT \'0\'
+        AFTER `receiveNewVotes`');
+    }
+
+}
diff --git a/app/classes/Framadate/Services/PollService.php b/app/classes/Framadate/Services/PollService.php
index 5193081e..cf327131 100644
--- a/app/classes/Framadate/Services/PollService.php
+++ b/app/classes/Framadate/Services/PollService.php
@@ -138,10 +138,10 @@ class PollService {
 
         // TODO Extract this to FramaDB (or repository layer)
         $sql = 'INSERT INTO ' . Utils::table('poll') . '
-          (id, admin_id, title, description, admin_name, admin_mail, end_date, format, editable, receiveNewVotes)
-          VALUES (?,?,?,?,?,?,FROM_UNIXTIME(?),?,?,?)';
+          (id, admin_id, title, description, admin_name, admin_mail, end_date, format, editable, receiveNewVotes, receiveNewComments)
+          VALUES (?,?,?,?,?,?,FROM_UNIXTIME(?),?,?,?,?)';
         $prepared = $this->connect->prepare($sql);
-        $prepared->execute(array($poll_id, $admin_poll_id, $form->title, $form->description, $form->admin_name, $form->admin_mail, $form->end_date, $form->format, $form->editable, $form->receiveNewVotes));
+        $prepared->execute(array($poll_id, $admin_poll_id, $form->title, $form->description, $form->admin_name, $form->admin_mail, $form->end_date, $form->format, $form->editable, $form->receiveNewVotes, $form->receiveNewComments));
 
         $prepared = $this->connect->prepare('INSERT INTO ' . Utils::table('slot') . ' (poll_id, title, moments) VALUES (?, ?, ?)');
 
diff --git a/app/inc/constants.php.template b/app/inc/constants.php.template
index 21fd6d65..7d733cde 100644
--- a/app/inc/constants.php.template
+++ b/app/inc/constants.php.template
@@ -18,7 +18,7 @@
  */
 
 // FRAMADATE version
-const VERSION = 0.9;
+const VERSION = '0.9.1';
 
 // Application name
 const NOMAPPLICATION = '<Application name>';
@@ -59,6 +59,7 @@ $ALLOWED_LANGUAGES = [
 const POLL_REGEX = '/^[a-z0-9]+$/';
 const CHOICE_REGEX = '/^[012]$/';
 const NAME_REGEX = '/^[áàâäãåçéèêëíìîïñóòôöõúùûüýÿæœa-z0-9_ -]+$/i';
+const BOOLEAN_REGEX = '/^(on|off|true|false|1|0)$/';
 
 // Path to logo
 const LOGOBANDEAU = '<relative path to the logo file>';
diff --git a/infos_sondage.php b/infos_sondage.php
index b98ccd3b..77a9343d 100644
--- a/infos_sondage.php
+++ b/infos_sondage.php
@@ -42,12 +42,13 @@ if ((isset($_GET['choix_sondage']) && $_GET['choix_sondage'] == 'date') ||
 
 // We clean the data
 $poursuivre = filter_input(INPUT_POST, 'poursuivre', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '/^(creation_sondage_date|creation_sondage_autre)$/']]);
-$titre = filter_input(INPUT_POST, 'titre', FILTER_SANITIZE_STRING);
-$nom = filter_input(INPUT_POST, 'nom', FILTER_SANITIZE_STRING);
-$adresse = filter_input(INPUT_POST, 'adresse', FILTER_VALIDATE_EMAIL);
-$commentaires = filter_input(INPUT_POST, 'commentaires', FILTER_SANITIZE_STRING);
-$editable = filter_input(INPUT_POST, 'editable', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '/^(on|off|true|false|1|0)$/']]);
-$receiveNewVotes = filter_input(INPUT_POST, 'receiveNewVotes', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '/^(on|off|true|false|1|0)$/']]);
+$title = filter_input(INPUT_POST, 'titre', FILTER_SANITIZE_STRING);
+$name = filter_input(INPUT_POST, 'name', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => NAME_REGEX]]);
+$address = filter_input(INPUT_POST, 'adresse', FILTER_VALIDATE_EMAIL);
+$description = filter_input(INPUT_POST, 'commentaires', FILTER_SANITIZE_STRING);
+$editable = filter_input(INPUT_POST, 'editable', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => BOOLEAN_REGEX]]);
+$receiveNewVotes = filter_input(INPUT_POST, 'receiveNewVotes', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => BOOLEAN_REGEX]]);
+$receiveNewComments = filter_input(INPUT_POST, 'receiveNewComments', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => BOOLEAN_REGEX]]);
 
 
 // On initialise également les autres variables
@@ -58,60 +59,61 @@ $erreur_injection_commentaires = false;
 
 #tests
 if (!empty($_POST['poursuivre'])){
-    $_SESSION['form']->title = $titre;
-    $_SESSION['form']->admin_name = $nom;
-    $_SESSION['form']->admin_mail = $adresse;
-    $_SESSION['form']->description = $commentaires;
+    $_SESSION['form']->title = $title;
+    $_SESSION['form']->admin_name = $name;
+    $_SESSION['form']->admin_mail = $address;
+    $_SESSION['form']->description = $description;
     $_SESSION['form']->editable = ($editable !== null) ? true : false;
     $_SESSION['form']->receiveNewVotes = ($receiveNewVotes !== null) ? true : false;
+    $_SESSION['form']->receiveNewComments = ($receiveNewComments !== null) ? true : false;
 
     if ($config['use_smtp']==true){
-        if (Utils::isValidEmail($adresse) === false) {
+        if (Utils::isValidEmail($address) === false) {
             $erreur_adresse = true;
         }
     }
 
-    if (preg_match(';<|>|";',$titre)) {
+    if (preg_match(';<|>|";',$title)) {
         $erreur_injection_titre = true;
     }
 
-    if (preg_match(';<|>|";',$nom)) {
+    if (preg_match(';<|>|";',$name)) {
         $erreur_injection_nom = true;
     }
 
-    if (preg_match(';<|>|";',$commentaires)) {
+    if (preg_match(';<|>|";',$description)) {
         $erreur_injection_commentaires = true;
     }
 
     // Si pas d'erreur dans l'adresse alors on change de page vers date ou autre
     if($config['use_smtp'] == true){
-        $email_OK = $adresse && !$erreur_adresse;
+        $email_OK = $address && !$erreur_adresse;
     } else{
         $email_OK = true;
     }
 
-    if ($titre && $nom && $email_OK && ! $erreur_injection_titre && ! $erreur_injection_commentaires && ! $erreur_injection_nom) {
+    if ($title && $name && $email_OK && ! $erreur_injection_titre && ! $erreur_injection_commentaires && ! $erreur_injection_nom) {
 
-        if ( $poursuivre == "creation_sondage_date" ) {
-            header("Location:choix_date.php");
+        if ( $poursuivre == 'creation_sondage_date' ) {
+            header('Location:choix_date.php');
             exit();
         }
 
-        if ( $poursuivre == "creation_sondage_autre" ) {
-            header("Location:choix_autre.php");
+        if ( $poursuivre == 'creation_sondage_autre' ) {
+            header('Location:choix_autre.php');
             exit();
         }
 
     } else {
         // Title Erreur !
-        Utils::print_header( _("Error!").' - '._("Poll creation (1 on 3)") );
+        Utils::print_header( _('Error!').' - '._('Poll creation (1 on 3)') );
     }
 } else {
     // Title OK (formulaire pas encore rempli)
-    Utils::print_header( _("Poll creation (1 on 3)") );
+    Utils::print_header( _('Poll creation (1 on 3)') );
 }
 
-bandeau_titre( _("Poll creation (1 on 3)") );
+bandeau_titre( _('Poll creation (1 on 3)') );
 
 /*
  * Préparation des messages d'erreur
@@ -141,32 +143,39 @@ $errors = array(
 );
 
 if (!$_SESSION['form']->title && !empty($_POST['poursuivre'])) {
-    $errors['title']['aria'] = 'aria-describeby="poll_title_error" '; $errors['title']['class'] = ' has-error';
-    $errors['title']['msg'] = '<div class="alert alert-danger" ><p id="poll_title_error">' . _("Enter a title") . '</p></div>';
+    $errors['title']['aria'] = 'aria-describeby="poll_title_error" ';
+    $errors['title']['class'] = ' has-error';
+    $errors['title']['msg'] = '<div class="alert alert-danger" ><p id="poll_title_error">' . _('Enter a title') . '</p></div>';
 } elseif ($erreur_injection_titre) {
-    $errors['title']['aria'] = 'aria-describeby="poll_title_error" '; $errors['title']['class'] = ' has-error';
-    $errors['title']['inject'] = '<div class="alert alert-danger"><p id="poll_title_error">' . _("Characters < > and \" are not permitted") . '</p></div>';
+    $errors['title']['aria'] = 'aria-describeby="poll_title_error" ';
+    $errors['title']['class'] = ' has-error';
+    $errors['title']['inject'] = '<div class="alert alert-danger"><p id="poll_title_error">' . _('Characters < > and " are not permitted') . '</p></div>';
 }
 
 if ($erreur_injection_commentaires) {
-    $errors['description']['aria'] = 'aria-describeby="poll_comment_error" '; $errors['description']['class'] = ' has-error';
-    $errors['description']['msg'] = '<div class="alert alert-danger"><p id="poll_comment_error">' . _("Characters < > and \" are not permitted") . '</p></div>';
+    $errors['description']['aria'] = 'aria-describeby="poll_comment_error" ';
+    $errors['description']['class'] = ' has-error';
+    $errors['description']['msg'] = '<div class="alert alert-danger"><p id="poll_comment_error">' . _('Characters < > and " are not permitted') . '</p></div>';
 }
 
 if (!$_SESSION['form']->admin_name && !empty($_POST['poursuivre'])) {
-    $errors['name']['aria'] = 'aria-describeby="poll_name_error" '; $errors['name']['class'] = ' has-error';
-    $errors['name']['msg'] = '<div class="alert alert-danger"><p id="poll_name_error">' . _("Enter a name") . '</p></div>';
+    $errors['name']['aria'] = 'aria-describeby="poll_name_error" ';
+    $errors['name']['class'] = ' has-error';
+    $errors['name']['msg'] = '<div class="alert alert-danger"><p id="poll_name_error">' . _('Enter a name') . '</p></div>';
 } elseif ($erreur_injection_nom) {
-    $errors['name']['aria'] = 'aria-describeby="poll_name_error" '; $errors['name']['class'] = ' has-error';
-    $errors['name']['msg'] = '<div class="alert alert-danger"><p id="poll_name_error">' . _("Characters < > and \" are not permitted") . '</p></div>';
+    $errors['name']['aria'] = 'aria-describeby="poll_name_error" ';
+    $errors['name']['class'] = ' has-error';
+    $errors['name']['msg'] = '<div class="alert alert-danger"><p id="poll_name_error">' . _('Characters < > and " are not permitted') . '</p></div>';
 }
 
 if (!$_SESSION['form']->admin_mail && !empty($_POST['poursuivre'])) {
-    $errors['email']['aria'] = 'aria-describeby="poll_name_error" '; $errors['email']['class'] = ' has-error';
-    $errors['email']['msg'] = '<div class="alert alert-danger"><p id="poll_email_error">' . _("Enter an email address") . '</p></div>';
+    $errors['email']['aria'] = 'aria-describeby="poll_name_error" ';
+    $errors['email']['class'] = ' has-error';
+    $errors['email']['msg'] = '<div class="alert alert-danger"><p id="poll_email_error">' . _('Enter an email address') . '</p></div>';
 } elseif ($erreur_adresse && !empty($_POST['poursuivre'])) {
-    $errors['email']['aria'] = 'aria-describeby="poll_email_error" '; $errors['email']['class'] = ' has-error';
-    $errors['email']['msg'] = '<div class="alert alert-danger"><p id="poll_email_error">' . _("The address is not correct! You should enter a valid email address (like r.stallman@outlock.com) in order to receive the link to your poll.") . '</p></div>';
+    $errors['email']['aria'] = 'aria-describeby="poll_email_error" ';
+    $errors['email']['class'] = ' has-error';
+    $errors['email']['msg'] = '<div class="alert alert-danger"><p id="poll_email_error">' . _('The address is not correct! You should enter a valid email address (like r.stallman@outlock.com) in order to receive the link to your poll.') . '</p></div>';
 }
 
 /*
@@ -175,9 +184,9 @@ if (!$_SESSION['form']->admin_mail && !empty($_POST['poursuivre'])) {
 
 // REMOTE_USER ?
 if (USE_REMOTE_USER && isset($_SERVER['REMOTE_USER'])) {
-    $input_name = '<input type="hidden" name="nom" value="'.$_SESSION['form']->admin_name.'" />'.stripslashes($_SESSION['form']->admin_name);
+    $input_name = '<input type="hidden" name="name" value="'.$_SESSION['form']->admin_name.'" />'.$_SESSION['form']->admin_name;
 } else {
-    $input_name = '<input id="yourname" type="text" name="nom" class="form-control" '.$errors['name']['aria'].' value="'.stripslashes($_SESSION['form']->admin_name).'" />';
+    $input_name = '<input id="yourname" type="text" name="name" class="form-control" '.$errors['name']['aria'].' value="'.$_SESSION['form']->admin_name.'" />';
 }
 
 if (USE_REMOTE_USER && isset($_SERVER['REMOTE_USER'])) {
@@ -195,6 +204,10 @@ if ($_SESSION['form']->receiveNewVotes) {
     $receiveNewVotes = 'checked';
 }
 
+if ($_SESSION['form']->receiveNewComments) {
+    $receiveNewComments = 'checked';
+}
+
 // Display form
 echo '
 <div class="row">
@@ -202,25 +215,25 @@ echo '
     <form name="formulaire" id="formulaire" action="' . Utils::get_server_name() . 'infos_sondage.php" method="POST" class="form-horizontal" role="form">
 
         <div class="alert alert-info">
-            <p>'. _("You are in the poll creation section.").' <br /> '._("Required fields cannot be left blank.") .'</p>
+            <p>'. _('You are in the poll creation section.').' <br /> '._('Required fields cannot be left blank.') .'</p>
         </div>
 
         <div class="form-group'.$errors['title']['class'].'">
-            <label for="poll_title" class="col-sm-4 control-label">' . _("Poll title") . ' *</label>
+            <label for="poll_title" class="col-sm-4 control-label">' . _('Poll title') . ' *</label>
             <div class="col-sm-8">
-                <input id="poll_title" type="text" name="titre" class="form-control" '.$errors['title']['aria'].' value="'.stripslashes($_SESSION['form']->title).'" />
+                <input id="poll_title" type="text" name="titre" class="form-control" '.$errors['title']['aria'].' value="'.$_SESSION['form']->title.'" />
             </div>
         </div>
             '.$errors['title']['msg'].'
         <div class="form-group'.$errors['description']['class'].'">
-            <label for="poll_comments" class="col-sm-4 control-label">'. _("Description") .'</label>
+            <label for="poll_comments" class="col-sm-4 control-label">'. _('Description') .'</label>
             <div class="col-sm-8">
-                <textarea id="poll_comments" name="commentaires" class="form-control" '.$errors['description']['aria'].' rows="5">'.stripslashes($_SESSION['form']->description).'</textarea>
+                <textarea id="poll_comments" name="commentaires" class="form-control" '.$errors['description']['aria'].' rows="5">'.$_SESSION['form']->description.'</textarea>
             </div>
         </div>
             '.$errors['description']['msg'].'
         <div class="form-group'.$errors['name']['class'].'">
-            <label for="yourname" class="col-sm-4 control-label">'. _("Your name") .' *</label>
+            <label for="yourname" class="col-sm-4 control-label">'. _('Your name') .' *</label>
             <div class="col-sm-8">
                 '.$input_name.'
             </div>
@@ -229,7 +242,7 @@ echo '
 if($config['use_smtp']==true){
     echo '
         <div class="form-group'.$errors['email']['class'].'">
-            <label for="email" class="col-sm-4 control-label">'. _("Your email address") .' *<br /><span class="small">'. _("(in the format name@mail.com)") .'</span></label>
+            <label for="email" class="col-sm-4 control-label">'. _('Your email address') .' *<br /><span class="small">'. _('(in the format name@mail.com)') .'</span></label>
             <div class="col-sm-8">
                 '.$input_email.'
             </div>
@@ -238,20 +251,29 @@ if($config['use_smtp']==true){
 }
 echo '
         <div class="form-group">
-            <div class="col-sm-offset-1 col-sm-11">
+            <div class="col-sm-offset-4 col-sm-8">
               <div class="checkbox">
                 <label>
-                    <input type=checkbox name="editable" '.$editable.' id="editable">'. _("Voters can modify their vote themselves.") .'
+                    <input type=checkbox name="editable" '.$editable.' id="editable">'. _('Voters can modify their vote themselves.') .'
                 </label>
               </div>
             </div>
         </div>';
 if($config['use_smtp']==true){
     echo '<div class="form-group">
-        <div class="col-sm-offset-1 col-sm-11">
+        <div class="col-sm-offset-4 col-sm-8">
+          <div class="checkbox">
+            <label>
+                <input type=checkbox name="receiveNewVotes" '.$receiveNewVotes.' id="receiveNewVotes">'. _('To receive an email for each new vote.') .'
+            </label>
+          </div>
+        </div>
+    </div>';
+    echo '<div class="form-group">
+        <div class="col-sm-offset-4 col-sm-8">
           <div class="checkbox">
             <label>
-                <input type=checkbox name="receiveNewVotes" '.$receiveNewVotes.' id="receiveNewVotes">'. _("To receive an email for each new vote.") .'
+                <input type=checkbox name="receiveNewComments" '.$receiveNewComments.' id="receiveNewComments">'. _('To receive an email for each new comment.') .'
             </label>
           </div>
         </div>
@@ -263,7 +285,7 @@ echo '
             <button name="poursuivre" value="'. $choix_sondage .'" type="submit" class="btn btn-success" title="'. _('Go to step 2') . '">'. _('Next') . '</button>
         </p>
 
-        <script type="text/javascript"> document.formulaire.titre.focus(); </script>
+        <script type="text/javascript">document.formulaire.title.focus();</script>
 
     </form>
     </div>
diff --git a/locale/de_DE/LC_MESSAGES/Studs.mo b/locale/de_DE/LC_MESSAGES/Studs.mo
index 1fae2345c1667109f2872927c3b1ccbffd98b39a..6a28a3381a354bb71fbb13c0f4564970b96c6304 100644
GIT binary patch
delta 4555
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
Io0U89e|qWUTL1t6

delta 4423
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

diff --git a/locale/de_DE/LC_MESSAGES/Studs.po b/locale/de_DE/LC_MESSAGES/Studs.po
index 68fb4da7..b07ca275 100644
--- a/locale/de_DE/LC_MESSAGES/Studs.po
+++ b/locale/de_DE/LC_MESSAGES/Studs.po
@@ -616,10 +616,24 @@ msgid "Poll's participation"
 msgstr "Beteiligung an der Umfrage"
 
 msgid ""
-"has filled a line.\n"
+"filled a vote.\n"
 "You can find your poll at the link"
 msgstr ""
-" hat eine Zeile ausgefüllt.\n"
+"hat eine Zeile ausgefüllt.\n"
+"Sie finden Ihre Umfrage unter dem folgenden Link:"
+
+msgid ""
+"updated a vote.\n"
+"You can find your poll at the link"
+msgstr ""
+"updated a vote.\n"
+"Sie finden Ihre Umfrage unter dem folgenden Link:"
+
+msgid ""
+"wrote a comment.\n"
+"You can find your poll at the link"
+msgstr ""
+"wrote a comment.\n"
 "Sie finden Ihre Umfrage unter dem folgenden Link:"
 
 msgid "Thanks for your confidence."
diff --git a/locale/en_GB/LC_MESSAGES/Studs.mo b/locale/en_GB/LC_MESSAGES/Studs.mo
index 1586cb4a772491b97cc925a6cee57ce55cceabd1..5c291f84e9b447c0d8eef1762a2d77299774868d 100644
GIT binary patch
delta 4966
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
aotqdN@#A57FpMdfzqsx-*ZTi|sQ&@b2@z!g

delta 4835
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
Feg)N_;0OQ!

diff --git a/locale/en_GB/LC_MESSAGES/Studs.po b/locale/en_GB/LC_MESSAGES/Studs.po
index 042f7a5a..77c12900 100644
--- a/locale/en_GB/LC_MESSAGES/Studs.po
+++ b/locale/en_GB/LC_MESSAGES/Studs.po
@@ -670,10 +670,24 @@ msgid "Poll's participation"
 msgstr "Poll's participation"
 
 msgid ""
-"has filled a line.\n"
+"filled a vote.\n"
 "You can find your poll at the link"
 msgstr ""
-"has filled a line.\n"
+"filled a vote.\n"
+"You can find your poll at the link"
+
+msgid ""
+"updated a vote.\n"
+"You can find your poll at the link"
+msgstr ""
+"updated a vote.\n"
+"You can find your poll at the link"
+
+msgid ""
+"wrote a comment.\n"
+"You can find your poll at the link"
+msgstr ""
+"wrote a comment.\n"
 "You can find your poll at the link"
 
 msgid "Thanks for your confidence."
diff --git a/locale/es_ES/LC_MESSAGES/Studs.mo b/locale/es_ES/LC_MESSAGES/Studs.mo
index 2339be802a393b6fa9b554c12934e075f5e5ade8..e87839f6f74f461eed02d4b46e54d951ddf4640a 100644
GIT binary patch
delta 2934
zcmZYBdrXye9LMqR8OZ&hDdx2RK`v@&UNS`xBy}y7T$0SDNOD9B50_B#dW=+Nr8G}~
zCM_)O;>fa7>dH2;(s{|v6|Lz~SIsPK<SJPjuJ_0D{85XY^Spk)=Xrj&@9+COhi}*2
zSnu*(=pEW<{O#d8nD0Y9%r0Vi6bJsUxXn`WXH3VtV)<ew#^6lkWAixB)XFd%D=-9W
zaR9DHb=m0DTd|j!&pxIwhzqAM0)Ikv^c#lZ4V;bLPCdWpord-}GAAp=ez+W?aSN*5
z4(x-i$j3h9z<~BSYC;{D&iK|zA%znIxGHl{9h9Ob<V9|=TBlx*TFFbOi0yPdgj#ur
zbNxHi!mgm&hZ43>jKjNe0LC!BjiSKfEDP0O1`fm}*c+cit+WZ%a5riNpI{<(peEdf
zn!s)3V_`H_1o~qcj=*wk!gvhfqE8KzD9prRs0+`aX1X26;H&r=p2fac6&GAlJ?g$@
z)C5~lTd>!;egLmiKZcsvAsXxcBaUD6CH_^MIO&|2#PW1wE^4I@b6`wc=+tXak$M5O
z!dH;KtqpZwJ8H{1P|0}#l^a)4TM$Bp-LO8WdU8MFua3q#7pCD*>T^-&*P=RVz**RW
zTIp3JiuM=YhcW$wTQ(83g$3xvDpW)-;SkimY3q_WDA%%l6h>1hK@T?LChW!yxPe5V
zXp!`)&?TXsjx?Nx8P56Ts7S1Gt~cNa>W!#{97QecYkV1RViNiqNZ~vR0aSx7Ou*!O
z%$~%lI0xUx+1QQqF#le&DYzFW;;%?BERE%AD{_!AYz{_ZB`T7ua3R(Qulwu@1+6?Z
zfy~FHn1%;&7+%7W7)`3DVkT-Oi%=`r?D#I;PyH;0U<mP6a)%>BSgcdeKt48(Lxi6H
zLgzy9ofABEs3fdHZOuwl=-aRd?nkZYpmV+*$520pf4B%O7E$j^W`8lC*(zzbpd!$M
zT(Wmi`DbS+C~GgH2JS@qurAaKW+0iO2#iOfY^693H=!nW7<*tlhT(Bsf@hrb;|ZIR
zH4BwXkD|6}Df*N&brdv#W~7a^qW17ODs<;jS$+#MFrEETt`s_ML_HNBU<4jP4Riwa
zKKKC@flk!IZlks?QSV>PY%0GjvJm;$Qyi4Fji?p9g^X?cP!s+Jd1csDBuM5WQO08`
zD(Q+GSEIJD8A%H}iDU5^s^7%n#6O%u+VJ4sj6&U*g*&kboA4Hr__mE@>;Cug2|R>~
zP#ob=hhs4hGjSjKP?5|aY?}BK)C*`XDnd(q6twa>)Buf`LJ|c~1D#{zBk_CG0M~FM
z{*Dp2a#S$Hb*QA;iYXXCE#w?(f`2>L2lI$%3v!WnlKDy~sH3&m3pb&XqZyTa@1bUT
z8nu$ksL<a;O}rQJB{-IZ>Np>JVl_UGb*T1k9+BRdihOJ$2PWV%F9qFDkGpUeD!KC5
zD0N(k`Za7p^2QFLCUyzyup4u6J&(jTJc?Rb!2`hvdQp*EfirQfbN&>L)bsxp1w|l)
z45BZKK@E_LMA;VLb=-<X(bhjm!s33%E>wuKCYU{o^RW~!VhK*?_2|VmT!@1*%^1?w
z;4sFw0EJY%fZDULNx?l&LpSx&Sco||7<b?rJb)T#3~!mqxD%O+oyQ!E%MLD}0F@IP
zQSIAM5j}yv1r&aypjT!dy(m=EF&<~3UMybJ^IC(N&~{XEzKObjpW{b3gZg3AizzZE
z*gh7O6LF|<l2Kccmcu_%E(%Q8_V^2;K1<(4X&v8He3kdR`RZ>G-}!e+!QZcDe{S?+
zu2z3z^l;Z3f%fPImutI!w!2?s6F2EWFn^W%5!dU1Pu+j^i7qQI_mm_QC#<Nb@t;mi
ziCSDyZHueRN{UzduP2tfmsge)*Zlhi|NJ2Xd)8K0)OcvLsAAbNkGIDEW#Z64?T}vv
n`OCA5qAKZOMVZIzdD?$6yCU{KJ$U>tW>5A{m>mDVE;#=WQ3GEy

delta 2850
zcmXZddrXye9LMqR@t`7z8sY^IJ)j;%R7g<M6fE(UN-}jY4Fv(=%o8Ze#Y-MaYel(c
z$CPq2yx<?1l@nHDNv^eJQ&)4DWnww)O0ALR)aB^?;XG&OJg?vLd!FCz`};o6xm)l0
zZfD?nbl985=P17s{4#o*{fJ8<IPf_aWi}4K#ANKkM=*YXS$~{_d~GHNn%W}li%+8)
z^Dq`yqq?ki&g*fIS-{?=5YL4Z7>-|{I{F&>;J28I9nN{`z@COS4VjBAz+t!&Bk@^O
zyRA4F>yfYR<G_G+3^k!vOlExhih`Gl`;H#&QU?oA6Usp@S)OxVhFZx+RK&JBHlkME
z>RdmATG%;M`&$@>cW@})$Nr3OgNP@KvjkLwi5Q0qF&c|eE3H8_+>KhnK}^I})P%2~
zCU713+AkawfqUq~{&eQY8XSc;F`$NS?plfws0;b1nbu)CK8Nq%DI9{iF`*Teq3)|i
zO>hTl3mTm3`>~7j<EV)>(pdL5IW`X={+p<H*Qpr6@^oV&YNg2>7}MrB=POW=+JG#|
zwjq7nYpDAUqqeLSm7MLU+&GWgf}2Rx?Y46sHjMbIqZsbe1uu@p>8SbwR7aJVgF8?w
zJ&)R&?{O0TiQ2Nb;h`;@iWQvaq9S@0lkg|h*10(-=Mn-GrclVnQmn<7umg8v3B6LZ
z-%+7+lOTFJ!f`$hK-I5AMPik6y%HyKUX5DF5!Aw3a35a9(HN*Ch38TTq8eO54~8X}
zt;4an0$;{l?7&r+I@0V(Y`~d#5eb5Yvs`V32N}aMupcf%MRFAuVp-^Vz|K+7%5UKk
ze9B`s9uMFIJd3H=iQ_Pyl-Ek;qE_H@+=Fh;Poa{!6{q4SNZ0m{Qy<MfXe(klgzNdA
zML`Yb^;9qkR1&U4g|+|{@^z?{lsolRc*n(-;ackbW6Wmb1yqtoFiWjC7O65XDng4<
zNm`738Q=UA=)<<4UML4pD{eueYPV1;aeG4(nt{DJ&qPf;8_RLAQ{RG0&Nfu;Ttp50
zD=J62Q4@$EoB_&~KtX$!jS5vhDy!>oG9E|e#%0G|?2n#;R8&W^Q3K6KJ^zKM2>4M8
z+m70*L#T;;=6HEL@z<ZqZ&WBtqdDn=W00{d1vTU4$ScCikzm+PoQ}s(Np{Wg9_nd|
zA#vDlTYwqpL-l(I`(iU{Yfere{<^V^ii3C!_hVfOQNe*MTMZ`RYMhFS&|XxBr*JNQ
zjPK)rs7Rh5e46;DsQ1b@s0jUxia<B2|L6em^^!zssDbj>_<pz+HGmIa#Elq^cTpkk
zMkQ5bTIfZRhFVA-YJyu)*WW^IK|Av9u^Xs<9^fDhxE~EAM+_?YCZcA#2(^-8ROo9_
zGv9**$C^+bU%-L*H#T55s(l0dp!<(uI(~$jKqu;Y7?p<^-$qg(YIYXY@n6Wx&SKd(
z(!w%O6Dz<Ma2q~>5AhAm;?YpYmrxPxL`Cj4F2x5<{laOXr)n800`-`o=l>N78lc^|
z;Ro#EJdz9}O7;-v;pE3cZb5~(4WGxWSccEc;B}3kV+AJjS}epyq)WSxq?e^V9!l=j
zn8^6Hi-PvN8Kdw6%*QjRi4C2_9}lLZ2Ko@Qa5!%p#<qN%gL{#*uuJI0UYVix$*73V
zN4+77P!TG{z#0mE3R=;5)QhDP^}KeWCNzZ66xz|KhAECyFpTpVsCJpCT*yWZv;tko
ze0n}>IMzDlO<2v}&Z`k8lba~-<hPBV0&$d|KE?bBdP<=`t^L8G$mK2zwnnD78c*Md
zeBI?b5Zn|sOl^9y{YY?c)MD4+(;ZR&4vwp=vh`KIlA^6vUbNY>-skt1mUxOheqTkf
rBhecikhCHAUQ*oY2T6a#M{MNg8eeHe>E__g%)($!Rz<MioKgP+p{F?q

diff --git a/locale/es_ES/LC_MESSAGES/Studs.po b/locale/es_ES/LC_MESSAGES/Studs.po
index 28f5fd2f..c5547717 100644
--- a/locale/es_ES/LC_MESSAGES/Studs.po
+++ b/locale/es_ES/LC_MESSAGES/Studs.po
@@ -393,12 +393,26 @@ msgstr "Participaci&oacute;n a la encuesta"
 #: studs.php:171
 #: studs.php:211
 msgid ""
-"has filled a line.\n"
+"filled a vote.\n"
 "You can find your poll at the link"
 msgstr ""
 "acaba de llenar una l&iacute;nea.\n"
 "Usted puede retroceder a su encuesta con el enlace siguiente"
 
+msgid ""
+"updated a vote.\n"
+"You can find your poll at the link"
+msgstr ""
+"updated a vote.\n"
+"Usted puede retroceder a su encuesta con el enlace siguiente"
+
+msgid ""
+"wrote a comment.\n"
+"You can find your poll at the link"
+msgstr ""
+"wrote a comment.\n"
+"Usted puede retroceder a su encuesta con el enlace siguiente"
+
 #: studs.php:246
 #: adminstuds.php:567
 msgid "Initiator of the poll"
diff --git a/locale/fr_FR/LC_MESSAGES/Studs.mo b/locale/fr_FR/LC_MESSAGES/Studs.mo
index f3c7d063376b25d0656018a8819ca8818169e5cf..d93851fc1fc52afe555a580d907699086206b099 100644
GIT binary patch
delta 4992
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

delta 4841
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
A&;S4c

diff --git a/locale/fr_FR/LC_MESSAGES/Studs.po b/locale/fr_FR/LC_MESSAGES/Studs.po
index 551705da..09100a6e 100644
--- a/locale/fr_FR/LC_MESSAGES/Studs.po
+++ b/locale/fr_FR/LC_MESSAGES/Studs.po
@@ -670,10 +670,24 @@ msgid "Poll's participation"
 msgstr "Participation au sondage"
 
 msgid ""
-"has filled a line.\n"
+"filled a vote.\n"
 "You can find your poll at the link"
 msgstr ""
-"vient de remplir une ligne.\n"
+"vient de voter.\n"
+"Vous pouvez retrouver votre sondage avec le lien suivant"
+
+msgid ""
+"updated a vote.\n"
+"You can find your poll at the link"
+msgstr ""
+"vient de mettre à jour un vote.\n"
+"Vous pouvez retrouver votre sondage avec le lien suivant"
+
+msgid ""
+"vient de rédiger un commentaire.\n"
+"You can find your poll at the link"
+msgstr ""
+"wrote a comment.\n"
 "Vous pouvez retrouver votre sondage avec le lien suivant"
 
 msgid "Thanks for your confidence."
diff --git a/studs.php b/studs.php
index 09bddab7..76f36224 100644
--- a/studs.php
+++ b/studs.php
@@ -25,6 +25,12 @@ use Framadate\Utils;
 
 include_once __DIR__ . '/app/inc/init.php';
 
+/* Constants */
+/* --------- */
+const UPDATE_VOTE = 1;
+const ADD_VOTE = 2;
+const ADD_COMMENT = 3;
+
 /* Variables */
 /* --------- */
 
@@ -49,19 +55,36 @@ $mailService = new MailService($config['use_smtp']);
  *
  * @param $poll stdClass The poll
  * @param $mailService MailService The mail service
+ * @param $name string The name user who triggered the notification
+ * @param $type int cf: Constants on the top of this page
  */
-function sendUpdateNotification($poll, $mailService) {
-    if ($poll->receiveNewVotes && !isset($_SESSION['mail_sent'][$poll->id])) {
+function sendUpdateNotification($poll, $mailService, $name, $type) {
+    if (!isset($_SESSION['mail_sent'])) {
+        $_SESSION['mail_sent'] = [];
+    }
+
+    if ($poll->receiveNewVotes && (!isset($_SESSION['mail_sent'][$poll->id]) || $_SESSION['mail_sent'][$poll->id] !== true)) {
 
         $subject = '[' . NOMAPPLICATION . '] ' . _('Poll\'s participation') . ' : ' . $poll->title;
-        $message = html_entity_decode('"$nom" ', ENT_QUOTES, 'UTF-8') .
-            _('has filled a line.\nYou can find your poll at the link') . " :\n\n" .
-            Utils::getUrlSondage($poll->admin_poll_id, true) . " \n\n" .
-            _('Thanks for your confidence.') . "\n" . NOMAPPLICATION;
+
+        $message = $name . ' ';
+        switch ($type) {
+            case UPDATE_VOTE:
+                $message .= _('updated a vote.\nYou can find your poll at the link') . " :\n\n";
+                break;
+            case ADD_VOTE:
+                $message .= _('filled a vote.\nYou can find your poll at the link') . " :\n\n";
+                break;
+            case ADD_COMMENT:
+                $message .= _('wrote a comment.\nYou can find your poll at the link') . " :\n\n";
+                break;
+        }
+        $message .= Utils::getUrlSondage($poll->admin_id, true) . "\n\n";
+        $message .= _('Thanks for your confidence.') . "\n" . NOMAPPLICATION;
 
         $mailService->send($poll->admin_mail, $subject, $message);
 
-        $_SESSION["mail_sent"][$poll->id] = true;
+        $_SESSION['mail_sent'][$poll->id] = true;
     }
 }
 
@@ -108,7 +131,7 @@ if (!empty($_POST['save'])) { // Save edition of an old vote
         $result = $pollService->updateVote($poll_id, $editedVote, $name, $choices);
         if ($result) {
             $message = new Message('success', _('Update vote successfully.'));
-            sendUpdateNotification($poll, $mailService);
+            sendUpdateNotification($poll, $mailService, $name, UPDATE_VOTE);
         } else {
             $message = new Message('danger', _('Update vote failed.'));
         }
@@ -129,7 +152,7 @@ if (!empty($_POST['save'])) { // Save edition of an old vote
         $result = $pollService->addVote($poll_id, $name, $choices);
         if ($result) {
             $message = new Message('success', _('Update vote successfully.'));
-            sendUpdateNotification($poll, $mailService);
+            sendUpdateNotification($poll, $mailService, $name, ADD_VOTE);
         } else {
             $message = new Message('danger', _('Update vote failed.'));
         }
@@ -153,6 +176,7 @@ if (isset($_POST['add_comment'])) {
         $result = $pollService->addComment($poll_id, $name, $comment);
         if ($result) {
             $message = new Message('success', _('Comment added.'));
+            sendUpdateNotification($poll, $mailService, $name, ADD_COMMENT);
         } else {
             $message = new Message('danger', _('Comment failed.'));
         }
-- 
GitLab