From feb0c1e6ce1ce4207e467ae52ca1632122590eda Mon Sep 17 00:00:00 2001 From: Meteor-Furet <justine.marlow@etu.utc.fr> Date: Tue, 8 May 2018 15:03:22 +0200 Subject: [PATCH] =?UTF-8?q?Modification=20collect=5Fusers=5Fmail=20de=20bo?= =?UTF-8?q?ol=20=C3=A0=20int=20(MAJ=20de=20la=20cr=C3=A9ation=20d'un=20son?= =?UTF-8?q?dage)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/classes/Framadate/Collect_mail.php | 37 +++++++++++++++++++ app/classes/Framadate/Form.php | 5 ++- .../Framadate/Repositories/PollRepository.php | 2 +- .../Framadate/Services/InputService.php | 4 ++ app/inc/constants.php | 1 + create_poll.php | 3 +- js/app/create_poll.js | 6 +-- locale/en.json | 24 ++++++++---- tpl/create_poll.tpl | 27 ++++++++++---- 9 files changed, 86 insertions(+), 23 deletions(-) create mode 100644 app/classes/Framadate/Collect_mail.php diff --git a/app/classes/Framadate/Collect_mail.php b/app/classes/Framadate/Collect_mail.php new file mode 100644 index 00000000..8abc12e9 --- /dev/null +++ b/app/classes/Framadate/Collect_mail.php @@ -0,0 +1,37 @@ +<?php +/** + * This software is governed by the CeCILL-B license. If a copy of this license + * is not distributed with this file, you can obtain one at + * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt + * + * Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ + * Authors of Framadate/OpenSondage: Framasoft (https://github.com/framasoft) + * + * ============================= + * + * Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence + * ne se trouve pas avec ce fichier vous pouvez l'obtenir sur + * http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt + * + * Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ + * Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft) + */ + +namespace Framadate; + +/** + * Class Collect_mail + * + * Is used to specify the poll's edition permissions. + * @TODO : wait to use the SplEnum + * + * @package Framadate + */ +class Collect_mail { // extends SplEnum + const __default = self::NO_COLLECT; + + const NO_COLLECT = 0; + const COLLECT = 1; + const COLLECT_REQUIRED = 2; + const COLLECT_REQUIRED_VERIFIED = 3; +} diff --git a/app/classes/Framadate/Form.php b/app/classes/Framadate/Form.php index b6a5270c..a277ecaf 100644 --- a/app/classes/Framadate/Form.php +++ b/app/classes/Framadate/Form.php @@ -83,8 +83,8 @@ class Form public $results_publicly_visible; /** - * If true, the users can leave an email address while voting in the poll - * @var boolean + * Tells if voters email addresses are collected or not. + * @var \Framadate\Collect_mail */ public $collect_users_mail; @@ -95,6 +95,7 @@ class Form public function __construct(){ $this->editable = Editable::EDITABLE_BY_ALL; + $this->collect_users_mail = Collect_mail::NO_COLLECT; $this->clearChoices(); } diff --git a/app/classes/Framadate/Repositories/PollRepository.php b/app/classes/Framadate/Repositories/PollRepository.php index 2e3f68a3..f44a9281 100644 --- a/app/classes/Framadate/Repositories/PollRepository.php +++ b/app/classes/Framadate/Repositories/PollRepository.php @@ -28,7 +28,7 @@ class PollRepository extends AbstractRepository { 'password_hash' => $form->password_hash, 'results_publicly_visible' => $form->results_publicly_visible ? 1 : 0, 'ValueMax' => $form->ValueMax, - 'collect_users_mail' => $form->collect_users_mail? 1 : 0, + 'collect_users_mail' => ($form->collect_users_mail >= 0 && $form->collect_users_mail <= 3) ? $form->collect_users_mail : 0, ]); } diff --git a/app/classes/Framadate/Services/InputService.php b/app/classes/Framadate/Services/InputService.php index 904fe95e..a3e10d42 100644 --- a/app/classes/Framadate/Services/InputService.php +++ b/app/classes/Framadate/Services/InputService.php @@ -115,6 +115,10 @@ class InputService { return filter_var($editable, FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => EDITABLE_CHOICE_REGEX]]); } + public function filterCollect_mail($collect_mail) { + return filter_var($collect_mail, FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => COLLECT_MAIL_CHOICE_REGEX]]); + } + public function filterComment($comment) { $comment = str_replace("\r\n", "\n", $comment); return $this->returnIfNotBlank($comment); diff --git a/app/inc/constants.php b/app/inc/constants.php index 065fbf21..92f2b5e7 100644 --- a/app/inc/constants.php +++ b/app/inc/constants.php @@ -33,6 +33,7 @@ const CHOICE_REGEX = '/^[ 012]$/'; const BOOLEAN_REGEX = '/^(on|off|true|false|1|0)$/i'; const BOOLEAN_TRUE_REGEX = '/^(on|true|1)$/i'; const EDITABLE_CHOICE_REGEX = '/^[0-2]$/'; +const COLLECT_MAIL_CHOICE_REGEX = '/^[0-3]$/'; const BASE64_REGEX = '/^[A-Za-z0-9]+$/'; const MD5_REGEX = '/^[A-Fa-f0-9]{32}$/'; diff --git a/create_poll.php b/create_poll.php index de51c3be..5b7597a4 100644 --- a/create_poll.php +++ b/create_poll.php @@ -59,7 +59,6 @@ if ($goToStep2) { $ValueMax = $use_ValueMax === true ? $inputService->filterValueMax($_POST['ValueMax']) : null; $collect_users_mail = isset($_POST['collect_users_mail']) ? $inputService->filterBoolean($_POST['collect_users_mail']) : false; - $use_customized_url = isset($_POST['use_customized_url']) ? $inputService->filterBoolean($_POST['use_customized_url']) : false; $customized_url = $use_customized_url === true ? $inputService->filterId($_POST['customized_url']) : null; $name = $inputService->filterName($_POST['name']); @@ -70,7 +69,7 @@ if ($goToStep2) { $receiveNewComments = isset($_POST['receiveNewComments']) ? $inputService->filterBoolean($_POST['receiveNewComments']) : false; $hidden = isset($_POST['hidden']) ? $inputService->filterBoolean($_POST['hidden']) : false; $use_password = filter_input(INPUT_POST, 'use_password', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => BOOLEAN_REGEX]]); - $collect_users_mail = isset($_POST['collect_users_mail']) ? $inputService->filterBoolean($_POST['collect_users_mail']) : false; + $collect_users_mail = $inputService->filterCollect_mail($_POST['collect_users_mail']); $use_password = filter_input(INPUT_POST, 'use_password', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => BOOLEAN_REGEX]]); $password = isset($_POST['password']) ? $_POST['password'] : null; $password_repeat = isset($_POST['password_repeat']) ? $_POST['password_repeat'] : null; diff --git a/js/app/create_poll.js b/js/app/create_poll.js index 2793e988..295ab476 100644 --- a/js/app/create_poll.js +++ b/js/app/create_poll.js @@ -81,8 +81,8 @@ $(document).ready(function () { /** * Hide/Show Warning collect_users_mail + editable by all */ - $("#collect_users_mail").change(function(){ - if ($(this).prop("checked") && $("input[name='editable']:checked").val() == 1) { + $("input[name='collect_users_mail']").change(function(){ + if (($("input[name='collect_users_mail']:checked").val() != 0) && ($("input[name='editable']:checked").val() == 1)) { $("#collect_warning").removeClass("hidden"); } else { $("#collect_warning").addClass("hidden"); @@ -90,7 +90,7 @@ $(document).ready(function () { }); $("input[name='editable']").change(function(){ - if ($("#collect_users_mail").prop("checked") && $("input[name='editable']:checked").val() == 1) { + if ($("input[name='collect_users_mail']:checked").val() != 0 && $("input[name='editable']:checked").val() == 1) { $("#collect_warning").removeClass("hidden"); } else { $("#collect_warning").addClass("hidden"); diff --git a/locale/en.json b/locale/en.json index ea52d83a..496b72ea 100644 --- a/locale/en.json +++ b/locale/en.json @@ -309,6 +309,7 @@ "Vote no for": "Vote \"no\" for", "Vote yes for": "Vote \"yes\" for", "Votes of the poll": "Votes", + "Warning : anyone can access to your email address after voting": "Warning : anyone can access to your email address after voting", "polled user": "polled user", "polled users": "polled users" }, @@ -320,6 +321,7 @@ "Cancel the name edit": "Cancel the name edit", "Cancel the rules edit": "Cancel the rules edit", "Cancel the title edit": "Cancel the title edit", + "Collect of the polled users email addresses": "Collect of the polled users email addresses", "Collecting the polled users emails": "Collecting the polled users email addresses", "Edit the description": "Edit the description", "Edit the email adress": "Edit the email address", @@ -331,6 +333,7 @@ "Expiration date": "Expiry date", "Export to CSV": "Export to CSV", "Initiator of the poll": "Creator of the poll", + "No collect of the polled users email addresses": "No collect of the polled users email addresses", "No password": "No password", "Only votes are protected": "Only votes are protected", "Password protected": "Password protected", @@ -358,8 +361,13 @@ "Step 1": { "All voters can modify any vote": "All voters can modify any vote", "Collect the polled users email addresses": "Collecting the polled users' email addresses", - "Collect users email": "Collect users' email addresses", + "Collect users email": "Collect users email", + "Collect voters email": "Collect voters email", "Customize the URL": "Customize the URL", + "Email addresses are collected but not required": "Email addresses are collected but not required", + "Email addresses are not collected": "Email addresses are not collected", + "Email addresses are required": "Email addresses are required", + "Email addresses are required and verified": "Email addresses are required and verified", "Go to step 2": "Go to step 2", "Limit the amount of voters per option": "Limit the amount of voters per option", "More informations here:": "More informations here:", @@ -384,6 +392,7 @@ "ValueMax instructions": "votes per option", "Voters can modify their vote themselves": "Voters can modify their vote themselves", "Votes cannot be modified": "Votes cannot be modified", + "Warning : anyone can access to the polled users's email addresses.": "Warning : anyone can access to the polled users's email addresses.", "Warning: anyone can access the polled users email addresses since all voters can modify any vote. You should restrict permission rules.": "Warning: Anyone can see the polled users' email addresses since all voters can modify any vote. You should restrict permission rules.", "You are in the poll creation section.": "You are in the poll creation section.", "You can enable or disable the editor at will.": "You can enable or disable the editor at will." @@ -442,6 +451,7 @@ "Back to the poll": "Back to the poll", "Choice added": "Choice added", "Collect the emails of the polled users for the choice": "Collect the emails of the polled users for the choice", + "Collect the emails of the polled users for this column": "Collect the emails of the polled users for this column", "Column removed": "Column deleted", "Column's adding": "Adding a column", "Comment deleted": "Comment deleted", @@ -473,12 +483,12 @@ "remove a column or a line with": "remove a column or a line with" }, "display_mails": { - "No one voted 'If need be' to this option.": "No one voted \"If need be\" for this option.", - "No one voted 'No' to this option.": "No one voted \"No\" for this option.", - "No one voted 'Yes' to this option.": "No one voted \"Yes\" for this option.", - "People who have answered 'If need be' to this option have left these email addresses:": "Email addresses of all users who voted \"If need be\" for this option:", - "People who have answered 'No' to this option have left these email addresses:": "Email addresses of all users who voted \"No\" for this option:", - "People who have answered 'Yes' to this option have left these email addresses:": "Email addresses of all users who voted \"Yes\" for this option:" + "People who have answered 'If need be' to this option have left those email addresses :": "People who have answered 'If need be' to this option have left those email addresses :", + "People who have answered 'If need be' to this option have not left any email addresses.": "People who have answered 'If need be' to this option have not left any email addresses.", + "People who have answered 'No' to this option have left those email addresses :": "People who have answered 'No' to this option have left those email addresses :", + "People who have answered 'No' to this option have not left any email addresses.": "People who have answered 'No' to this option have not left any email addresses.", + "People who have answered 'Yes' to this option have left those email addresses :": "People who have answered 'Yes' to this option have left those email addresses :", + "People who have answered 'Yes' to this option have not left any email addresses.": "People who have answered 'Yes' to this option have not left any email addresses." }, "studs": { "Adding the vote succeeded": "Vote added", diff --git a/tpl/create_poll.tpl b/tpl/create_poll.tpl index 696024f9..2525d383 100644 --- a/tpl/create_poll.tpl +++ b/tpl/create_poll.tpl @@ -328,20 +328,31 @@ {* Collect users email *} - <div class="form-group"> - <label for="collect_mail" class="col-sm-4 control-label"> - {__('Step 1', 'Collect users email')} + <div class="form-group"> + <label for="poll_id" class="col-sm-4 control-label"> + {__('Step 1', 'Collect voters email')} </label> - <div class="col-sm-8"> - <div class="checkbox"> + <div class="radio"> <label> - <input type="checkbox" name="collect_users_mail" - id="collect_users_mail"> - {__('Step 1', "Collect the polled users email addresses")} + <input type="radio" name="collect_users_mail" id="no_collect" {if $collect_users_mail==constant("Framadate\Collect_mail::NO_COLLECT")}checked{/if} value="{constant("Framadate\Collect_mail::NO_COLLECT")}"> + {__('Step 1', 'Email addresses are not collected')} + </label> + <label> + <input type="radio" name="collect_users_mail" {if $collect_users_mail==constant("Framadate\Collect_mail::COLLECT")}checked{/if} value="{constant("Framadate\Collect_mail::COLLECT")}"> + {__('Step 1', 'Email addresses are collected but not required')} + </label> + <label> + <input type="radio" name="collect_users_mail" {if $collect_users_mail==constant("Framadate\Collect_mail::COLLECT_REQUIRED")}checked{/if} value="{constant("Framadate\Collect_mail::COLLECT_REQUIRED")}"> + {__('Step 1', 'Email addresses are required')} + </label> + <label> + <input type="radio" name="collect_users_mail" {if $collect_users_mail==constant("Framadate\Collect_mail::COLLECT_REQUIRED_VERIFIED")}checked{/if} value="{constant("Framadate\Collect_mail::COLLECT_REQUIRED_VERIFIED")}"> + {__('Step 1', 'Email addresses are required and verified')} </label> </div> </div> + </div> <div id="collect_warning" class="hidden"> <div class="col-sm-offset-4 col-sm-8"> -- GitLab