From ab5f9e013a58e695c3472cc4b1621c849e89b258 Mon Sep 17 00:00:00 2001
From: Olivier PEREZ <olivier@olivierperez.fr>
Date: Wed, 17 Dec 2014 13:47:14 +0100
Subject: [PATCH] Implement comments functionnality

---
 app/classes/Framadate/FramaDB.php             |  5 +++
 .../Framadate/Services/PollService.php        |  4 +++
 studs.php                                     | 35 ++++++++++++++++---
 tpl/studs.tpl                                 | 29 ++++++++-------
 4 files changed, 56 insertions(+), 17 deletions(-)

diff --git a/app/classes/Framadate/FramaDB.php b/app/classes/Framadate/FramaDB.php
index 184f7b6a..7e1d8e53 100644
--- a/app/classes/Framadate/FramaDB.php
+++ b/app/classes/Framadate/FramaDB.php
@@ -84,4 +84,9 @@ class FramaDB
         return $prepared->execute([$choices, $poll_id, $vote_id]);
     }
 
+    function insertComment($poll_id, $name, $comment) {
+        $prepared = $this->prepare('INSERT INTO comments (id_sondage, usercomment, comment) VALUES (?,?,?)');
+        return $prepared->execute([$poll_id, $name, $comment]);
+    }
+
 }
diff --git a/app/classes/Framadate/Services/PollService.php b/app/classes/Framadate/Services/PollService.php
index 51fa3e7b..d37272fc 100644
--- a/app/classes/Framadate/Services/PollService.php
+++ b/app/classes/Framadate/Services/PollService.php
@@ -39,6 +39,10 @@ class PollService {
         return $this->connect->insertVote($poll_id, $name, $choices);
     }
 
+    function addComment($poll_id, $name, $comment) {
+        return $this->connect->insertComment($poll_id, $name, $comment);
+    }
+
     function computeBestMoments($votes) {
         $result = [];
         foreach ($votes as $vote) {
diff --git a/studs.php b/studs.php
index f2850be1..400cd7a6 100644
--- a/studs.php
+++ b/studs.php
@@ -18,13 +18,14 @@
  */
 use Framadate\Services\PollService;
 use Framadate\Services\InputService;
-use Framadate\Utils;
 use Framadate\Message;
+use Framadate\Utils;
 
 include_once __DIR__ . '/app/inc/init.php';
 
 /* Variables */
 /* --------- */
+$poll_id = null;
 $message = null;
 
 /* Services */
@@ -79,9 +80,9 @@ if (!empty($_POST['save'])) { // Save edition of an old vote
         // Update vote
         $result = $pollService->updateVote($poll_id, $editedVote, $choices);
         if ($result) {
-            $message = new Message('success', _('Update vote successfully!'));
+            $message = new Message('success', _('Update vote successfully.'));
         } else {
-            $message = new Message('danger', _('Update vote failed!'));
+            $message = new Message('danger', _('Update vote failed.'));
         }
     }
 } elseif (isset($_POST['save'])) { // Add a new vote
@@ -99,13 +100,37 @@ if (!empty($_POST['save'])) { // Save edition of an old vote
         // Add vote
         $result = $pollService->addVote($poll_id, $name, $choices);
         if ($result) {
-            $message = new Message('success', _('Update vote successfully!'));
+            $message = new Message('success', _('Update vote successfully.'));
         } else {
-            $message = new Message('danger', _('Update vote failed!'));
+            $message = new Message('danger', _('Update vote failed.'));
         }
     }
 }
 
+// -------------------------------
+// Add a comment
+// -------------------------------
+
+if (isset($_POST['add_comment'])) {
+    $name = filter_input(INPUT_POST, 'name', FILTER_VALIDATE_REGEXP, ['options'=>['regexp'=>'/^[a-z0-9_ -]+$/i']]);
+    $comment = filter_input(INPUT_POST, 'comment', FILTER_DEFAULT);
+
+    if (empty($name)) {
+        $message = new Message('danger', _('Name is incorrect.'));
+    }
+
+    if ($message == null) {
+        // Add comment
+        $result = $pollService->addComment($poll_id, $name, $comment);
+        if ($result) {
+            $message = new Message('success', _('Comment added.'));
+        } else {
+            $message = new Message('danger', _('Comment failed.'));
+        }
+    }
+
+}
+
 // Retrieve data
 $slots = $pollService->allSlotsByPollId($poll_id);
 $votes = $pollService->allUserVotesByPollId($poll_id);
diff --git a/tpl/studs.tpl b/tpl/studs.tpl
index ef761359..dc7f0dcc 100644
--- a/tpl/studs.tpl
+++ b/tpl/studs.tpl
@@ -281,19 +281,24 @@
     {* Add comment form *}
 
     <div class="hidden-print alert alert-info">
-        <div class="col-md-6 col-md-offset-3">
-        <fieldset id="add-comment"><legend>{_("Add a comment in the poll")}</legend>
-            <div class="form-group">
-                <p><label for="commentuser">{_("Your name")}</label><input type=text class="form-control" name="commentuser" id="commentuser" /></p>
-            </div>
-            <div class="form-group">
-                <p><label for="comment">{_("Your comment")}</label><br />
-                <textarea name="comment" id="comment" class="form-control" rows="2" cols="40"></textarea></p>
+        <form action="{$poll_id|poll_url}#comments" method="POST">
+            <div class="col-md-6 col-md-offset-3">
+            <fieldset id="add-comment"><legend>{_("Add a comment to the poll")}</legend>
+                <div class="form-group">
+                    <label for="name" class="control-label">{_("Your name")}</label>
+                    <input type="text" name="name" id="name" class="form-control" />
+                </div>
+                <div class="form-group">
+                    <label for="comment" class="control-label">{_("Your comment")}</label>
+                    <textarea name="comment" id="comment" class="form-control" rows="2" cols="40"></textarea>
+                </div>
+                <div class="pull-right">
+                    <input type="submit" name="add_comment" value="{_("Send the comment")}" class="btn btn-success">
+                </div>
+            </fieldset>
             </div>
-            <p class="text-center"><input type="submit" name="ajoutcomment" value="{_("Send the comment")}" class="btn btn-success"></p>
-        </fieldset>
-        </div>
-        <div class="clearfix"></div>
+            <div class="clearfix"></div>
+        </form>
     </div>
 {/if}
 {/block}
\ No newline at end of file
-- 
GitLab