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

1.9.x
Angel Fernando Quiroz Campos 10 years ago
parent 545d503e5f
commit 4fddeb5095
  1. 12
      main/survey/fillsurvey.php
  2. 47
      main/survey/survey.lib.php

@ -141,8 +141,13 @@ if (Database::num_rows($result) < 1) {
$survey_invitation = Database::fetch_array($result, 'ASSOC'); $survey_invitation = Database::fetch_array($result, 'ASSOC');
// Now we check if the user already filled the survey // Now we check if the user already filled the survey
if ( !isset($_POST['finish_survey']) && if (
($isAnonymous && isset($_SESSION['surveyuser'])) || !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'])) ($survey_invitation['answered'] == 1 && !isset($_GET['user_id']))
) { ) {
Display :: display_error_message(get_lang('YouAlreadyFilledThisSurvey'), false); Display :: display_error_message(get_lang('YouAlreadyFilledThisSurvey'), false);
@ -523,6 +528,9 @@ if (isset($_POST['finish_survey'])) {
$survey_invitation['user'], $survey_invitation['user'],
$survey_invitation['survey_code'] $survey_invitation['survey_code']
); );
SurveyUtil::flagSurveyAsAnswered($survey_invitation['survey_code'], $survey_invitation['c_id']);
unset($_SESSION['paged_questions']); unset($_SESSION['paged_questions']);
unset($_SESSION['page_questions_sec']); unset($_SESSION['page_questions_sec']);
Display :: display_footer(); Display :: display_footer();

@ -5190,4 +5190,51 @@ class SurveyUtil
return false; return false;
} }
} }
/**
* 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