Ejemplo n.º 1
0
 /**
  * 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') {