*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
/**
* \file htdocs/opensurvey/adminstuds_preview.php
* \ingroup opensurvey
* \brief Page to preview votes of a survey
*/
$res=0;
require_once('../main.inc.php');
require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
require_once(DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php");
require_once(DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php");
// Security check
if (!$user->admin) accessforbidden();
// Init vars
$action=GETPOST('action');
$numsondageadmin=GETPOST("sondage");
$numsondage=substr($numsondageadmin, 0, 16);
$object=new Opensurveysondage($db);
$result=$object->fetch(0,$numsondage);
if ($result <= 0) dol_print_error('','Failed to get survey id '.$numsondage);
$nblignes=count($object->fetch_lines());
/*
* Actions
*/
$nbcolonnes = substr_count($object->sujet, ',') + 1;
// Add vote
if (isset($_POST["boutonp"]) || isset($_POST["boutonp_x"]))
{
if (GETPOST('nom'))
{
$erreur_prenom = false;
$nouveauchoix = '';
for ($i=0;$i<$nbcolonnes;$i++)
{
if (isset($_POST["choix$i"]) && $_POST["choix$i"] == '1')
{
$nouveauchoix.="1";
}
else if (isset($_POST["choix$i"]) && $_POST["choix$i"] == '2')
{
$nouveauchoix.="2";
}
else { // sinon c'est 0
$nouveauchoix.="0";
}
}
$nom=substr(GETPOST("nom"),0,64);
// Check if vote already exists
$sql = 'SELECT id_users, nom';
$sql.= ' FROM '.MAIN_DB_PREFIX.'opensurvey_user_studs';
$sql.= " WHERE id_sondage='".$db->escape($numsondage)."' AND nom = '".$db->escape($nom)."'";
$sql.= ' ORDER BY id_users';
$resql = $db->query($sql);
$num_rows = $db->num_rows($resql);
if ($num_rows > 0)
{
setEventMessage($langs->trans("VoteNameAlreadyExists"),'errors');
$error++;
}
else
{
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'opensurvey_user_studs (nom, id_sondage, reponses)';
$sql.= " VALUES ('".$db->escape($nom)."', '".$db->escape($numsondage)."','".$db->escape($nouveauchoix)."')";
$resql=$db->query($sql);
if (! $resql) dol_print_error($db);
}
}
}
// Update vote
$testmodifier = false;
$testligneamodifier = false;
$ligneamodifier = -1;
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;
}
}
if ($testmodifier)
{
//var_dump($_POST);exit;
$nouveauchoix = '';
for ($i = 0; $i < $nbcolonnes; $i++)
{
//var_dump($_POST["choix$i"]);
if (isset($_POST["choix$i"]) && $_POST["choix$i"] == '1')
{
$nouveauchoix.="1";
}
else if (isset($_POST["choix$i"]) && $_POST["choix$i"] == '2')
{
$nouveauchoix.="2";
}
else { // sinon c'est 0
$nouveauchoix.="0";
}
}
$idtomodify=$_POST["idtomodify".$modifier];
$sql = 'UPDATE '.MAIN_DB_PREFIX."opensurvey_user_studs";
$sql.= " SET reponses = '".$db->escape($nouveauchoix)."'";
$sql.= " WHERE id_users = '".$db->escape($idtomodify)."'";
dol_syslog("sql=".$sql);
$resql = $db->query($sql);
if (! $resql) dol_print_error($db);
}
// Add column (not for date)
if (GETPOST("ajoutercolonne") && GETPOST('nouvellecolonne') && ($object->format == "A" || $object->format == "A+"))
{
$nouveauxsujets=$object->sujet;
//on rajoute la valeur a la fin de tous les sujets deja entrés
$nouveauxsujets.=',';
$nouveauxsujets.=str_replace(array(",","@"), " ", $_POST["nouvellecolonne"]).(empty($_POST["typecolonne"])?'':'@'.$_POST["typecolonne"]);
//mise a jour avec les nouveaux sujets dans la base
$sql = 'UPDATE '.MAIN_DB_PREFIX."opensurvey_sondage";
$sql.= " SET sujet = '".$db->escape($nouveauxsujets)."'";
$sql.= " WHERE id_sondage = '".$db->escape($numsondage)."'";
dol_syslog("sql=".$sql);
$resql = $db->query($sql);
if (! $resql) dol_print_error($db);
}
// Add column (with format date)
if (isset($_POST["ajoutercolonne"]) && ($object->format == "D" || $object->format == "D+"))
{
$nouveauxsujets=$object->sujet;
if (isset($_POST["nouveaujour"]) && $_POST["nouveaujour"] != "vide" &&
isset($_POST["nouveaumois"]) && $_POST["nouveaumois"] != "vide" &&
isset($_POST["nouvelleannee"]) && $_POST["nouvelleannee"] != "vide") {
$nouvelledate=dol_mktime(0, 0, 0, $_POST["nouveaumois"], $_POST["nouveaujour"], $_POST["nouvelleannee"]);
if (isset($_POST["nouvelleheuredebut"]) && $_POST["nouvelleheuredebut"]!="vide"){
$nouvelledate.="@";
$nouvelledate.=$_POST["nouvelleheuredebut"];
$nouvelledate.="h";
if ($_POST["nouvelleminutedebut"]!="vide") {
$nouvelledate.=$_POST["nouvelleminutedebut"];
}
}
if (isset($_POST["nouvelleheurefin"]) && $_POST["nouvelleheurefin"]!="vide"){
$nouvelledate.="-";
$nouvelledate.=$_POST["nouvelleheurefin"];
$nouvelledate.="h";
if ($_POST["nouvelleminutefin"]!="vide") {
$nouvelledate.=$_POST["nouvelleminutefin"];
}
}
if($_POST["nouvelleheuredebut"] == "vide" || (isset($_POST["nouvelleheuredebut"]) && isset($_POST["nouvelleheurefin"]) && (($_POST["nouvelleheuredebut"] < $_POST["nouvelleheurefin"]) || (($_POST["nouvelleheuredebut"] == $_POST["nouvelleheurefin"]) && ($_POST["nouvelleminutedebut"] < $_POST["nouvelleminutefin"]))))) {
$erreur_ajout_date = false;
} else {
$erreur_ajout_date = "yes";
}
//on rajoute la valeur dans les valeurs
$datesbase = explode(",",$object->sujet);
$taillebase = count($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 {
$nbdatesbase=count($datesbase);
for ($i = 0; $i < $nbdatesbase; $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 = '';
$nbofdates=count($datesbase);
for ($i = 0; $i < $nbofdates; $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 '.MAIN_DB_PREFIX."opensurvey_sondage";
$sql.= " SET sujet = '".$db->escape($dateinsertion)."'";
$sql.= " WHERE id_sondage = '".$db->escape($numsondage)."'";
dol_syslog("sql=".$sql);
$resql = $db->query($sql);
if (! $resql) dol_print_error($db);
if ($nouvelledate > strtotime($object->date_fin))
{
$date_fin=$nouvelledate+200000;
$sql = 'UPDATE '.MAIN_DB_PREFIX.'opensurvey_sondage';
$sql.= " SET date_fin = '".$db->escape($date_fin)."'";
$sql.= " WHERE id_sondage = '".$db->escape($numsondage)."'";
dol_syslog("sql=".$sql);
$resql = $db->query($sql);
if (! $resql) dol_print_error($db);
}
}
$adresseadmin = $object->mail_admin;
}
else
{
$erreur_ajout_date="yes";
}
}
// Delete line
for ($i = 0; $i < $nblignes; $i++)
{
if (isset($_POST["effaceligne$i"]) || isset($_POST['effaceligne'.$i.'_x']))
{
$compteur=0;
// Loop on each answer
$compteur = 0;
$sql ="SELECT id_users, nom, id_sondage, reponses";
$sql.=" FROM ".MAIN_DB_PREFIX."opensurvey_user_studs";
$sql.=" WHERE id_sondage = '".$db->escape($numsondage)."'";
dol_syslog('sql='.$sql);
$resql=$db->query($sql);
if (! $resql) dol_print_error($db);
$num=$db->num_rows($resql);
while ($compteur < $num)
{
$obj=$db->fetch_object($resql);
if ($compteur==$i)
{
$sql2 = 'DELETE FROM '.MAIN_DB_PREFIX.'opensurvey_user_studs';
$sql2.= ' WHERE id_users = '.$db->escape($obj->id_users);
$resql2 = $db->query($sql2);
}
$compteur++;
}
}
}
// Delete column
for ($i = 0; $i < $nbcolonnes; $i++)
{
if ((isset($_POST["effacecolonne$i"]) || isset($_POST['effacecolonne'.$i.'_x'])) && $nbcolonnes > 1)
{
$db->begin();
$toutsujet = explode(",",$object->sujet);
$j = 0;
$nouveauxsujets = '';
//parcours de tous les sujets actuels
while (isset($toutsujet[$j]))
{
//si le sujet n'est pas celui qui a été effacé alors on concatene
if ($i != $j)
{
if (! empty($nouveauxsujets)) $nouveauxsujets .= ',';
$nouveauxsujets .= $toutsujet[$j];
}
$j++;
}
// Mise a jour des sujets dans la base
$sql = 'UPDATE '.MAIN_DB_PREFIX."opensurvey_sondage";
$sql.= " SET sujet = '".$db->escape($nouveauxsujets)."' WHERE id_sondage = '".$db->escape($numsondage)."'";
dol_syslog("sql=".$sql);
$resql = $db->query($sql);
if (! $resql) dol_print_error($db);
// Clean current answer to remove deleted columns
$compteur = 0;
$sql ="SELECT id_users, nom, id_sondage, reponses";
$sql.=" FROM ".MAIN_DB_PREFIX."opensurvey_user_studs";
$sql.=" WHERE id_sondage = '".$db->escape($numsondage)."'";
dol_syslog('sql='.$sql);
$resql=$db->query($sql);
if (! $resql)
{
dol_print_error($db);
exit;
}
$num=$db->num_rows($resql);
while ($compteur < $num)
{
$obj=$db->fetch_object($resql);
$newcar = '';
$ensemblereponses = $obj->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;
}
}
// mise a jour des reponses utilisateurs dans la base
$sql2 = 'UPDATE '.MAIN_DB_PREFIX.'opensurvey_user_studs';
$sql2.= " SET reponses = '".$db->escape($newcar)."'";
$sql2.= " WHERE id_users = '".$db->escape($obj->id_users)."'";
//print $sql2;
dol_syslog('sql='.$sql2);
$resql2 = $db->query($sql2);
$compteur++;
}
$db->commit();
}
}
/*
* View
*/
$form=new Form($db);
$result=$object->fetch(0,$numsondage);
if ($result <= 0)
{
print $langs->trans("ErrorRecordNotFound");
llxFooter();
exit;
}
$arrayofjs=array();
$arrayofcss=array('/opensurvey/css/style.css');
llxHeader('',$object->titre, 0, 0, 0, 0, $arrayofjs, $arrayofcss);
// Define format of choices
$toutsujet=explode(",",$object->sujet);
$listofanswers=array();
foreach ($toutsujet as $value)
{
$tmp=explode('@',$value);
$listofanswers[]=array('label'=>$tmp[0],'format'=>($tmp[1]?$tmp[1]:'checkbox'));
}
$toutsujet=str_replace("@","
",$toutsujet);
$toutsujet=str_replace("°","'",$toutsujet);
print '
'."\n";
print '';
showlogo();
// Add form to add a field
if (GETPOST('ajoutsujet'))
{
//on recupere les données et les sujets du sondage
print ''."\n";
print ''."\n";
llxFooterSurvey();
$db->close();
?>