diff --git a/app/classes/Framadate/CollectMail.php b/app/classes/Framadate/CollectMail.php new file mode 100644 index 0000000..155bee4 --- /dev/null +++ b/app/classes/Framadate/CollectMail.php @@ -0,0 +1,35 @@ +editable = Editable::EDITABLE_BY_ALL; + $this->collect_users_mail = CollectMail::NO_COLLECT; $this->clearChoices(); } diff --git a/app/classes/Framadate/Repositories/PollRepository.php b/app/classes/Framadate/Repositories/PollRepository.php index 2e3f68a..f44a928 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 904fe95..81dfe25 100644 --- a/app/classes/Framadate/Services/InputService.php +++ b/app/classes/Framadate/Services/InputService.php @@ -69,23 +69,23 @@ class InputService { public function filterMail($mail) { /////////////////////////////////////////////////////////////////////////////////////// // formatting - + $mail = trim($mail); - + /////////////////////////////////////////////////////////////////////////////////////// // e-mail validation - + $resultat = FALSE; - + $validator = new EmailValidator(); - + if ($validator->isValid($mail, new RFCValidation())) { $resultat = $mail; } - + /////////////////////////////////////////////////////////////////////////////////////// // return - + return $resultat; } @@ -115,6 +115,10 @@ class InputService { return filter_var($editable, FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => EDITABLE_CHOICE_REGEX]]); } + public function filterCollectMail($collectMail) { + return filter_var($collectMail, 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 065fbf2..92f2b5e 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 de51c3b..7b1c0a9 100644 --- a/create_poll.php +++ b/create_poll.php @@ -58,8 +58,6 @@ if ($goToStep2) { $use_ValueMax = isset($_POST['use_ValueMax']) ? $inputService->filterBoolean($_POST['use_ValueMax']) : false; $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 +68,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->filterCollectMail($_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 2793e98..295ab47 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 ea52d83..1cdefed 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", @@ -352,14 +355,23 @@ "Save the new title": "Save the new title", "Simple editor": "Simple editor", "Title": "Title of the poll", + "Voters email adresses are not collected": "Voters email adresses are not collected", + "Voters email adresses are collected": "Voters email adresses are collected", + "Voters email adresses are collected and required": "Voters email adresses are collected and required", + "Voters email adresses are collected, required and verified": "Voters email adresses are collected, required and verified", "Votes and comments are locked": "Votes and comments are locked", - "Votes protected by password": "Votes protected by password" + "Votes protected by password": "Votes protected by password", }, "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 +396,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 +455,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 +487,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 696024f..05efe44 100644 --- a/tpl/create_poll.tpl +++ b/tpl/create_poll.tpl @@ -325,23 +325,34 @@ - + {* Collect users email *} -
-
{* END div.form-group *} - + {* END div.collapse *} - - + +

diff --git a/tpl/part/poll_info.tpl b/tpl/part/poll_info.tpl index 20eb57a..3de7245 100644 --- a/tpl/part/poll_info.tpl +++ b/tpl/part/poll_info.tpl @@ -233,9 +233,19 @@

- {if $poll->collect_users_mail} -

{__('PollInfo', 'Collecting the polled users emails')}

- {/if} + {if $poll->collect_users_mail == constant("Framadate\CollectMail::NO_COLLECT")} + {$txt=__('PollInfo', 'Voters email adresses are not collected')} + {else if $poll->collect_users_mail == constant("Framadate\CollectMail::COLLECT")} + {$txt=__('PollInfo', 'Voters email adresses are collected')} + {else if $poll->collect_users_mail == constant("Framadate\CollectMail::COLLECT_REQUIRED")} + {$txt=__('PollInfo', 'Voters email adresses are collected and required')} + {else if $poll->collect_users_mail == constant("Framadate\CollectMail::COLLECT_REQUIRED_VERIFIED")} + {$txt=__('PollInfo', 'Voters email adresses are collected, required and verified')} + {else} + {$txt='Error'} + {/if} +

{$txt|html}

+
{/if} diff --git a/tpl/part/vote_table_classic.tpl b/tpl/part/vote_table_classic.tpl index aeda5fc..6ce6b38 100644 --- a/tpl/part/vote_table_classic.tpl +++ b/tpl/part/vote_table_classic.tpl @@ -30,7 +30,7 @@ class="btn btn-link btn-sm remove-column" title="{__('adminstuds', 'Remove the column')} {$slot->title|html}"> {__('Generic', 'Remove')} - {if $poll->collect_users_mail} + {if $poll->collect_users_mail != constant("Framadate\CollectMail::NO_COLLECT")} @@ -68,8 +68,8 @@ - {if $poll->collect_users_mail} - + {if $poll->collect_users_mail != constant("Framadate\CollectMail::NO_COLLECT")} + collect_users_mail != constant("Framadate\CollectMail::COLLECT")} required {/if} id="mail" name="mail" value="{$vote->mail|html}" class="form-control" title="{__('Generic', 'Your email address')}" placeholder="{__('Generic', 'Your email address')}" /> {/if} @@ -112,13 +112,13 @@ {elseif !$hidden} {* Voted line *} - {$vote->name|html} + mail}title="{$vote->mail|html}"{/if}>{$vote->name|html} {if $active && !$expired && $accessGranted && ( $poll->editable == constant('Framadate\Editable::EDITABLE_BY_ALL') or $admin or ($poll->editable == constant('Framadate\Editable::EDITABLE_BY_OWN') && $editedVoteUniqueId == $vote->uniqId) - ) && $slots gt 4 + ) && $slots|count gt 4 } @@ -184,11 +184,11 @@
- {if $poll->collect_users_mail} + {if $poll->collect_users_mail != constant("Framadate\CollectMail::NO_COLLECT")} {/if}
- {if $poll->collect_users_mail && $poll->editable == constant('Framadate\Editable::EDITABLE_BY_ALL')} + {if $poll->collect_users_mail != constant("Framadate\CollectMail::NO_COLLECT") && $poll->editable == constant('Framadate\Editable::EDITABLE_BY_ALL')}
diff --git a/tpl/part/vote_table_date.tpl b/tpl/part/vote_table_date.tpl index ae06a39..0259c46 100644 --- a/tpl/part/vote_table_date.tpl +++ b/tpl/part/vote_table_date.tpl @@ -32,7 +32,7 @@ title="{__('adminstuds', 'Remove the column')} {$slot->day|date_format:$date_format.txt_short|html} - {$moment|html}"> {__('Generic', 'Remove')} - {if $poll->collect_users_mail} + {if $poll->collect_users_mail != constant("Framadate\CollectMail::NO_COLLECT")} @@ -112,9 +112,9 @@ - {if $poll->collect_users_mail} - - {/if} + {if $poll->collect_users_mail != constant("Framadate\CollectMail::NO_COLLECT")} + collect_users_mail != constant("Framadate\CollectMail::COLLECT")} required {/if} id="mail" name="mail" value="{$vote->mail|html}" class="form-control" title="{__('Generic', 'Your email address')}" placeholder="{__('Generic', 'Your email address')}" /> + {/if}
@@ -162,7 +162,7 @@ {* Voted line *} - {$vote->name|html} + {$vote->name|html} {if $active && !$expired && $accessGranted && ( $poll->editable == constant('Framadate\Editable::EDITABLE_BY_ALL') @@ -239,11 +239,11 @@
- {if $poll->collect_users_mail} - + {if $poll->collect_users_mail != constant("Framadate\CollectMail::NO_COLLECT")} + collect_users_mail != constant("Framadate\CollectMail::COLLECT")} required {/if} id="mail" name="mail" class="form-control" title="{__('Generic', 'Your email address')}" placeholder="{__('Generic', 'Your email address')}" /> {/if}
- {if $poll->collect_users_mail && $poll->editable == constant('Framadate\Editable::EDITABLE_BY_ALL')} + {if $poll->collect_users_mail != constant("Framadate\CollectMail::NO_COLLECT") && $poll->editable == constant('Framadate\Editable::EDITABLE_BY_ALL')}