From 46ea697cb6bb0743965facebeebb0c8a2067663b Mon Sep 17 00:00:00 2001 From: Olivier PEREZ <olivier@olivierperez.fr> Date: Sat, 6 Dec 2014 19:42:01 +0100 Subject: [PATCH] Refactor on choix_autre.php * Utils::issetAndNoEmpty is now removed * Use Form object to store value from page to page --- app/classes/Framadate/Choice.php | 2 +- app/classes/Framadate/Utils.php | 12 ++- choix_autre.php | 138 +++++++++++++++++-------------- choix_date.php | 4 +- infos_sondage.php | 10 +-- 5 files changed, 94 insertions(+), 72 deletions(-) diff --git a/app/classes/Framadate/Choice.php b/app/classes/Framadate/Choice.php index d1eec519..6375945b 100644 --- a/app/classes/Framadate/Choice.php +++ b/app/classes/Framadate/Choice.php @@ -13,7 +13,7 @@ class Choice */ private $slots; - public function __construct($name) + public function __construct($name='') { $this->name = $name; $this->slots = array(); diff --git a/app/classes/Framadate/Utils.php b/app/classes/Framadate/Utils.php index ae431c01..78da6e36 100644 --- a/app/classes/Framadate/Utils.php +++ b/app/classes/Framadate/Utils.php @@ -185,18 +185,19 @@ class Utils /** * Fonction vérifiant l'existance et la valeur non vide d'une clé d'un tableau + * @deprecated * @param string $name La clé à tester * @param array $tableau Le tableau où rechercher la clé ($_POST par défaut) * @return bool Vrai si la clé existe et renvoie une valeur non vide */ - public static function issetAndNoEmpty($name, $tableau = null) + /*public static function issetAndNoEmpty($name, $tableau = null) { if (is_null($tableau)) { $tableau = $_POST; } return isset($tableau[$name]) && ! empty($tableau[$name]); - } + }*/ /** * Fonction permettant de générer les URL pour les sondage @@ -258,4 +259,11 @@ class Utils } $connect->commit(); } + + public static function debug($object) + { + echo '<pre>'; + print_r($object); + echo '</pre>'; + } } diff --git a/choix_autre.php b/choix_autre.php index fd69bd5b..7ebca4d9 100644 --- a/choix_autre.php +++ b/choix_autre.php @@ -18,7 +18,8 @@ */ namespace Framadate; -session_start(); +include_once __DIR__ . '/app/inc/init.php'; + include_once('creation_sondage.php'); if (file_exists('bandeaux_local.php')) { @@ -27,82 +28,90 @@ if (file_exists('bandeaux_local.php')) { include_once('bandeaux.php'); } -// Step 1/3 : error if $_SESSION from info_sondage are not valid -if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmpty('nom', $_SESSION) === false || (($config['use_smtp']) ? Utils::issetAndNoEmpty('adresse', $_SESSION) === false : false)) { +// Step 1/4 : error if $_SESSION from info_sondage are not valid +if (empty($_SESSION['form']->titre) || empty($_SESSION['form']->nom) || (($config['use_smtp']) ? empty($_SESSION['form']->adresse) : false)) { Utils::print_header ( _("Error!") ); bandeau_titre(_("Error!")); echo ' <div class="alert alert-danger"> - <h3>' . _("You haven't filled the first section of the poll creation.") . ' !</h3> - <p>' . _("Back to the homepage of ") . ' <a href="' . Utils::get_server_name() . '"> ' . NOMAPPLICATION . '</a></p> + <h3>' . _('You haven\'t filled the first section of the poll creation.') . ' !</h3> + <p>' . _('Back to the homepage of') . ' <a href="' . Utils::get_server_name() . '"> ' . NOMAPPLICATION . '</a></p> </div>'."\n"; bandeau_pied(); } else { + // Step 4 : Data prepare before insert in DB - if (isset($_POST["confirmecreation"])) { - //recuperation des données de champs textes - $temp_results = ''; - if (isset($_SESSION['choices'])) { - for ($i = 0; $i < count($_SESSION['choices']); $i++) { - if ($_SESSION['choices'][$i]!="") { - $temp_results.=','.str_replace(",", " ", htmlentities(html_entity_decode($_SESSION['choices'][$i], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8')); - } - } - } + if (isset($_POST['confirmecreation'])) { - $temp_results=substr($temp_results,1); - $_SESSION["toutchoix"]=$temp_results; - - - if (Utils::issetAndNoEmpty('champdatefin')) { - $registredate = explode("/",$_POST["champdatefin"]); - if (is_array($registredate) == true && count($registredate) == 3) { - $time = mktime(0,0,0,$registredate[1],$registredate[0],$registredate[2]); - if ($time > time() + (24*60*60)) { - $_SESSION["champdatefin"]=$time; - } + $registredate = explode('/', $_POST['champdatefin']); + if (is_array($registredate) == true && count($registredate) == 3) { + $time = mktime(0,0,0,$registredate[1],$registredate[0],$registredate[2]); + if ($time > time() + (24*60*60)) { + $_SESSION['form']->champdatefin = $time; } } - //format du sondage AUTRE - $_SESSION["formatsondage"]="A".$_SESSION["studsplus"]; - - ajouter_sondage(); + // format du sondage AUTRE + $_SESSION['form']->formatsondage = 'A'; + + // Insert poll in database + $admin_poll_id = ajouter_sondage( + $_SESSION['form']->titre, + $_SESSION['form']->commentaires, + $_SESSION['form']->nom, + $_SESSION['form']->adresse, + $_SESSION['form']->formatsondage, + $_SESSION['form']->editable, + $_SESSION['form']->champdatefin, + $_SESSION['form']->receiveNewVotes, + $_SESSION['form']->getChoices() + ); + + // Clean Form data in $_SESSION + unset($_SESSION['form']); + + // Delete old polls + Utils::cleaningOldPolls($connect, 'admin/logs_studs.txt'); + + // Redirect to poll administration + header('Location:' . Utils::getUrlSondage($admin_poll_id, true)); + exit; } - // recuperation des sujets pour sondage AUTRE - if (isset($_POST['choices'])) { - $k = 0; - for ($i = 0; $i < count($_POST['choices']); $i++) { - if (Utils::issetAndNoEmpty($i, $_POST['choices'])) { - $_SESSION['choices'][$k]=htmlentities(html_entity_decode($_POST['choices'][$i], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); - $k++; + // Step 3/4 : Confirm poll creation and choose a removal date + else if (isset($_POST['fin_sondage_autre'])) { + Utils::print_header ( _('Removal date and confirmation (3 on 3)') ); + bandeau_titre(_('Removal date and confirmation (3 on 3)')); + + + // Store choices in $_SESSION + if (isset($_POST['choices'])) { + $_SESSION['form']->clearChoices(); + foreach ($_POST['choices'] as $c) + { + if (!empty($c)) + { + $choice = new Choice(htmlentities(html_entity_decode($c, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8')); + $_SESSION['form']->addChoice($choice); + } } } - } - - // Step 3/3 : Confirm poll creation and choose a removal date - if (isset($_POST["fin_sondage_autre"])) { - Utils::print_header ( _("Removal date and confirmation (3 on 3)") ); - bandeau_titre(_("Removal date and confirmation (3 on 3)")); // Expiration date is initialised with config parameter. Value will be modified in step 4 if user has defined an other date - $_SESSION["champdatefin"]= time()+ (86400 * $config['default_poll_duration']); //60 sec * 60 min * 24 hours * config - - $removal_date= utf8_encode(strftime($date_format['txt_full'], ($_SESSION["champdatefin"])));//textual date + $_SESSION['form']->champdatefin = time() + (86400 * $config['default_poll_duration']); //60 sec * 60 min * 24 hours * config // Summary $summary = '<ol>'; - for ($i=0;$i<count($_SESSION['choices']);$i++) { + foreach ($_SESSION['form']->getChoices() as $choice) { - preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$_SESSION['choices'][$i],$md_a_img); // Markdown [](href) - preg_match_all('/!\[(.*?)\]\((.*?)\)/',$_SESSION['choices'][$i],$md_img); // Markdown  - preg_match_all('/\[(.*?)\]\((.*?)\)/',$_SESSION['choices'][$i],$md_a); // Markdown [text](href) + preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/', $choice->getName(), $md_a_img); // Markdown [](href) + preg_match_all('/!\[(.*?)\]\((.*?)\)/', $choice->getName(), $md_img); // Markdown  + preg_match_all('/\[(.*?)\]\((.*?)\)/', $choice->getName(), $md_a); // Markdown [text](href) if (isset($md_a_img[2][0]) && $md_a_img[2][0]!='' && isset($md_a_img[3][0]) && $md_a_img[3][0]!='') { // [](href) $li_subject_text = (isset($md_a_img[1][0]) && $md_a_img[1][0]!='') ? stripslashes($md_a_img[1][0]) : _("Choice") .' '.($i+1); @@ -120,7 +129,7 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp } else { // text only - $li_subject_text = stripslashes($_SESSION['choices'][$i]); + $li_subject_text = stripslashes($choice->getName()); $li_subject_html = $li_subject_text; } @@ -129,6 +138,8 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp } $summary .= '</ol>'; + $end_date_str = utf8_encode(strftime('%d/%M/%Y', $_SESSION['form']->champdatefin));//textual date + echo ' <form name="formulaire" action="' . Utils::get_server_name() . 'choix_autre.php" method="POST" class="form-horizontal" role="form"> <div class="row"> @@ -138,13 +149,13 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp '. $summary .' </div> <div class="alert alert-info"> - <p>' . _("Your poll will be automatically removed after"). " " . $config['default_poll_duration'] . " " . _("days") . ': <strong>'.$removal_date.'</strong>.<br />' . _("You can fix another removal date for it.") .'</p> + <p>' . _('Your poll will be automatically removed after'). ' ' . $config['default_poll_duration'] . ' ' . _('days') . '.<br />' . _("You can fix another removal date for it.") .'</p> <div class="form-group"> <label for="champdatefin" class="col-sm-5 control-label">'. _("Removal date (optional)") .'</label> <div class="col-sm-6"> <div class="input-group date"> <span class="input-group-addon"><i class="glyphicon glyphicon-calendar text-info"></i></span> - <input type="text" class="form-control" id="champdatefin" data-date-format="'. _("dd/mm/yyyy") .'" aria-describedby="dateformat" name="champdatefin" value="" size="10" maxlength="10" placeholder="'. _("dd/mm/yyyy") .'" /> + <input type="text" class="form-control" id="champdatefin" data-date-format="'. _("dd/mm/yyyy") .'" aria-describedby="dateformat" name="champdatefin" value="'. $end_date_str .'" size="10" maxlength="10" placeholder="'. _("dd/mm/yyyy") .'" /> </div> </div> <span id="dateformat" class="sr-only">'. _("(dd/mm/yyyy)") .'</span> @@ -168,10 +179,10 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp bandeau_pied(); - // Step 2/3 : Select choices of the poll + // Step 2/4 : Select choices of the poll } else { - Utils::print_header( _("Poll subjects (2 on 3)")); - bandeau_titre(_("Poll subjects (2 on 3)")); + Utils::print_header( _('Poll subjects (2 on 3)')); + bandeau_titre(_('Poll subjects (2 on 3)')); echo ' <form name="formulaire" action="' . Utils::get_server_name() . 'choix_autre.php" method="POST" class="form-horizontal" role="form"> @@ -187,16 +198,17 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp echo ' </div>'."\n"; // Fields choices : 5 by default - $nb_choices = (isset($_SESSION['choices'])) ? max(count($_SESSION['choices']), 5) : 5; + $choices = $_SESSION['form']->getChoices(); + $nb_choices = max(count($choices), 5); for ($i = 0; $i < $nb_choices; $i++) { - $choice_value = (isset($_SESSION['choices'][$i])) ? str_replace("\\","",$_SESSION['choices'][$i]) : ''; + $choice = isset($choices[$i]) ? $choices[$i] : new Choice(); echo ' <div class="form-group choice-field"> - <label for="choice'.$i.'" class="col-sm-2 control-label">'. _("Choice") .' '.($i+1).'</label> + <label for="choice'.$i.'" class="col-sm-2 control-label">'. _('Choice') .' '.($i+1).'</label> <div class="col-sm-10 input-group"> - <input type="text" class="form-control" name="choices[]" size="40" value="'.$choice_value.'" id="choice'.$i.'" />'; + <input type="text" class="form-control" name="choices[]" size="40" value="'.$choice->getName().'" id="choice'.$i.'" />'; if($config['user_can_add_img_or_link']){ - echo '<span class="input-group-addon btn-link md-a-img" title="'. _("Add a link or an image") .' - '. _("Choice") .' '.($i+1).'" ><span class="glyphicon glyphicon-picture"></span> <span class="glyphicon glyphicon-link"></span></span>'; + echo '<span class="input-group-addon btn-link md-a-img" title="'. _('Add a link or an image') .' - '. _('Choice') .' '.($i+1).'" ><span class="glyphicon glyphicon-picture"></span> <span class="glyphicon glyphicon-link"></span></span>'; } echo ' </div> @@ -206,8 +218,8 @@ if (Utils::issetAndNoEmpty('titre', $_SESSION) === false || Utils::issetAndNoEmp echo ' <div class="col-md-4"> <div class="btn-group btn-group"> - <button type="button" id="remove-a-choice" class="btn btn-default" title="'. _("Remove a choice") .'"><span class="glyphicon glyphicon-minus text-info"></span><span class="sr-only">'. _("Remove") .'</span></button> - <button type="button" id="add-a-choice" class="btn btn-default" title="'. _("Add a choice") .'"><span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _("Add") .'</span></button> + <button type="button" id="remove-a-choice" class="btn btn-default" title="'. _('Remove a choice') .'"><span class="glyphicon glyphicon-minus text-info"></span><span class="sr-only">'. _('Remove') .'</span></button> + <button type="button" id="add-a-choice" class="btn btn-default" title="'. _('Add a choice') .'"><span class="glyphicon glyphicon-plus text-success"></span><span class="sr-only">'. _('Add') .'</span></button> </div> </div> <div class="col-md-8 text-right"> diff --git a/choix_date.php b/choix_date.php index 200b8a91..99f5a5b5 100644 --- a/choix_date.php +++ b/choix_date.php @@ -28,7 +28,7 @@ if (is_readable('bandeaux_local.php')) { include_once('bandeaux.php'); } -// Step 1/3 : error if $_SESSION from info_sondage are not valid +// Step 1/4 : error if $_SESSION from info_sondage are not valid if (!isset($_SESSION['form']->titre) || !isset($_SESSION['form']->nom) || (($config['use_smtp']) ? !isset($_SESSION['form']->adresse) : false)) { Utils::print_header ( _("Error!") ); @@ -39,6 +39,7 @@ if (!isset($_SESSION['form']->titre) || !isset($_SESSION['form']->nom) || (($con <h3>' . _("You haven't filled the first section of the poll creation.") . ' !</h3> <p>' . _("Back to the homepage of ") . ' ' . '<a href="' . Utils::get_server_name() . '">' . NOMAPPLICATION . '</a>.</p> </div>'; + bandeau_pied(); @@ -66,6 +67,7 @@ if (!isset($_SESSION['form']->titre) || !isset($_SESSION['form']->nom) || (($con $_SESSION['form']->champdatefin=end($temp_results)+(86400 * $config['default_poll_duration']); } + // Insert poll in database $admin_poll_id = ajouter_sondage( $_SESSION['form']->titre, $_SESSION['form']->commentaires, diff --git a/infos_sondage.php b/infos_sondage.php index dc773bf2..58e00d82 100644 --- a/infos_sondage.php +++ b/infos_sondage.php @@ -57,7 +57,7 @@ $erreur_injection_nom = false; $erreur_injection_commentaires = false; #tests -if (Utils::issetAndNoEmpty("poursuivre")){ +if (!empty($_POST['poursuivre'])){ $_SESSION['form']->titre = $titre; $_SESSION['form']->nom = $nom; $_SESSION['form']->adresse = $adresse; @@ -140,7 +140,7 @@ $errors = array( ) ); -if (!$_SESSION['form']->titre && Utils::issetAndNoEmpty("poursuivre") ) { +if (!$_SESSION['form']->titre && !empty($_POST['poursuivre'])) { $errors['title']['aria'] = 'aria-describeby="poll_title_error" '; $errors['title']['class'] = ' has-error'; $errors['title']['msg'] = '<div class="alert alert-danger" ><p id="poll_title_error">' . _("Enter a title") . '</p></div>'; } elseif ($erreur_injection_titre) { @@ -153,7 +153,7 @@ if ($erreur_injection_commentaires) { $errors['description']['msg'] = '<div class="alert alert-danger"><p id="poll_comment_error">' . _("Characters < > and \" are not permitted") . '</p></div>'; } -if (!$_SESSION['form']->nom && Utils::issetAndNoEmpty("poursuivre")) { +if (!$_SESSION['form']->nom && !empty($_POST['poursuivre'])) { $errors['name']['aria'] = 'aria-describeby="poll_name_error" '; $errors['name']['class'] = ' has-error'; $errors['name']['msg'] = '<div class="alert alert-danger"><p id="poll_name_error">' . _("Enter a name") . '</p></div>'; } elseif ($erreur_injection_nom) { @@ -161,10 +161,10 @@ if (!$_SESSION['form']->nom && Utils::issetAndNoEmpty("poursuivre")) { $errors['name']['msg'] = '<div class="alert alert-danger"><p id="poll_name_error">' . _("Characters < > and \" are not permitted") . '</p></div>'; } -if (!$_SESSION['form']->adresse && Utils::issetAndNoEmpty("poursuivre")) { +if (!$_SESSION['form']->adresse && !empty($_POST['poursuivre'])) { $errors['email']['aria'] = 'aria-describeby="poll_name_error" '; $errors['email']['class'] = ' has-error'; $errors['email']['msg'] = '<div class="alert alert-danger"><p id="poll_email_error">' . _("Enter an email address") . '</p></div>'; -} elseif ($erreur_adresse && Utils::issetAndNoEmpty("poursuivre")) { +} elseif ($erreur_adresse && !empty($_POST['poursuivre'])) { $errors['email']['aria'] = 'aria-describeby="poll_email_error" '; $errors['email']['class'] = ' has-error'; $errors['email']['msg'] = '<div class="alert alert-danger"><p id="poll_email_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.") . '</p></div>'; } -- GitLab