<?php
/***************************************************************************
- * Copyright (C) 2003-2010 Polytechnique.org *
+ * Copyright (C) 2003-2013 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
private $promos;
private $valid;
private $questions;
+ private $creator;
public function __construct($args, $id = -1, $valid = false, $questions = null)
{
$this->title = $args['title'];
$this->description = $args['description'];
$this->end = $args['end'];
- $this->mode = (isset($args['mode']))? $args['mode'] : self::MODE_ALL;
+ $this->mode = (isset($args['mode']))? $args['mode'] : self::MODE_ALL;
+ $this->creator = $args['uid'];
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'] : '#';
}
+
+ public function canSeeEarlyResults(User $user)
+ {
+ return $user->id() == $this->creator || $user->checkPerms('admin');
+ }
// }}}
// {{{ functions to access general information
$nbf = count($line);
$users = array();
if ($this->isMode(self::MODE_XIDENT)) { // if the mode is non anonymous
- $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));
+ $users = 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
$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)) { // 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();
+ $user=PlUser::getWithUID($users[$vid]);
+ $line[1] = $user->lastName(); // adds the user data (in the first fields of the line)
+ $line[2] = $user->firstName();
+ $line[3] = $user->promo();
}
}
$vid_++;
default:
return null;
}
- $sql = 'SELECT id, title, end, mode
+ if (!S::user()->checkPerms(PERMS_USER)) {
+ $where .= XDB::format(' AND mode = {?}', self::MODE_ALL);
+ }
+ $sql = 'SELECT id, title, uid, end, mode
FROM surveys
WHERE '.$where.'
ORDER BY end DESC;';
// {{{ static function retrieveSurvey() : gets a survey in database (and unserialize the survey object structure)
public static function retrieveSurvey($sid)
{
- $sql = 'SELECT questions, title, description, end, mode, promos
+ $sql = 'SELECT questions, title, description, end, mode, promos, uid
FROM surveys
WHERE id={?}';
$res = XDB::query($sql, $sid);
public function vote($uid, $args)
{
XDB::execute('INSERT INTO survey_votes
- SET survey_id = {?}, uid = {?};', $this->id, $uid); // notes the user as having voted
+ SET survey_id = {?}, uid = {?}',
+ $this->id, ($uid == 0) ? null : $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]);