Lp: Implement partial surveys in lps and base survey in sessions - refs BT#19049

pull/4072/head
Christian 4 years ago
parent 9eeabf01c0
commit 76a7bcbc54
  1. 8
      main/install/configuration.dist.php
  2. 258
      main/lp/learnpath.class.php
  3. 10
      main/lp/lp_add_item.php
  4. 16
      main/survey/create_new_survey.php
  5. 91
      main/survey/fillsurvey.php
  6. 49
      main/survey/survey.lib.php
  7. 195
      main/survey/surveyUtil.class.php
  8. 31
      src/Chamilo/CourseBundle/Entity/CSurveyInvitation.php

@ -496,6 +496,14 @@ ALTER TABLE sys_announcement ADD COLUMN visible_boss INT DEFAULT 0;
// Allow export learning paths to students
//$_configuration['lp_allow_export_to_students'] = false;
//
// Allow survey tool in learnpath
// ALTER TABLE c_survey_answer ADD COLUMN c_lp_item_id INT(11) DEFAULT 0;
// ALTER TABLE c_survey_invitation ADD COLUMN c_lp_item_id int(11) DEFAULT 0;
//$_configuration['allow_survey_tool_in_lp'] = false;
// Show surveys from main course in all course sessions
// ALTER TABLE c_survey_answer ADD COLUMN session_id INT(11) DEFAULT 0;
//$_configuration['show_surveys_base_in_sessions'] = false;
//
// ------ HTTP headers security
// This section relates to options to increase the security of your Chamilo
// portal against attacks specifically focused on HTTP headers vulnerabilities

@ -3609,7 +3609,7 @@ class learnpath
// then change the lp type to thread it as a normal Chamilo LP not a SCO.
if (in_array(
$lp_item_type,
['quiz', 'document', 'final_item', 'link', 'forum', 'thread', 'student_publication', 'xapi']
['quiz', 'document', 'final_item', 'link', 'forum', 'thread', 'student_publication', 'xapi', 'survey']
)
) {
$lp_type = 1;
@ -6285,6 +6285,8 @@ class learnpath
$icon = Display::return_icon('certificate.png');
} elseif (TOOL_XAPI === $arrLP[$i]['item_type']) {
$icon = Display::return_icon('import_scorm.png');
} elseif (TOOL_SURVEY === $arrLP[$i]['item_type']) {
$icon = Display::return_icon('survey.gif');
} else {
$icon = Display::return_icon('folder_document.gif');
}
@ -7627,6 +7629,14 @@ class learnpath
$dir,
];
$allowSurveyTool = api_get_configuration_value('allow_survey_tool_in_lp');
if ($allowSurveyTool) {
// Get all the surveys
$surveys = $this->getSurveys();
$items[] = $surveys;
$headers[] = Display::return_icon('survey.png', get_lang('Surveys'), [], ICON_SIZE_BIG);
}
$xApiPlugin = XApiPlugin::create();
if ($xApiPlugin->isEnabled()) {
$headers[] = Display::return_icon(
@ -8061,6 +8071,194 @@ class learnpath
return $return;
}
/**
*
*/
public function displaySurveyForm(
$action = 'add',
$id = 0,
$extraInfo = '',
$excludeExtraFields = []
) {
$courseId = api_get_course_int_id();
$tblSurvey = Database::get_course_table(TABLE_SURVEY);
$itemTitle = '';
$itemDescription = '';
if ($id != 0 && is_array($extraInfo)) {
$itemTitle = stripslashes($extraInfo['title']);
} elseif (is_numeric($extraInfo)) {
$sql = "SELECT title, intro as comment
FROM $tblSurvey
WHERE c_id = $courseId AND survey_id = ".$extraInfo;
$result = Database::query($sql);
$row = Database::fetch_array($result);
$itemTitle = strip_tags($row['title']);
$itemDescription = $row['comment'];
}
$parent = 0;
if ($id != 0 && is_array($extraInfo)) {
$parent = $extraInfo['parent_item_id'];
}
$arrLP = $this->getItemsForForm();
$this->tree_array($arrLP);
$arrLP = isset($this->arrMenu) ? $this->arrMenu : [];
unset($this->arrMenu);
if ($action == 'add') {
$legend = get_lang('CreateTheSurvey');
} elseif ($action == 'move') {
$legend = get_lang('MoveTheCurrentSurvey');
} else {
$legend = get_lang('EditCurrentSurvey');
}
$form = new FormValidator(
'survey_form',
'POST',
$this->getCurrentBuildingModeURL()
);
$defaults = [];
$form->addHeader($legend);
if ($action != 'move') {
$this->setItemTitle($form);
$defaults['title'] = $itemTitle;
}
$selectParent = $form->addSelect(
'parent',
get_lang('Parent'),
[],
['id' => 'idParent', 'onchange' => 'load_cbo(this.value);', 'class' => 'learnpath_item_form']
);
$selectParent->addOption($this->name, 0);
$arrHide = [
$id,
];
for ($i = 0; $i < count($arrLP); $i++) {
if ($action != 'add') {
if ($arrLP[$i]['item_type'] == 'dir' &&
!in_array($arrLP[$i]['id'], $arrHide) &&
!in_array($arrLP[$i]['parent_item_id'], $arrHide)
) {
$selectParent->addOption(
$arrLP[$i]['title'],
$arrLP[$i]['id'],
['style' => 'padding-left: '.(20 + $arrLP[$i]['depth'] * 20).'px']
);
if ($parent == $arrLP[$i]['id']) {
$selectParent->setSelected($arrLP[$i]['id']);
}
} else {
$arrHide[] = $arrLP[$i]['id'];
}
} else {
if ($arrLP[$i]['item_type'] == 'dir') {
$selectParent->addOption(
$arrLP[$i]['title'],
$arrLP[$i]['id'],
['style' => 'padding-left: '.(20 + $arrLP[$i]['depth'] * 20).'px']
);
if ($parent == $arrLP[$i]['id']) {
$selectParent->setSelected($arrLP[$i]['id']);
}
}
}
}
if (is_array($arrLP)) {
reset($arrLP);
}
$selectPrevious = $form->addSelect(
'previous',
get_lang('Position'),
[],
['id' => 'previous', 'class' => 'learnpath_item_form']
);
$selectPrevious->addOption(get_lang('FirstPosition'), 0);
for ($i = 0; $i < count($arrLP); $i++) {
if ($arrLP[$i]['parent_item_id'] == $parent &&
$arrLP[$i]['id'] != $id
) {
$selectPrevious->addOption(
get_lang('After').' "'.$arrLP[$i]['title'].'"',
$arrLP[$i]['id']
);
if (isset($extra_info['previous_item_id']) &&
$extra_info['previous_item_id'] == $arrLP[$i]['id']
) {
$selectPrevious->setSelected($arrLP[$i]['id']);
} elseif ($action == 'add') {
$selectPrevious->setSelected($arrLP[$i]['id']);
}
}
}
if ($action != 'move') {
$idPrerequisite = 0;
if (is_array($arrLP)) {
foreach ($arrLP as $key => $value) {
if ($value['id'] == $id) {
$idPrerequisite = $value['prerequisite'];
break;
}
}
}
$arrHide = [];
for ($i = 0; $i < count($arrLP); $i++) {
if ($arrLP[$i]['id'] != $id && $arrLP[$i]['item_type'] != 'dir') {
if (isset($extra_info['previous_item_id']) &&
$extra_info['previous_item_id'] == $arrLP[$i]['id']
) {
$sSelectedPosition = $arrLP[$i]['id'];
} elseif ($action == 'add') {
$sSelectedPosition = 0;
}
$arrHide[$arrLP[$i]['id']]['value'] = $arrLP[$i]['title'];
}
}
}
if ('edit' === $action) {
$extraField = new ExtraField('lp_item');
$extraField->addElements($form, $id, $excludeExtraFields);
}
if ($action == 'add') {
$form->addButtonSave(get_lang('AddSurveyToCourse'), 'submit_button');
} else {
$form->addButtonSave(get_lang('EditCurrentSurvey'), 'submit_button');
}
if ($action == 'move') {
$form->addHidden('title', $itemTitle);
$form->addHidden('description', $itemDescription);
}
if (is_numeric($extraInfo)) {
$form->addHidden('path', $extraInfo);
} elseif (is_array($extraInfo)) {
$form->addHidden('path', $extraInfo['path']);
}
$form->addHidden('type', TOOL_SURVEY);
$form->addHidden('post_time', time());
$this->setAuthorLpItem($form);
$form->setDefaults($defaults);
return '<div class="sectioncomment">'.$form->returnForm().'</div>';
}
/**
* Return the form to display the forum edit/add option.
*
@ -10806,6 +11004,47 @@ class learnpath
return $linksHtmlCode;
}
/**
* Creates a list with all the surveys in it.
*
* @return string
*/
public function getSurveys()
{
$return = '<ul class="lp_resource">';
// First add link
$return .= '<li class="lp_resource_element">';
$return .= Display::return_icon('new_survey.png', get_lang('CreateNewSurvey'), '', ICON_SIZE_MEDIUM);
$return .= Display::url(
get_lang('CreateANewSurvey'),
api_get_path(WEB_CODE_PATH).'survey/create_new_survey.php?'.api_get_cidreq().'&'.http_build_query([
'action' => 'add',
'lp_id' => $this->lp_id,
]),
['title' => get_lang('CreateNewSurvey')]
);
$return .= '</li>';
$surveys = SurveyManager::get_surveys(api_get_course_id(), api_get_session_id());
foreach ($surveys as $survey) {
if (!empty($survey['survey_id'])) {
$surveyTitle = strip_tags($survey['title']);
$return .= '<li class="lp_resource_element" data_id="'.$survey['survey_id'].'" data_type="'.TOOL_SURVEY.'" title="'.$surveyTitle.'" >';
$return .= '<a class="moved" href="#">';
$return .= Display::return_icon('move_everywhere.png', get_lang('Move'), [], ICON_SIZE_TINY);
$return .= ' </a>';
$return .= Display::return_icon('survey.png', '', [], ICON_SIZE_TINY);
$return .= '<a class="moved" href="'.api_get_self().'?'.api_get_cidreq().'&action=add_item&type='.TOOL_SURVEY.'&survey_id='.$survey['survey_id'].'&lp_id='.$this->lp_id.'" style="vertical-align:middle">'.$surveyTitle.'</a>';
$return .= '</li>';
}
}
$return .= '</ul>';
return $return;
}
/**
* Creates a list with all the student publications in it.
*
@ -13559,6 +13798,23 @@ EOD;
return api_get_path(WEB_PLUGIN_PATH).'xapi/'
.('cmi5' === $toolLaunch->getActivityType() ? 'cmi5/view.php' : 'tincan/view.php')
."?id=$id&$extraParams";
case TOOL_SURVEY:
$table = Database::get_course_table(TABLE_SURVEY);
$sql = "SELECT code FROM $table WHERE c_id = $course_id AND survey_id = $id";
$result = Database::query($sql);
$surveyCode = Database::result($result, 0, 0);
$autoSurveyLink = SurveyUtil::generateFillSurveyLink(
'auto',
$course_info,
api_get_session_id(),
$surveyCode
);
$lpParams = [
'lp_id' => $learningPathId,
'lp_item_id' => $id_in_path,
'origin' => 'learnpath',
];
return $autoSurveyLink.'&'.http_build_query($lpParams);
}
return $link;

@ -274,6 +274,13 @@ if (isset($new_item_id) && is_numeric($new_item_id)) {
'confirmation'
);
break;
case TOOL_SURVEY:
echo $learnPath->display_manipulate($new_item_id, $type);
echo Display::return_message(
get_lang('NewSurveyCreated'),
'confirmation'
);
break;
}
} else {
switch ($type) {
@ -303,6 +310,9 @@ if (isset($new_item_id) && is_numeric($new_item_id)) {
case TOOL_FORUM:
echo $learnPath->display_forum_form('add', 0, $_GET['forum_id']);
break;
case TOOL_SURVEY:
echo $learnPath->displaySurveyForm('add', 0, $_GET['survey_id']);
break;
case 'thread':
echo $learnPath->display_thread_form('add', 0, $_GET['thread_id']);
break;

@ -372,6 +372,22 @@ if ($form->validate()) {
} else {
// Displaying the header
Display::display_header($tool_name);
$actionLeft = null;
//if is called from learning path
if (isset($_GET['lp_id'])) {
$lpId = (int) $_GET['lp_id'];
$url = api_get_path(WEB_CODE_PATH).'lp/lp_controller.php?'.api_get_cidreq().'&action=add_item&type=step&lp_id='.$lpId.'#resource_tab-6';
$actionLeft .= Display::url(
Display::return_icon(
'back.png',
get_lang("BackTo").' '.get_lang("LearningPaths"),
null,
ICON_SIZE_MEDIUM
),
$url
);
echo Display::toolbarAction('toolbar-forum', [$actionLeft]);
}
$form->display();
}

@ -57,6 +57,8 @@ if (empty($courseInfo)) {
$userInfo = api_get_user_info();
$sessionId = isset($_GET['id_session']) ? (int) $_GET['id_session'] : api_get_session_id();
$lpItemId = isset($_GET['lp_item_id']) ? (int) $_GET['lp_item_id'] : 0;
$allowSurveyInLp = api_get_configuration_value('allow_survey_tool_in_lp');
// Breadcrumbs
if (!empty($userInfo)) {
@ -91,6 +93,15 @@ if ((!isset($_GET['course']) || !isset($_GET['invitationcode'])) && !isset($_GET
}
$invitationcode = $_GET['invitationcode'];
$lpItemCondition = '';
if ($allowSurveyInLp) {
$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);
}
// Start auto-invitation feature FS#3403 (all-users-can-do-the-survey-URL handling)
if ('auto' === $invitationcode && isset($_GET['scode'])) {
@ -104,7 +115,8 @@ if ('auto' === $invitationcode && isset($_GET['scode'])) {
$userid,
$surveyCode,
$courseInfo['real_id'],
$sessionId
$sessionId,
$lpItemId
);
$lastInvitation = current($invitations);
@ -130,7 +142,9 @@ if ('auto' === $invitationcode && isset($_GET['scode'])) {
FROM $table_survey_invitation
WHERE
c_id = $course_id AND
invitation_code = '".Database::escape_string($autoInvitationcode)."'";
invitation_code = '".Database::escape_string($autoInvitationcode)."'
$sessionCondition
$lpItemCondition";
$result = Database::query($sql);
$now = api_get_utc_datetime();
if (0 == Database :: num_rows($result)) {
@ -141,6 +155,9 @@ if ('auto' === $invitationcode && isset($_GET['scode'])) {
'invitation_code' => $autoInvitationcode,
'invitation_date' => $now,
];
if ($allowSurveyInLp) {
$params['c_lp_item_id'] = $lpItemId;
}
Database::insert($table_survey_invitation, $params);
}
// From here we use the new invitationcode auto-userid-surveycode string
@ -154,7 +171,9 @@ if ('auto' === $invitationcode && isset($_GET['scode'])) {
$sql = "SELECT * FROM $table_survey_invitation
WHERE
c_id = $course_id AND
invitation_code = '".Database::escape_string($invitationcode)."'";
invitation_code = '".Database::escape_string($invitationcode)."'
$sessionCondition
$lpItemCondition";
$result = Database::query($sql);
if (Database::num_rows($result) < 1) {
api_not_allowed(true, get_lang('WrongInvitationCode'));
@ -188,7 +207,7 @@ $sql = "SELECT * FROM $table_survey
WHERE
c_id = $course_id AND
code = '".Database::escape_string($survey_invitation['survey_code'])."'";
$sql .= api_get_session_condition($sessionId);
$sql .= api_get_session_condition($sessionId, true, true);
$result = Database::query($sql);
if (Database::num_rows($result) > 1) {
@ -284,7 +303,9 @@ if (count($_POST) > 0) {
$survey_invitation['user'],
$survey_invitation['survey_id'],
$survey_question_id,
$course_id
$course_id,
$sessionId,
$lpItemId
);
foreach ($value as $answer_key => &$answer_value) {
@ -302,7 +323,10 @@ if (count($_POST) > 0) {
$survey_question_id,
$option_id,
$option_value,
$survey_data
$survey_data,
'',
$sessionId,
$lpItemId
);
}
} else {
@ -330,7 +354,9 @@ if (count($_POST) > 0) {
$survey_invitation['user'],
$survey_invitation['survey_id'],
$survey_question_id,
$course_id
$course_id,
$sessionId,
$lpItemId
);
SurveyUtil::store_answer(
@ -340,7 +366,9 @@ if (count($_POST) > 0) {
$value,
$option_value,
$survey_data,
$other
$other,
$sessionId,
$lpItemId
);
}
}
@ -388,7 +416,9 @@ if (count($_POST) > 0) {
$survey_invitation['user'],
$survey_invitation['survey_id'],
$survey_question_id,
$course_id
$course_id,
$sessionId,
$lpItemId
);
SurveyUtil::store_answer(
@ -397,7 +427,10 @@ if (count($_POST) > 0) {
$survey_question_id,
$value,
$option_value,
$survey_data
$survey_data,
'',
$sessionId,
$lpItemId
);
}
}
@ -436,6 +469,9 @@ if ($survey_data['form_fields'] != '' &&
foreach ($listQueryParams as $param) {
$url .= '&'.Security::remove_XSS($param);
}
if (!empty($lpItemId) && $allowSurveyInLp) {
$url .= '&lp_item_id='.$lpItemId.'&origin=learnpath';
}
// We use the same form as in auth/profile.php
$form = new FormValidator('profile', 'post', $url);
@ -650,7 +686,8 @@ if (isset($_POST['finish_survey'])) {
SurveyManager::update_survey_answered(
$survey_data,
$survey_invitation['user'],
$survey_invitation['survey_code']
$survey_invitation['survey_code'],
$lpItemId
);
SurveyUtil::flagSurveyAsAnswered(
@ -658,7 +695,7 @@ if (isset($_POST['finish_survey'])) {
$survey_invitation['c_id']
);
if ($courseInfo && !api_is_anonymous()) {
if ($courseInfo && !api_is_anonymous() && empty($lpItemId)) {
echo '<br /><br />';
echo Display::toolbarButton(
get_lang('ReturnToCourseHomepage'),
@ -736,6 +773,15 @@ if ((isset($_GET['show']) && $_GET['show'] != '') ||
// Get the user into survey answer table (user or anonymus)
$my_user_id = $survey_data['anonymous'] == 1 ? $surveyUserFromSession : api_get_user_id();
$lpItemCondition = '';
if ($allowSurveyInLp) {
$lpItemCondition = " AND sa.c_lp_item_id = $lpItemId";
}
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionCondition = api_get_session_condition($sessionId, true, false, 'sa.session_id');
}
$sql = "SELECT
survey_question.survey_group_sec1,
survey_question.survey_group_sec2,
@ -763,6 +809,8 @@ if ((isset($_GET['show']) && $_GET['show'] != '') ||
WHERE
sa.user='".$my_user_id."') AND
survey_question.c_id = $course_id
$sessionCondition
$lpItemCondition
ORDER BY survey_question.sort, survey_question_option.sort ASC";
} else {
$sql = "SELECT
@ -837,6 +885,16 @@ if ((isset($_GET['show']) && $_GET['show'] != '') ||
$answer_list = [];
// Get current user results
$results = [];
$lpItemCondition = '';
if ($allowSurveyInLp) {
$lpItemCondition = " AND survey_answer.c_lp_item_id = $lpItemId";
}
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionCondition = api_get_session_condition($sessionId, true, false, 'survey_answer.session_id');
}
$sql = "SELECT
survey_group_pri,
user,
@ -848,7 +906,9 @@ if ((isset($_GET['show']) && $_GET['show'] != '') ||
survey_answer.survey_id='".$my_survey_id."' AND
survey_answer.user='".$current_user."' AND
survey_answer.c_id = $course_id AND
survey_question.c_id = $course_id AND
survey_question.c_id = $course_id
$sessionCondition
$lpItemCondition
GROUP BY survey_group_pri
ORDER BY survey_group_pri
";
@ -1272,6 +1332,9 @@ if (!empty($_GET['language'])) {
$lang = Security::remove_XSS($_GET['language']);
$url .= '&language='.$lang;
}
if (!empty($lpItemId) && $allowSurveyInLp) {
$url .= '&lp_item_id='.$lpItemId.'&origin=learnpath';
}
$form = new FormValidator(
'question',
'post',
@ -1340,7 +1403,7 @@ if (isset($questions) && is_array($questions)) {
}
$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;
if (!empty($userAnswerData[$user_id])) {

@ -911,7 +911,7 @@ class SurveyManager
*
* @version February 2007
*/
public static function update_survey_answered($survey_data, $user, $survey_code)
public static function update_survey_answered($survey_data, $user, $survey_code, $lpItemId = 0)
{
if (empty($survey_data)) {
return false;
@ -923,7 +923,7 @@ class SurveyManager
$survey_id = (int) $survey_data['survey_id'];
$course_id = (int) $survey_data['c_id'];
$session_id = $survey_data['session_id'];
$sessionId = api_get_session_id();
// Getting a list with all the people who have filled the survey
/*$people_filled = self::get_people_who_filled_survey($survey_id, false, $course_id);
@ -945,14 +945,24 @@ class SurveyManager
$answeredAt = "answered_at = '".api_get_utc_datetime()."',";
}
$lpItemCondition = '';
if (true === api_get_configuration_value('allow_survey_tool_in_lp')) {
$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);
}
// Storing that the user has finished the survey.
$sql = "UPDATE $table_survey_invitation
SET $answeredAt answered = 1
WHERE
c_id = $course_id AND
session_id = $session_id AND
user ='".Database::escape_string($user)."' AND
survey_code='".Database::escape_string($survey_code)."'";
survey_code='".Database::escape_string($survey_code)."'
$sessionCondition
$lpItemCondition";
Database::query($sql);
}
@ -2862,16 +2872,41 @@ class SurveyManager
$surveyCode,
$courseId,
$sessionId = 0,
$groupId = 0
$groupId = 0,
$lpItemId = 0
) {
$invitationRepo = Database::getManager()->getRepository('ChamiloCourseBundle:CSurveyInvitation');
$params = [
'user' => $userId,
'cId' => $courseId,
'sessionId' => $sessionId,
'groupId' => $groupId,
'surveyCode' => $surveyCode,
];
if (true === api_get_configuration_value('allow_survey_tool_in_lp')) {
$params['lpItemId'] = $lpItemId;
}
return $invitationRepo->findBy(
$params,
['invitationDate' => 'DESC']
);
}
public static function getInvitationsAnswered(
$surveyCode,
$courseId,
$sessionId = 0
) {
$invitationRepo = Database::getManager()->getRepository('ChamiloCourseBundle:CSurveyInvitation');
return $invitationRepo->findBy(
[
'user' => $userId,
'cId' => $courseId,
'sessionId' => $sessionId,
'groupId' => $groupId,
'answered' => true,
'surveyCode' => $surveyCode,
],
['invitationDate' => 'DESC']

@ -64,17 +64,29 @@ class SurveyUtil
*
* @version January 2007
*/
public static function remove_answer($user, $survey_id, $question_id, $course_id)
public static function remove_answer($user, $survey_id, $question_id, $course_id, $sessionId = 0, $lpItemId = 0)
{
$course_id = intval($course_id);
// table definition
$table = Database::get_course_table(TABLE_SURVEY_ANSWER);
$lpItemCondition = '';
if (true === api_get_configuration_value('allow_survey_tool_in_lp')) {
$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
WHERE
c_id = $course_id AND
user = '".Database::escape_string($user)."' AND
survey_id = '".intval($survey_id)."' AND
question_id = '".intval($question_id)."'";
question_id = '".intval($question_id)."'
$sessionCondition
$lpItemCondition";
Database::query($sql);
}
@ -101,7 +113,9 @@ class SurveyUtil
$option_id,
$option_value,
$survey_data,
$otherOption = ''
$otherOption = '',
$sessionId = 0,
$lpItemId = 0
) {
// If the question_id is empty, don't store an answer
if (empty($question_id)) {
@ -128,14 +142,25 @@ class SurveyUtil
$option_id = $option_id.'@:@'.$otherOption;
}
$sql = "INSERT INTO $table_survey_answer (c_id, user, survey_id, question_id, option_id, value) VALUES (
$course_id,
'".Database::escape_string($user)."',
'".Database::escape_string($survey_id)."',
'".Database::escape_string($question_id)."',
'".Database::escape_string($option_id)."',
'".Database::escape_string($option_value)."'
)";
$lpItemCondition = '';
if (true === api_get_configuration_value('allow_survey_tool_in_lp')) {
$lpItemCondition = " , c_lp_item_id = $lpItemId";
}
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionCondition = " , session_id = $sessionId";
}
$sql = "INSERT INTO $table_survey_answer SET
c_id = $course_id,
user = '".Database::escape_string($user)."',
survey_id = '".Database::escape_string($survey_id)."',
question_id = '".Database::escape_string($question_id)."',
option_id = '".Database::escape_string($option_id)."',
value = '".Database::escape_string($option_value)."'
$sessionCondition
$lpItemCondition
";
Database::query($sql);
$insertId = Database::insert_id();
if ($insertId) {
@ -259,7 +284,16 @@ class SurveyUtil
self::display_comparative_report();
break;
case 'completereport':
echo self::displayCompleteReport($survey_data, 0, true, true, !$survey_data['anonymous']);
if (true === api_get_configuration_value('allow_survey_tool_in_lp')) {
$surveysAnswered = SurveyManager::getInvitationsAnswered($survey_data['code'], api_get_course_int_id(), api_get_session_id());
if (count($surveysAnswered) > 0) {
foreach ($surveysAnswered as $survey) {
echo self::displayCompleteReport($survey_data, 0, true, true, !$survey_data['anonymous'], $survey->getLpItemId());
}
}
} else {
echo self::displayCompleteReport($survey_data, 0, true, true, !$survey_data['anonymous']);
}
break;
case 'deleteuserreport':
self::delete_user_report($_GET['survey_id'], $_GET['user']);
@ -288,9 +322,16 @@ class SurveyUtil
$user_id = Database::escape_string($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
$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);
// update field answered from survey_invitation by user_id and survey_id
$sql = "UPDATE $table_survey_invitation SET answered = '0'
@ -302,7 +343,7 @@ class SurveyUtil
c_id = $course_id AND
survey_id = '".$survey_id."'
) AND
user = '".$user_id."'";
user = '".$user_id."' $sessionCondition";
$result = Database::query($sql);
}
@ -426,12 +467,19 @@ 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
$sql = "SELECT * FROM $table_survey_answer
WHERE
c_id = $course_id AND
survey_id = '".$surveyId."' AND
user = '".$userId."'";
user = '".$userId."'
$sessionCondition ";
$result = Database::query($sql);
while ($row = Database::fetch_array($result, 'ASSOC')) {
$answers[$row['question_id']][] = $row['option_id'];
@ -574,6 +622,12 @@ class SurveyUtil
$action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : '';
$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);
@ -683,7 +737,7 @@ class SurveyUtil
WHERE
c_id = $course_id AND
survey_id= $surveyId AND
question_id = $questionId ";
question_id = $questionId $sessionCondition";
$result = Database::query($sql);
while ($row = Database::fetch_array($result, 'ASSOC')) {
echo $row['option_id'].'<hr noshade="noshade" size="1" />';
@ -708,6 +762,7 @@ class SurveyUtil
c_id = $course_id AND
survey_id = $surveyId AND
question_id = $questionId
$sessionCondition
GROUP BY option_id, value";
$result = Database::query($sql);
$number_of_answers = [];
@ -841,7 +896,7 @@ class SurveyUtil
WHERE
c_id = $course_id AND
option_id = '".Database::escape_string($_GET['viewoption'])."'
$sql_restriction";
$sql_restriction $sessionCondition";
$result = Database::query($sql);
echo '<ul>';
while ($row = Database::fetch_array($result, 'ASSOC')) {
@ -871,6 +926,12 @@ class SurveyUtil
$course_id = api_get_course_int_id();
$surveyId = $survey_data['survey_id'];
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionId = api_get_session_id();
$sessionCondition = api_get_session_condition($sessionId);
}
// Getting the options
$sql = "SELECT * FROM $table_survey_question_option
WHERE
@ -890,6 +951,7 @@ class SurveyUtil
c_id = $course_id AND
survey_id= $surveyId AND
question_id = '".Database::escape_string($question['question_id'])."'
$sessionCondition
GROUP BY option_id, value";
$result = Database::query($sql);
$number_of_answers = 0;
@ -986,7 +1048,8 @@ class SurveyUtil
$userId = 0,
$addActionBar = true,
$addFilters = true,
$addExtraFields = true
$addExtraFields = true,
$lpItemId = 0
) {
// Database table definitions
$table_survey_question = Database::get_course_table(TABLE_SURVEY_QUESTION);
@ -996,12 +1059,43 @@ class SurveyUtil
$surveyId = (int) $survey_data['survey_id'];
$course_id = (int) $survey_data['c_id'];
$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 (true === api_get_configuration_value('allow_survey_tool_in_lp')) {
$lpItemCondition = " AND c_lp_item_id = $lpItemId";
}
if (empty($surveyId) || empty($course_id)) {
return '';
}
$action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : '';
$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) {
$content .= '<div class="actions">';
$content .= '<a
@ -1227,6 +1321,8 @@ class SurveyUtil
c_id = $course_id AND
survey_id = $surveyId
$userCondition
$sessionCondition
$lpItemCondition
ORDER BY answer_id, user ASC";
$result = Database::query($sql);
$i = 1;
@ -1419,6 +1515,12 @@ class SurveyUtil
$course = api_get_course_info();
$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_option = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION);
$table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER);
@ -1572,6 +1674,7 @@ class SurveyUtil
WHERE
c_id = $course_id AND
survey_id = $surveyId
$sessionCondition
";
if ($user_id != 0) {
$user_id = (int) $user_id;
@ -1796,6 +1899,12 @@ class SurveyUtil
$table_survey_question_option = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION);
$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);
}
// First line (questions)
$sql = "SELECT
questions.question_id,
@ -1917,7 +2026,7 @@ class SurveyUtil
$old_user = '';
$answers_of_user = [];
$sql = "SELECT * FROM $table_survey_answer
WHERE c_id = $course_id AND survey_id = $surveyId";
WHERE c_id = $course_id AND survey_id = $surveyId $sessionCondition";
if ($user_id != 0) {
$sql .= " AND user='".$user_id."' ";
}
@ -2332,16 +2441,28 @@ class SurveyUtil
*
* @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();
$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 (true === api_get_configuration_value('allow_survey_tool_in_lp')) {
$lpItemCondition = " AND c_lp_item_id = $lpItemId";
}
$sql = "SELECT * FROM $table_survey_answer
WHERE
c_id = $course_id AND
survey_id='".intval($survey_id)."' AND
question_id='".intval($question_id)."'
$sessionCondition
$lpItemCondition
ORDER BY USER ASC";
$result = Database::query($sql);
$return = [];
@ -3374,8 +3495,14 @@ class SurveyUtil
} else {
$search_restriction = "WHERE c_id = $course_id";
}
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionCondition = api_get_session_condition(api_get_session_id(), true, true);
}
$sql = "SELECT count(survey_id) AS total_number_of_items
FROM $table_survey $search_restriction";
FROM $table_survey $search_restriction $sessionCondition";
$res = Database::query($sql);
$obj = Database::fetch_object($res);
@ -3435,8 +3562,11 @@ class SurveyUtil
}
// Condition for the session
$session_id = api_get_session_id();
$condition_session = api_get_session_condition($session_id);
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionId = api_get_session_id();
$sessionCondition = api_get_session_condition($sessionId, true, true);
}
$course_id = api_get_course_int_id();
$sql = "
@ -3465,7 +3595,7 @@ class SurveyUtil
ON (survey.author = user.id)
WHERE survey.c_id = $course_id
$search_restriction
$condition_session
$sessionCondition
GROUP BY survey.survey_id
ORDER BY col$column $direction
LIMIT $from,$number_of_items
@ -3683,6 +3813,11 @@ class SurveyUtil
$now = api_get_utc_datetime(null, false, true);
$filterDate = $allowSurveyAvailabilityDatetime ? $now->format('Y-m-d H:i') : $now->format('Y-m-d');
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionCondition = api_get_session_condition($sessionId, true, true, 'survey.session_id');
}
$sql = "SELECT survey_invitation.answered,
survey_invitation.invitation_code,
survey_invitation.session_id,
@ -3696,15 +3831,14 @@ class SurveyUtil
ON (
survey.code = survey_invitation.survey_code AND
survey.c_id = survey_invitation.c_id AND
survey.session_id = survey_invitation.session_id
survey_invitation.session_id = $sessionId
)
WHERE
survey_invitation.user = $user_id AND
survey.avail_from <= '$filterDate' AND
survey.avail_till >= '$filterDate' AND
survey.c_id = $course_id AND
survey.session_id = $sessionId AND
survey_invitation.c_id = $course_id
survey_invitation.c_id = $course_id $sessionCondition
";
$result = Database::query($sql);
@ -4083,10 +4217,17 @@ class SurveyUtil
return false;
}
$sessionId = api_get_session_id();
$sessionCondition = '';
if (true === api_get_configuration_value('show_surveys_base_in_sessions')) {
$sessionCondition = api_get_session_condition($sessionId);
}
$sql = "SELECT * FROM $tableSurveyAnswer
WHERE
c_id = $courseId AND
survey_id = '".$surveyId."'
$sessionCondition
ORDER BY answer_id, user ASC";
$result = Database::query($sql);
$response = Database::affected_rows($result);

@ -97,6 +97,13 @@ class CSurveyInvitation
*/
protected $groupId;
/**
* @var int
*
* @ORM\Column(name="c_lp_item_id", type="integer", nullable=false)
*/
protected $lpItemId;
/**
* Set surveyCode.
*
@ -289,6 +296,30 @@ class CSurveyInvitation
return $this->groupId;
}
/**
* Set LpItemId.
*
* @param int $lpItemId
*
* @return CSurveyInvitation
*/
public function setLpItemId($lpItemId)
{
$this->lpItemId = $lpItemId;
return $this;
}
/**
* Get LpItemId.
*
* @return int
*/
public function getLpItemId()
{
return $this->lpItemId;
}
/**
* Set surveyInvitationId.
*

Loading…
Cancel
Save