/** * Function to create a question. * * @param questionnaire $questionnaire * @param array|stdClass $record * @param array|stdClass $data - accompanying data for question - e.g. choices * @return \mod_questionnaire\question\base the question object */ public function create_question(questionnaire $questionnaire, $record = null, $data = null) { global $DB; // Increment the question count. $this->questioncount++; $record = (array) $record; $record['position'] = count($questionnaire->questions); if (!isset($record['survey_id'])) { throw new coding_exception('survey_id must be present in phpunit_util::create_question() $record'); } if (!isset($record['name'])) { throw new coding_exception('name must be present in phpunit_util::create_question() $record'); } if (!isset($record['type_id'])) { throw new coding_exception('typeid must be present in phpunit_util::create_question() $record'); } if (!isset($record['content'])) { $record['content'] = 'Random ' . $this->type_str($record['type_id']) . ' ' . uniqid(); } // Get question type. $typeid = $record['type_id']; if ($typeid === QUESRATE && !isset($record['length'])) { $record['length'] = 5; } if ($typeid !== QUESPAGEBREAK && $typeid !== QUESSECTIONTEXT) { $qtype = $DB->get_record('questionnaire_question_type', ['id' => $typeid]); if (!$qtype) { throw new coding_exception('Could not find question type with id ' . $typeid); } // Throw an error if this requires choices and it hasn't got them. $this->validate_question($qtype->typeid, $data); } $record = (object) $record; // Add the question. $record->id = $DB->insert_record('questionnaire_question', $record); $typename = \mod_questionnaire\question\base::qtypename($record->type_id); $question = questionnaire::question_factory($typename, $record->id, $record); // Add the question choices if required. if ($typeid !== QUESPAGEBREAK && $typeid !== QUESSECTIONTEXT) { if ($question->has_choices()) { $this->add_question_choices($question, $data); $record->opts = $data; } } // Update questionnaire. $questionnaire->add_questions(); return $question; }
/** * Get all survey responses in one go. * * @author: Guy Thomas * @param string $rid * @param string $userid * @return array */ protected function get_survey_all_responses($rid = '', $userid = '') { global $DB; $uniquetypes = $this->get_survey_questiontypes(true); $allresponsessql = ""; $allresponsesparams = []; foreach ($uniquetypes as $type) { $typename = \mod_questionnaire\question\base::qtypename($type); $question = self::question_factory($typename); if (!isset($question->response)) { continue; } $allresponsessql .= $allresponsessql == '' ? '' : ' UNION ALL '; list($sql, $params) = $question->response->get_bulk_sql($this->survey->id, $rid, $userid); $allresponsesparams = array_merge($allresponsesparams, $params); $allresponsessql .= $sql; } $allresponsessql .= " ORDER BY userid, id"; $allresponses = $DB->get_recordset_sql($allresponsessql, $allresponsesparams); return $allresponses; }
$questions = $DB->get_records('questionnaire_question', array('survey_id' => $sid, 'deleted' => 'n'), 'id'); $questionnairehasdependencies = questionnaire_has_dependencies($questions); if (questionnaire_has_dependencies($questions)) { questionnaire_check_page_breaks($questionnaire); } $SESSION->questionnaire->required = $qformdata->required; $SESSION->questionnaire->type_id = $qformdata->type_id; // Switch to main screen. $action = 'main'; $reload = true; } } // Log question created event. if (isset($qformdata)) { $context = context_module::instance($questionnaire->cm->id); $questiontype = \mod_questionnaire\question\base::qtypename($qformdata->type_id); $params = array('context' => $context, 'courseid' => $questionnaire->course->id, 'other' => array('questiontype' => $questiontype)); $event = \mod_questionnaire\event\question_created::create($params); $event->trigger(); } $questionsform->set_data($question); } } // Reload the form data if called for... if ($reload) { unset($questionsform); $questionnaire = new questionnaire($questionnaire->id, null, $course, $cm); // Add renderer and page objects to the questionnaire object for display use. $questionnaire->add_renderer($PAGE->get_renderer('mod_questionnaire')); $questionnaire->add_page(new \mod_questionnaire\output\questionspage()); if ($action == 'main') {