diff --git a/create_date_poll.php b/create_date_poll.php index 6f8be7c..f31a397 100644 --- a/create_date_poll.php +++ b/create_date_poll.php @@ -16,13 +16,13 @@ * Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaƫl DROZ * Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft https://git.framasoft.org/framasoft/framadate/) */ +use Framadate\Choice; use Framadate\Services\InputService; use Framadate\Services\LogService; -use Framadate\Services\PollService; use Framadate\Services\MailService; +use Framadate\Services\PollService; use Framadate\Services\PurgeService; use Framadate\Utils; -use Framadate\Choice; include_once __DIR__ . '/app/inc/init.php'; @@ -36,30 +36,139 @@ $inputService = new InputService(); if (is_readable('bandeaux_local.php')) { include_once('bandeaux_local.php'); -} else { - include_once('bandeaux.php'); } -// Step 1/4 : error if $_SESSION from info_sondage are not valid +// Min/Max archive date +$min_expiry_time = $pollService->minExpiryDate(); +$max_expiry_time = $pollService->maxExpiryDate(); + +// The poll format is DATE +if ($_SESSION['form']->format !== 'D') { + $_SESSION['form']->format = 'D'; + $_SESSION['form']->clearChoices(); +} + if (!isset($_SESSION['form']->title) || !isset($_SESSION['form']->admin_name) || ($config['use_smtp'] && !isset($_SESSION['form']->admin_mail))) { - - $smarty->assign('title', __('Error', 'Error!')); - $smarty->assign('error', __('Error', 'You haven\'t filled the first section of the poll creation.')); - $smarty->display('error.tpl'); - + $step = 1; +} else if (!empty($_POST['confirmation'])) { + $step = 4; +} else if (empty($_POST['choixheures']) || isset($_SESSION['form']->totalchoixjour)) { + $step = 2; } else { - // Min/Max archive date - $min_expiry_time = $pollService->minExpiryDate(); - $max_expiry_time = $pollService->maxExpiryDate(); + $step = 3; +} - // The poll format is DATE - if ($_SESSION['form']->format !== 'D') { - $_SESSION['form']->format = 'D'; - $_SESSION['form']->clearChoices(); - } +switch ($step) { + case 1: + // Step 1/4 : error if $_SESSION from info_sondage are not valid + $smarty->assign('title', __('Error', 'Error!')); + $smarty->assign('error', __('Error', 'You haven\'t filled the first section of the poll creation.')); + $smarty->display('error.tpl'); + exit; - // Step 4 : Data prepare before insert in DB - if (!empty($_POST['confirmation'])) { + + case 2: + // Step 2/4 : Select dates of the poll + + // Prefill form->choices + foreach ($_SESSION['form']->getChoices() as $c) { + $count = 3 - count($c->getSlots()); + for ($i = 0; $i < $count; $i++) { + $c->addSlot(''); + } + } + + $count = 3 - count($_SESSION['form']->getChoices()); + for ($i = 0; $i < $count; $i++) { + $c = new Choice(''); + $c->addSlot(''); + $c->addSlot(''); + $c->addSlot(''); + $_SESSION['form']->addChoice($c); + } + + // Display step 2 + $smarty->assign('title', __('Step 2 date', 'Poll dates (2 on 3)')); + $smarty->assign('choices', $_SESSION['form']->getChoices()); + $smarty->assign('error', null); + + $smarty->display('create_date_poll_step_2.tpl'); + exit; + + + case 3: + // Step 3/4 : Confirm poll creation + + // Handle Step2 submission + if (!empty($_POST['days'])) { + // Remove empty dates + $_POST['days'] = array_filter($_POST['days'], function ($d) { + return !empty($d); + }); + + // Check if there are at most MAX_SLOTS_PER_POLL slots + if (count($_POST['days']) > MAX_SLOTS_PER_POLL) { + // Display step 2 + $smarty->assign('title', __('Step 2 date', 'Poll dates (2 on 3)')); + $smarty->assign('choices', $_SESSION['form']->getChoices()); + $smarty->assign('error', __f('Error', 'You can\'t select more than %d dates', MAX_SLOTS_PER_POLL)); + + $smarty->display('create_date_poll_step_2.tpl'); + exit; + } + + // Clear previous choices + $_SESSION['form']->clearChoices(); + + for ($i = 0; $i < count($_POST['days']); $i++) { + $day = $_POST['days'][$i]; + + if (!empty($day)) { + // Add choice to Form data + $date = DateTime::createFromFormat(__('Date', 'datetime_parseformat'), $_POST['days'][$i])->setTime(0, 0, 0); + $time = $date->getTimestamp(); + $choice = new Choice($time); + $_SESSION['form']->addChoice($choice); + + $schedules = $inputService->filterArray($_POST['horaires' . $i], FILTER_DEFAULT); + for ($j = 0; $j < count($schedules); $j++) { + if (!empty($schedules[$j])) { + $choice->addSlot(strip_tags($schedules[$j])); + } + } + } + } + } + + // Display step 3 + $summary = ''; + + $end_date_str = utf8_encode(strftime($date_format['txt_date'], $max_expiry_time)); // textual date + + $smarty->assign('title', __('Step 3', 'Removal date and confirmation (3 on 3)')); + $smarty->assign('summary', $summary); + $smarty->assign('end_date_str', $end_date_str); + $smarty->assign('default_poll_duration', $config['default_poll_duration']); + $smarty->assign('use_smtp', $config['use_smtp']); + + $smarty->display('create_classic_poll_step3.tpl'); + exit; + + + case 4: + // Step 4 : Data prepare before insert in DB // Define expiration date $enddate = filter_input(INPUT_POST, 'enddate', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '#^[0-9]{2}/[0-9]{2}/[0-9]{4}$#']]); @@ -120,103 +229,4 @@ if (!isset($_SESSION['form']->title) || !isset($_SESSION['form']->admin_name) || // Redirect to poll administration header('Location:' . Utils::getUrlSondage($admin_poll_id, true)); exit; - - } else { - - if (!empty($_POST['days'])) { - // Remove empty dates - $_POST['days'] = array_filter($_POST['days'], function($d) {return !empty($d);}); - - // Check if there are at most MAX_SLOTS_PER_POLL slots - if (count($_POST['days']) > MAX_SLOTS_PER_POLL) { - // Display step 2 - $smarty->assign('title', __('Step 2 date', 'Poll dates (2 on 3)')); - $smarty->assign('choices', $_SESSION['form']->getChoices()); - $smarty->assign('error', __f('Error', 'You can\'t select more than %d dates', MAX_SLOTS_PER_POLL)); - - $smarty->display('create_date_poll_step_2.tpl'); - exit; - } - - // Clear previous choices - $_SESSION['form']->clearChoices(); - - for ($i = 0; $i < count($_POST['days']); $i++) { - $day = $_POST['days'][$i]; - - if (!empty($day)) { - // Add choice to Form data - $date = DateTime::createFromFormat(__('Date', 'datetime_parseformat'), $_POST['days'][$i])->setTime(0, 0, 0); - $time = $date->getTimestamp(); - $choice = new Choice($time); - $_SESSION['form']->addChoice($choice); - - $schedules = $inputService->filterArray($_POST['horaires'.$i], FILTER_DEFAULT); - for($j = 0; $j < count($schedules); $j++) { - if (!empty($schedules[$j])) { - $choice->addSlot(strip_tags($schedules[$j])); - } - } - } - } - } - } - - // Step 3/4 : Confirm poll creation - if (!empty($_POST['choixheures']) && !isset($_SESSION['form']->totalchoixjour)) { - - // Summary - $summary = ''; - - $end_date_str = utf8_encode(strftime($date_format['txt_date'], $max_expiry_time)); // textual date - - $smarty->assign('title', __('Step 3', 'Removal date and confirmation (3 on 3)')); - $smarty->assign('summary', $summary); - $smarty->assign('end_date_str', $end_date_str); - $smarty->assign('default_poll_duration', $config['default_poll_duration']); - $smarty->assign('use_smtp', $config['use_smtp']); - - $smarty->display('create_classic_poll_step3.tpl'); - - - // Step 2/4 : Select dates of the poll - } else { - - // Prefill form->choices - foreach ($_SESSION['form']->getChoices() as $c) { - $count = 3 - count($c->getSlots()); - for($i=0; $i< $count; $i++) { - $c->addSlot(''); - } - } - - $count = 3 - count($_SESSION['form']->getChoices()); - for($i=0; $i< $count; $i++) { - $c = new Choice(''); - $c->addSlot(''); - $c->addSlot(''); - $c->addSlot(''); - $_SESSION['form']->addChoice($c); - } - - // Display step 2 - $smarty->assign('title', __('Step 2 date', 'Poll dates (2 on 3)')); - $smarty->assign('choices', $_SESSION['form']->getChoices()); - $smarty->assign('error', null); - - $smarty->display('create_date_poll_step_2.tpl'); - - } }