<?php
/***************************************************************************
- * Copyright (C) 2003-2007 Polytechnique.org *
+ * Copyright (C) 2003-2010 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
const MODE_ALL = 0;
const MODE_XANON = 1;
const MODE_XIDENT = 2;
- private static $longModes = array(self::MODE_ALL => "sondage ouvert à tout le monde, anonyme",
+ private static $longModes = array(self::MODE_ALL => "sondage ouvert à tout le monde, anonyme",
self::MODE_XANON => "sondage restreint aux polytechniciens, anonyme",
self::MODE_XIDENT => "sondage restreint aux polytechniciens, non anonyme");
private static $shortModes = array(self::MODE_ALL => "tout le monde, anonyme",
private static $types = array('text' => 'Texte court',
'textarea' => 'Texte long',
- 'num' => 'Numérique',
- 'radio' => 'Choix multiples (une réponse)',
- 'checkbox' => 'Choix multiples (plusieurs réponses)',
- 'radiotable' => 'Questions multiples à choix multiples (une réponse)',
- 'checkboxtable' => 'Questions multiples à choix mutliples (plusieurs réponses)');
+ 'num' => 'Numérique',
+ 'radio' => 'Choix multiples (une réponse)',
+ 'checkbox' => 'Choix multiples (plusieurs réponses)',
+ 'radiotable' => 'Questions multiples à choix multiples (une réponse)',
+ 'checkboxtable' => 'Questions multiples à choix mutliples (plusieurs réponses)');
public static function getTypes()
{
if ($this->mode == self::MODE_ALL) {
$args['promos'] = '';
}
+ $args['promos'] = str_replace(' ', '', $args['promos']);
$this->promos = ($args['promos'] == '' || preg_match('#^(\d{4}-?|(\d{4})?-\d{4})(,(\d{4}-?|(\d{4})?-\d{4}))*$#', $args['promos']))? $args['promos'] : '#';
}
// }}}
$nbf = count($line);
$users = array();
if ($this->isMode(self::MODE_XIDENT)) { // if the mode is non anonymous
- $sql = 'SELECT v.id AS vid, a.nom, a.prenom, a.promo
- FROM survey_votes AS v
- INNER JOIN auth_user_md5 AS a
- ON a.user_id=v.user_id
- WHERE v.survey_id={?}
- ORDER BY vid ASC;';
- $res = XDB::iterator($sql, $this->id); // retrieves all users data
- for ($u = $res->next(); $u != null; $u = $res->next()) {
- $users[$u['vid']] = array('nom' => $u['nom'], 'prenom' => $u['prenom'], 'promo' => $u['promo']);
- }
+ $users = User::getBulkUsersWithUIDs(XDB::fetchAllAssoc('vid', 'SELECT v.id AS vid, v.uid
+ FROM survey_votes AS v
+ WHERE v.survey_id = {?}
+ ORDER BY vid ASC',
+ $this->id));
}
$sql = 'SELECT v.id AS vid, a.question_id AS qid, a.answer AS answer
FROM survey_votes AS v
WHERE v.survey_id={?}
ORDER BY vid ASC, qid ASC, answer ASC;';
$res = XDB::iterator($sql, $this->id); // retrieves all answers from database
- $cur = $res->next();
$vid = -1;
$vid_ = 0;
- while ($cur != null) {
+ while (($cur = $res->next()) != null) {
if ($vid != $cur['vid']) { // if the vote id changes, then starts a new line
fputcsv($csv, $line, $sep, $enc); // stores the former line into $csv_output
$vid = $cur['vid'];
$line = array_fill(0, $nbf, ''); // creates an array full of empty string
$line[0] = $vid_; // the first field is a 'clean' vote id (not the one stored in database)
if ($this->isMode(self::MODE_XIDENT)) { // if the mode is non anonymous
- if (array_key_exists($vid, $users) && is_array($users[$vid])) { // and if the user data can be found
- $line[1] = $users[$vid]['nom']; // adds the user data (in the first fields of the line)
- $line[2] = $users[$vid]['prenom'];
- $line[3] = $users[$vid]['promo'];
+ if (array_key_exists($vid, $users)) { // and if the user data can be found
+ $line[1] = $users[$vid]->lastName(); // adds the user data (in the first fields of the line)
+ $line[2] = $users[$vid]->firstName();;
+ $line[3] = $users[$vid]->promo();
}
}
$vid_++;
}
$line[$fid] .= $a; // adds the current answer to the correct field
}
- $cur = $res->next(); // gets next answer
}
fputcsv($csv, $line, $sep, $enc); // stores the last line into $csv_output
return $csv_output;
// {{{ function checkSyntax() : checks syntax of the questions (currently the root only) before storing the survey in database
private static $errorMessages = array(
- "datepassed" => "la date de fin de sondage est déjà dépassée : vous devez préciser une date future",
- "promoformat" => "les restrictions à certaines promotions sont mal formattées"
+ "datepassed" => "la date de fin de sondage est déjà dépassée : vous devez préciser une date future",
+ "promoformat" => "les restrictions à certaines promotions sont mal formattées"
);
public function checkSyntax()
return null;
}
$sql = 'SELECT id, title, end, mode
- FROM survey_surveys
+ FROM surveys
WHERE '.$where.'
ORDER BY end DESC;';
if ($tpl) {
public static function retrieveSurvey($sid)
{
$sql = 'SELECT questions, title, description, end, mode, promos
- FROM survey_surveys
+ FROM surveys
WHERE id={?}';
$res = XDB::query($sql, $sid);
$data = $res->fetchOneAssoc();
public static function retrieveSurveyInfo($sid)
{
$sql = 'SELECT title, description, end, mode, promos
- FROM survey_surveys
+ FROM surveys
WHERE id={?}';
$res = XDB::query($sql, $sid);
return $res->fetchOneAssoc();
public function proposeSurvey()
{
require_once 'validations.inc.php';
- $surveyreq = new SurveyReq($this->title, $this->description, $this->end, $this->mode, $this->promos, $this->questions, S::v('uid'));
+ $surveyreq = new SurveyReq($this->title, $this->description, $this->end, $this->mode, $this->promos, $this->questions, S::user());
return $surveyreq->submit();
}
// }}}
public function updateSurvey()
{
if ($this->valid) {
- $sql = 'UPDATE survey_surveys
+ $sql = 'UPDATE surveys
SET questions={?},
title={?},
description={?},
// {{{ functions vote() and hasVoted() : handles vote to a survey
public function vote($uid, $args)
{
- XDB::execute('INSERT INTO survey_votes
- SET survey_id={?}, user_id={?};', $this->id, $uid); // notes the user as having voted
+ XDB::execute('INSERT INTO survey_votes
+ SET survey_id = {?}, uid = {?};', $this->id, $uid); // notes the user as having voted
$vid = XDB::insertId();
for ($i = 0; $i < count($this->questions); $i++) {
$ans = $this->questions[$i]->checkAnswer($args[$i]);
public function hasVoted($uid)
{
- $res = XDB::query('SELECT id
- FROM survey_votes
- WHERE survey_id={?} AND user_id={?};', $this->id, $uid); // checks whether the user has already voted
+ $res = XDB::query('SELECT id
+ FROM survey_votes
+ WHERE survey_id = {?} AND uid = {?};', $this->id, $uid); // checks whether the user has already voted
return ($res->numRows() != 0);
}
// }}}
public static function deleteSurvey($sid)
{
$sql = 'DELETE s.*, v.*, a.*
- FROM survey_surveys AS s
+ FROM surveys AS s
LEFT JOIN survey_votes AS v
ON v.survey_id=s.id
LEFT JOIN survey_answers AS a
// }}}
// }}}
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+// vim:set et sw=4 sts=4 ts=4 foldmethod=marker enc=utf-8:
?>