Learnpath: Enable survey access in LP without invitation - refs #5713

pull/5766/head
christianbeeznst 1 year ago
parent 3c939ba353
commit 24e0a60f53
  1. 7
      public/main/inc/lib/api.lib.php
  2. 24
      public/main/lp/learnpath.class.php
  3. 2
      public/main/lp/lp_view.php
  4. 75
      public/main/survey/fillsurvey.php
  5. 79
      public/main/survey/survey.lib.php
  6. 153
      public/main/survey/surveyUtil.class.php

@ -2438,7 +2438,12 @@ function api_check_password($password)
*/ */
function api_get_session_id() function api_get_session_id()
{ {
return (int) Session::read('sid', 0); $sessionId = (int) Session::read('sid', 0);
if (empty($sessionId) && !empty($_REQUEST['sid'])) {
$sessionId = (int) $_REQUEST['sid'];
}
return $sessionId;
} }
/** /**

@ -10,6 +10,7 @@ use Chamilo\CoreBundle\ServiceHelper\ThemeHelper;
use Chamilo\CourseBundle\Entity\CLpRelUser; use Chamilo\CourseBundle\Entity\CLpRelUser;
use Chamilo\CoreBundle\Framework\Container; use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CoreBundle\Repository\Node\CourseRepository; use Chamilo\CoreBundle\Repository\Node\CourseRepository;
use Chamilo\CourseBundle\Entity\CSurvey;
use Chamilo\CourseBundle\Repository\CLpRelUserRepository; use Chamilo\CourseBundle\Repository\CLpRelUserRepository;
use Chamilo\CourseBundle\Component\CourseCopy\CourseArchiver; use Chamilo\CourseBundle\Component\CourseCopy\CourseArchiver;
use Chamilo\CourseBundle\Component\CourseCopy\CourseBuilder; use Chamilo\CourseBundle\Component\CourseCopy\CourseBuilder;
@ -2767,7 +2768,7 @@ class learnpath
// then change the lp type to thread it as a normal Chamilo LP not a SCO. // then change the lp type to thread it as a normal Chamilo LP not a SCO.
if (in_array( if (in_array(
$lp_item_type, $lp_item_type,
['quiz', 'document', 'final_item', 'link', 'forum', 'thread', 'student_publication'] ['quiz', 'document', 'final_item', 'link', 'forum', 'thread', 'student_publication', 'survey']
) )
) { ) {
$lp_type = CLp::LP_TYPE; $lp_type = CLp::LP_TYPE;
@ -8015,6 +8016,27 @@ class learnpath
} }
return $main_dir_path.'work/work.php?'.api_get_cidreq().'&id='.$rowItem->getPath().'&'.$extraParams; return $main_dir_path.'work/work.php?'.api_get_cidreq().'&id='.$rowItem->getPath().'&'.$extraParams;
case TOOL_SURVEY:
$surveyId = (int) $id;
$repo = Container::getSurveyRepository();
if (!empty($surveyId)) {
/** @var CSurvey $survey */
$survey = $repo->find($surveyId);
$autoSurveyLink = SurveyUtil::generateFillSurveyLink(
$survey,
'auto',
api_get_course_entity($course_id),
$session_id
);
$lpParams = [
'lp_id' => $learningPathId,
'lp_item_id' => $id_in_path,
'origin' => 'learnpath',
];
return $autoSurveyLink.'&'.http_build_query($lpParams).'&'.$extraParams;
}
} }
return $link; return $link;

@ -565,7 +565,7 @@ $frameReady = Display::getFrameReadyBlock(
'#content_id, #content_id_blank', '#content_id, #content_id_blank',
$itemType, $itemType,
'function () { 'function () {
var arr = ["link", "sco", "xapi", "quiz", "h5p", "forum"]; var arr = ["link", "sco", "xapi", "quiz", "h5p", "forum", "survey"];
return $.inArray(olms.lms_item_type, arr) !== -1; return $.inArray(olms.lms_item_type, arr) !== -1;
}' }'

@ -60,6 +60,8 @@ if (empty($courseInfo)) {
$courseId = $courseInfo['real_id']; $courseId = $courseInfo['real_id'];
$userInfo = api_get_user_info(); $userInfo = api_get_user_info();
$sessionId = isset($_GET['sid']) ? (int) $_GET['sid'] : api_get_session_id(); $sessionId = isset($_GET['sid']) ? (int) $_GET['sid'] : api_get_session_id();
$lpItemId = isset($_GET['lp_item_id']) ? (int) $_GET['lp_item_id'] : 0;
$allowSurveyInLp = true;
if (!empty($userInfo)) { if (!empty($userInfo)) {
$interbreadcrumb[] = [ $interbreadcrumb[] = [
@ -89,6 +91,16 @@ if (null === $survey) {
$surveyId = $survey->getIid(); $surveyId = $survey->getIid();
$invitationCode = $_GET['invitationcode'] ?? null; $invitationCode = $_GET['invitationcode'] ?? null;
$lpItemCondition = '';
if ($allowSurveyInLp && !empty($lpItemId)) {
$lpItemCondition = " AND c_lp_item_id = $lpItemId";
}
$sessionCondition = '';
if (true === api_get_setting('survey.show_surveys_base_in_sessions')) {
$sessionCondition = api_get_session_condition($sessionId);
}
/*$surveyCode = isset($_GET['scode']) ? Database::escape_string($_GET['scode']) : ''; /*$surveyCode = isset($_GET['scode']) ? Database::escape_string($_GET['scode']) : '';
if ('' != $surveyCode) { if ('' != $surveyCode) {
// Firstly we check if this survey is ready for anonymous use: // Firstly we check if this survey is ready for anonymous use:
@ -122,7 +134,9 @@ if ('auto' === $invitationCode) {
$userid, $userid,
$surveyCode, $surveyCode,
$courseId, $courseId,
$sessionId $sessionId,
0,
$lpItemId
); );
$lastInvitation = current($invitations); $lastInvitation = current($invitations);
@ -142,7 +156,9 @@ if ('auto' === $invitationCode) {
FROM $table_survey_invitation FROM $table_survey_invitation
WHERE WHERE
c_id = $courseId AND c_id = $courseId AND
invitation_code = '".Database::escape_string($autoInvitationCode)."'"; invitation_code = '".Database::escape_string($autoInvitationCode)."'
$sessionCondition
$lpItemCondition";
$result = Database::query($sql); $result = Database::query($sql);
$now = api_get_utc_datetime(); $now = api_get_utc_datetime();
if (0 == Database::num_rows($result)) { if (0 == Database::num_rows($result)) {
@ -153,7 +169,7 @@ if ('auto' === $invitationCode) {
'invitation_code' => $autoInvitationCode, 'invitation_code' => $autoInvitationCode,
'invitation_date' => $now, 'invitation_date' => $now,
'answered' => 0, 'answered' => 0,
'c_lp_item_id' => 0, 'c_lp_item_id' => $lpItemId,
]; ];
Database::insert($table_survey_invitation, $params); Database::insert($table_survey_invitation, $params);
} }
@ -167,7 +183,9 @@ if ('auto' === $invitationCode) {
$sql = "SELECT * FROM $table_survey_invitation $sql = "SELECT * FROM $table_survey_invitation
WHERE WHERE
c_id = $courseId AND c_id = $courseId AND
invitation_code = '".Database::escape_string($invitationCode)."'"; invitation_code = '".Database::escape_string($invitationCode)."'
$sessionCondition
$lpItemCondition";
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) < 1) { if (Database::num_rows($result) < 1) {
api_not_allowed(true, get_lang('Wrong invitation code')); api_not_allowed(true, get_lang('Wrong invitation code'));
@ -256,7 +274,8 @@ if (count($_POST) > 0) {
SurveyUtil::remove_answer( SurveyUtil::remove_answer(
$survey_invitation['user_id'], $survey_invitation['user_id'],
$surveyId, $surveyId,
$survey_question_id $survey_question_id,
$lpItemId
); );
foreach ($value as $answer_key => &$answer_value) { foreach ($value as $answer_key => &$answer_value) {
@ -273,7 +292,9 @@ if (count($_POST) > 0) {
$survey, $survey,
$question, $question,
$option_id, $option_id,
$option_value $option_value,
'',
$lpItemId
); );
} }
} else { } else {
@ -298,7 +319,8 @@ if (count($_POST) > 0) {
SurveyUtil::remove_answer( SurveyUtil::remove_answer(
$survey_invitation['user_id'], $survey_invitation['user_id'],
$surveyId, $surveyId,
$survey_question_id $survey_question_id,
$lpItemId
); );
SurveyUtil::saveAnswer( SurveyUtil::saveAnswer(
@ -307,7 +329,8 @@ if (count($_POST) > 0) {
$question, $question,
$value, $value,
$option_value, $option_value,
$other $other,
$lpItemId
); );
} }
} }
@ -358,15 +381,24 @@ if (count($_POST) > 0) {
SurveyUtil::remove_answer( SurveyUtil::remove_answer(
$survey_invitation['user_id'], $survey_invitation['user_id'],
$survey_invitation['survey_id'], $survey_invitation['survey_id'],
$survey_question_id $survey_question_id,
api_get_course_int_id(),
$lpItemId
); );
$surveyId = (int) $survey_invitation['survey_id'];
$repo = Container::getSurveyRepository();
$survey = $repo->find($surveyId);
SurveyUtil::saveAnswer( SurveyUtil::saveAnswer(
$survey_invitation['user_id'], api_get_user_entity($survey_invitation['user_id']),
$survey_invitation['survey_id'], $survey,
$questionList[$survey_question_id], $questionList[$survey_question_id],
$value, $value,
$option_value $option_value,
'',
$lpItemId
); );
} }
} }
@ -398,12 +430,16 @@ if ('' != $survey->getFormFields() &&
} }
} }
$url = api_get_self().'?cid='.$courseId.'&sid='.$sessionId; $url = api_get_self().'?'.api_get_cidreq();
$listQueryParams = explode('&', $_SERVER['QUERY_STRING']); $listQueryParams = explode('&', $_SERVER['QUERY_STRING']);
foreach ($listQueryParams as $param) { foreach ($listQueryParams as $param) {
$url .= '&'.Security::remove_XSS($param); $url .= '&'.Security::remove_XSS($param);
} }
if (!empty($lpItemId)) {
$url .= '&lp_item_id='.$lpItemId;
}
// We use the same form as in auth/profile.php // We use the same form as in auth/profile.php
$form = new FormValidator('profile', 'post', $url); $form = new FormValidator('profile', 'post', $url);
if (api_is_western_name_order()) { if (api_is_western_name_order()) {
@ -611,10 +647,10 @@ if ($survey->getFormFields() &&
if (isset($_POST['finish_survey'])) { if (isset($_POST['finish_survey'])) {
echo Display::return_message(get_lang('You have finished this survey.'), 'confirm'); echo Display::return_message(get_lang('You have finished this survey.'), 'confirm');
echo Security::remove_XSS($survey->getSurveythanks()); echo Security::remove_XSS($survey->getSurveythanks());
SurveyManager::updateSurveyAnswered($survey, $survey_invitation['user_id']); SurveyManager::updateSurveyAnswered($survey, $survey_invitation['user_id'], $lpItemId);
SurveyUtil::flagSurveyAsAnswered($survey->getCode(), $survey_invitation['c_id']); SurveyUtil::flagSurveyAsAnswered($survey->getCode(), $survey_invitation['c_id']);
if ($courseInfo && !api_is_anonymous()) { if ($courseInfo && !api_is_anonymous() && 'learnpath' !== api_get_origin()) {
echo '<br /><br />'; echo '<br /><br />';
echo Display::toolbarButton( echo Display::toolbarButton(
get_lang('Return to Course Homepage'), get_lang('Return to Course Homepage'),
@ -1179,7 +1215,7 @@ $g_ic = isset($_GET['invitationcode']) ? Security::remove_XSS($_GET['invitationc
$g_cr = isset($_GET['cidReq']) ? Security::remove_XSS($_GET['cidReq']) : ''; $g_cr = isset($_GET['cidReq']) ? Security::remove_XSS($_GET['cidReq']) : '';
$p_l = isset($_POST['language']) ? Security::remove_XSS($_POST['language']) : ''; $p_l = isset($_POST['language']) ? Security::remove_XSS($_POST['language']) : '';
$add_parameters = isset($_GET['user_id']) ? '&user_id='.intval($_GET['user_id']) : ''; $add_parameters = isset($_GET['user_id']) ? '&user_id='.intval($_GET['user_id']) : '';
$url = api_get_self().'?cid='.$courseId.'&sid='.$sessionId.$add_parameters. $url = api_get_self().'?'.api_get_cidreq().$add_parameters.
'&course='.$g_c. '&course='.$g_c.
'&invitationcode='.$g_ic. '&invitationcode='.$g_ic.
'&show='.$show. '&show='.$show.
@ -1189,6 +1225,11 @@ if (!empty($_GET['language'])) {
$lang = Security::remove_XSS($_GET['language']); $lang = Security::remove_XSS($_GET['language']);
$url .= '&language='.$lang; $url .= '&language='.$lang;
} }
if (!empty($lpItemId)) {
$url .= '&lp_item_id='.$lpItemId;
}
$form = new FormValidator( $form = new FormValidator(
'question', 'question',
'post', 'post',
@ -1256,7 +1297,7 @@ if (isset($questions) && is_array($questions)) {
} }
$form->addHtml('<div>'.Security::remove_XSS($question['survey_question']).'</div> '); $form->addHtml('<div>'.Security::remove_XSS($question['survey_question']).'</div> ');
$userAnswerData = SurveyUtil::get_answers_of_question_by_user($question['survey_id'], $question['question_id']); $userAnswerData = SurveyUtil::get_answers_of_question_by_user($question['survey_id'], $question['question_id'], $lpItemId);
$finalAnswer = null; $finalAnswer = null;
if (!empty($userAnswerData[$user_id])) { if (!empty($userAnswerData[$user_id])) {

@ -769,7 +769,7 @@ class SurveyManager
/** /**
* Updates c_survey.answered: number of people who have taken the survey (=filled at least one question). * Updates c_survey.answered: number of people who have taken the survey (=filled at least one question).
*/ */
public static function updateSurveyAnswered(CSurvey $survey, $user) public static function updateSurveyAnswered(CSurvey $survey, $user, $lpItemId = 0): void
{ {
$em = Database::getManager(); $em = Database::getManager();
$surveyId = $survey->getIid(); $surveyId = $survey->getIid();
@ -780,6 +780,15 @@ class SurveyManager
$em->persist($survey); $em->persist($survey);
$em->flush(); $em->flush();
$lpItemCondition = '';
if (!empty($lpItemId)) {
$lpItemCondition = " AND c_lp_item_id = $lpItemId";
}
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionCondition = api_get_session_condition($sessionId);
}
$table = Database::get_course_table(TABLE_SURVEY_INVITATION); $table = Database::get_course_table(TABLE_SURVEY_INVITATION);
// Storing that the user has finished the survey. // Storing that the user has finished the survey.
$sql = "UPDATE $table $sql = "UPDATE $table
@ -787,10 +796,11 @@ class SurveyManager
answered_at = '".api_get_utc_datetime()."', answered_at = '".api_get_utc_datetime()."',
answered = 1 answered = 1
WHERE WHERE
c_id = $courseId AND
session_id = $sessionId AND session_id = $sessionId AND
user_id ='".Database::escape_string($user)."' AND user_id ='".Database::escape_string($user)."' AND
survey_id ='".$surveyId."'"; survey_id ='".$surveyId."'
$sessionCondition
$lpItemCondition";
Database::query($sql); Database::query($sql);
} }
@ -2154,39 +2164,39 @@ class SurveyManager
} }
} }
/**
* @param int $userId
* @param string $surveyCode
* @param int $courseId
* @param int $sessionId
* @param int $groupId
*
* @return array|CSurveyInvitation[]
*/
public static function getUserInvitationsForSurveyInCourse( public static function getUserInvitationsForSurveyInCourse(
$userId, int $userId,
$surveyCode, string $surveyCode,
$courseId, int $courseId,
$sessionId = 0, int $sessionId = 0,
$groupId = 0 int $groupId = 0,
) { int $lpItemId = 0
): array {
$em = Database::getManager(); $em = Database::getManager();
$invitationRepo = $em->getRepository(CSurveyInvitation::class); $invitationRepo = $em->getRepository(CSurveyInvitation::class);
$surveyRepo = $em->getRepository(CSurvey::class); $surveyRepo = $em->getRepository(CSurvey::class);
$survey = $surveyRepo->findBy(['code' => $surveyCode]); $survey = $surveyRepo->findBy(['code' => $surveyCode]);
$criteria = [
'user' => api_get_user_entity($userId),
'course' => api_get_course_entity($courseId),
'session' => api_get_session_entity($sessionId),
'group' => api_get_group_entity($groupId),
'survey' => $survey,
];
if (is_int($lpItemId) && $lpItemId > 0) {
$criteria['lpItemId'] = $lpItemId;
}
return $invitationRepo->findBy( return $invitationRepo->findBy(
[ $criteria,
'user' => api_get_user_entity($userId),
'course' => api_get_course_entity($courseId),
'session' => api_get_session_entity($sessionId),
'group' => api_get_group_entity($groupId),
'survey' => $survey,
],
['invitationDate' => 'DESC'] ['invitationDate' => 'DESC']
); );
} }
/** /**
* @param array $userInfo * @param array $userInfo
* @param int $answered (1 = answered 0 = not answered) * @param int $answered (1 = answered 0 = not answered)
@ -2352,4 +2362,23 @@ class SurveyManager
return false; return false;
} }
public static function getInvitationsAnswered(
$surveyCode,
$courseId,
$sessionId = 0
): array
{
$invitationRepo = Database::getManager()->getRepository(CSurveyInvitation::class);
return $invitationRepo->findBy(
[
'cId' => $courseId,
'sessionId' => $sessionId,
'answered' => true,
'surveyCode' => $surveyCode,
],
['invitationDate' => 'DESC']
);
}
} }

@ -78,14 +78,29 @@ class SurveyUtil
* *
* @version January 2007 * @version January 2007
*/ */
public static function remove_answer($user, $survey_id, $question_id) public static function remove_answer($user, $survey_id, $question_id, $course_id, $lpItemId = 0): void
{ {
$sessionId = api_get_session_id();
$course_id = intval($course_id);
// table definition
$table = Database::get_course_table(TABLE_SURVEY_ANSWER); $table = Database::get_course_table(TABLE_SURVEY_ANSWER);
$lpItemCondition = '';
if (!empty($lpItemId)) {
$lpItemCondition = " AND c_lp_item_id = $lpItemId";
}
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionCondition = api_get_session_condition($sessionId);
}
$sql = "DELETE FROM $table $sql = "DELETE FROM $table
WHERE WHERE
user = '".Database::escape_string($user)."' AND user = '".Database::escape_string($user)."' AND
survey_id = '".intval($survey_id)."' AND survey_id = '".intval($survey_id)."' AND
question_id = '".intval($question_id)."'"; question_id = '".intval($question_id)."'
$sessionCondition
$lpItemCondition";
Database::query($sql); Database::query($sql);
} }
@ -95,8 +110,10 @@ class SurveyUtil
CSurveyQuestion $question, CSurveyQuestion $question,
$optionId, $optionId,
$optionValue, $optionValue,
$otherOption = '' $otherOption = '',
) { $lpItemId = 0
): bool {
// Make the survey anonymous // Make the survey anonymous
if (1 == $survey->getAnonymous()) { if (1 == $survey->getAnonymous()) {
$surveyUser = Session::read('surveyuser'); $surveyUser = Session::read('surveyuser');
@ -120,6 +137,7 @@ class SurveyUtil
->setQuestion($question) ->setQuestion($question)
->setOptionId($optionId) ->setOptionId($optionId)
->setValue((int) $optionValue) ->setValue((int) $optionValue)
->setLpItemId((int) $lpItemId)
->setSessionId($sessionId ?: null) ->setSessionId($sessionId ?: null)
; ;
@ -223,10 +241,19 @@ class SurveyUtil
self::display_comparative_report(); self::display_comparative_report();
break; break;
case 'completereport': case 'completereport':
echo self::displayCompleteReport($survey); if (true === api_get_configuration_value('allow_survey_tool_in_lp')) {
$surveysAnswered = SurveyManager::getInvitationsAnswered($survey->getCode(), api_get_course_int_id(), api_get_session_id());
if (count($surveysAnswered) > 0) {
foreach ($surveysAnswered as $survey) {
echo self::displayCompleteReport($survey, 0, true, true, !$survey->getAnonymous(), $survey->getLpItemId());
}
}
} else {
echo self::displayCompleteReport($survey, 0, true, true, !$survey->getAnonymous());
}
break; break;
case 'deleteuserreport': case 'deleteuserreport':
self::delete_user_report($survey, $_GET['user']); self::delete_user_report($survey->getIid(), $_GET['user']);
break; break;
} }
} }
@ -252,9 +279,16 @@ class SurveyUtil
$user_id = Database::escape_string($user_id); $user_id = Database::escape_string($user_id);
if (!empty($survey_id) && !empty($user_id)) { if (!empty($survey_id) && !empty($user_id)) {
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionId = api_get_session_id();
$sessionCondition = api_get_session_condition($sessionId);
}
// delete data from survey_answer by user_id and survey_id // delete data from survey_answer by user_id and survey_id
$sql = "DELETE FROM $table_survey_answer $sql = "DELETE FROM $table_survey_answer
WHERE c_id = $course_id AND survey_id = '".$survey_id."' AND user = '".$user_id."'"; WHERE c_id = $course_id AND survey_id = '".$survey_id."' AND user = '".$user_id."' $sessionCondition";
Database::query($sql); Database::query($sql);
// update field answered from survey_invitation by user_id and survey_id // update field answered from survey_invitation by user_id and survey_id
$sql = "UPDATE $table_survey_invitation SET answered = '0' $sql = "UPDATE $table_survey_invitation SET answered = '0'
@ -265,7 +299,7 @@ class SurveyUtil
WHERE WHERE
iid = '".$survey_id."' iid = '".$survey_id."'
) AND ) AND
user_id = '".$user_id."'"; user_id = '".$user_id."' $sessionCondition";
$result = Database::query($sql); $result = Database::query($sql);
} }
@ -379,11 +413,17 @@ class SurveyUtil
} }
} }
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionId = api_get_session_id();
$sessionCondition = api_get_session_condition($sessionId);
}
// Getting all the answers of the user // Getting all the answers of the user
$sql = "SELECT * FROM $table_survey_answer $sql = "SELECT * FROM $table_survey_answer
WHERE WHERE
survey_id = '".$surveyId."' AND survey_id = '".$surveyId."' AND
user = '".$userId."'"; user = '".$userId."' $sessionCondition";
$result = Database::query($sql); $result = Database::query($sql);
while ($row = Database::fetch_assoc($result)) { while ($row = Database::fetch_assoc($result)) {
$answers[$row['question_id']][] = $row['option_id']; $answers[$row['question_id']][] = $row['option_id'];
@ -514,6 +554,15 @@ class SurveyUtil
$surveyId = $survey->getIid(); $surveyId = $survey->getIid();
$action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : ''; $action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : '';
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionId = api_get_session_id();
$sessionCondition = api_get_session_condition($sessionId);
}
// Database table definitions
$table_survey_question = Database::get_course_table(TABLE_SURVEY_QUESTION);
$table_survey_question_option = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION); $table_survey_question_option = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION);
$table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER); $table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER);
@ -781,7 +830,7 @@ class SurveyUtil
WHERE WHERE
c_id = $course_id AND c_id = $course_id AND
option_id = '".Database::escape_string($_GET['viewoption'])."' option_id = '".Database::escape_string($_GET['viewoption'])."'
$sql_restriction"; $sql_restriction $sessionCondition";
$result = Database::query($sql); $result = Database::query($sql);
echo '<ul>'; echo '<ul>';
while ($row = Database::fetch_assoc($result)) { while ($row = Database::fetch_assoc($result)) {
@ -809,14 +858,13 @@ class SurveyUtil
$surveyId = $survey->getIid(); $surveyId = $survey->getIid();
$questionId = $question->getIid(); $questionId = $question->getIid();
$options = $survey->getOptions(); $options = $survey->getOptions();
// Getting the options
/*$sql = "SELECT * FROM $table_survey_question_option $sessionCondition = '';
WHERE if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
survey_id= $surveyId AND $sessionId = api_get_session_id();
question_id = '".intval($question['iid'])."' $sessionCondition = api_get_session_condition($sessionId);
ORDER BY sort ASC"; }
$result = Database::query($sql);
while ($row = Database::fetch_array($result)) {*/
foreach ($options as $option) { foreach ($options as $option) {
$options[$option->getIid()] = $option; $options[$option->getIid()] = $option;
} }
@ -827,6 +875,7 @@ class SurveyUtil
WHERE WHERE
survey_id= $surveyId AND survey_id= $surveyId AND
question_id = '".$questionId."' question_id = '".$questionId."'
$sessionCondition
GROUP BY option_id, value"; GROUP BY option_id, value";
$result = Database::query($sql); $result = Database::query($sql);
$number_of_answers = 0; $number_of_answers = 0;
@ -936,7 +985,8 @@ class SurveyUtil
$userId = 0, $userId = 0,
$addActionBar = true, $addActionBar = true,
$addFilters = true, $addFilters = true,
$addExtraFields = true $addExtraFields = true,
$lpItemId = 0
) { ) {
// Database table definitions // Database table definitions
$table_survey_question = Database::get_course_table(TABLE_SURVEY_QUESTION); $table_survey_question = Database::get_course_table(TABLE_SURVEY_QUESTION);
@ -950,8 +1000,38 @@ class SurveyUtil
return ''; return '';
} }
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionId = api_get_session_id();
$sessionCondition = api_get_session_condition($sessionId);
}
$lpItemCondition = '';
if (!empty($lpItemId)) {
$lpItemCondition = " AND c_lp_item_id = $lpItemId";
}
$action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : ''; $action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : '';
$content = ''; $content = '';
if (!empty($lpItemId)) {
$tableLp = Database::get_course_table(TABLE_LP_MAIN);
$tableLpItem = Database::get_course_table(TABLE_LP_ITEM);
$sql = "SELECT l.name,
li.title
FROM $tableLpItem li
INNER JOIN $tableLp l
ON l.iid = li.lp_id AND
l.c_id = li.c_id
WHERE li.c_id = $course_id AND
li.iid = $lpItemId";
$rs = Database::query($sql);
if (Database::num_rows($rs) > 0) {
$row = Database::fetch_assoc($rs);
$lpName = $row['name'];
$lpItemTitle = $row['title'];
$content .= '<h3>'.$lpName.' : '.$lpItemTitle.'</h3>';
}
}
if ($addActionBar) { if ($addActionBar) {
$actions = '<a $actions = '<a
href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?survey_id='.$surveyId.'&'.api_get_cidreq().'">' href="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?survey_id='.$surveyId.'&'.api_get_cidreq().'">'
@ -1173,6 +1253,8 @@ class SurveyUtil
WHERE WHERE
survey_id = $surveyId survey_id = $surveyId
$userCondition $userCondition
$sessionCondition
$lpItemCondition
ORDER BY iid, user ASC"; ORDER BY iid, user ASC";
$result = Database::query($sql); $result = Database::query($sql);
$i = 1; $i = 1;
@ -1359,6 +1441,12 @@ class SurveyUtil
$course = api_get_course_info(); $course = api_get_course_info();
$course_id = $course['real_id']; $course_id = $course['real_id'];
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionId = api_get_session_id();
$sessionCondition = api_get_session_condition($sessionId);
}
$table_survey_question = Database::get_course_table(TABLE_SURVEY_QUESTION); $table_survey_question = Database::get_course_table(TABLE_SURVEY_QUESTION);
$table_survey_question_option = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION); $table_survey_question_option = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION);
$table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER); $table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER);
@ -1505,6 +1593,7 @@ class SurveyUtil
$sql = "SELECT * FROM $table_survey_answer $sql = "SELECT * FROM $table_survey_answer
WHERE WHERE
survey_id = $surveyId survey_id = $surveyId
$sessionCondition
"; ";
if (0 != $user_id) { if (0 != $user_id) {
$user_id = (int) $user_id; $user_id = (int) $user_id;
@ -2219,15 +2308,27 @@ class SurveyUtil
* *
* @version February 2007 - Updated March 2008 * @version February 2007 - Updated March 2008
*/ */
public static function get_answers_of_question_by_user($survey_id, $question_id) public static function get_answers_of_question_by_user($survey_id, $question_id, $lpItemId = 0)
{ {
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
$table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER); $table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER);
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionId = api_get_session_id();
$sessionCondition = api_get_session_condition($sessionId);
}
$lpItemCondition = '';
if (!empty($lpItemId)) {
$lpItemCondition = " AND c_lp_item_id = $lpItemId";
}
$sql = "SELECT * FROM $table_survey_answer $sql = "SELECT * FROM $table_survey_answer
WHERE WHERE
survey_id='".intval($survey_id)."' AND survey_id='".intval($survey_id)."' AND
question_id='".intval($question_id)."' question_id='".intval($question_id)."'
$sessionCondition
$lpItemCondition
ORDER BY USER ASC"; ORDER BY USER ASC";
$result = Database::query($sql); $result = Database::query($sql);
$return = []; $return = [];
@ -3861,11 +3962,8 @@ class SurveyUtil
/** /**
* Set a flag to the current survey as answered by the current user. * 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) public static function flagSurveyAsAnswered(string $surveyCode, int $courseId): void
{ {
$currentUserId = api_get_user_id(); $currentUserId = api_get_user_id();
$flag = sprintf('%s-%s-%d', $courseId, $surveyCode, $currentUserId); $flag = sprintf('%s-%s-%d', $courseId, $surveyCode, $currentUserId);
@ -3879,13 +3977,8 @@ class SurveyUtil
/** /**
* Check whether a survey was answered by the current user. * Check whether a survey was answered by the current user.
*
* @param string $surveyCode The survey code
* @param int $courseId The course ID
*
* @return bool
*/ */
public static function isSurveyAnsweredFlagged($surveyCode, $courseId) public static function isSurveyAnsweredFlagged(string $surveyCode, int $courseId): bool
{ {
$currentUserId = api_get_user_id(); $currentUserId = api_get_user_id();
$flagToCheck = sprintf('%s-%s-%d', $courseId, $surveyCode, $currentUserId); $flagToCheck = sprintf('%s-%s-%d', $courseId, $surveyCode, $currentUserId);

Loading…
Cancel
Save