Added option of poll with hidden results.

This commit is contained in:
Antonin 2015-04-05 18:36:43 +02:00
parent a3f5763edd
commit 0c2ba20bfa
10 changed files with 178 additions and 43 deletions

View File

@ -21,6 +21,7 @@ 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_8_to_0_9_Migration;
use Framadate\Migration\AddColumn_receiveNewComments_For_0_9; use Framadate\Migration\AddColumn_receiveNewComments_For_0_9;
use Framadate\Migration\AddColumn_uniqId_In_vote_For_0_9; use Framadate\Migration\AddColumn_uniqId_In_vote_For_0_9;
use Framadate\Migration\AddColumn_hidden_In_poll_For_0_9;
use Framadate\Migration\Migration; use Framadate\Migration\Migration;
use Framadate\Utils; use Framadate\Utils;
@ -33,7 +34,8 @@ $migrations = [
new From_0_0_to_0_8_Migration(), 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 AddColumn_receiveNewComments_For_0_9(), new AddColumn_receiveNewComments_For_0_9(),
new AddColumn_uniqId_In_vote_For_0_9() new AddColumn_uniqId_In_vote_For_0_9(),
new AddColumn_hidden_In_poll_For_0_9(),
]; ];
// --------------------------------------- // ---------------------------------------

View File

@ -47,6 +47,12 @@ class Form
*/ */
public $receiveNewComments; public $receiveNewComments;
/**
* If true, only the poll maker can see the poll's results
* @var boolean
*/
public $hidden;
/** /**
* List of available choices * List of available choices
*/ */

View File

@ -0,0 +1,77 @@
<?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/OpenSondate: 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\Migration;
use Framadate\Utils;
/**
* This migration adds the field hidden on the poll table.
*
* @package Framadate\Migration
* @version 0.9
*/
class AddColumn_hidden_In_poll_For_0_9 implements Migration {
function __construct() {
}
/**
* This method should describe in english what is the purpose of the migration class.
*
* @return string The description of the migration class
*/
function description() {
return "Add column \"hidden\" in table \"vote\" for version 0.9";
}
/**
* 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.9 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 `hidden` TINYINT( 1 ) NOT NULL DEFAULT "0"');
}
}

View File

@ -49,6 +49,7 @@ $description = filter_input(INPUT_POST, 'description', FILTER_SANITIZE_STRING);
$editable = filter_input(INPUT_POST, 'editable', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => EDITABLE_CHOICE_REGEX]]); $editable = filter_input(INPUT_POST, 'editable', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => EDITABLE_CHOICE_REGEX]]);
$receiveNewVotes = filter_input(INPUT_POST, 'receiveNewVotes', 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]]); $receiveNewComments = filter_input(INPUT_POST, 'receiveNewComments', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => BOOLEAN_REGEX]]);
$hidden = filter_input(INPUT_POST, 'hidden', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => BOOLEAN_REGEX]]);
// On initialise <20>galement les autres variables // On initialise <20>galement les autres variables
@ -57,7 +58,7 @@ $error_on_title = false;
$error_on_name = false; $error_on_name = false;
$error_on_description = false; $error_on_description = false;
//
if (!empty($_POST[GO_TO_STEP_2])) { if (!empty($_POST[GO_TO_STEP_2])) {
$_SESSION['form']->title = $title; $_SESSION['form']->title = $title;
$_SESSION['form']->admin_name = $name; $_SESSION['form']->admin_name = $name;
@ -66,6 +67,7 @@ if (!empty($_POST[GO_TO_STEP_2])) {
$_SESSION['form']->editable = $editable; $_SESSION['form']->editable = $editable;
$_SESSION['form']->receiveNewVotes = ($receiveNewVotes !== null); $_SESSION['form']->receiveNewVotes = ($receiveNewVotes !== null);
$_SESSION['form']->receiveNewComments = ($receiveNewComments !== null); $_SESSION['form']->receiveNewComments = ($receiveNewComments !== null);
$_SESSION['form']->hidden = ($hidden !== null);
if ($config['use_smtp'] == true) { if ($config['use_smtp'] == true) {
if (empty($mail)) { if (empty($mail)) {
@ -175,15 +177,6 @@ if (!empty($_POST[GO_TO_STEP_2])) {
} }
} }
// Checkbox checked ?
if ($_SESSION['form']->receiveNewVotes) {
$receiveNewVotes = 'checked';
}
if ($_SESSION['form']->receiveNewComments) {
$receiveNewComments = 'checked';
}
$useRemoteUser = USE_REMOTE_USER && isset($_SERVER['REMOTE_USER']); $useRemoteUser = USE_REMOTE_USER && isset($_SERVER['REMOTE_USER']);
$smarty->assign('title', $title); $smarty->assign('title', $title);
@ -200,6 +193,7 @@ $smarty->assign('poll_mail', Utils::fromPostOrDefault('mail', $_SESSION['form']-
$smarty->assign('poll_editable', Utils::fromPostOrDefault('editable', $_SESSION['form']->editable)); $smarty->assign('poll_editable', Utils::fromPostOrDefault('editable', $_SESSION['form']->editable));
$smarty->assign('poll_receiveNewVotes', Utils::fromPostOrDefault('receiveNewVotes', $_SESSION['form']->receiveNewVotes)); $smarty->assign('poll_receiveNewVotes', Utils::fromPostOrDefault('receiveNewVotes', $_SESSION['form']->receiveNewVotes));
$smarty->assign('poll_receiveNewComments', Utils::fromPostOrDefault('receiveNewComments', $_SESSION['form']->receiveNewComments)); $smarty->assign('poll_receiveNewComments', Utils::fromPostOrDefault('receiveNewComments', $_SESSION['form']->receiveNewComments));
$smarty->assign('poll_hidden', Utils::fromPostOrDefault('hidden', $_SESSION['form']->hidden));
$smarty->assign('form', $_SESSION['form']); $smarty->assign('form', $_SESSION['form']);
$smarty->display('create_poll.tpl'); $smarty->display('create_poll.tpl');

54
js/app/create_poll.js Normal file
View File

@ -0,0 +1,54 @@
/**
* 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/OpenSondate: 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)
*/
$(document).ready(function () {
$("#formulaire").submit(function (event) {
var isHidden = $("#hidden").prop('checked');
var isOptionAllUserCanModifyEverything = $("#editableByAll").is(":checked");
if (isHidden && isOptionAllUserCanModifyEverything) {
event.preventDefault();
$("#hiddenWithBadEditionModeError").removeClass("hidden");
} else {
$("#hiddenWithBadEditionModeError").addClass("hidden");
}
});
// Check cookies are enabled too
var cookieEnabled = function () {
var cookieEnabled = navigator.cookieEnabled;
// if not IE4+ nor NS6+
if (!cookieEnabled && typeof navigator.cookieEnabled === "undefined") {
document.cookie = "testcookie";
cookieEnabled = document.cookie.indexOf("testcookie") != -1;
}
return cookieEnabled;
};
if (cookieEnabled()) {
// Show the form block
document.getElementById("form-block").setAttribute("style", "");
} else {
// Show the warning about cookies
document.getElementById("cookie-warning").setAttribute("style", "");
}
});

View File

@ -193,6 +193,7 @@
"Voters can modify their vote themselves.": "Teilnehmer können ihre Antworten verändern", "Voters can modify their vote themselves.": "Teilnehmer können ihre Antworten verändern",
"To receive an email for each new vote.": "Bei jeder neuen Abstimmung eine E-Mail erhalten.", "To receive an email for each new vote.": "Bei jeder neuen Abstimmung eine E-Mail erhalten.",
"To receive an email for each new comment.": "Um eine E-Mail für jede neue Kommentar zu empfangen.", "To receive an email for each new comment.": "Um eine E-Mail für jede neue Kommentar zu empfangen.",
"Only the poll maker can see the poll's results.": "DE_Seul le créateur du sondage peut voir les résultats.",
"Go to step 2": "Weiter zum 2. Schritt" "Go to step 2": "Weiter zum 2. Schritt"
}, },
"Step 2": { "Step 2": {
@ -302,5 +303,6 @@
"Failed to save poll": "Fehlgeschlagen Umfrage sparen", "Failed to save poll": "Fehlgeschlagen Umfrage sparen",
"Update vote failed": "Update vote failed", "Update vote failed": "Update vote failed",
"Adding vote failed": "Adding vote failed" "Adding vote failed": "Adding vote failed"
"You can't create a poll with hidden results with the following edition option : ": "DE_Vous ne pouvez pas créer de sondage avec résulats cachés avec les options d'éditions suivantes : "
} }
} }

View File

@ -194,6 +194,7 @@
"Voters can modify their vote themselves.": "Voters can modify their vote themselves.", "Voters can modify their vote themselves.": "Voters can modify their vote themselves.",
"To receive an email for each new vote.": "To receive an email for each new vote.", "To receive an email for each new vote.": "To receive an email for each new vote.",
"To receive an email for each new comment.": "To receive an email for each new comment.", "To receive an email for each new comment.": "To receive an email for each new comment.",
"Only the poll maker can see the poll's results.": "Only the poll maker can see the poll's results.",
"Go to step 2": "Go to step 2" "Go to step 2": "Go to step 2"
}, },
"Step 2": { "Step 2": {
@ -302,6 +303,7 @@
"Framadate is not properly installed, please check the \"INSTALL\" to setup the database before continuing.": "Framadate is not properly installed, please check the 'INSTALL' to setup the database before continuing.", "Framadate is not properly installed, please check the \"INSTALL\" to setup the database before continuing.": "Framadate is not properly installed, please check the 'INSTALL' to setup the database before continuing.",
"Failed to save poll": "Failed to save poll", "Failed to save poll": "Failed to save poll",
"Update vote failed": "Update vote failed", "Update vote failed": "Update vote failed",
"Adding vote failed": "Adding vote failed" "Adding vote failed": "Adding vote failed",
"You can't create a poll with hidden results with the following edition option : ": "You can't create a poll with hidden results with the following edition option : "
} }
} }

View File

@ -193,6 +193,7 @@
"Voters can modify their vote themselves.": "Los encuentados pueden cambiar su línea ellos mismos.", "Voters can modify their vote themselves.": "Los encuentados pueden cambiar su línea ellos mismos.",
"To receive an email for each new vote.": "Usted quiere recibir un correo electónico cada vez que alguien participe a la encuesta.", "To receive an email for each new vote.": "Usted quiere recibir un correo electónico cada vez que alguien participe a la encuesta.",
"To receive an email for each new comment.": "ES_Recevoir un courriel à chaque commentaire.", "To receive an email for each new comment.": "ES_Recevoir un courriel à chaque commentaire.",
"Only the poll maker can see the poll's results.": "ES_Seul le créateur du sondage peut voir les résultats.",
"Go to step 2": "ES_Aller à l'étape 2" "Go to step 2": "ES_Aller à l'étape 2"
}, },
"Step 2": { "Step 2": {
@ -301,6 +302,7 @@
"Framadate is not properly installed, please check the \"INSTALL\" to setup the database before continuing.": "ES_Framadate n'est pas installé correctement, lisez le fichier INSTALL pour configurer la base de données avant de continuer.", "Framadate is not properly installed, please check the \"INSTALL\" to setup the database before continuing.": "ES_Framadate n'est pas installé correctement, lisez le fichier INSTALL pour configurer la base de données avant de continuer.",
"Failed to save poll": "ES_Echèc de la sauvegarde du sondage", "Failed to save poll": "ES_Echèc de la sauvegarde du sondage",
"Update vote failed": "ES_Mise à jour du vote échoué", "Update vote failed": "ES_Mise à jour du vote échoué",
"Adding vote failed": "ES_Ajout d'un vote échoué" "Adding vote failed": "ES_Ajout d'un vote échoué",
"You can't create a poll with hidden results with the following edition option : ": "ES_Vous ne pouvez pas créer de sondage avec résulats cachés avec les options d'éditions suivantes : "
} }
} }

View File

@ -193,6 +193,7 @@
"Voters can modify their vote themselves.": "Chaque sondé peut modifier son propre vote.", "Voters can modify their vote themselves.": "Chaque sondé peut modifier son propre vote.",
"To receive an email for each new vote.": "Recevoir un courriel à chaque participation d'un sondé.", "To receive an email for each new vote.": "Recevoir un courriel à chaque participation d'un sondé.",
"To receive an email for each new comment.": "Recevoir un courriel à chaque commentaire.", "To receive an email for each new comment.": "Recevoir un courriel à chaque commentaire.",
"Only the poll maker can see the poll's results.": "Seul le créateur du sondage peut voir les résultats.",
"Go to step 2": "Aller à l'étape 2" "Go to step 2": "Aller à l'étape 2"
}, },
"Step 2": { "Step 2": {
@ -301,6 +302,7 @@
"Framadate is not properly installed, please check the \"INSTALL\" to setup the database before continuing.": "Framadate n'est pas installé correctement, lisez le fichier INSTALL pour configurer la base de données avant de continuer.", "Framadate is not properly installed, please check the \"INSTALL\" to setup the database before continuing.": "Framadate n'est pas installé correctement, lisez le fichier INSTALL pour configurer la base de données avant de continuer.",
"Failed to save poll": "Echèc de la sauvegarde du sondage", "Failed to save poll": "Echèc de la sauvegarde du sondage",
"Update vote failed": "Mise à jour du vote échoué", "Update vote failed": "Mise à jour du vote échoué",
"Adding vote failed": "Ajout d'un vote échoué" "Adding vote failed": "Ajout d'un vote échoué",
"You can't create a poll with hidden results with the following edition option : ": "Vous ne pouvez pas créer de sondage avec résulats cachés avec les options d'éditions suivantes : "
} }
} }

View File

@ -1,5 +1,9 @@
{extends file='page.tpl'} {extends file='page.tpl'}
{block name="header"}
<script src="{"js/app/create_poll.js"|resource}" type="text/javascript"></script>
{/block}
{block name=main} {block name=main}
<div class="row" style="display:none" id="form-block"> <div class="row" style="display:none" id="form-block">
<div class="col-md-8 col-md-offset-2"> <div class="col-md-8 col-md-offset-2">
@ -96,7 +100,7 @@
{__('Step 1', 'Votes cannot be modified.')} {__('Step 1', 'Votes cannot be modified.')}
</label> </label>
<label> <label>
<input type="radio" name="editable" {if $poll_editable==constant("Framadate\Editable::EDITABLE_BY_ALL")}checked{/if} value="{constant("Framadate\Editable::EDITABLE_BY_ALL")}"> <input type="radio" name="editable" id="editableByAll" {if $poll_editable==constant("Framadate\Editable::EDITABLE_BY_ALL")}checked{/if} value="{constant("Framadate\Editable::EDITABLE_BY_ALL")}">
{__('Step 1', 'All voters can modify any vote.')} {__('Step 1', 'All voters can modify any vote.')}
</label> </label>
<label> <label>
@ -113,7 +117,7 @@
<div class="col-sm-offset-4 col-sm-8"> <div class="col-sm-offset-4 col-sm-8">
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type=checkbox name="receiveNewVotes" {if $poll_receiveNewVotes}checked{/if} <input type="checkbox" name="receiveNewVotes" {if $poll_receiveNewVotes}checked{/if}
id="receiveNewVotes"> id="receiveNewVotes">
{__('Step 1', 'To receive an email for each new vote.')} {__('Step 1', 'To receive an email for each new vote.')}
</label> </label>
@ -124,13 +128,29 @@
<div class="col-sm-offset-4 col-sm-8"> <div class="col-sm-offset-4 col-sm-8">
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type=checkbox name="receiveNewComments" {if $poll_receiveNewComments}checked{/if} <input type="checkbox" name="receiveNewComments" {if $poll_receiveNewComments}checked{/if}
id="receiveNewComments"> id="receiveNewComments">
{__('Step 1', 'To receive an email for each new comment.')} {__('Step 1', 'To receive an email for each new comment.')}
</label> </label>
</div> </div>
</div> </div>
</div> </div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<div class="checkbox">
<label>
<input type="checkbox" name="hidden" {if $poll_hidden}checked{/if}
id="hidden">
{__('Step 1', "Only the poll maker can see the poll's results.")}
</label>
</div>
<div id="hiddenWithBadEditionModeError" class="alert alert-danger hidden">
<p>
{__('Error', "You can't create a poll with hidden results with the following edition option : ")}"{__('Step 1', 'All voters can modify any vote.')}"
</p>
</div>
</div>
</div>
{/if} {/if}
@ -158,30 +178,4 @@
<div id="cookie-warning" class="alert alert-danger" style="display:none"> <div id="cookie-warning" class="alert alert-danger" style="display:none">
{__('Step 1', 'Cookies are disabled on your browser. Theirs activation is required to create a poll.')} {__('Step 1', 'Cookies are disabled on your browser. Theirs activation is required to create a poll.')}
</div> </div>
<script>
{* TODO Put this in a JS file *}
// Check Javascript is enabled, if it is it will execute this script
(function () {
// Check cookies are enabled too
var cookieEnabled = function () {
var cookieEnabled = navigator.cookieEnabled;
// if not IE4+ nor NS6+
if (!cookieEnabled && typeof navigator.cookieEnabled === "undefined") {
document.cookie = "testcookie";
cookieEnabled = document.cookie.indexOf("testcookie") != -1;
}
return cookieEnabled;
};
if (cookieEnabled()) {
// Show the form block
document.getElementById("form-block").setAttribute("style", "");
} else {
// Show the warning about cookies
document.getElementById("cookie-warning").setAttribute("style", "");
}
})();
</script>
{/block} {/block}