From cb63031f15164fd08706083d6cc0618871b0beee Mon Sep 17 00:00:00 2001 From: Olivier Perez <olivier@olivierperez.fr> Date: Wed, 4 May 2016 00:56:53 +0200 Subject: [PATCH] Refactor create_date_poll.php --- create_date_poll.php | 212 ++++++++++++++++++++++--------------------- 1 file changed, 111 insertions(+), 101 deletions(-) diff --git a/create_date_poll.php b/create_date_poll.php index 6f8be7c2..f31a3976 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,96 +36,75 @@ $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 -if (!isset($_SESSION['form']->title) || !isset($_SESSION['form']->admin_name) || ($config['use_smtp'] && !isset($_SESSION['form']->admin_mail))) { +// Min/Max archive date +$min_expiry_time = $pollService->minExpiryDate(); +$max_expiry_time = $pollService->maxExpiryDate(); - $smarty->assign('title', __('Error', 'Error!')); - $smarty->assign('error', __('Error', 'You haven\'t filled the first section of the poll creation.')); - $smarty->display('error.tpl'); +// 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))) { + $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(); - - // The poll format is DATE - if ($_SESSION['form']->format !== 'D') { - $_SESSION['form']->format = 'D'; - $_SESSION['form']->clearChoices(); - } - - // Step 4 : Data prepare before insert in DB - if (!empty($_POST['confirmation'])) { + $step = 3; +} - // Define expiration date - $enddate = filter_input(INPUT_POST, 'enddate', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '#^[0-9]{2}/[0-9]{2}/[0-9]{4}$#']]); +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; - if (!empty($enddate)) { - $registredate = explode('/', $enddate); - - if (is_array($registredate) && count($registredate) == 3) { - $time = mktime(0, 0, 0, $registredate[1], $registredate[0], $registredate[2]); + case 2: + // Step 2/4 : Select dates of the poll - if ($time < $min_expiry_time) { - $_SESSION['form']->end_date = $min_expiry_time; - } elseif ($max_expiry_time < $time) { - $_SESSION['form']->end_date = $max_expiry_time; - } else { - $_SESSION['form']->end_date = $time; - } + // Prefill form->choices + foreach ($_SESSION['form']->getChoices() as $c) { + $count = 3 - count($c->getSlots()); + for ($i = 0; $i < $count; $i++) { + $c->addSlot(''); } } - if (empty($_SESSION['form']->end_date)) { - // By default, expiration date is 6 months after last day - $_SESSION['form']->end_date = $max_expiry_time; - } - - // Insert poll in database - $ids = $pollService->createPoll($_SESSION['form']); - $poll_id = $ids[0]; - $admin_poll_id = $ids[1]; - - - // Send confirmation by mail if enabled - if ($config['use_smtp'] === true) { - $message = __('Mail', "This is the message you have to send to the people you want to poll. \nNow, you have to send this message to everyone you want to poll."); - $message .= '<br/><br/>'; - $message .= Utils::htmlEscape($_SESSION['form']->admin_name) . ' ' . __('Mail', 'hast just created a poll called') . ' : "' . Utils::htmlEscape($_SESSION['form']->title) . '".<br/>'; - $message .= __('Mail', 'Thanks for filling the poll at the link above') . ' :<br/><br/><a href="%1$s">%1$s</a>'; - - $message_admin = __('Mail', "This message should NOT be sent to the polled people. It is private for the poll's creator.\n\nYou can now modify it at the link above"); - $message_admin .= ' :<br/><br/><a href="%1$s">%1$s</a>'; - - $message = sprintf($message, Utils::getUrlSondage($poll_id)); - $message_admin = sprintf($message_admin, Utils::getUrlSondage($admin_poll_id, true)); - - if ($mailService->isValidEmail($_SESSION['form']->admin_mail)) { - $mailService->send($_SESSION['form']->admin_mail, '[' . NOMAPPLICATION . '][' . __('Mail', 'Author\'s message') . '] ' . __('Generic', 'Poll') . ': ' . Utils::htmlEscape($_SESSION['form']->title), $message_admin); - $mailService->send($_SESSION['form']->admin_mail, '[' . NOMAPPLICATION . '][' . __('Mail', 'For sending to the polled users') . '] ' . __('Generic', 'Poll') . ': ' . Utils::htmlEscape($_SESSION['form']->title), $message); - } + $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); } - // Clean Form data in $_SESSION - unset($_SESSION['form']); - - // Delete old polls - $purgeService->purgeOldPolls(); + // Display step 2 + $smarty->assign('title', __('Step 2 date', 'Poll dates (2 on 3)')); + $smarty->assign('choices', $_SESSION['form']->getChoices()); + $smarty->assign('error', null); - // Redirect to poll administration - header('Location:' . Utils::getUrlSondage($admin_poll_id, true)); + $smarty->display('create_date_poll_step_2.tpl'); exit; - } else { + 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);}); + $_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) { @@ -151,8 +130,8 @@ if (!isset($_SESSION['form']->title) || !isset($_SESSION['form']->admin_name) || $choice = new Choice($time); $_SESSION['form']->addChoice($choice); - $schedules = $inputService->filterArray($_POST['horaires'.$i], FILTER_DEFAULT); - for($j = 0; $j < count($schedules); $j++) { + $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])); } @@ -160,21 +139,17 @@ if (!isset($_SESSION['form']->title) || !isset($_SESSION['form']->admin_name) || } } } - } - - // Step 3/4 : Confirm poll creation - if (!empty($_POST['choixheures']) && !isset($_SESSION['form']->totalchoixjour)) { - // Summary + // Display step 3 $summary = '<ul>'; $choices = $_SESSION['form']->getChoices(); foreach ($choices as $choice) { - $summary .= '<li>'.strftime($date_format['txt_full'], $choice->getName()); + $summary .= '<li>' . strftime($date_format['txt_full'], $choice->getName()); $first = true; foreach ($choice->getSlots() as $slots) { $summary .= $first ? ': ' : ', '; $summary .= $slots; - $first = false; + $first = false; } $summary .= '</li>'; } @@ -189,34 +164,69 @@ if (!isset($_SESSION['form']->title) || !isset($_SESSION['form']->admin_name) || $smarty->assign('use_smtp', $config['use_smtp']); $smarty->display('create_classic_poll_step3.tpl'); + exit; - // Step 2/4 : Select dates of the poll - } else { + case 4: + // Step 4 : Data prepare before insert in DB - // Prefill form->choices - foreach ($_SESSION['form']->getChoices() as $c) { - $count = 3 - count($c->getSlots()); - for($i=0; $i< $count; $i++) { - $c->addSlot(''); + // Define expiration date + $enddate = filter_input(INPUT_POST, 'enddate', FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '#^[0-9]{2}/[0-9]{2}/[0-9]{4}$#']]); + + + if (!empty($enddate)) { + $registredate = explode('/', $enddate); + + if (is_array($registredate) && count($registredate) == 3) { + $time = mktime(0, 0, 0, $registredate[1], $registredate[0], $registredate[2]); + + if ($time < $min_expiry_time) { + $_SESSION['form']->end_date = $min_expiry_time; + } elseif ($max_expiry_time < $time) { + $_SESSION['form']->end_date = $max_expiry_time; + } else { + $_SESSION['form']->end_date = $time; + } } } - $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); + if (empty($_SESSION['form']->end_date)) { + // By default, expiration date is 6 months after last day + $_SESSION['form']->end_date = $max_expiry_time; } - // Display step 2 - $smarty->assign('title', __('Step 2 date', 'Poll dates (2 on 3)')); - $smarty->assign('choices', $_SESSION['form']->getChoices()); - $smarty->assign('error', null); + // Insert poll in database + $ids = $pollService->createPoll($_SESSION['form']); + $poll_id = $ids[0]; + $admin_poll_id = $ids[1]; - $smarty->display('create_date_poll_step_2.tpl'); - } + // Send confirmation by mail if enabled + if ($config['use_smtp'] === true) { + $message = __('Mail', "This is the message you have to send to the people you want to poll. \nNow, you have to send this message to everyone you want to poll."); + $message .= '<br/><br/>'; + $message .= Utils::htmlEscape($_SESSION['form']->admin_name) . ' ' . __('Mail', 'hast just created a poll called') . ' : "' . Utils::htmlEscape($_SESSION['form']->title) . '".<br/>'; + $message .= __('Mail', 'Thanks for filling the poll at the link above') . ' :<br/><br/><a href="%1$s">%1$s</a>'; + + $message_admin = __('Mail', "This message should NOT be sent to the polled people. It is private for the poll's creator.\n\nYou can now modify it at the link above"); + $message_admin .= ' :<br/><br/><a href="%1$s">%1$s</a>'; + + $message = sprintf($message, Utils::getUrlSondage($poll_id)); + $message_admin = sprintf($message_admin, Utils::getUrlSondage($admin_poll_id, true)); + + if ($mailService->isValidEmail($_SESSION['form']->admin_mail)) { + $mailService->send($_SESSION['form']->admin_mail, '[' . NOMAPPLICATION . '][' . __('Mail', 'Author\'s message') . '] ' . __('Generic', 'Poll') . ': ' . Utils::htmlEscape($_SESSION['form']->title), $message_admin); + $mailService->send($_SESSION['form']->admin_mail, '[' . NOMAPPLICATION . '][' . __('Mail', 'For sending to the polled users') . '] ' . __('Generic', 'Poll') . ': ' . Utils::htmlEscape($_SESSION['form']->title), $message); + } + } + + // Clean Form data in $_SESSION + unset($_SESSION['form']); + + // Delete old polls + $purgeService->purgeOldPolls(); + + // Redirect to poll administration + header('Location:' . Utils::getUrlSondage($admin_poll_id, true)); + exit; } -- GitLab