diff --git a/adminstuds.php b/adminstuds.php index 53a0122..ec82d51 100644 --- a/adminstuds.php +++ b/adminstuds.php @@ -16,1199 +16,56 @@ * 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; +use Framadate\Services\PollService; +use Framadate\Services\InputService; +use Framadate\Message; +use Framadate\Utils; -session_start(); - -//setlocale(LC_TIME, "fr_FR"); include_once __DIR__ . '/app/inc/init.php'; -if (file_exists('bandeaux_local.php')) { - include_once('bandeaux_local.php'); -} else { - include_once('bandeaux.php'); -} +/* Variables */ +/* --------- */ +$admin_poll_id = null; +$poll_id = null; +$poll = null; +$message = null; -// recuperation du numero de sondage admin (24 car.) dans l'URL -if (!empty($_GET['sondage']) && is_string($_GET['sondage']) && strlen($_GET['sondage']) === 24) { - $admin_poll_id = $_GET["sondage"]; - // on découpe le résultat pour avoir le numéro de sondage (16 car.) +/* Services */ +/*----------*/ + +$pollService = new PollService($connect); +$inputService = new InputService(); + +/* PAGE */ +/* ---- */ + +if(!empty($_GET['poll']) && strlen($_GET['poll']) === 24) { + $admin_poll_id = filter_input(INPUT_GET, 'poll', FILTER_VALIDATE_REGEXP, ['options'=>['regexp'=>'/^[a-z0-9]+$/']]); $poll_id = substr($admin_poll_id, 0, 16); + $poll = $pollService->findById($poll_id); } -if (preg_match(";[\w\d]{24};i", $admin_poll_id)) { - $prepared = $connect->prepare('SELECT * FROM sondage WHERE admin_poll_id = ?'); - $prepared->execute(array($admin_poll_id)); - $poll = $prepared->fetch(); - $prepared->closeCursor(); - - $prepared = $connect->prepare('SELECT * FROM sujet_studs WHERE id_sondage = ?'); - $prepared->execute(array($poll_id)); - $sujets = $prepared->fetchAll(); - - $prepared = $connect->prepare('SELECT * FROM user_studs WHERE id_sondage = ? order by id_users'); - $prepared->execute(array($poll_id)); - $users = $prepared->fetchAll(); +if (!$poll) { + $smarty->assign('error', 'This poll doesn\'t exist'); + $smarty->display('error.tpl'); + exit; } -//verification de l'existence du sondage, s'il n'existe pas on met une page d'erreur -if (!$poll || !$sujets) { - Utils::print_header( _('Error!')); - - bandeau_titre(_('Error!')); - - echo ' -
-

' . _('This poll doesn\'t exist !') . '

-

' . _('Back to the homepage of ') . ' ' . NOMAPPLICATION . '

-
'."\n"; - - bandeau_pied(); - - die(); -} - -// Send email (only once during the session) to alert admin of the change he made. ==> two modifications (comment, title, description, ...) on differents polls in the same session will generate only one mail. -$email_admin = $poll->admin_mail; -$poll_title = $poll->title; -$smtp_allowed = $config['use_smtp']; -function send_mail_admin() { - global $email_admin; - global $poll_title; - global $admin_poll_id; - global $smtp_allowed; - if($smtp_allowed==true){ - if(!isset($_SESSION['mail_admin_sent'])) { - Utils::sendEmail( $email_admin, - _("[ADMINISTRATOR] New settings for your poll") . ' ' . stripslashes( $poll_title ), - _("You have changed the settings of your poll. \nYou can modify this poll with this link") . - " :\n\n" . Utils::getUrlSondage($admin_poll_id, true) . "\n\n" . - _("Thanks for your confidence.") . "\n" . NOMAPPLICATION - ); - $_SESSION["mail_admin_sent"]=true; - } - } - -} - -//si la valeur du nouveau titre est valide et que le bouton est activé -if (isset($_POST["boutonnouveautitre"])) { - if (Utils::issetAndNoEmpty('nouveautitre') === false) { - $err |= TITLE_EMPTY; - } else { - //Update SQL database with new title - $nouveautitre = htmlentities(html_entity_decode($_POST['nouveautitre'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); - $sql = 'UPDATE sondage SET titre = '.$connect->Param('nouveautitre').' WHERE id_sondage = '.$connect->Param('numsondage'); - $sql = $connect->Prepare($sql); - - //Email sent to the admin - if ($connect->Execute($sql, array($nouveautitre, $poll_id))) { - send_mail_admin(); - } - } -} - -// si le bouton est activé, quelque soit la valeur du champ textarea -if (isset($_POST['boutonnouveauxcommentaires'])) { - if (empty($_POST['nouveautitre'])) { - $err |= COMMENT_EMPTY; - } else { - $commentaires = htmlentities(html_entity_decode($_POST['nouveauxcommentaires'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); - - //Update SQL database with new description - $prepared = $connect->prepare('UPDATE sondage SET commentaires = ? WHERE id_sondage = ?'); - $prepared->execute(array($commentaires, $poll_id)); - - //Email sent to the admin - if ($connect->Execute($sql, array($commentaires, $poll_id))) { - send_mail_admin(); - } - } -} - -//si la valeur de la nouvelle adresse est valide et que le bouton est activé -if (isset($_POST["boutonnouvelleadresse"])) { - if (empty($_POST['nouvelleadresse']) || Utils::isValidEmail($_POST["nouvelleadresse"]) === false) { - $err |= INVALID_EMAIL; - } else { - $nouvelleadresse = htmlentities(html_entity_decode($_POST['nouvelleadresse'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); - - //Update SQL database with new email - $prepared = $connect->prepare('UPDATE sondage SET mail_admin = ? WHERE id_sondage = ?'); - $executed = $prepared->execute(array($nouvelleadresse, $poll_id)); - - //Email sent to the admin - if ($executed) { - send_mail_admin(); - } - } -} - -// TODO OPZ : Revoir ce que fait ce truc exactament -//New poll rules -if (isset($_POST["btn_poll_rules"])) { - echo ''; - if($_POST['poll_rules'] == '+') { - $new_poll_rules = substr($dsondage->format, 0, 1).'+'; - } elseif($_POST['poll_rules'] == '-') { - $new_poll_rules = substr($dsondage->format, 0, 1).'-'; - } else { - $new_poll_rules = substr($dsondage->format, 0, 1); - } - - //Update SQL database with new rules - $prepared = $connect->prepare('UPDATE sondage SET format = ? WHERE id_sondage = ?'); - $executed = $prepared->execute(array($new_poll_rules, $poll_id)); - - //Email sent to the admin - if ($executed) { - send_mail_admin(); - } -} - -// reload -// TODO OPZ Pourquoi recharger -// $dsujet= $sujets->FetchObject(false); -// $dsondage= $sondage->FetchObject(false); - -if (isset($_POST['ajoutsujet'])) { - Utils::print_header( _('Add a column') .' - ' . stripslashes($poll->title)); - - bandeau_titre(_('Make your polls')); - - //on recupere les données et les sujets du sondage - - echo ' -
-
-
-

' . _("Column's adding") . '

'."\n"; - - if ($poll->format == "A"){ - echo ' -
- -
- -
-
'."\n"; - } else { - // ajout d'une date avec creneau horaire - echo ' -

'. _("You can add a new scheduling date to your poll.").'
'._("If you just want to add a new hour to an existant date, put the same date and choose a new hour.") .'

- -
- -
-
- - -
- '. _("(dd/mm/yyyy)") .' -
-
-
- -
- -
-
'; - } - echo ' -

- - -

-
-
-
'; - - bandeau_pied(); - - die(); -} - -if (isset($_POST["suppressionsondage"])) { - Utils::print_header( _("Confirm removal of your poll") .' - ' . stripslashes( $dsondage->title )); - - bandeau_titre(_("Confirm removal of your poll")); - - echo ' -
-
-

' . _("Confirm removal of your poll") . '

-

-

-
-
'; - - bandeau_pied(); - - die(); -} - -// Remove all the comments -if (isset($_POST['removecomments'])) { - $sql = 'DELETE FROM comments WHERE id_sondage='.$connect->Param('numsondage'); - $sql = $connect->Prepare($sql); - $cleaning = $connect->Execute($sql, array($poll_id)); -} - -// Remove all the votes -if (isset($_POST["removevotes"])) { - $sql = 'DELETE FROM user_studs WHERE id_sondage='.$connect->Param('numsondage'); - $sql = $connect->Prepare($sql); - $cleaning = $connect->Execute($sql, array($poll_id)); -} - -//action si bouton confirmation de suppression est activé -if (isset($_POST["confirmesuppression"])) { - $nbuser=$user_studs->RecordCount(); - $date=date('H:i:s d/m/Y:'); - - if (Utils::remove_sondage($connect, $poll_id)) { - // on ecrit dans le fichier de logs la suppression du sondage - error_log($date . " SUPPRESSION: $dsondage->id_sondage\t$dsondage->format\t$dsondage->nom_admin\t$dsondage->mail_admin\n", 3, 'admin/logs_studs.txt'); - - // Email sent - send_mail_admin(); - //affichage de l'ecran de confirmation de suppression de sondage - Utils::print_header(_("Your poll has been removed!")); - - bandeau_titre(_("Make your polls")); - - echo ' -
-

' . _("Your poll has been removed!") . '

-

' . _('Back to the homepage of ') . ' ' . NOMAPPLICATION . '

-
- '."\n"; - - bandeau_pied(); - - die(); - } -} - -// quand on ajoute un commentaire utilisateur -if (isset($_POST['ajoutcomment'])) { - if (empty($_POST['commentuser'])) { - $err |= COMMENT_USER_EMPTY; - } else { - $comment_user = htmlentities(html_entity_decode($_POST["commentuser"], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); - } - - if(empty($_POST['comment'])) { - $err |= COMMENT_EMPTY; - } - - if (!empty($_POST['comment']) && !Utils::is_error(COMMENT_EMPTY) && !Utils::is_error(NO_POLL) && !Utils::is_error(COMMENT_USER_EMPTY)) { - $comment = htmlentities(html_entity_decode($_POST["comment"], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); - - // Check for doublons - $comment_doublon = false; - $req = 'SELECT * FROM comments WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_comment'; - $sql = $connect->Prepare($req); - $comment_user_doublon = $connect->Execute($sql, array($poll_id)); - if ($comment_user_doublon->RecordCount() != 0) { - while ( $dcomment_user_doublon=$comment_user_doublon->FetchNextObject(false)) { - if($dcomment_user_doublon->comment == $comment && $dcomment_user_doublon->usercomment == $comment_user) { - $comment_doublon = true; - }; - } - } - - if(!$comment_doublon) { - $req = 'INSERT INTO comments (id_sondage, comment, usercomment) VALUES ('. - $connect->Param('id_sondage').','. - $connect->Param('comment').','. - $connect->Param('comment_user').')'; - $sql = $connect->Prepare($req); - - $comments = $connect->Execute($sql, array($poll_id, $comment, $comment_user)); - if ($comments === false) { - $err |= COMMENT_INSERT_FAILED; - } - } - } -} - -$nbcolonnes = count($sujets); -$nblignes = count($users); - -//si il n'y a pas suppression alors on peut afficher normalement le tableau - -//action si le bouton participer est cliqué -if (isset($_POST["boutonp"])) { - //si on a un nom dans la case texte - if (!empty($_POST['nom'])){ - $nouveauchoix = ''; - $erreur_prenom = false; - - for ($i=0;$i<$nbcolonnes;$i++){ - // radio checked 1 = Yes, 2 = Ifneedbe, 0 = No - if (isset($_POST["choix$i"])) { - switch ($_POST["choix$i"]) { - case 1: $nouveauchoix .= "1";break; - case 2: $nouveauchoix .= "2";break; - default: $nouveauchoix .= "0";break; - } - } - } - - $nom = htmlentities(html_entity_decode($_POST["nom"], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); - - while($user = $user_studs->FetchNextObject(false)) { - if ($nom == $user->nom){ - $erreur_prenom="yes"; - } - } - - // Ecriture des choix de l'utilisateur dans la base - if (!$erreur_prenom) { - $sql = 'INSERT INTO user_studs (nom, id_sondage, reponses) VALUES ('. - $connect->Param('nom').','. - $connect->Param('numsondage').','. - $connect->Param('nouveauchoix').')'; - - $sql = $connect->Prepare($sql); - $connect->Execute($sql, array($nom, $poll_id, $nouveauchoix)); - } - } -} - - -//action quand on ajoute une colonne au format AUTRE -if (isset($_POST["ajoutercolonne"]) && !empty($_POST['nouvellecolonne']) && $poll->format == "A") { - $nouveauxsujets=$dsujet->sujet; - - //on rajoute la valeur a la fin de tous les sujets deja entrés - $nouveauxsujets.=","; - $nouveauxsujets.=str_replace(","," ",$_POST["nouvellecolonne"]); - $nouveauxsujets = htmlentities(html_entity_decode($nouveauxsujets, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); - - //mise a jour avec les nouveaux sujets dans la base - $sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('nouveauxsujets').' WHERE id_sondage = '.$connect->Param('numsondage'); - $sql = $connect->Prepare($sql); - if ($connect->Execute($sql, array($nouveauxsujets, $poll_id))) { - send_mail_admin(); - } -} - - -// [begin] action quand on ajoute une colonne au format DATE -if (isset($_POST['ajoutercolonne']) && $dsondage->format == 'D') { - - if (!empty($_POST["newdate"])) { - $new_choice = mktime(0, 0, 0, substr($_POST["newdate"],3,2), substr($_POST["newdate"],0,2), substr($_POST["newdate"],6,4)); - - if (!empty($_POST["newhour"])){ - $new_choice .= '@' . $_POST["newhour"]; - } - - - - - - // TODO OPZ Delete the code below - // TODO OPZ Insert new choice - // TODO OPZ Update users votes (add "0" in the right column^^) - - - - //on rajoute la valeur dans les valeurs - $datesbase = explode(",",$dsujet->sujet); - $taillebase = sizeof($datesbase); - - //recherche de l'endroit de l'insertion de la nouvelle date dans les dates deja entrées dans le tableau - if ($nouvelledate < $datesbase[0]) { - $cleinsertion = 0; - } elseif ($nouvelledate > $datesbase[$taillebase-1]) { - $cleinsertion = count($datesbase); - } else { - for ($i = 0; $i < count($datesbase); $i++) { - $j = $i + 1; - if ($nouvelledate > $datesbase[$i] && $nouvelledate < $datesbase[$j]) { - $cleinsertion = $j; - } - } - } - - array_splice($datesbase, $cleinsertion, 0, $nouvelledate); - $cle = array_search($nouvelledate, $datesbase); - $dateinsertion = ''; - for ($i = 0; $i < count($datesbase); $i++) { - $dateinsertion.=","; - $dateinsertion.=$datesbase[$i]; - } - - $dateinsertion = substr("$dateinsertion", 1); - - //mise a jour avec les nouveaux sujets dans la base - //if (isset($erreur_ajout_date) && !$erreur_ajout_date){ - $sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('dateinsertion').' WHERE id_sondage = '.$connect->Param('numsondage'); - $sql = $connect->Prepare($sql); - $connect->Execute($sql, array($dateinsertion, $poll_id)); - - if ($nouvelledate > strtotime($dsondage->date_fin)) { - $date_fin=$nouvelledate+200000; - $sql = 'UPDATE sondage SET date_fin = '.$connect->Param('date_fin').' WHERE id_sondage = '.$connect->Param('numsondage'); - $sql = $connect->Prepare($sql); - $connect->Execute($sql, array($date_fin, $poll_id)); - } - //} - - //mise a jour des reponses actuelles correspondant au sujet ajouté - $sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users='.$connect->Param('id_users'); - $sql = $connect->Prepare($sql); - while ($data = $user_studs->FetchNextObject(false)) { - $ensemblereponses=$data->reponses; - $newcar = ''; - - //parcours de toutes les réponses actuelles - for ($j = 0; $j < $nbcolonnes; $j++) { - $car=substr($ensemblereponses,$j,1); - - //si les reponses ne concerne pas la colonne ajoutée, on concatene - if ($j==$cle) { - $newcar.="0"; - } - - $newcar.=$car; - } - - //mise a jour des reponses utilisateurs dans la base - if (isset($erreur_ajout_date) && !$erreur_ajout_date){ - $connect->Execute($sql, array($newcar, $data->nom, $data->id_users)); - } - } - - //Email sent to the admin - send_mail_admin(); - - } else { - $erreur_ajout_date="yes"; - } -} -// [end] action quand on ajoute une colonne au format DATE - - -//suppression de ligne dans la base -for ($i = 0; $i < $nblignes; $i++) { - if (isset($_POST["effaceligne$i"])) { - $compteur=0; - $prepared = $connect->prepare('DELETE FROM user_studs WHERE nom = ? AND id_users = ?'); - - foreach ($users as $user) { - if ($compteur==$i){ - $prepared->execute(array($user->nom, $user->id_users)); - } - - $compteur++; - } - } -} - - -// TODO OPZ Revoir toute cette partie suppression d'un commentaire utilisateur -/*$sql = 'SELECT * FROM comments WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_comment'; -$sql = $connect->Prepare($sql); -$comment_user = $connect->Execute($sql, array($poll_id)); -$i = 0; -while ($dcomment = $comment_user->FetchNextObject(false)) { - if (isset($_POST['suppressioncomment'.$i])) { - $sql = 'DELETE FROM comments WHERE id_comment = '.$connect->Param('id_comment'); - $sql = $connect->Prepare($sql); - $connect->Execute($sql, array($dcomment->id_comment)); - } - - $i++; -} -*/ - -//on teste pour voir si une ligne doit etre modifiée -$testmodifier = false; -$testligneamodifier = false; - -for ($i = 0; $i < $nblignes; $i++) { - if (isset($_POST["modifierligne$i"])) { - $ligneamodifier=$i; - $testligneamodifier="true"; - } - - //test pour voir si une ligne est a modifier - if (isset($_POST["validermodifier$i"])) { - $modifier=$i; - $testmodifier="true"; - } -} - - -//si le test est valide alors on affiche des checkbox pour entrer de nouvelles valeurs -if ($testmodifier) { - $nouveauchoix = ''; - for ($i = 0; $i < $nbcolonnes; $i++) { - // radio checked 1 = Yes, 2 = Ifneedbe, 0 = No - if (isset($_POST["choix$i"])) { - switch ($_POST["choix$i"]) { - case 1: $nouveauchoix .= "1";break; - case 2: $nouveauchoix .= "2";break; - default: $nouveauchoix .= "0";break; - } - } - } - - $compteur=0; - - while ($data=$user_studs->FetchNextObject(false)) { - //mise a jour des données de l'utilisateur dans la base SQL - if ($compteur==$modifier) { - $sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users = '.$connect->Param('id_users'); - $sql = $connect->Prepare($sql); - $connect->Execute($sql, array($nouveauchoix, $data->nom, $data->id_users)); - } - - $compteur++; - } -} - - -//suppression de colonnes dans la base -for ($i = 0; $i < $nbcolonnes; $i++) { - if ((isset($_POST["effacecolonne$i"])) && $nbcolonnes > 1){ - $sujets = explode(",",$dsujet->sujet); - //sort($toutsujet, SORT_NUMERIC); - $j = 0; - $nouveauxsujets = ''; - - //parcours de tous les sujets actuels - while (isset($sujets[$j])) { - //si le sujet n'est pas celui qui a été effacé alors on concatene - if ($i != $j) { - $nouveauxsujets .= ','; - $nouveauxsujets .= $sujets[$j]; - } - - $j++; - } - - //on enleve la virgule au début - $nouveauxsujets = substr("$nouveauxsujets", 1); - - //nettoyage des reponses actuelles correspondant au sujet effacé - $compteur = 0; - $sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users = '.$connect->Param('id_users'); - $sql = $connect->Prepare($sql); - - while ($data = $user_studs->FetchNextObject(false)) { - $newcar = ''; - $ensemblereponses = $data->reponses; - - //parcours de toutes les réponses actuelles - for ($j = 0; $j < $nbcolonnes; $j++) { - $car=substr($ensemblereponses, $j, 1); - //si les reponses ne concerne pas la colonne effacée, on concatene - if ($i != $j) { - $newcar .= $car; - } - } - - $compteur++; - - //mise a jour des reponses utilisateurs dans la base - $connect->Execute($sql, array($newcar, $data->nom, $data->id_users)); - } - - //mise a jour des sujets dans la base - $sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('nouveauxsujets').' WHERE id_sondage = '.$connect->Param('numsondage'); - $sql = $connect->Prepare($sql); - $connect->Execute($sql, array($nouveauxsujets, $poll_id)); - } -} - - -// TODO OPZ Déjà fait en début de fichier recuperation des donnes de la base -/*$sql = 'SELECT * FROM sondage WHERE id_sondage_admin = '.$connect->Param('numsondageadmin'); -$sql = $connect->Prepare($sql); -$sondage = $connect->Execute($sql, array($admin_poll_id)); - -if ($sondage !== false) { - $sql = 'SELECT * FROM sujet_studs WHERE id_sondage = '.$connect->Param('numsondage'); - $sql = $connect->Prepare($sql); - $sujets = $connect->Execute($sql, array($poll_id)); - - $sql = 'SELECT * FROM user_studs WHERE id_sondage = '.$connect->Param('numsondage').' order by id_users'; - $sql = $connect->Prepare($sql); - $user_studs = $connect->Execute($sql, array($poll_id)); -} else { - - Utils::print_header(_("Error!")); - bandeau_titre(_("Error!")); - - echo ' -
-

' . _("This poll doesn't exist !") . '

-

' . _('Back to the homepage of ') . ' ' . NOMAPPLICATION . '

-
'."\n"; - - bandeau_pied(); - - die(); -}*/ - -// Errors -$errors = ''; -if ((isset($_POST["boutonp"])) && $_POST["nom"] == "") { - $errors .= '
  • ' . _("Enter a name") . '
  • '; -} -if (isset($erreur_prenom) && $erreur_prenom) { - $errors .= '
  • ' . _("The name you've chosen already exist in this poll!") . '
  • '; -} -if (isset($erreur_injection) && $erreur_injection) { - $errors .= '
  • ' . _("Characters \" ' < et > are not permitted") . '
  • '; -} -if (isset($erreur_ajout_date) && $erreur_ajout_date) { - $errors .= '
  • ' . _("The date is not correct !") . '
  • '; -} - -//Poll title, description and email values -$title = (isset($_POST["boutonnouveautitre"]) && !empty($_POST['nouveautitre'])) ? htmlentities(html_entity_decode($_POST['nouveautitre'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8') : stripslashes( $poll->title); -$description = (isset($_POST["nouveauxcommentaires"])) ? stripslashes(htmlentities(html_entity_decode($_POST['nouveauxcommentaires'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8')) : stripslashes( $poll->comment); -$email_admin = (isset($_POST["boutonnouvelleadresse"]) && !empty($_POST['nouvelleadresse'])) ? htmlentities(html_entity_decode($_POST['nouvelleadresse'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8') : stripslashes( $poll->admin_mail ); - -//Poll format (locked A-/D-, open A/D, editable A+/D+) -$poll_rules = (isset($_POST["poll_rules"]) && !empty($_POST['btn_poll_rules'])) ? $_POST["poll_rules"] : substr($poll->format, 1, 1); // TODO OPZ Handle comment disabling -$poll_rules_opt1 = '';$poll_rules_opt2 = '';$poll_rules_opt3 = ''; -if($poll->editable) { - $poll_rules_text = ' '. _("Votes are editable"); - $poll_rules_opt3 = 'selected'; -} elseif($poll_rules == '-') { - $poll_rules_text = ' '. _("Votes and comments are locked"); - $poll_rules_opt1 = 'selected'; -} else { - $poll_rules_text = ' '. _("Votes and comments are open"); - $poll_rules_opt2 = 'selected'; -} - -if ($errors!='') { - Utils::print_header(_("Error!")); - bandeau_titre(_("Error!")); - - echo '
    '."\n"; - -} else { - Utils::print_header(_('Poll administration').' - '.$title); - bandeau_titre(_('Poll administration').' - '.$title); - - // session_unset(); -} - -echo ' -
    -
    -
    -
    -

    '.$title.'

    - -
    -
    -
    - - - - -
    -
    -
    -
    -
    -
    -
    -

    '. _("Initiator of the poll") .'

    -

    '.stripslashes($poll->admin_name).'

    -
    -
    -

    '.$email_admin.'

    - -
    -
    -
    -
    -

    '._("Description") .'


    -

    '.$description.'

    - -
    -
    -
    - - -
    -

    '. _("Expiration's date") .'

    -

    '.date("d/m/Y",strtotime($poll->end_date)).'

    -
    -
    -
    -
    -
    -

    '.$poll_rules_text.'

    - -
    -
    -
    -
    -
    '."\n"; // .jumbotron - -// Table headers -$thead = ''; - -// Button in the first td to avoid remove col on "Return" keypress) -$tr_add_remove_col = ''; - -$border = array(); // bordure pour distinguer les mois -$td_headers = array(); // for a11y, headers="M1 D4 H5" on each td -$radio_title = array(); // date for - -// Display dates poll -if ($poll->format == "D") { - - $tr_months = ''; - $tr_days = ''; - $tr_hours = ''; - - // Headers - $colspan_month = 1; - $colspan_day = 1; - - foreach ($sujets as $i=>$sujet) { - - // Current date - $horoCur = explode('@', $sujet->sujet); //horoCur[0] = date, horoCur[1] = hour - if (isset($sujets[$i+1])){ - $next = $sujets[$i+1]->sujet; - $horoNext = explode('@', $next); - } - $border[$i] = false; - $radio_title[$i] = strftime($date_format['txt_short'], $horoCur[0]); - - // Months - $td_headers[$i] = 'M'.($i+1-$colspan_month); - - if (isset($sujets[$i+1]) && strftime("%B", $horoCur[0]) == strftime("%B", $horoNext[0]) && strftime("%Y", $horoCur[0]) == strftime("%Y", $horoNext[0])){ - $colspan_month++; - } else { - $border[$i] = true; - $tr_months .= ''.strftime("%B",$horoCur[0]).' '.strftime("%Y", $horoCur[0]).''; - $colspan_month=1; - } - - // Days - $td_headers[$i] .= ' D'.($i+1-$colspan_day); - - if (isset($sujets[$i+1]) && strftime($date_format['txt_day'],$horoCur[0])==strftime($date_format['txt_day'],$horoNext[0]) && strftime("%B",$horoCur[0])==strftime("%B",$horoNext[0])){ - $colspan_day++; - } else { - $rbd = ($border[$i]) ? ' rbd' : ''; - $tr_days .= ''.strftime($date_format['txt_day'],$horoCur[0]).''; - $colspan_day=1; - } - - // Hours - $rbd = ($border[$i]) ? ' rbd' : ''; - if ($horoCur[1] !== "") { - $tr_hours .= ''.$horoCur[1].''; - $radio_title[$i] .= ' - '.$horoCur[1]; - $td_headers[$i] .= ' H'.$i; - } else { - $tr_hours .= ''; - } - - // Remove col - $tr_add_remove_col .= (count($sujets) > 2 ) ? '' : ''; - - } - - $border[count($border)-1] = false; // suppression de la bordure droite du dernier mois - - $tr_months .= ''; - $tr_days .= ''; - $tr_hours .= ''; - - // Add col - $tr_add_remove_col .= ''; - - $thead = "\n".$tr_add_remove_col."\n".$tr_months."\n".$tr_days."\n".$tr_hours."\n"; - -// Subjects poll -} else { - $tr_subjects = ''; - - foreach ($sujets as $i=>$sujet) { - - $td_headers[$i]='';$radio_title[$i]=''; // init before concatenate - - // Subjects - preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$sujet->sujet,$md_a_img); // Markdown [![alt](src)](href) - preg_match_all('/!\[(.*?)\]\((.*?)\)/',$sujet->sujet,$md_img); // Markdown ![alt](src) - preg_match_all('/\[(.*?)\]\((.*?)\)/',$sujet->sujet,$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]!='') { // [![alt](src)](href) - - $th_subject_text = (isset($md_a_img[1][0]) && $md_a_img[1][0]!='') ? stripslashes($md_a_img[1][0]) : _("Choice") .' '.($i+1); - $th_subject_html = ''.$th_subject_text.''; - - } elseif (isset($md_img[2][0]) && $md_img[2][0]!='') { // ![alt](src) - - $th_subject_text = (isset($md_img[1][0]) && $md_img[1][0]!='') ? stripslashes($md_img[1][0]) : _("Choice") .' '.($i+1); - $th_subject_html = ''.$th_subject_text.''; - - } elseif (isset($md_a[2][0]) && $md_a[2][0]!='') { // [text](href) - - $th_subject_text = (isset($md_a[1][0]) && $md_a[1][0]!='') ? stripslashes($md_a[1][0]) : _("Choice") .' '.($i+1); - $th_subject_html = ''.$th_subject_text.''; - - } else { // text only - - $th_subject_text = stripslashes($sujet->sujet); - $th_subject_html = $th_subject_text; - - } - $tr_subjects .= ''.$th_subject_html.''; - - $border[$i] = false; - $td_headers[$i] .= 'S'.$i; - $radio_title[$i] .= $th_subject_text; - - // Remove col - $tr_add_remove_col .= ''; - } - - // Add col - $tr_add_remove_col .= ''; - - $thead = $tr_add_remove_col.$tr_subjects.''; -} - -// Print headers -echo ' -
    - -
    -

    ' . _('As poll administrator, you can change all the lines of this poll with this button ').'' . _('Edit') . ', - ' . _(' remove a column or a line with ') . '' . _('Remove') . ' - ' . _('and add a new column with '). ''. _('Add a column') . '

    -

    ' . _('Finally, you can change the informations of this poll like the title, the comments or your email address.') . '

    - -
    - - - -

    '._('Votes of the poll ').'

    -
    - - - '. $thead . ' - '; - -// Print poll results -$somme[] = 0; -$compteur = 0; - -foreach($users as $user) { - - $ensemblereponses = $user->reponses; - - // Print name - echo ' -'."\n"; - - // si la ligne n'est pas a changer, on affiche les données - if (!$testligneamodifier) { - for ($k = 0; $k < $nbcolonnes; $k++) { - $rbd = ($border[$k]) ? ' rbd' : ''; - $car = substr($ensemblereponses, $k, 1); - switch ($car) { - case "1": echo ''."\n"; - if (isset($somme[$k]) === false) { - $somme[$k] = 0; - } - $somme[$k]++; break; - case "2": echo ''."\n"; break; - default: echo ''."\n";break; - } - } - } else { // sinon on remplace les choix de l'utilisateur par une ligne de radio pour recuperer de nouvelles valeurs - // si c'est bien la ligne a modifier on met les radios - if ($compteur == "$ligneamodifier") { - for ($j = 0; $j < $nbcolonnes; $j++) { - - $car = substr($ensemblereponses, $j, 1); - - // variable pour afficher la valeur cochée - $car_html[0]='value="0"';$car_html[1]='value="1"';$car_html[2]='value="2"'; - switch ($car) { - case "1": $car_html[1]='value="1" checked';break; - case "2": $car_html[2]='value="2" checked';break; - default: $car_html[0]='value="0" checked';break; - } - - echo ' - '."\n"; - - } - } else { //sinon on affiche les lignes normales - for ($k = 0; $k < $nbcolonnes; $k++) { - $rbd = ($border[$k]) ? ' rbd' : ''; - $car = substr($ensemblereponses, $k, 1); - switch ($car) { - case "1": echo ''."\n"; - if (isset($somme[$k]) === false) { - $somme[$k] = 0; - } - $somme[$k]++; break; - case "2": echo ''."\n"; break; - default: echo ''."\n";break; - } - } - } - } - - //a la fin de chaque ligne se trouve les boutons modifier - if (!$testligneamodifier=="true") { - echo ' - '."\n"; - } - - //demande de confirmation pour modification de ligne - for ($i = 0; $i < $nblignes; $i++) { - if (isset($_POST["modifierligne$i"])) { - if ($compteur == $i) { - echo ''."\n"; - } - } - } - - $compteur++; - echo ''."\n"; -} - -if (!$testligneamodifier=="true") { - //affichage de la case vide de texte pour un nouvel utilisateur - echo ' -'."\n"; - - //une ligne de checkbox pour le choix du nouvel utilisateur - for ($i = 0; $i < $nbcolonnes; $i++) { - echo ' - '."\n"; - } - - // Affichage du bouton de formulaire pour inscrire un nouvel utilisateur dans la base - echo ' -'."\n"; - -} - -// Addition and Best choice -//affichage de la ligne contenant les sommes de chaque colonne -$tr_addition = ''; -$meilleurecolonne = max($somme); -$compteursujet = 0; -$meilleursujet = ''; - - $meilleursujet.= '
  • '.$radio_title[$i].'
  • '; - $compteursujet++; - - } else { - $tr_addition .= ''; - } - } else { - $tr_addition .= ''; - } -} -$tr_addition .= ''; - -$meilleursujet = str_replace("°", "'", $meilleursujet).''; -$vote_str = ($meilleurecolonne > 1) ? $vote_str = _('votes') : _('vote'); - -// Print Addition and Best choice -echo $tr_addition.' - -
    '._('Votes of the poll ').$title.'
    '.stripslashes($user->nom).' ' . _('Yes') . '() ' . _('Yes') . _(', ifneedbe') . '' . _('No') . ' -
      -
    • - - -
    • -
    • - - -
    • -
    • - - -
    • -
    -
    ' . _('Yes') . '() ' . _('Yes') . _(', ifneedbe') . '' . _('No') . ' - - -
    -
    - - -
    -
    -
      -
    • - - -
    • -
    • - - -
    • -
    • - - -
    • -
    -
    '. _("Addition") .''.$somme[$i].''.$somme[$i].'
    -
    -
    '."\n"; - -if ($compteursujet == 1) { - echo ' -

    ' . _("Best choice") . '

    -
    -

    ' . _("The best choice at this time is:") . '

    - ' . $meilleursujet . ' -

    ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . '.

    -
    '."\n"; -} elseif ($compteursujet > 1) { - echo ' -

    ' . _("Best choices") . '

    -
    -

    ' . _("The bests choices at this time are:") . '

    - ' . $meilleursujet . ' -

    ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . '.

    -
    '."\n"; -} - -echo ' -
    -
    '."\n"; - -// Commments -$comment_user = $connect->allComments($poll_id); - -if (count($comment_user) != 0) { - echo '

    ' . _("Comments of polled people") . '

    '."\n"; - - $i = 0; - while ( $dcomment=$comment_user->FetchNextObject(false)) { - echo ' -
    - - '.stripslashes($dcomment->usercomment). ' : - ' . stripslashes(nl2br($dcomment->comment)) . ' -
    '; - $i++; - } - echo '
    '; -} -echo ' -
    -
    -
    ' . _("Add a comment in the poll") . ' -
    -

    -
    -
    -


    -

    -
    -

    -
    -
    -
    -
    -
    '; - -bandeau_pied(); +// Retrieve data +$slots = $pollService->allSlotsByPollId($poll_id); +$votes = $pollService->allUserVotesByPollId($poll_id); +$comments = $pollService->allCommentsByPollId($poll_id); + + +// Assign data to template +$smarty->assign('poll_id', $admin_poll_id); +$smarty->assign('poll', $poll); +$smarty->assign('title', _('Poll') . ' - ' . $poll->title); +$smarty->assign('slots', $pollService->splitSlots($slots)); +$smarty->assign('votes', $pollService->splitVotes($votes)); +$smarty->assign('best_moments', $pollService->computeBestMoments($votes)); +$smarty->assign('comments', $comments); +$smarty->assign('editingVoteId', $editingVoteId); +$smarty->assign('message', $message); + +$smarty->display('studs.tpl'); \ No newline at end of file diff --git a/old_adminstuds.php b/old_adminstuds.php new file mode 100644 index 0000000..53a0122 --- /dev/null +++ b/old_adminstuds.php @@ -0,0 +1,1214 @@ +prepare('SELECT * FROM sondage WHERE admin_poll_id = ?'); + $prepared->execute(array($admin_poll_id)); + $poll = $prepared->fetch(); + $prepared->closeCursor(); + + $prepared = $connect->prepare('SELECT * FROM sujet_studs WHERE id_sondage = ?'); + $prepared->execute(array($poll_id)); + $sujets = $prepared->fetchAll(); + + $prepared = $connect->prepare('SELECT * FROM user_studs WHERE id_sondage = ? order by id_users'); + $prepared->execute(array($poll_id)); + $users = $prepared->fetchAll(); +} + +//verification de l'existence du sondage, s'il n'existe pas on met une page d'erreur +if (!$poll || !$sujets) { + Utils::print_header( _('Error!')); + + bandeau_titre(_('Error!')); + + echo ' +
    +

    ' . _('This poll doesn\'t exist !') . '

    +

    ' . _('Back to the homepage of ') . ' ' . NOMAPPLICATION . '

    +
    '."\n"; + + bandeau_pied(); + + die(); +} + +// Send email (only once during the session) to alert admin of the change he made. ==> two modifications (comment, title, description, ...) on differents polls in the same session will generate only one mail. +$email_admin = $poll->admin_mail; +$poll_title = $poll->title; +$smtp_allowed = $config['use_smtp']; +function send_mail_admin() { + global $email_admin; + global $poll_title; + global $admin_poll_id; + global $smtp_allowed; + if($smtp_allowed==true){ + if(!isset($_SESSION['mail_admin_sent'])) { + Utils::sendEmail( $email_admin, + _("[ADMINISTRATOR] New settings for your poll") . ' ' . stripslashes( $poll_title ), + _("You have changed the settings of your poll. \nYou can modify this poll with this link") . + " :\n\n" . Utils::getUrlSondage($admin_poll_id, true) . "\n\n" . + _("Thanks for your confidence.") . "\n" . NOMAPPLICATION + ); + $_SESSION["mail_admin_sent"]=true; + } + } + +} + +//si la valeur du nouveau titre est valide et que le bouton est activé +if (isset($_POST["boutonnouveautitre"])) { + if (Utils::issetAndNoEmpty('nouveautitre') === false) { + $err |= TITLE_EMPTY; + } else { + //Update SQL database with new title + $nouveautitre = htmlentities(html_entity_decode($_POST['nouveautitre'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); + $sql = 'UPDATE sondage SET titre = '.$connect->Param('nouveautitre').' WHERE id_sondage = '.$connect->Param('numsondage'); + $sql = $connect->Prepare($sql); + + //Email sent to the admin + if ($connect->Execute($sql, array($nouveautitre, $poll_id))) { + send_mail_admin(); + } + } +} + +// si le bouton est activé, quelque soit la valeur du champ textarea +if (isset($_POST['boutonnouveauxcommentaires'])) { + if (empty($_POST['nouveautitre'])) { + $err |= COMMENT_EMPTY; + } else { + $commentaires = htmlentities(html_entity_decode($_POST['nouveauxcommentaires'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); + + //Update SQL database with new description + $prepared = $connect->prepare('UPDATE sondage SET commentaires = ? WHERE id_sondage = ?'); + $prepared->execute(array($commentaires, $poll_id)); + + //Email sent to the admin + if ($connect->Execute($sql, array($commentaires, $poll_id))) { + send_mail_admin(); + } + } +} + +//si la valeur de la nouvelle adresse est valide et que le bouton est activé +if (isset($_POST["boutonnouvelleadresse"])) { + if (empty($_POST['nouvelleadresse']) || Utils::isValidEmail($_POST["nouvelleadresse"]) === false) { + $err |= INVALID_EMAIL; + } else { + $nouvelleadresse = htmlentities(html_entity_decode($_POST['nouvelleadresse'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); + + //Update SQL database with new email + $prepared = $connect->prepare('UPDATE sondage SET mail_admin = ? WHERE id_sondage = ?'); + $executed = $prepared->execute(array($nouvelleadresse, $poll_id)); + + //Email sent to the admin + if ($executed) { + send_mail_admin(); + } + } +} + +// TODO OPZ : Revoir ce que fait ce truc exactament +//New poll rules +if (isset($_POST["btn_poll_rules"])) { + echo ''; + if($_POST['poll_rules'] == '+') { + $new_poll_rules = substr($dsondage->format, 0, 1).'+'; + } elseif($_POST['poll_rules'] == '-') { + $new_poll_rules = substr($dsondage->format, 0, 1).'-'; + } else { + $new_poll_rules = substr($dsondage->format, 0, 1); + } + + //Update SQL database with new rules + $prepared = $connect->prepare('UPDATE sondage SET format = ? WHERE id_sondage = ?'); + $executed = $prepared->execute(array($new_poll_rules, $poll_id)); + + //Email sent to the admin + if ($executed) { + send_mail_admin(); + } +} + +// reload +// TODO OPZ Pourquoi recharger +// $dsujet= $sujets->FetchObject(false); +// $dsondage= $sondage->FetchObject(false); + +if (isset($_POST['ajoutsujet'])) { + Utils::print_header( _('Add a column') .' - ' . stripslashes($poll->title)); + + bandeau_titre(_('Make your polls')); + + //on recupere les données et les sujets du sondage + + echo ' +
    +
    +
    +

    ' . _("Column's adding") . '

    '."\n"; + + if ($poll->format == "A"){ + echo ' +
    + +
    + +
    +
    '."\n"; + } else { + // ajout d'une date avec creneau horaire + echo ' +

    '. _("You can add a new scheduling date to your poll.").'
    '._("If you just want to add a new hour to an existant date, put the same date and choose a new hour.") .'

    + +
    + +
    +
    + + +
    + '. _("(dd/mm/yyyy)") .' +
    +
    +
    + +
    + +
    +
    '; + } + echo ' +

    + + +

    +
    +
    +
    '; + + bandeau_pied(); + + die(); +} + +if (isset($_POST["suppressionsondage"])) { + Utils::print_header( _("Confirm removal of your poll") .' - ' . stripslashes( $dsondage->title )); + + bandeau_titre(_("Confirm removal of your poll")); + + echo ' +
    +
    +

    ' . _("Confirm removal of your poll") . '

    +

    +

    +
    +
    '; + + bandeau_pied(); + + die(); +} + +// Remove all the comments +if (isset($_POST['removecomments'])) { + $sql = 'DELETE FROM comments WHERE id_sondage='.$connect->Param('numsondage'); + $sql = $connect->Prepare($sql); + $cleaning = $connect->Execute($sql, array($poll_id)); +} + +// Remove all the votes +if (isset($_POST["removevotes"])) { + $sql = 'DELETE FROM user_studs WHERE id_sondage='.$connect->Param('numsondage'); + $sql = $connect->Prepare($sql); + $cleaning = $connect->Execute($sql, array($poll_id)); +} + +//action si bouton confirmation de suppression est activé +if (isset($_POST["confirmesuppression"])) { + $nbuser=$user_studs->RecordCount(); + $date=date('H:i:s d/m/Y:'); + + if (Utils::remove_sondage($connect, $poll_id)) { + // on ecrit dans le fichier de logs la suppression du sondage + error_log($date . " SUPPRESSION: $dsondage->id_sondage\t$dsondage->format\t$dsondage->nom_admin\t$dsondage->mail_admin\n", 3, 'admin/logs_studs.txt'); + + // Email sent + send_mail_admin(); + //affichage de l'ecran de confirmation de suppression de sondage + Utils::print_header(_("Your poll has been removed!")); + + bandeau_titre(_("Make your polls")); + + echo ' +
    +

    ' . _("Your poll has been removed!") . '

    +

    ' . _('Back to the homepage of ') . ' ' . NOMAPPLICATION . '

    +
    + '."\n"; + + bandeau_pied(); + + die(); + } +} + +// quand on ajoute un commentaire utilisateur +if (isset($_POST['ajoutcomment'])) { + if (empty($_POST['commentuser'])) { + $err |= COMMENT_USER_EMPTY; + } else { + $comment_user = htmlentities(html_entity_decode($_POST["commentuser"], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); + } + + if(empty($_POST['comment'])) { + $err |= COMMENT_EMPTY; + } + + if (!empty($_POST['comment']) && !Utils::is_error(COMMENT_EMPTY) && !Utils::is_error(NO_POLL) && !Utils::is_error(COMMENT_USER_EMPTY)) { + $comment = htmlentities(html_entity_decode($_POST["comment"], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); + + // Check for doublons + $comment_doublon = false; + $req = 'SELECT * FROM comments WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_comment'; + $sql = $connect->Prepare($req); + $comment_user_doublon = $connect->Execute($sql, array($poll_id)); + if ($comment_user_doublon->RecordCount() != 0) { + while ( $dcomment_user_doublon=$comment_user_doublon->FetchNextObject(false)) { + if($dcomment_user_doublon->comment == $comment && $dcomment_user_doublon->usercomment == $comment_user) { + $comment_doublon = true; + }; + } + } + + if(!$comment_doublon) { + $req = 'INSERT INTO comments (id_sondage, comment, usercomment) VALUES ('. + $connect->Param('id_sondage').','. + $connect->Param('comment').','. + $connect->Param('comment_user').')'; + $sql = $connect->Prepare($req); + + $comments = $connect->Execute($sql, array($poll_id, $comment, $comment_user)); + if ($comments === false) { + $err |= COMMENT_INSERT_FAILED; + } + } + } +} + +$nbcolonnes = count($sujets); +$nblignes = count($users); + +//si il n'y a pas suppression alors on peut afficher normalement le tableau + +//action si le bouton participer est cliqué +if (isset($_POST["boutonp"])) { + //si on a un nom dans la case texte + if (!empty($_POST['nom'])){ + $nouveauchoix = ''; + $erreur_prenom = false; + + for ($i=0;$i<$nbcolonnes;$i++){ + // radio checked 1 = Yes, 2 = Ifneedbe, 0 = No + if (isset($_POST["choix$i"])) { + switch ($_POST["choix$i"]) { + case 1: $nouveauchoix .= "1";break; + case 2: $nouveauchoix .= "2";break; + default: $nouveauchoix .= "0";break; + } + } + } + + $nom = htmlentities(html_entity_decode($_POST["nom"], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); + + while($user = $user_studs->FetchNextObject(false)) { + if ($nom == $user->nom){ + $erreur_prenom="yes"; + } + } + + // Ecriture des choix de l'utilisateur dans la base + if (!$erreur_prenom) { + $sql = 'INSERT INTO user_studs (nom, id_sondage, reponses) VALUES ('. + $connect->Param('nom').','. + $connect->Param('numsondage').','. + $connect->Param('nouveauchoix').')'; + + $sql = $connect->Prepare($sql); + $connect->Execute($sql, array($nom, $poll_id, $nouveauchoix)); + } + } +} + + +//action quand on ajoute une colonne au format AUTRE +if (isset($_POST["ajoutercolonne"]) && !empty($_POST['nouvellecolonne']) && $poll->format == "A") { + $nouveauxsujets=$dsujet->sujet; + + //on rajoute la valeur a la fin de tous les sujets deja entrés + $nouveauxsujets.=","; + $nouveauxsujets.=str_replace(","," ",$_POST["nouvellecolonne"]); + $nouveauxsujets = htmlentities(html_entity_decode($nouveauxsujets, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); + + //mise a jour avec les nouveaux sujets dans la base + $sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('nouveauxsujets').' WHERE id_sondage = '.$connect->Param('numsondage'); + $sql = $connect->Prepare($sql); + if ($connect->Execute($sql, array($nouveauxsujets, $poll_id))) { + send_mail_admin(); + } +} + + +// [begin] action quand on ajoute une colonne au format DATE +if (isset($_POST['ajoutercolonne']) && $dsondage->format == 'D') { + + if (!empty($_POST["newdate"])) { + $new_choice = mktime(0, 0, 0, substr($_POST["newdate"],3,2), substr($_POST["newdate"],0,2), substr($_POST["newdate"],6,4)); + + if (!empty($_POST["newhour"])){ + $new_choice .= '@' . $_POST["newhour"]; + } + + + + + + // TODO OPZ Delete the code below + // TODO OPZ Insert new choice + // TODO OPZ Update users votes (add "0" in the right column^^) + + + + //on rajoute la valeur dans les valeurs + $datesbase = explode(",",$dsujet->sujet); + $taillebase = sizeof($datesbase); + + //recherche de l'endroit de l'insertion de la nouvelle date dans les dates deja entrées dans le tableau + if ($nouvelledate < $datesbase[0]) { + $cleinsertion = 0; + } elseif ($nouvelledate > $datesbase[$taillebase-1]) { + $cleinsertion = count($datesbase); + } else { + for ($i = 0; $i < count($datesbase); $i++) { + $j = $i + 1; + if ($nouvelledate > $datesbase[$i] && $nouvelledate < $datesbase[$j]) { + $cleinsertion = $j; + } + } + } + + array_splice($datesbase, $cleinsertion, 0, $nouvelledate); + $cle = array_search($nouvelledate, $datesbase); + $dateinsertion = ''; + for ($i = 0; $i < count($datesbase); $i++) { + $dateinsertion.=","; + $dateinsertion.=$datesbase[$i]; + } + + $dateinsertion = substr("$dateinsertion", 1); + + //mise a jour avec les nouveaux sujets dans la base + //if (isset($erreur_ajout_date) && !$erreur_ajout_date){ + $sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('dateinsertion').' WHERE id_sondage = '.$connect->Param('numsondage'); + $sql = $connect->Prepare($sql); + $connect->Execute($sql, array($dateinsertion, $poll_id)); + + if ($nouvelledate > strtotime($dsondage->date_fin)) { + $date_fin=$nouvelledate+200000; + $sql = 'UPDATE sondage SET date_fin = '.$connect->Param('date_fin').' WHERE id_sondage = '.$connect->Param('numsondage'); + $sql = $connect->Prepare($sql); + $connect->Execute($sql, array($date_fin, $poll_id)); + } + //} + + //mise a jour des reponses actuelles correspondant au sujet ajouté + $sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users='.$connect->Param('id_users'); + $sql = $connect->Prepare($sql); + while ($data = $user_studs->FetchNextObject(false)) { + $ensemblereponses=$data->reponses; + $newcar = ''; + + //parcours de toutes les réponses actuelles + for ($j = 0; $j < $nbcolonnes; $j++) { + $car=substr($ensemblereponses,$j,1); + + //si les reponses ne concerne pas la colonne ajoutée, on concatene + if ($j==$cle) { + $newcar.="0"; + } + + $newcar.=$car; + } + + //mise a jour des reponses utilisateurs dans la base + if (isset($erreur_ajout_date) && !$erreur_ajout_date){ + $connect->Execute($sql, array($newcar, $data->nom, $data->id_users)); + } + } + + //Email sent to the admin + send_mail_admin(); + + } else { + $erreur_ajout_date="yes"; + } +} +// [end] action quand on ajoute une colonne au format DATE + + +//suppression de ligne dans la base +for ($i = 0; $i < $nblignes; $i++) { + if (isset($_POST["effaceligne$i"])) { + $compteur=0; + $prepared = $connect->prepare('DELETE FROM user_studs WHERE nom = ? AND id_users = ?'); + + foreach ($users as $user) { + if ($compteur==$i){ + $prepared->execute(array($user->nom, $user->id_users)); + } + + $compteur++; + } + } +} + + +// TODO OPZ Revoir toute cette partie suppression d'un commentaire utilisateur +/*$sql = 'SELECT * FROM comments WHERE id_sondage='.$connect->Param('numsondage').' ORDER BY id_comment'; +$sql = $connect->Prepare($sql); +$comment_user = $connect->Execute($sql, array($poll_id)); +$i = 0; +while ($dcomment = $comment_user->FetchNextObject(false)) { + if (isset($_POST['suppressioncomment'.$i])) { + $sql = 'DELETE FROM comments WHERE id_comment = '.$connect->Param('id_comment'); + $sql = $connect->Prepare($sql); + $connect->Execute($sql, array($dcomment->id_comment)); + } + + $i++; +} +*/ + +//on teste pour voir si une ligne doit etre modifiée +$testmodifier = false; +$testligneamodifier = false; + +for ($i = 0; $i < $nblignes; $i++) { + if (isset($_POST["modifierligne$i"])) { + $ligneamodifier=$i; + $testligneamodifier="true"; + } + + //test pour voir si une ligne est a modifier + if (isset($_POST["validermodifier$i"])) { + $modifier=$i; + $testmodifier="true"; + } +} + + +//si le test est valide alors on affiche des checkbox pour entrer de nouvelles valeurs +if ($testmodifier) { + $nouveauchoix = ''; + for ($i = 0; $i < $nbcolonnes; $i++) { + // radio checked 1 = Yes, 2 = Ifneedbe, 0 = No + if (isset($_POST["choix$i"])) { + switch ($_POST["choix$i"]) { + case 1: $nouveauchoix .= "1";break; + case 2: $nouveauchoix .= "2";break; + default: $nouveauchoix .= "0";break; + } + } + } + + $compteur=0; + + while ($data=$user_studs->FetchNextObject(false)) { + //mise a jour des données de l'utilisateur dans la base SQL + if ($compteur==$modifier) { + $sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users = '.$connect->Param('id_users'); + $sql = $connect->Prepare($sql); + $connect->Execute($sql, array($nouveauchoix, $data->nom, $data->id_users)); + } + + $compteur++; + } +} + + +//suppression de colonnes dans la base +for ($i = 0; $i < $nbcolonnes; $i++) { + if ((isset($_POST["effacecolonne$i"])) && $nbcolonnes > 1){ + $sujets = explode(",",$dsujet->sujet); + //sort($toutsujet, SORT_NUMERIC); + $j = 0; + $nouveauxsujets = ''; + + //parcours de tous les sujets actuels + while (isset($sujets[$j])) { + //si le sujet n'est pas celui qui a été effacé alors on concatene + if ($i != $j) { + $nouveauxsujets .= ','; + $nouveauxsujets .= $sujets[$j]; + } + + $j++; + } + + //on enleve la virgule au début + $nouveauxsujets = substr("$nouveauxsujets", 1); + + //nettoyage des reponses actuelles correspondant au sujet effacé + $compteur = 0; + $sql = 'UPDATE user_studs SET reponses = '.$connect->Param('reponses').' WHERE nom = '.$connect->Param('nom').' AND id_users = '.$connect->Param('id_users'); + $sql = $connect->Prepare($sql); + + while ($data = $user_studs->FetchNextObject(false)) { + $newcar = ''; + $ensemblereponses = $data->reponses; + + //parcours de toutes les réponses actuelles + for ($j = 0; $j < $nbcolonnes; $j++) { + $car=substr($ensemblereponses, $j, 1); + //si les reponses ne concerne pas la colonne effacée, on concatene + if ($i != $j) { + $newcar .= $car; + } + } + + $compteur++; + + //mise a jour des reponses utilisateurs dans la base + $connect->Execute($sql, array($newcar, $data->nom, $data->id_users)); + } + + //mise a jour des sujets dans la base + $sql = 'UPDATE sujet_studs SET sujet = '.$connect->Param('nouveauxsujets').' WHERE id_sondage = '.$connect->Param('numsondage'); + $sql = $connect->Prepare($sql); + $connect->Execute($sql, array($nouveauxsujets, $poll_id)); + } +} + + +// TODO OPZ Déjà fait en début de fichier recuperation des donnes de la base +/*$sql = 'SELECT * FROM sondage WHERE id_sondage_admin = '.$connect->Param('numsondageadmin'); +$sql = $connect->Prepare($sql); +$sondage = $connect->Execute($sql, array($admin_poll_id)); + +if ($sondage !== false) { + $sql = 'SELECT * FROM sujet_studs WHERE id_sondage = '.$connect->Param('numsondage'); + $sql = $connect->Prepare($sql); + $sujets = $connect->Execute($sql, array($poll_id)); + + $sql = 'SELECT * FROM user_studs WHERE id_sondage = '.$connect->Param('numsondage').' order by id_users'; + $sql = $connect->Prepare($sql); + $user_studs = $connect->Execute($sql, array($poll_id)); +} else { + + Utils::print_header(_("Error!")); + bandeau_titre(_("Error!")); + + echo ' +
    +

    ' . _("This poll doesn't exist !") . '

    +

    ' . _('Back to the homepage of ') . ' ' . NOMAPPLICATION . '

    +
    '."\n"; + + bandeau_pied(); + + die(); +}*/ + +// Errors +$errors = ''; +if ((isset($_POST["boutonp"])) && $_POST["nom"] == "") { + $errors .= '
  • ' . _("Enter a name") . '
  • '; +} +if (isset($erreur_prenom) && $erreur_prenom) { + $errors .= '
  • ' . _("The name you've chosen already exist in this poll!") . '
  • '; +} +if (isset($erreur_injection) && $erreur_injection) { + $errors .= '
  • ' . _("Characters \" ' < et > are not permitted") . '
  • '; +} +if (isset($erreur_ajout_date) && $erreur_ajout_date) { + $errors .= '
  • ' . _("The date is not correct !") . '
  • '; +} + +//Poll title, description and email values +$title = (isset($_POST["boutonnouveautitre"]) && !empty($_POST['nouveautitre'])) ? htmlentities(html_entity_decode($_POST['nouveautitre'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8') : stripslashes( $poll->title); +$description = (isset($_POST["nouveauxcommentaires"])) ? stripslashes(htmlentities(html_entity_decode($_POST['nouveauxcommentaires'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8')) : stripslashes( $poll->comment); +$email_admin = (isset($_POST["boutonnouvelleadresse"]) && !empty($_POST['nouvelleadresse'])) ? htmlentities(html_entity_decode($_POST['nouvelleadresse'], ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8') : stripslashes( $poll->admin_mail ); + +//Poll format (locked A-/D-, open A/D, editable A+/D+) +$poll_rules = (isset($_POST["poll_rules"]) && !empty($_POST['btn_poll_rules'])) ? $_POST["poll_rules"] : substr($poll->format, 1, 1); // TODO OPZ Handle comment disabling +$poll_rules_opt1 = '';$poll_rules_opt2 = '';$poll_rules_opt3 = ''; +if($poll->editable) { + $poll_rules_text = ' '. _("Votes are editable"); + $poll_rules_opt3 = 'selected'; +} elseif($poll_rules == '-') { + $poll_rules_text = ' '. _("Votes and comments are locked"); + $poll_rules_opt1 = 'selected'; +} else { + $poll_rules_text = ' '. _("Votes and comments are open"); + $poll_rules_opt2 = 'selected'; +} + +if ($errors!='') { + Utils::print_header(_("Error!")); + bandeau_titre(_("Error!")); + + echo '
    '."\n"; + +} else { + Utils::print_header(_('Poll administration').' - '.$title); + bandeau_titre(_('Poll administration').' - '.$title); + + // session_unset(); +} + +echo ' +
    +
    +
    +
    +

    '.$title.'

    + +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    +

    '. _("Initiator of the poll") .'

    +

    '.stripslashes($poll->admin_name).'

    +
    +
    +

    '.$email_admin.'

    + +
    +
    +
    +
    +

    '._("Description") .'


    +

    '.$description.'

    + +
    +
    +
    + + +
    +

    '. _("Expiration's date") .'

    +

    '.date("d/m/Y",strtotime($poll->end_date)).'

    +
    +
    +
    +
    +
    +

    '.$poll_rules_text.'

    + +
    +
    +
    +
    +
    '."\n"; // .jumbotron + +// Table headers +$thead = ''; + +// Button in the first td to avoid remove col on "Return" keypress) +$tr_add_remove_col = ''; + +$border = array(); // bordure pour distinguer les mois +$td_headers = array(); // for a11y, headers="M1 D4 H5" on each td +$radio_title = array(); // date for + +// Display dates poll +if ($poll->format == "D") { + + $tr_months = ''; + $tr_days = ''; + $tr_hours = ''; + + // Headers + $colspan_month = 1; + $colspan_day = 1; + + foreach ($sujets as $i=>$sujet) { + + // Current date + $horoCur = explode('@', $sujet->sujet); //horoCur[0] = date, horoCur[1] = hour + if (isset($sujets[$i+1])){ + $next = $sujets[$i+1]->sujet; + $horoNext = explode('@', $next); + } + $border[$i] = false; + $radio_title[$i] = strftime($date_format['txt_short'], $horoCur[0]); + + // Months + $td_headers[$i] = 'M'.($i+1-$colspan_month); + + if (isset($sujets[$i+1]) && strftime("%B", $horoCur[0]) == strftime("%B", $horoNext[0]) && strftime("%Y", $horoCur[0]) == strftime("%Y", $horoNext[0])){ + $colspan_month++; + } else { + $border[$i] = true; + $tr_months .= ''.strftime("%B",$horoCur[0]).' '.strftime("%Y", $horoCur[0]).''; + $colspan_month=1; + } + + // Days + $td_headers[$i] .= ' D'.($i+1-$colspan_day); + + if (isset($sujets[$i+1]) && strftime($date_format['txt_day'],$horoCur[0])==strftime($date_format['txt_day'],$horoNext[0]) && strftime("%B",$horoCur[0])==strftime("%B",$horoNext[0])){ + $colspan_day++; + } else { + $rbd = ($border[$i]) ? ' rbd' : ''; + $tr_days .= ''.strftime($date_format['txt_day'],$horoCur[0]).''; + $colspan_day=1; + } + + // Hours + $rbd = ($border[$i]) ? ' rbd' : ''; + if ($horoCur[1] !== "") { + $tr_hours .= ''.$horoCur[1].''; + $radio_title[$i] .= ' - '.$horoCur[1]; + $td_headers[$i] .= ' H'.$i; + } else { + $tr_hours .= ''; + } + + // Remove col + $tr_add_remove_col .= (count($sujets) > 2 ) ? '' : ''; + + } + + $border[count($border)-1] = false; // suppression de la bordure droite du dernier mois + + $tr_months .= ''; + $tr_days .= ''; + $tr_hours .= ''; + + // Add col + $tr_add_remove_col .= ''; + + $thead = "\n".$tr_add_remove_col."\n".$tr_months."\n".$tr_days."\n".$tr_hours."\n"; + +// Subjects poll +} else { + $tr_subjects = ''; + + foreach ($sujets as $i=>$sujet) { + + $td_headers[$i]='';$radio_title[$i]=''; // init before concatenate + + // Subjects + preg_match_all('/\[!\[(.*?)\]\((.*?)\)\]\((.*?)\)/',$sujet->sujet,$md_a_img); // Markdown [![alt](src)](href) + preg_match_all('/!\[(.*?)\]\((.*?)\)/',$sujet->sujet,$md_img); // Markdown ![alt](src) + preg_match_all('/\[(.*?)\]\((.*?)\)/',$sujet->sujet,$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]!='') { // [![alt](src)](href) + + $th_subject_text = (isset($md_a_img[1][0]) && $md_a_img[1][0]!='') ? stripslashes($md_a_img[1][0]) : _("Choice") .' '.($i+1); + $th_subject_html = ''.$th_subject_text.''; + + } elseif (isset($md_img[2][0]) && $md_img[2][0]!='') { // ![alt](src) + + $th_subject_text = (isset($md_img[1][0]) && $md_img[1][0]!='') ? stripslashes($md_img[1][0]) : _("Choice") .' '.($i+1); + $th_subject_html = ''.$th_subject_text.''; + + } elseif (isset($md_a[2][0]) && $md_a[2][0]!='') { // [text](href) + + $th_subject_text = (isset($md_a[1][0]) && $md_a[1][0]!='') ? stripslashes($md_a[1][0]) : _("Choice") .' '.($i+1); + $th_subject_html = ''.$th_subject_text.''; + + } else { // text only + + $th_subject_text = stripslashes($sujet->sujet); + $th_subject_html = $th_subject_text; + + } + $tr_subjects .= ''.$th_subject_html.''; + + $border[$i] = false; + $td_headers[$i] .= 'S'.$i; + $radio_title[$i] .= $th_subject_text; + + // Remove col + $tr_add_remove_col .= ''; + } + + // Add col + $tr_add_remove_col .= ''; + + $thead = $tr_add_remove_col.$tr_subjects.''; +} + +// Print headers +echo ' +
    + +
    +

    ' . _('As poll administrator, you can change all the lines of this poll with this button ').'' . _('Edit') . ', + ' . _(' remove a column or a line with ') . '' . _('Remove') . ' + ' . _('and add a new column with '). ''. _('Add a column') . '

    +

    ' . _('Finally, you can change the informations of this poll like the title, the comments or your email address.') . '

    + +
    + + + +

    '._('Votes of the poll ').'

    +
    + + + '. $thead . ' + '; + +// Print poll results +$somme[] = 0; +$compteur = 0; + +foreach($users as $user) { + + $ensemblereponses = $user->reponses; + + // Print name + echo ' +'."\n"; + + // si la ligne n'est pas a changer, on affiche les données + if (!$testligneamodifier) { + for ($k = 0; $k < $nbcolonnes; $k++) { + $rbd = ($border[$k]) ? ' rbd' : ''; + $car = substr($ensemblereponses, $k, 1); + switch ($car) { + case "1": echo ''."\n"; + if (isset($somme[$k]) === false) { + $somme[$k] = 0; + } + $somme[$k]++; break; + case "2": echo ''."\n"; break; + default: echo ''."\n";break; + } + } + } else { // sinon on remplace les choix de l'utilisateur par une ligne de radio pour recuperer de nouvelles valeurs + // si c'est bien la ligne a modifier on met les radios + if ($compteur == "$ligneamodifier") { + for ($j = 0; $j < $nbcolonnes; $j++) { + + $car = substr($ensemblereponses, $j, 1); + + // variable pour afficher la valeur cochée + $car_html[0]='value="0"';$car_html[1]='value="1"';$car_html[2]='value="2"'; + switch ($car) { + case "1": $car_html[1]='value="1" checked';break; + case "2": $car_html[2]='value="2" checked';break; + default: $car_html[0]='value="0" checked';break; + } + + echo ' + '."\n"; + + } + } else { //sinon on affiche les lignes normales + for ($k = 0; $k < $nbcolonnes; $k++) { + $rbd = ($border[$k]) ? ' rbd' : ''; + $car = substr($ensemblereponses, $k, 1); + switch ($car) { + case "1": echo ''."\n"; + if (isset($somme[$k]) === false) { + $somme[$k] = 0; + } + $somme[$k]++; break; + case "2": echo ''."\n"; break; + default: echo ''."\n";break; + } + } + } + } + + //a la fin de chaque ligne se trouve les boutons modifier + if (!$testligneamodifier=="true") { + echo ' + '."\n"; + } + + //demande de confirmation pour modification de ligne + for ($i = 0; $i < $nblignes; $i++) { + if (isset($_POST["modifierligne$i"])) { + if ($compteur == $i) { + echo ''."\n"; + } + } + } + + $compteur++; + echo ''."\n"; +} + +if (!$testligneamodifier=="true") { + //affichage de la case vide de texte pour un nouvel utilisateur + echo ' +'."\n"; + + //une ligne de checkbox pour le choix du nouvel utilisateur + for ($i = 0; $i < $nbcolonnes; $i++) { + echo ' + '."\n"; + } + + // Affichage du bouton de formulaire pour inscrire un nouvel utilisateur dans la base + echo ' +'."\n"; + +} + +// Addition and Best choice +//affichage de la ligne contenant les sommes de chaque colonne +$tr_addition = ''; +$meilleurecolonne = max($somme); +$compteursujet = 0; +$meilleursujet = ''; + + $meilleursujet.= '
  • '.$radio_title[$i].'
  • '; + $compteursujet++; + + } else { + $tr_addition .= ''; + } + } else { + $tr_addition .= ''; + } +} +$tr_addition .= ''; + +$meilleursujet = str_replace("°", "'", $meilleursujet).''; +$vote_str = ($meilleurecolonne > 1) ? $vote_str = _('votes') : _('vote'); + +// Print Addition and Best choice +echo $tr_addition.' + +
    '._('Votes of the poll ').$title.'
    '.stripslashes($user->nom).' ' . _('Yes') . '() ' . _('Yes') . _(', ifneedbe') . '' . _('No') . ' +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    +
    ' . _('Yes') . '() ' . _('Yes') . _(', ifneedbe') . '' . _('No') . ' + + +
    +
    + + +
    +
    +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    +
    '. _("Addition") .''.$somme[$i].''.$somme[$i].'
    +
    +
    '."\n"; + +if ($compteursujet == 1) { + echo ' +

    ' . _("Best choice") . '

    +
    +

    ' . _("The best choice at this time is:") . '

    + ' . $meilleursujet . ' +

    ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . '.

    +
    '."\n"; +} elseif ($compteursujet > 1) { + echo ' +

    ' . _("Best choices") . '

    +
    +

    ' . _("The bests choices at this time are:") . '

    + ' . $meilleursujet . ' +

    ' . _("with") . ' ' . $meilleurecolonne . ' ' . $vote_str . '.

    +
    '."\n"; +} + +echo ' +
    +
    '."\n"; + +// Commments +$comment_user = $connect->allComments($poll_id); + +if (count($comment_user) != 0) { + echo '

    ' . _("Comments of polled people") . '

    '."\n"; + + $i = 0; + while ( $dcomment=$comment_user->FetchNextObject(false)) { + echo ' +
    + + '.stripslashes($dcomment->usercomment). ' : + ' . stripslashes(nl2br($dcomment->comment)) . ' +
    '; + $i++; + } + echo '
    '; +} +echo ' +
    +
    +
    ' . _("Add a comment in the poll") . ' +
    +

    +
    +
    +


    +

    +
    +

    +
    +
    +
    +
    +
    '; + +bandeau_pied(); diff --git a/studs.php b/studs.php index 3fba002..6f6a2e8 100644 --- a/studs.php +++ b/studs.php @@ -26,6 +26,7 @@ include_once __DIR__ . '/app/inc/init.php'; /* Variables */ /* --------- */ $poll_id = null; +$poll = null; $message = null; /* Services */ @@ -39,10 +40,9 @@ $inputService = new InputService(); if(!empty($_GET['poll'])) { $poll_id = filter_input(INPUT_GET, 'poll', FILTER_VALIDATE_REGEXP, ['options'=>['regexp'=>'/^[a-z0-9]+$/']]); + $poll = $pollService->findById($poll_id); } -$poll = $pollService->findById($poll_id); - if (!$poll) { $smarty->assign('error', 'This poll doesn\'t exist'); $smarty->display('error.tpl');