AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot.'/course/moodleform_mod.php');
require_once($CFG->dirroot.'/mod/questionnaire/questionnaire.class.php');
require_once($CFG->dirroot.'/mod/questionnaire/locallib.php');
/**
* print the form to add or edit a questionnaire-instance
*
* @package mod_questionnaire
* @author Mike Churchward
* @copyright 2016 onward Mike Churchward (mike.churchward@poetgroup.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*/
class mod_questionnaire_mod_form extends moodleform_mod {
/**
* Form definition.
*/
protected function definition() {
global $COURSE;
global $questionnairetypes, $questionnairerespondents, $questionnaireresponseviewers, $autonumbering;
$questionnaire = new questionnaire($COURSE, $this->_cm, $this->_instance, null);
$mform =& $this->_form;
$mform->addElement('header', 'general', get_string('general', 'form'));
$mform->addElement('text', 'name', get_string('name', 'questionnaire'), array('size' => '64'));
$mform->setType('name', PARAM_TEXT);
$mform->addRule('name', null, 'required', null, 'client');
$this->standard_intro_elements(get_string('description'));
$mform->addElement('header', 'availabilityhdr', get_string('availability'));
$mform->addElement('date_time_selector', 'opendate', get_string('opendate', 'questionnaire'), ['optional' => true]);
$mform->addElement('date_time_selector', 'closedate', get_string('closedate', 'questionnaire'), ['optional' => true]);
$mform->addElement('header', 'questionnairehdr', get_string('responseoptions', 'questionnaire'));
$mform->addElement('select', 'qtype', get_string('qtype', 'questionnaire'), $questionnairetypes);
$mform->addHelpButton('qtype', 'qtype', 'questionnaire');
$mform->addElement('hidden', 'cannotchangerespondenttype');
$mform->setType('cannotchangerespondenttype', PARAM_INT);
$mform->addElement('select', 'respondenttype', get_string('respondenttype', 'questionnaire'), $questionnairerespondents);
$mform->addHelpButton('respondenttype', 'respondenttype', 'questionnaire');
$mform->disabledIf('respondenttype', 'cannotchangerespondenttype', 'eq', 1);
$mform->addElement('select', 'resp_view', get_string('responseview', 'questionnaire'), $questionnaireresponseviewers);
$mform->addHelpButton('resp_view', 'responseview', 'questionnaire');
$notificationoptions = array(0 => get_string('no'), 1 => get_string('notificationsimple', 'questionnaire'),
2 => get_string('notificationfull', 'questionnaire'));
$mform->addElement('select', 'notifications', get_string('notifications', 'questionnaire'), $notificationoptions);
$mform->addHelpButton('notifications', 'notifications', 'questionnaire');
$options = array('0' => get_string('no'), '1' => get_string('yes'));
$mform->addElement('select', 'resume', get_string('resume', 'questionnaire'), $options);
$mform->addHelpButton('resume', 'resume', 'questionnaire');
$options = array('0' => get_string('no'), '1' => get_string('yes'));
$mform->addElement('select', 'navigate', get_string('navigate', 'questionnaire'), $options);
$mform->addHelpButton('navigate', 'navigate', 'questionnaire');
$mform->addElement('select', 'autonum', get_string('autonumbering', 'questionnaire'), $autonumbering);
$mform->addHelpButton('autonum', 'autonumbering', 'questionnaire');
// Default = autonumber both questions and pages.
$mform->setDefault('autonum', 3);
$mform->addElement('advcheckbox', 'progressbar', get_string('progressbar', 'questionnaire'));
// Removed potential scales from list of grades. CONTRIB-3167.
$grades[0] = get_string('nograde');
for ($i = 100; $i >= 1; $i--) {
$grades[$i] = $i;
}
$mform->addElement('select', 'grade', get_string('grade', 'questionnaire'), $grades);
if (empty($questionnaire->sid)) {
if (!isset($questionnaire->id)) {
$questionnaire->id = 0;
}
$mform->addElement('header', 'contenthdr', get_string('contentoptions', 'questionnaire'));
$mform->addHelpButton('contenthdr', 'createcontent', 'questionnaire');
$mform->addElement('radio', 'create', get_string('createnew', 'questionnaire'), '', 'new-0');
// Retrieve existing private questionnaires from current course.
$surveys = questionnaire_get_survey_select($COURSE->id, 'private');
if (!empty($surveys)) {
$prelabel = get_string('useprivate', 'questionnaire');
foreach ($surveys as $value => $label) {
$mform->addElement('radio', 'create', $prelabel, $label, $value);
$prelabel = '';
}
}
// Retrieve existing template questionnaires from this site.
$surveys = questionnaire_get_survey_select($COURSE->id, 'template');
if (!empty($surveys)) {
$prelabel = get_string('usetemplate', 'questionnaire');
foreach ($surveys as $value => $label) {
$mform->addElement('radio', 'create', $prelabel, $label, $value);
$prelabel = '';
}
} else {
$mform->addElement('static', 'usetemplate', get_string('usetemplate', 'questionnaire'),
'('.get_string('notemplatesurveys', 'questionnaire').')');
}
// Retrieve existing public questionnaires from this site.
$surveys = questionnaire_get_survey_select($COURSE->id, 'public');
if (!empty($surveys)) {
$prelabel = get_string('usepublic', 'questionnaire');
foreach ($surveys as $value => $label) {
$mform->addElement('radio', 'create', $prelabel, $label, $value);
$prelabel = '';
}
} else {
$mform->addElement('static', 'usepublic', get_string('usepublic', 'questionnaire'),
'('.get_string('nopublicsurveys', 'questionnaire').')');
}
$mform->setDefault('create', 'new-0');
}
$this->standard_coursemodule_elements();
// Buttons.
$this->add_action_buttons();
}
/**
* Pre-process form data.
* @param array $defaultvalues
*/
public function data_preprocessing(&$defaultvalues) {
global $DB;
if (empty($defaultvalues['opendate'])) {
$defaultvalues['useopendate'] = 0;
} else {
$defaultvalues['useopendate'] = 1;
}
if (empty($defaultvalues['closedate'])) {
$defaultvalues['useclosedate'] = 0;
} else {
$defaultvalues['useclosedate'] = 1;
}
// Prevent questionnaire set to "anonymous" to be reverted to "full name".
$defaultvalues['cannotchangerespondenttype'] = 0;
if (!empty($defaultvalues['respondenttype']) && $defaultvalues['respondenttype'] == "anonymous") {
// If this questionnaire has responses.
$numresp = $DB->count_records('questionnaire_response',
array('questionnaireid' => $defaultvalues['instance'], 'complete' => 'y'));
if ($numresp) {
$defaultvalues['cannotchangerespondenttype'] = 1;
}
}
}
/**
* Enforce validation rules here
* @param array $data array of ("fieldname"=>value) of submitted data
* @param array $files array of uploaded files "element_name"=>tmp_file_path
* @return array
**/
public function validation($data, $files) {
$errors = parent::validation($data, $files);
// Check open and close times are consistent.
if ($data['opendate'] && $data['closedate'] &&
$data['closedate'] < $data['opendate']) {
$errors['closedate'] = get_string('closebeforeopen', 'questionnaire');
}
return $errors;
}
/**
* Add any completion rules for the form.
* @return string[]
*/
public function add_completion_rules() {
$mform =& $this->_form;
$mform->addElement('checkbox', 'completionsubmit', '', get_string('completionsubmit', 'questionnaire'));
return array('completionsubmit');
}
/**
* True if the completion rule is enabled.
* @param array $data
* @return bool
*/
public function completion_rule_enabled($data) {
return !empty($data['completionsubmit']);
}
}