You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
715 lines
25 KiB
715 lines
25 KiB
<?php
|
|
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
use ChamiloSession as Session;
|
|
|
|
/**
|
|
* Class survey_question.
|
|
*/
|
|
class survey_question
|
|
{
|
|
public $buttonList = [];
|
|
/** @var FormValidator */
|
|
private $form;
|
|
|
|
/**
|
|
* @param array $surveyData
|
|
*/
|
|
public function addParentMenu($formData, FormValidator $form, $surveyData)
|
|
{
|
|
$surveyId = $surveyData['survey_id'];
|
|
$questionId = isset($formData['question_id']) ? $formData['question_id'] : 0;
|
|
$parentId = isset($formData['parent_id']) ? $formData['parent_id'] : 0;
|
|
$optionId = isset($formData['parent_option_id']) ? $formData['parent_option_id'] : 0;
|
|
$questions = SurveyManager::get_questions($surveyId);
|
|
|
|
$newQuestionList = [];
|
|
$allowTypes = ['yesno', 'multiplechoice', 'multipleresponse'];
|
|
foreach ($questions as $question) {
|
|
if (in_array($question['type'], $allowTypes)) {
|
|
$newQuestionList[$question['sort']] = $question;
|
|
}
|
|
}
|
|
ksort($newQuestionList);
|
|
|
|
$options = [];
|
|
foreach ($newQuestionList as $question) {
|
|
if (!empty($questionId)) {
|
|
if ($question['question_id'] == $questionId) {
|
|
break;
|
|
}
|
|
}
|
|
$options[$question['question_id']] = strip_tags($question['question']);
|
|
}
|
|
$form->addSelect(
|
|
'parent_id',
|
|
get_lang('Parent'),
|
|
$options,
|
|
['id' => 'parent_id', 'placeholder' => get_lang('SelectAnOption')]
|
|
);
|
|
$url = api_get_path(WEB_AJAX_PATH).
|
|
'survey.ajax.php?'.api_get_cidreq().'&a=load_question_options&survey_id='.$surveyId;
|
|
$form->addHtml('
|
|
<script>
|
|
$(function() {
|
|
$("#parent_id").on("change", function() {
|
|
var questionId = $(this).val()
|
|
var $select = $("#parent_option_id");
|
|
$select.empty();
|
|
|
|
if (questionId === "") {
|
|
$("#option_list").hide();
|
|
} else {
|
|
$.getJSON({
|
|
url: "'.$url.'" + "&question_id=" + questionId,
|
|
success: function(data) {
|
|
$("#option_list").show();
|
|
$.each(data, function(key, value) {
|
|
$("<option>").val(key).text(value).appendTo($select);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
');
|
|
|
|
$style = 'display:none';
|
|
$options = [];
|
|
if (!empty($optionId) && !empty($parentId)) {
|
|
$parentData = SurveyManager::get_question($parentId);
|
|
$style = '';
|
|
foreach ($parentData['answer_data'] as $answer) {
|
|
$options[$answer['iid']] = strip_tags($answer['data']);
|
|
}
|
|
}
|
|
|
|
$form->addHtml('<div id="option_list" style="'.$style.'">');
|
|
$form->addSelect(
|
|
'parent_option_id',
|
|
get_lang('Option'),
|
|
$options,
|
|
['id' => 'parent_option_id', 'disable_js' => true]
|
|
);
|
|
$form->addHtml('</div>');
|
|
}
|
|
|
|
/**
|
|
* @param string $type
|
|
*
|
|
* @return survey_question
|
|
*/
|
|
public static function createQuestion($type)
|
|
{
|
|
switch ($type) {
|
|
case 'comment':
|
|
return new ch_comment();
|
|
case 'dropdown':
|
|
return new ch_dropdown();
|
|
case 'multiplechoice':
|
|
return new ch_multiplechoice();
|
|
case 'multipleresponse':
|
|
return new ch_multipleresponse();
|
|
case 'open':
|
|
return new ch_open();
|
|
case 'pagebreak':
|
|
return new ch_pagebreak();
|
|
case 'percentage':
|
|
return new ch_percentage();
|
|
case 'personality':
|
|
return new ch_personality();
|
|
case 'score':
|
|
return new ch_score();
|
|
case 'yesno':
|
|
return new ch_yesno();
|
|
case 'selectivedisplay':
|
|
return new ch_selectivedisplay();
|
|
case 'multiplechoiceother':
|
|
return new ch_multiplechoiceother();
|
|
default:
|
|
api_not_allowed(true);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generic part of any survey question: the question field.
|
|
*
|
|
* @param array $surveyData
|
|
* @param array $formData
|
|
*
|
|
* @return FormValidator
|
|
*/
|
|
public function createForm($surveyData, $formData)
|
|
{
|
|
$action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : null;
|
|
$questionId = isset($_GET['question_id']) ? (int) $_GET['question_id'] : null;
|
|
$surveyId = isset($_GET['survey_id']) ? (int) $_GET['survey_id'] : null;
|
|
$type = isset($_GET['type']) ? Security::remove_XSS($_GET['type']) : null;
|
|
|
|
$actionHeader = get_lang('EditQuestion').': ';
|
|
if ($action === 'add') {
|
|
$actionHeader = get_lang('AddQuestion').': ';
|
|
}
|
|
|
|
$questionComment = '';
|
|
$allowParent = false;
|
|
switch ($type) {
|
|
case 'open':
|
|
$toolName = get_lang('Open');
|
|
$questionComment = get_lang('QuestionTags');
|
|
$allowParent = true;
|
|
break;
|
|
case 'yesno':
|
|
$toolName = get_lang('YesNo');
|
|
$allowParent = true;
|
|
break;
|
|
case 'multiplechoice':
|
|
$toolName = get_lang('UniqueSelect');
|
|
$allowParent = true;
|
|
break;
|
|
case 'multipleresponse':
|
|
$toolName = get_lang('MultipleResponse');
|
|
$allowParent = true;
|
|
break;
|
|
case 'selectivedisplay':
|
|
$toolName = get_lang('SurveyQuestionSelectiveDisplay');
|
|
$questionComment = get_lang('SurveyQuestionSelectiveDisplayComment');
|
|
$allowParent = true;
|
|
break;
|
|
case 'multiplechoiceother':
|
|
$toolName = get_lang('SurveyQuestionMultipleChoiceWithOther');
|
|
$questionComment = get_lang('SurveyQuestionMultipleChoiceWithOtherComment');
|
|
$allowParent = true;
|
|
break;
|
|
case 'pagebreak':
|
|
$toolName = get_lang(api_ucfirst($type));
|
|
$allowParent = false;
|
|
break;
|
|
default:
|
|
$toolName = get_lang(api_ucfirst($type));
|
|
$allowParent = true;
|
|
break;
|
|
}
|
|
|
|
if (false === api_get_configuration_value('survey_question_dependency')) {
|
|
$allowParent = false;
|
|
}
|
|
|
|
$icon = Display::return_icon(
|
|
SurveyManager::icon_question($type),
|
|
$toolName,
|
|
['align' => 'middle', 'height' => '22px']
|
|
).' ';
|
|
|
|
$toolName = $icon.$actionHeader.$toolName;
|
|
$sharedQuestionId = isset($formData['shared_question_id']) ? $formData['shared_question_id'] : null;
|
|
|
|
$url = api_get_self().'?action='.$action.'&type='.$type.'&survey_id='.$surveyId.'&question_id='.$questionId.'&'.api_get_cidreq();
|
|
$form = new FormValidator('question_form', 'post', $url);
|
|
$form->addHeader($toolName);
|
|
if (!empty($questionComment)) {
|
|
$form->addHtml(Display::return_message($questionComment, 'info', false));
|
|
}
|
|
$form->addHidden('survey_id', $surveyId);
|
|
$form->addHidden('question_id', $questionId);
|
|
$form->addHidden('shared_question_id', Security::remove_XSS($sharedQuestionId));
|
|
$form->addHidden('type', $type);
|
|
|
|
$config = [
|
|
'ToolbarSet' => 'SurveyQuestion',
|
|
'Width' => '100%',
|
|
'Height' => '120',
|
|
];
|
|
$form->addHtmlEditor(
|
|
'question',
|
|
get_lang('Question'),
|
|
true,
|
|
false,
|
|
$config
|
|
);
|
|
|
|
if (api_get_configuration_value('allow_required_survey_questions') &&
|
|
in_array($_GET['type'], ['yesno', 'multiplechoice'])) {
|
|
$form->addCheckBox('is_required', get_lang('IsMandatory'), get_lang('Yes'));
|
|
}
|
|
|
|
if ($allowParent) {
|
|
$this->addParentMenu($formData, $form, $surveyData);
|
|
}
|
|
|
|
if (1 == $surveyData['survey_type']) {
|
|
$table_survey_question_group = Database::get_course_table(TABLE_SURVEY_QUESTION_GROUP);
|
|
$sql = 'SELECT id, name FROM '.$table_survey_question_group.'
|
|
WHERE survey_id = '.$surveyId.'
|
|
ORDER BY name';
|
|
$rs = Database::query($sql);
|
|
$glist = null;
|
|
while ($row = Database::fetch_array($rs, 'NUM')) {
|
|
$glist .= '<option value="'.$row[0].'" >'.$row[1].'</option>';
|
|
}
|
|
|
|
$grouplist = $grouplist1 = $grouplist2 = $glist;
|
|
if (!empty($formData['assigned'])) {
|
|
$grouplist = str_replace(
|
|
'<option value="'.$formData['assigned'].'"',
|
|
'<option value="'.$formData['assigned'].'" selected',
|
|
$glist
|
|
);
|
|
}
|
|
|
|
if (!empty($formData['assigned1'])) {
|
|
$grouplist1 = str_replace(
|
|
'<option value="'.$formData['assigned1'].'"',
|
|
'<option value="'.$formData['assigned1'].'" selected',
|
|
$glist
|
|
);
|
|
}
|
|
|
|
if (!empty($formData['assigned2'])) {
|
|
$grouplist2 = str_replace(
|
|
'<option value="'.$formData['assigned2'].'"',
|
|
'<option value="'.$formData['assigned2'].'" selected',
|
|
$glist
|
|
);
|
|
}
|
|
|
|
$this->html .= '<tr><td colspan="">
|
|
<fieldset style="border:1px solid black">
|
|
<legend>'.get_lang('Condition').'</legend>
|
|
<b>'.get_lang('Primary').'</b><br />
|
|
<input type="radio" name="choose" value="1" '.(($formData['choose'] == 1) ? 'checked' : '').'>
|
|
<select name="assigned">'.$grouplist.'</select><br />';
|
|
$this->html .= '
|
|
<b>'.get_lang('Secondary').'</b><br />
|
|
<input type="radio" name="choose" value="2" '.(($formData['choose'] == 2) ? 'checked' : '').'>
|
|
<select name="assigned1">'.$grouplist1.'</select>
|
|
<select name="assigned2">'.$grouplist2.'</select>
|
|
</fieldset><br />';
|
|
}
|
|
|
|
$this->setForm($form);
|
|
|
|
return $form;
|
|
}
|
|
|
|
/**
|
|
* Adds submit button.
|
|
*/
|
|
public function renderForm()
|
|
{
|
|
if (isset($_GET['question_id']) && !empty($_GET['question_id'])) {
|
|
/**
|
|
* Prevent the edition of already-answered questions to avoid
|
|
* inconsistent answers. Use the configuration option
|
|
* survey_allow_answered_question_edit to change this behaviour.
|
|
*/
|
|
$surveyId = isset($_GET['survey_id']) ? (int) $_GET['survey_id'] : 0;
|
|
$answersChecker = SurveyUtil::checkIfSurveyHasAnswers($surveyId);
|
|
$allowQuestionEdit = api_get_configuration_value('survey_allow_answered_question_edit') == true;
|
|
if ($allowQuestionEdit or !$answersChecker) {
|
|
$this->buttonList[] = $this->getForm()->addButtonUpdate(get_lang('ModifyQuestionSurvey'), 'save', true);
|
|
} else {
|
|
$this->getForm()->addHtml('
|
|
<div class="form-group">
|
|
<label class="col-sm-2 control-label"></label>
|
|
<div class="col-sm-8">
|
|
<div class="alert alert-info">'.
|
|
get_lang('YouCantNotEditThisQuestionBecauseAlreadyExistAnswers').'</div>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
</div>
|
|
');
|
|
}
|
|
} else {
|
|
$this->buttonList[] = $this->getForm()->addButtonSave(get_lang('CreateQuestionSurvey'), 'save', true);
|
|
}
|
|
|
|
$this->getForm()->addGroup($this->buttonList, 'buttons');
|
|
}
|
|
|
|
/**
|
|
* @return FormValidator
|
|
*/
|
|
public function getForm()
|
|
{
|
|
return $this->form;
|
|
}
|
|
|
|
/**
|
|
* @param FormValidator $form
|
|
*/
|
|
public function setForm($form)
|
|
{
|
|
$this->form = $form;
|
|
}
|
|
|
|
/**
|
|
* @param array $formData
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function preSave($formData)
|
|
{
|
|
$counter = Session::read('answer_count');
|
|
$answerList = Session::read('answer_list');
|
|
|
|
if (empty($answerList)) {
|
|
$answerList = isset($formData['answers']) ? $formData['answers'] : [];
|
|
Session::write('answer_list', $answerList);
|
|
}
|
|
|
|
if (isset($_POST['answers'])) {
|
|
$formData['answers'] = $_POST['answers'];
|
|
}
|
|
|
|
if (empty($counter)) {
|
|
$counter = count($answerList) - 1;
|
|
Session::write('answer_count', $counter);
|
|
}
|
|
|
|
// Moving an answer up
|
|
if (isset($_POST['move_up']) && $_POST['move_up']) {
|
|
foreach ($_POST['move_up'] as $key => &$value) {
|
|
$id1 = $key;
|
|
$content1 = $formData['answers'][$id1];
|
|
$id2 = $key - 1;
|
|
$content2 = $formData['answers'][$id2];
|
|
$formData['answers'][$id1] = $content2;
|
|
$formData['answers'][$id2] = $content1;
|
|
}
|
|
}
|
|
|
|
// Moving an answer down
|
|
if (isset($_POST['move_down']) && $_POST['move_down']) {
|
|
foreach ($_POST['move_down'] as $key => &$value) {
|
|
$id1 = $key;
|
|
$content1 = $formData['answers'][$id1];
|
|
$id2 = $key + 1;
|
|
$content2 = $formData['answers'][$id2];
|
|
$formData['answers'][$id1] = $content2;
|
|
$formData['answers'][$id2] = $content1;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Deleting a specific answer is only saved in the session until the
|
|
* "Save question" button is pressed. This means all options are kept
|
|
* in the survey_question_option table until the question is saved.
|
|
*/
|
|
if (isset($_POST['delete_answer'])) {
|
|
$deleted = false;
|
|
foreach ($_POST['delete_answer'] as $key => &$value) {
|
|
$deleted = $key;
|
|
$counter--;
|
|
Session::write('answer_count', $counter);
|
|
}
|
|
|
|
$newAnswers = [];
|
|
$newAnswersId = [];
|
|
foreach ($formData['answers'] as $key => &$value) {
|
|
if ($key > $deleted) {
|
|
// swap with previous (deleted) option slot
|
|
$newAnswers[$key - 1] = $formData['answers'][$key];
|
|
$newAnswersId[$key - 1] = $formData['answersid'][$key];
|
|
unset($formData['answers'][$key]);
|
|
unset($formData['answersid'][$key]);
|
|
} elseif ($key === $deleted) {
|
|
// delete option
|
|
unset($formData['answers'][$deleted]);
|
|
unset($formData['answersid'][$deleted]);
|
|
} else {
|
|
// keep as is
|
|
$newAnswers[$key] = $value;
|
|
$newAnswersId[$key] = $formData['answersid'][$key];
|
|
}
|
|
}
|
|
unset($formData['answers']);
|
|
unset($formData['answersid']);
|
|
$formData['answers'] = $newAnswers;
|
|
$formData['answersid'] = $newAnswersId;
|
|
}
|
|
|
|
// Adding an answer
|
|
if (isset($_POST['buttons']) && isset($_POST['buttons']['add_answer'])) {
|
|
if (isset($_REQUEST['type']) && 'multiplechoiceother' === $_REQUEST['type'] && $counter > 2) {
|
|
$counter--;
|
|
}
|
|
$counter++;
|
|
Session::write('answer_count', $counter);
|
|
}
|
|
|
|
// Removing an answer
|
|
if (isset($_POST['buttons']) && isset($_POST['buttons']['remove_answer'])) {
|
|
$counter--;
|
|
Session::write('answer_count', $counter);
|
|
foreach ($formData['answers'] as $index => &$data) {
|
|
if ($index > $counter) {
|
|
unset($formData['answers'][$index]);
|
|
unset($formData['answersid'][$index]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!isset($_POST['delete_answer'])) {
|
|
// Make sure we have an array of answers
|
|
if (!isset($formData['answers'])) {
|
|
$formData['answers'] = [];
|
|
}
|
|
// Check if no deleted answer remains at the end of the answers
|
|
// array and add empty answers if the array is too short
|
|
foreach ($formData['answers'] as $index => $data) {
|
|
if ($index > $counter) {
|
|
unset($formData['answers'][$index]);
|
|
}
|
|
}
|
|
|
|
for ($i = 0; $i <= $counter; $i++) {
|
|
if (!isset($formData['answers'][$i])) {
|
|
$formData['answers'][$i] = '';
|
|
}
|
|
}
|
|
}
|
|
|
|
$formData['answers'] = isset($formData['answers']) ? $formData['answers'] : [];
|
|
Session::write('answer_list', $formData['answers']);
|
|
|
|
if (!isset($formData['is_required']) && api_get_configuration_value('survey_mark_question_as_required')) {
|
|
$formData['is_required'] = true;
|
|
}
|
|
|
|
return $formData;
|
|
}
|
|
|
|
/**
|
|
* @param array $surveyData
|
|
* @param array $formData
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function save($surveyData, $formData, $dataFromDatabase = [])
|
|
{
|
|
// Saving a question
|
|
if (isset($_POST['buttons']) && isset($_POST['buttons']['save'])) {
|
|
Session::erase('answer_count');
|
|
Session::erase('answer_list');
|
|
$message = SurveyManager::save_question($surveyData, $formData, true, $dataFromDatabase);
|
|
|
|
if ($message === 'QuestionAdded' || $message === 'QuestionUpdated') {
|
|
$url = api_get_path(WEB_CODE_PATH).'survey/survey.php?survey_id='.intval($_GET['survey_id']).'&message='.$message.'&'.api_get_cidreq();
|
|
header('Location: '.$url);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
return $formData;
|
|
}
|
|
|
|
/**
|
|
* Adds two buttons. One to add an option, one to remove an option.
|
|
*
|
|
* @param array $data
|
|
*/
|
|
public function addRemoveButtons($data)
|
|
{
|
|
$this->buttonList['remove_answer'] = $this->getForm()->createElement(
|
|
'button',
|
|
'remove_answer',
|
|
get_lang('RemoveAnswer'),
|
|
'minus',
|
|
'default'
|
|
);
|
|
|
|
if (count($data['answers']) <= 2) {
|
|
$this->buttonList['remove_answer']->updateAttributes(
|
|
['disabled' => 'disabled']
|
|
);
|
|
}
|
|
|
|
$this->buttonList['add_answer'] = $this->getForm()->createElement(
|
|
'button',
|
|
'add_answer',
|
|
get_lang('AddAnswer'),
|
|
'plus',
|
|
'default'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get the JS for questions that can depend on a previous question
|
|
* (and that hides those questions until something changes in the previous
|
|
* question).
|
|
*
|
|
* @return string HTML code
|
|
*/
|
|
public static function getJs()
|
|
{
|
|
return '
|
|
<style>
|
|
.with_parent {
|
|
display: none;
|
|
}
|
|
</style>
|
|
<script>
|
|
$(function() {
|
|
});
|
|
</script>';
|
|
}
|
|
|
|
/**
|
|
* Get the question parents recursively, if any. This function depends on
|
|
* the existence of a parent_id field, which depends on the
|
|
* 'survey_question_dependency' setting and its corresponding SQL
|
|
* requirements.
|
|
*
|
|
* @param int $questionId The c_survey_question.question.id
|
|
* @param array $list An array of parents to be extended by this method
|
|
*
|
|
* @return array The completed array of parents
|
|
*/
|
|
public static function getParents($questionId, $list = [])
|
|
{
|
|
if (true !== api_get_configuration_value('survey_question_dependency')) {
|
|
return $list;
|
|
}
|
|
$courseId = api_get_course_int_id();
|
|
$questionId = (int) $questionId;
|
|
|
|
$table = Database::get_course_table(TABLE_SURVEY_QUESTION);
|
|
$sql = "SELECT parent_id FROM $table
|
|
WHERE c_id = $courseId AND question_id = $questionId ";
|
|
$result = Database::query($sql);
|
|
$row = Database::fetch_array($result, 'ASSOC');
|
|
if ($row && !empty($row['parent_id'])) {
|
|
$list[] = $row['parent_id'];
|
|
$list = self::getParents($row['parent_id'], $list);
|
|
}
|
|
|
|
return $list;
|
|
}
|
|
|
|
/**
|
|
* Creates the JS code for the given parent question so that it shows
|
|
* the children questions when a specific answer of the parent is selected.
|
|
*
|
|
* @param array $question An array with the question details
|
|
*
|
|
* @return string JS code to add to the HTML survey question page
|
|
*/
|
|
public static function getQuestionJs($question)
|
|
{
|
|
if (empty($question)) {
|
|
return '';
|
|
}
|
|
|
|
$list = self::getDependency($question);
|
|
|
|
if (empty($list)) {
|
|
return '';
|
|
}
|
|
|
|
$type = $question['type'];
|
|
$questionId = $question['question_id'];
|
|
$newList = [];
|
|
foreach ($list as $child) {
|
|
$childQuestionId = $child['question_id'];
|
|
$optionId = $child['parent_option_id'];
|
|
$newList[$optionId][] = $childQuestionId;
|
|
}
|
|
|
|
if ('multipleresponse' === $type) {
|
|
$multiple = '';
|
|
foreach ($newList as $optionId => $child) {
|
|
$multiple .= '
|
|
$(\'input[name="question'.$questionId.'['.$optionId.']"]\').on("change", function() {
|
|
var isChecked= $(this).is(\':checked\');
|
|
var checkedValue = $(this).val();
|
|
if (isChecked) {
|
|
$.each(list, function(index, value) {
|
|
$(".with_parent_" + value).find("input").prop("checked", false);
|
|
});
|
|
|
|
var questionId = $(this).val();
|
|
var questionToShow = list[questionId];
|
|
$(".with_parent_" + questionToShow).show();
|
|
} else {
|
|
var checkedValue = list[checkedValue];
|
|
}
|
|
});
|
|
';
|
|
}
|
|
|
|
$js = '
|
|
<script>
|
|
$(function() {
|
|
var list = '.json_encode($newList).';
|
|
'.$multiple.'
|
|
});
|
|
</script>';
|
|
|
|
return $js;
|
|
}
|
|
|
|
$js = '
|
|
<script>
|
|
$(function() {
|
|
var list = '.json_encode($newList).';
|
|
$("input[name=question'.$questionId.']").on("click", function() {
|
|
$.each(list, function(index, value) {
|
|
$.each(value, function(index, itemValue) {
|
|
$(".with_parent_" + itemValue).hide();
|
|
$(".with_parent_" + itemValue).find("input").prop("checked", false);
|
|
$(".with_parent_only_hide_" + itemValue).hide();
|
|
});
|
|
});
|
|
|
|
var questionId = $(this).val();
|
|
var questionToShowList = list[questionId];
|
|
$.each(questionToShowList, function(index, value) {
|
|
$(".with_parent_" + value).show();
|
|
});
|
|
});
|
|
});
|
|
</script>';
|
|
|
|
return $js;
|
|
}
|
|
|
|
/**
|
|
* Returns the (children) questions that have the given question as parent.
|
|
*
|
|
* @param array $question An array describing the parent question
|
|
*
|
|
* @return array The questions that have the given question as parent
|
|
*/
|
|
public static function getDependency($question)
|
|
{
|
|
if (true !== api_get_configuration_value('survey_question_dependency')) {
|
|
return [];
|
|
}
|
|
$table = Database::get_course_table(TABLE_SURVEY_QUESTION);
|
|
$questionId = $question['question_id'];
|
|
$courseId = api_get_course_int_id();
|
|
|
|
// Getting the information of the question
|
|
$sql = "SELECT * FROM $table
|
|
WHERE c_id = $courseId AND parent_id = $questionId ";
|
|
$result = Database::query($sql);
|
|
$row = Database::store_result($result, 'ASSOC');
|
|
|
|
return $row;
|
|
}
|
|
|
|
/**
|
|
* This method is not implemented at this level (returns null).
|
|
*
|
|
* @param array $questionData
|
|
* @param array $answers
|
|
*/
|
|
public function render(FormValidator $form, $questionData = [], $answers = [])
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|