X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fsurvey%2Fsurvey.inc.php;h=b3b089c32873bdd8492967ead5dd62108a0188c2;hb=4a8fab0a57b5e63a140ea359cb79b931bbe5b426;hp=5d5087ae0e362443917f522f9616599f57ee97de;hpb=2f8bacc215bab9d9e3401e73004574cfb0eb4540;p=platal.git diff --git a/modules/survey/survey.inc.php b/modules/survey/survey.inc.php index 5d5087a..b3b089c 100644 --- a/modules/survey/survey.inc.php +++ b/modules/survey/survey.inc.php @@ -1,6 +1,6 @@ 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 @@ -103,7 +111,9 @@ class Survey if ((preg_match('#^\d{4}$#', $p) && $p == $promo) || (preg_match('#^\d{4}-$#', $p) && intval(substr($p, 0, 4)) <= $promo) || (preg_match('#^-\d{4}$#', $p) && intval(substr($p, 1)) >= $promo) || - (preg_match('#^\d{4}-\d{4}$#', $p) && intval(substr($p, 0, 4)) <= $promo && intval(substr($p, 5)) >= $promo)) { + (preg_match('#^\d{4}-\d{4}$#', $p) && + (intval(substr($p, 0, 4)) <= $promo && intval(substr($p, 5)) >= $promo || + intval(substr($p, 0, 4)) >= $promo && intval(substr($p, 5)) <= $promo ))) { return true; } } @@ -189,18 +199,17 @@ class Survey $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.user_id - 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 - LEFT JOIN survey_answers AS a - ON a.vote_id=v.id + INNER JOIN survey_answers AS a ON a.vote_id=v.id WHERE v.survey_id={?} - ORDER BY vid ASC, qid ASC, answer ASC;'; + ORDER BY vid ASC, qid ASC, answer ASC'; $res = XDB::iterator($sql, $this->id); // retrieves all answers from database $vid = -1; $vid_ = 0; @@ -212,9 +221,10 @@ class Survey $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_++; @@ -339,8 +349,11 @@ class Survey default: return null; } + if (!S::user()->checkPerms(PERMS_USER)) { + $where .= XDB::format(' AND mode = {?}', self::MODE_ALL); + } $sql = 'SELECT id, title, end, mode - FROM survey_surveys + FROM surveys WHERE '.$where.' ORDER BY end DESC;'; if ($tpl) { @@ -354,8 +367,8 @@ class Survey // {{{ 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 - FROM survey_surveys + $sql = 'SELECT questions, title, description, end, mode, promos, uid + FROM surveys WHERE id={?}'; $res = XDB::query($sql, $sid); $data = $res->fetchOneAssoc(); @@ -371,7 +384,7 @@ class Survey 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(); @@ -381,7 +394,6 @@ class Survey // {{{ static function retrieveSurveyReq() : gets a survey request to validate public static function retrieveSurveyReq($id) { - require_once 'validations.inc.php'; $surveyreq = Validate::get_request_by_id($id); if ($surveyreq == null) { return null; @@ -399,7 +411,6 @@ class Survey // {{{ function proposeSurvey() : stores a proposition of survey in database (before validation) public function proposeSurvey() { - require_once 'validations.inc.php'; $surveyreq = new SurveyReq($this->title, $this->description, $this->end, $this->mode, $this->promos, $this->questions, S::user()); return $surveyreq->submit(); } @@ -409,7 +420,7 @@ class Survey public function updateSurvey() { if ($this->valid) { - $sql = 'UPDATE survey_surveys + $sql = 'UPDATE surveys SET questions={?}, title={?}, description={?}, @@ -419,7 +430,6 @@ class Survey WHERE id={?};'; return XDB::execute($sql, serialize($this->questions), $this->title, $this->description, $this->end, $this->mode, $this->promos, $this->id); } else { - require_once 'validations.inc.php'; $surveyreq = Validate::get_request_by_id($this->id); if ($surveyreq == null) { return false; @@ -432,8 +442,9 @@ class Survey // {{{ 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 == 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]); @@ -450,9 +461,9 @@ class Survey 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); } // }}} @@ -461,7 +472,7 @@ class Survey 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