From e941cf182216501191e12c5376362ed5fb40b430 Mon Sep 17 00:00:00 2001 From: Olivier PEREZ <olivier@olivierperez.fr> Date: Tue, 16 Dec 2014 00:45:16 +0100 Subject: [PATCH] Add availability to edit a vote --- app/classes/Framadate/FramaDB.php | 5 ++++ studs.php | 38 +++++++++++++++++++++++++++++-- tpl/studs.tpl | 11 ++++----- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/app/classes/Framadate/FramaDB.php b/app/classes/Framadate/FramaDB.php index 0869fcb1..12fc08e1 100644 --- a/app/classes/Framadate/FramaDB.php +++ b/app/classes/Framadate/FramaDB.php @@ -85,4 +85,9 @@ class FramaDB return $newVote; } + function updateVote($poll_id, $vote_id, $choices) { + $prepared = $this->prepare('UPDATE user_studs SET reponses = ? WHERE id_sondage = ? AND id_users = ?'); + return $prepared->execute([$choices, $poll_id, $vote_id]); + } + } diff --git a/studs.php b/studs.php index 185c91b6..f638ac59 100644 --- a/studs.php +++ b/studs.php @@ -17,6 +17,7 @@ * Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft) */ use Framadate\Services\PollService; +use Framadate\Utils; include_once __DIR__ . '/app/inc/init.php'; @@ -74,7 +75,7 @@ $pollService = new PollService($connect); /* ---- */ if(!empty($_GET['poll'])) { - $poll_id = $_GET['poll']; + $poll_id = filter_input(INPUT_GET, 'poll', FILTER_VALIDATE_REGEXP, ['options'=>['regexp'=>'/^[a-z0-9]+$/']]); } @@ -86,11 +87,44 @@ if (!$poll) { exit; } +// A vote is going to be edited +if (!empty($_POST['edit_vote'])) { + // TODO Try what does filter_input with a wrong value + $editingVoteId = filter_input(INPUT_POST, 'edit_vote', FILTER_VALIDATE_INT); +} else { + $editingVoteId = 0; +} + + +if (!empty($_POST['save'])) { // Save edition of an old vote + $editedVote = filter_input(INPUT_POST, 'save', FILTER_VALIDATE_INT); + $newChoices = []; + + // TODO Do this verification into a Service (maybe called 'InputService') + foreach($_POST['choices'] as $id=>$choice) { + $choice = filter_var($choice, FILTER_VALIDATE_REGEXP, ['options'=>['regexp'=>'/^[012]$/']]); + if ($choice !== false) { + $newChoices[$id] = $choice; + } + } + + if (count($newChoices) == count($_POST['choices'])) { + $result = $pollService->updatePoll($poll_id, $editedVote, $newChoices); + if ($result) { + $message = ['type'=>'success', 'message'=>_('Update vote successfully!')]; + } else { + $message = ['type'=>'success', 'message'=>_('Update vote successfully!')]; + } + } +} elseif (isset($_POST[''])) { // Add a new vote +} + // Retrieve data $slots = $pollService->allSlotsByPollId($poll_id); $votes = $pollService->allUserVotesByPollId($poll_id); $comments = $pollService->allCommentsByPollId($poll_id); + // Assign data to template $smarty->assign('poll_id', $poll_id); $smarty->assign('poll', $poll); @@ -99,7 +133,7 @@ $smarty->assign('slots', split_slots($slots)); $smarty->assign('votes', split_votes($votes)); $smarty->assign('best_moments', computeBestMoments($votes)); $smarty->assign('comments', $comments); -$smarty->assign('editingVoteId', 0); // TODO Replace by the right ID +$smarty->assign('editingVoteId', $editingVoteId); //Utils::debug(computeBestMoments($votes));exit; diff --git a/tpl/studs.tpl b/tpl/studs.tpl index a26d97e5..57d2f866 100644 --- a/tpl/studs.tpl +++ b/tpl/studs.tpl @@ -115,27 +115,27 @@ <td class="bg-info" headers="'.$td_headers[$k].'"> <ul class="list-unstyled choice"> <li class="yes"> - <input type="radio" id="y-choice-{$k}" name="choice{$k}" value="2" {if $choice==2}checked {/if}/> + <input type="radio" id="y-choice-{$k}" name="choices[{$k}]" value="2" {if $choice==2}checked {/if}/> <label class="btn btn-default btn-xs" for="y-choice-{$k}" title="{_('Vote yes for ')} . $radio_title[$k] . '"> <span class="glyphicon glyphicon-ok"></span><span class="sr-only">{_('Yes')}</span> </label> </li> <li class="ifneedbe"> - <input type="radio" id="i-choice-{$k}" name="choice{$k}" value="1" {if $choice==1}checked {/if}/> + <input type="radio" id="i-choice-{$k}" name="choices[{$k}]" value="1" {if $choice==1}checked {/if}/> <label class="btn btn-default btn-xs" for="i-choice-{$k}" title="{_('Vote ifneedbe for ')} . $radio_title[$k] . '"> (<span class="glyphicon glyphicon-ok"></span>)<span class="sr-only">{_('Ifneedbe')}</span> </label> </li> <li class="no"> - <input type="radio" id="n-choice-{$k}" name="choice{$k}" value="0" {if $choice==0}checked {/if}/> + <input type="radio" id="n-choice-{$k}" name="choices[{$k}]" value="0" {if $choice==0}checked {/if}/> <label class="btn btn-default btn-xs" for="n-choice-{$k}" title="{_('Vote no for ')} . $radio_title[$k] . '"> <span class="glyphicon glyphicon-ban-circle"></span><span class="sr-only">{_('No')}</span> </label> </li> </ul> </td> - <td></td> {/foreach} + <td style="padding:5px"><button type="submit" class="btn btn-success btn-xs" name="save" value="{$vote->id}" title="{_('Save the choices')} {$vote->name}">{_('Save')}</button></td> {else} {* Voted line *} @@ -154,8 +154,7 @@ {if $poll->active && $poll->editable} <td> - <input type="hidden" name="edit_vote" value="{$vote->id}"/> - <button type="submit" class="btn btn-link btn-sm" name="edit_vote" title="{_('Edit the line:')} {$vote->name}"> + <button type="submit" class="btn btn-link btn-sm" name="edit_vote" value="{$vote->id}" title="{_('Edit the line:')} {$vote->name}"> <span class="glyphicon glyphicon-pencil"></span><span class="sr-only">{_('Edit')}</span> </button> </td> -- GitLab