Fix survey already answered by anonymous users - res BT#10490

1.10.x
Angel Fernando Quiroz Campos 10 years ago
parent dfeca4654e
commit 8a2239142f
  1. 12
      main/survey/fillsurvey.php
  2. 47
      main/survey/survey.lib.php

@ -139,8 +139,13 @@ if (Database::num_rows($result) < 1) {
$survey_invitation = Database::fetch_array($result, 'ASSOC');
// Now we check if the user already filled the survey
if ( !isset($_POST['finish_survey']) &&
($isAnonymous && isset($_SESSION['surveyuser'])) ||
if (
!isset($_POST['finish_survey']) &&
(
$isAnonymous &&
isset($_SESSION['surveyuser']) &&
SurveyUtil::isSurveyAnsweredFlagged($survey_invitation['survey_code'], $survey_invitation['c_id'])
) ||
($survey_invitation['answered'] == 1 && !isset($_GET['user_id']))
) {
api_not_allowed(true, get_lang('YouAlreadyFilledThisSurvey'));
@ -576,6 +581,9 @@ if (isset($_POST['finish_survey'])) {
$survey_invitation['user'],
$survey_invitation['survey_code']
);
SurveyUtil::flagSurveyAsAnswered($survey_invitation['survey_code'], $survey_invitation['c_id']);
unset($_SESSION['paged_questions']);
unset($_SESSION['page_questions_sec']);
Display :: display_footer();

@ -4906,4 +4906,51 @@ class SurveyUtil
}
return $htmlChart;
}
/**
* Set a flag to the current survey as answered by the current user
* @param string $surveyCode The survey code
* @param int $courseId The course ID
*/
public static function flagSurveyAsAnswered($surveyCode, $courseId)
{
$currenUserId = api_get_user_id();
$flag = sprintf("%s-%s-%d", $courseId, $surveyCode, $currenUserId);
if (!isset($_SESSION['filled_surveys'])) {
$_SESSION['filled_surveys'] = array();
}
$_SESSION['filled_surveys'][] = $flag;
}
/**
* Check whether a survey was answered by the current user
* @param string $surveyCode The survey code
* @param int $courseId The course ID
* @return boolean
*/
public static function isSurveyAnsweredFlagged($surveyCode, $courseId)
{
$currenUserId = api_get_user_id();
$flagToCheck = sprintf("%s-%s-%d", $courseId, $surveyCode, $currenUserId);
if (!isset($_SESSION['filled_surveys'])) {
return false;
}
if (!is_array($_SESSION['filled_surveys'])) {
return false;
}
foreach ($_SESSION['filled_surveys'] as $flag) {
if ($flagToCheck != $flag) {
continue;
}
return true;
}
return false;
}
}

Loading…
Cancel
Save