diff --git a/app/classes/Framadate/Utils.php b/app/classes/Framadate/Utils.php index 7fc9d72..9eb11ef 100644 --- a/app/classes/Framadate/Utils.php +++ b/app/classes/Framadate/Utils.php @@ -182,4 +182,8 @@ class Utils { return $cleaned; } + + public static function fromPostOrEmpty($postKey) { + return !empty($_POST[$postKey]) ? Utils::htmlEscape($_POST[$postKey]) : ''; + } } diff --git a/app/inc/config.template.php b/app/inc/config.template.php index 585b1da..d1208eb 100644 --- a/app/inc/config.template.php +++ b/app/inc/config.template.php @@ -81,9 +81,9 @@ $config = [ 'show_what_is_that' => true, // display "how to use" section 'show_the_software' => true, // display technical information about the software 'show_cultivate_your_garden' => true, // display "developpement and administration" information - /* choix_autre.php / choix_date.php */ + /* create_classic_poll.php / create_date_poll.php */ 'default_poll_duration' => 180, // default values for the new poll duration (number of days). - /* choix_autre.php */ + /* create_classic_poll.php */ 'user_can_add_img_or_link' => true, // user can add link or URL when creating his poll. ]; diff --git a/app/inc/i18n.php b/app/inc/i18n.php index dde6247..0ba5ad5 100644 --- a/app/inc/i18n.php +++ b/app/inc/i18n.php @@ -39,7 +39,7 @@ if (isset($_POST['lang']) && is_string($_POST['lang']) && in_array($_POST['lang' $html_lang = substr($locale, 0, 2); /* Date Format */ -$date_format['txt_full'] = __('Date\\FULL'); //summary in choix_date.php and removal date in choix_(date|autre).php +$date_format['txt_full'] = __('Date\\FULL'); //summary in create_date_poll.php and removal date in choix_(date|autre).php $date_format['txt_short'] = __('Date\\SHORT'); // radio title $date_format['txt_day'] = __('Date\\DAY'); $date_format['txt_date'] = __('Date\\DATE'); diff --git a/choix_autre.php b/create_classic_poll.php similarity index 99% rename from choix_autre.php rename to create_classic_poll.php index 38beabb..0089adb 100644 --- a/choix_autre.php +++ b/create_classic_poll.php @@ -180,7 +180,7 @@ if (empty($_SESSION['form']->title) || empty($_SESSION['form']->admin_name) || ( $end_date_str = utf8_encode(strftime('%d/%m/%Y', $max_time)); //textual date echo ' -
+
@@ -224,7 +224,7 @@ if (empty($_SESSION['form']->title) || empty($_SESSION['form']->admin_name) || ( bandeau_titre(__('Step 2 classic\\Poll subjects (2 on 3)')); echo ' - +
'; echo ' diff --git a/choix_date.php b/create_date_poll.php similarity index 99% rename from choix_date.php rename to create_date_poll.php index 66cdd31..e39dbf7 100644 --- a/choix_date.php +++ b/create_date_poll.php @@ -178,7 +178,7 @@ if (!isset($_SESSION['form']->title) || !isset($_SESSION['form']->admin_name) || $end_date_str = utf8_encode(strftime('%d/%m/%Y', $max_time)); //textual date echo ' - +

'. __('Step 3\\Confirm the creation of your poll') .'

@@ -222,7 +222,7 @@ if (!isset($_SESSION['form']->title) || !isset($_SESSION['form']->admin_name) || bandeau_titre(__('Step 2 date\\Poll dates (2 on 3)')); echo ' - +

'. __('Step 2 date\\Choose the dates of your poll') .'

diff --git a/create_poll.php b/create_poll.php new file mode 100644 index 0000000..5ae484e --- /dev/null +++ b/create_poll.php @@ -0,0 +1,210 @@ +choix_sondage = $poll_type; +} else { + $poll_type = 'classic'; + $_SESSION['form']->choix_sondage = $poll_type; +} + +// We clean the data +$goToStep2 = filter_input(INPUT_POST, GO_TO_STEP_2, FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '/^(date|classic)$/']]); +$title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING); +$name = filter_input(INPUT_POST, 'name', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => NAME_REGEX]]); +$mail = filter_input(INPUT_POST, 'mail', FILTER_VALIDATE_EMAIL); +$description = filter_input(INPUT_POST, 'description', FILTER_SANITIZE_STRING); +$editable = filter_input(INPUT_POST, 'editable', 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]]); + + +// On initialise également les autres variables +$error_on_mail = false; +$error_on_title = false; +$error_on_name = false; +$error_on_description = false; + +// +if (!empty($_POST[GO_TO_STEP_2])) { + $_SESSION['form']->title = $title; + $_SESSION['form']->admin_name = $name; + $_SESSION['form']->admin_mail = $mail; + $_SESSION['form']->description = $description; + $_SESSION['form']->editable = ($editable !== null); + $_SESSION['form']->receiveNewVotes = ($receiveNewVotes !== null); + $_SESSION['form']->receiveNewComments = ($receiveNewComments !== null); + + if ($config['use_smtp'] == true) { + if (empty($mail)) { + $error_on_mail = true; + } + } + + if ($title !== $_POST['title']) { + $error_on_title = true; + } + + if ($name !== $_POST['name']) { + $error_on_name = true; + } + + if ($description !== $_POST['description']) { + $error_on_description = true; + } + + // Si pas d'erreur dans l'adresse alors on change de page vers date ou autre + if ($config['use_smtp'] == true) { + $email_OK = $mail && !$error_on_mail; + } else { + $email_OK = true; + } + + if ($title && $name && $email_OK && !$error_on_title && !$error_on_description && !$error_on_name) { + + if ($goToStep2 == 'date') { + header('Location:create_date_poll.php'); + exit(); + } + + if ($goToStep2 == 'classic') { + header('Location:create_classic_poll.php'); + exit(); + } + + } else { + // Title Erreur ! + $title = __('Generic', 'Error!') . ' - ' . __('Step 1', 'Poll creation (1 on 3)'); + } +} else { + // Title OK (formulaire pas encore rempli) + $title = __('Step 1', 'Poll creation (1 on 3)'); +} + +// Prepare error messages +$errors = array( + 'title' => array( + 'msg' => '', + 'aria' => '', + 'class' => '' + ), + 'description' => array( + 'msg' => '', + 'aria' => '', + 'class' => '' + ), + 'name' => array( + 'msg' => '', + 'aria' => '', + 'class' => '' + ), + 'email' => array( + 'msg' => '', + 'aria' => '', + 'class' => '' + ) +); + +// TODO Move it to TPL +if (!empty($_POST[GO_TO_STEP_2])) { + if (empty($_POST['title'])) { + $errors['title']['aria'] = 'aria-describeby="poll_title_error" '; + $errors['title']['class'] = ' has-error'; + $errors['title']['msg'] = __('Error', 'Enter a title'); + } elseif ($error_on_title) { + $errors['title']['aria'] = 'aria-describeby="poll_title_error" '; + $errors['title']['class'] = ' has-error'; + $errors['title']['msg'] = __('Error', 'Something is wrong with the format'); + } + + if ($error_on_description) { + $errors['description']['aria'] = 'aria-describeby="poll_comment_error" '; + $errors['description']['class'] = ' has-error'; + $errors['description']['msg'] = __('Error', 'Something is wrong with the format'); + } + + if (empty($_POST['name'])) { + $errors['name']['aria'] = 'aria-describeby="poll_name_error" '; + $errors['name']['class'] = ' has-error'; + $errors['name']['msg'] = __('Error', 'Enter a name'); + } elseif ($error_on_name) { + $errors['name']['aria'] = 'aria-describeby="poll_name_error" '; + $errors['name']['class'] = ' has-error'; + $errors['name']['msg'] = __('Error', 'Something is wrong with the format'); + } + + if (empty($_POST['mail'])) { + $errors['email']['aria'] = 'aria-describeby="poll_name_error" '; + $errors['email']['class'] = ' has-error'; + $errors['email']['msg'] = __('Error', 'Enter an email address'); + } elseif ($error_on_mail) { + $errors['email']['aria'] = 'aria-describeby="poll_email_error" '; + $errors['email']['class'] = ' has-error'; + $errors['email']['msg'] = __('Error', 'The address is not correct! You should enter a valid email address (like r.stallman@outlock.com) in order to receive the link to your poll.'); + } +} + +// Checkbox checked ? +if ($_SESSION['form']->editable) { + $editable = 'checked'; +} + +if ($_SESSION['form']->receiveNewVotes) { + $receiveNewVotes = 'checked'; +} + +if ($_SESSION['form']->receiveNewComments) { + $receiveNewComments = 'checked'; +} + + +$useRemoteUser = USE_REMOTE_USER && isset($_SERVER['REMOTE_USER']); + +$smarty->assign('title', $title); +$smarty->assign('useRemoteUser', $useRemoteUser); +$smarty->assign('errors', $errors); +$smarty->assign('use_smtp', $config['use_smtp']); +$smarty->assign('goToStep2', GO_TO_STEP_2); + +$smarty->assign('poll_type', $poll_type); +$smarty->assign('poll_title', Utils::fromPostOrEmpty('title')); +$smarty->assign('poll_description', Utils::fromPostOrEmpty('description')); +$smarty->assign('poll_name', Utils::fromPostOrEmpty('name')); +$smarty->assign('poll_mail', Utils::fromPostOrEmpty('mail')); +$smarty->assign('poll_editable', Utils::fromPostOrEmpty('editable')); +$smarty->assign('poll_receiveNewVotes', Utils::fromPostOrEmpty('receiveNewVotes')); +$smarty->assign('poll_receiveNewComments', Utils::fromPostOrEmpty('receiveNewComments')); +$smarty->assign('form', $_SESSION['form']); + +$smarty->display('create_poll.tpl'); diff --git a/creation_sondage.php b/creation_sondage.php index 948d43b..469ed75 100644 --- a/creation_sondage.php +++ b/creation_sondage.php @@ -67,7 +67,7 @@ function ajouter_sondage() } $sondage_admin = $sondage.random(8); - $date_fin = $_SESSION["champdatefin"]; // provided by choix_autre.php or choix_date.php + $date_fin = $_SESSION["champdatefin"]; // provided by create_classic_poll.php or create_date_poll.php $_SESSION["champdatefin"]=""; //clean param cause 2 polls created by the same user in the same session can be affected by this param during the 2nd creation. $sql = 'INSERT INTO sondage (id_sondage, commentaires, mail_admin, nom_admin, titre, id_sondage_admin, date_fin, format, mailsonde) diff --git a/css/style.css b/css/style.css index 02b5fa7..469f019 100644 --- a/css/style.css +++ b/css/style.css @@ -320,7 +320,7 @@ table.results .btn-link.btn-sm { box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.125) inset; } -/* choix_date.php */ +/* create_date_poll.php */ #selected-days .form-group { margin-left:0; margin-right:0; @@ -346,7 +346,7 @@ table.results .btn-link.btn-sm { border:none; background:transparent; } -/* choix_autre.php */ +/* create_classic_poll.php */ .md-a-img { text-decoration:none !important; } diff --git a/infos_sondage.php b/infos_sondage.php index 0a0058c..d3fbc87 100644 --- a/infos_sondage.php +++ b/infos_sondage.php @@ -99,12 +99,12 @@ if (!empty($_POST['poursuivre'])) { if ($title && $name && $email_OK && ! $error_on_title && ! $error_on_description && ! $error_on_name) { if ( $poursuivre == 'creation_sondage_date' ) { - header('Location:choix_date.php'); + header('Location:create_date_poll.php'); exit(); } if ( $poursuivre == 'creation_sondage_autre' ) { - header('Location:choix_autre.php'); + header('Location:create_classic_poll.php'); exit(); } diff --git a/tpl/create_poll.tpl b/tpl/create_poll.tpl new file mode 100644 index 0000000..ec0e665 --- /dev/null +++ b/tpl/create_poll.tpl @@ -0,0 +1,179 @@ +{extends file='page.tpl'} + +{block name=main} + + + + +{/block} \ No newline at end of file diff --git a/tpl/index.tpl b/tpl/index.tpl index ddd8cd7..d3af42b 100644 --- a/tpl/index.tpl +++ b/tpl/index.tpl @@ -4,7 +4,7 @@