. /** * This file contains the instance add/edit form. * * @package mod_htmlcert * @copyright 2013 Mark Nelson , 2021 Klaus-Uwe Mitterer * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ use mod_htmlcert\certificate; defined('MOODLE_INTERNAL') || die('Direct access to this script is forbidden.'); require_once($CFG->dirroot.'/course/moodleform_mod.php'); /** * Instance add/edit form. * * @package mod_htmlcert * @copyright 2013 Mark Nelson , 2021 Klaus-Uwe Mitterer * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class mod_htmlcert_mod_form extends moodleform_mod { /** * Form definition. */ public function definition() { global $CFG; $mform =& $this->_form; $mform->addElement('header', 'general', get_string('general', 'form')); $mform->addElement('text', 'name', get_string('name', 'htmlcert'), array('size' => '64')); if (!empty($CFG->formatstringstriptags)) { $mform->setType('name', PARAM_TEXT); } else { $mform->setType('name', PARAM_CLEANHTML); } $mform->addRule('name', null, 'required', null, 'client'); $this->standard_intro_elements(get_string('description', 'htmlcert')); $mform->addElement('header', 'options', get_string('options', 'htmlcert')); $deliveryoptions = [ certificate::DELIVERY_OPTION_INLINE => get_string('deliveryoptioninline', 'htmlcert'), certificate::DELIVERY_OPTION_DOWNLOAD => get_string('deliveryoptiondownload', 'htmlcert') ]; $mform->addElement('select', 'deliveryoption', get_string('deliveryoptions', 'htmlcert'), $deliveryoptions); $mform->setDefault('deliveryoption', certificate::DELIVERY_OPTION_INLINE); if (has_capability('mod/htmlcert:manageemailstudents', $this->get_context())) { $mform->addElement('selectyesno', 'emailstudents', get_string('emailstudents', 'htmlcert')); $mform->setDefault('emailstudents', get_config('htmlcert', 'emailstudents')); $mform->addHelpButton('emailstudents', 'emailstudents', 'htmlcert'); $mform->setType('emailstudents', PARAM_INT); } if (has_capability('mod/htmlcert:manageemailteachers', $this->get_context())) { $mform->addElement('selectyesno', 'emailteachers', get_string('emailteachers', 'htmlcert')); $mform->setDefault('emailteachers', get_config('htmlcert', 'emailteachers')); $mform->addHelpButton('emailteachers', 'emailteachers', 'htmlcert'); $mform->setType('emailteachers', PARAM_INT); } if (has_capability('mod/htmlcert:manageemailothers', $this->get_context())) { $mform->addElement('text', 'emailothers', get_string('emailothers', 'htmlcert'), array('size' => '40')); $mform->addHelpButton('emailothers', 'emailothers', 'htmlcert'); $mform->setDefault('emailothers', get_config('htmlcert', 'emailothers')); $mform->setType('emailothers', PARAM_TEXT); } if (has_capability('mod/htmlcert:manageverifyany', $this->get_context())) { $mform->addElement('selectyesno', 'verifyany', get_string('verifycertificateanyone', 'htmlcert')); $mform->addHelpButton('verifyany', 'verifycertificateanyone', 'htmlcert'); $mform->setDefault('verifyany', get_config('htmlcert', 'verifyany')); $mform->setType('verifyany', PARAM_INT); } if (has_capability('mod/htmlcert:managerequiredtime', $this->get_context())) { $mform->addElement('text', 'requiredtime', get_string('coursetimereq', 'htmlcert'), array('size' => '3')); $mform->addHelpButton('requiredtime', 'coursetimereq', 'htmlcert'); $mform->setDefault('requiredtime', get_config('htmlcert', 'requiredtime')); $mform->setType('requiredtime', PARAM_INT); } if (has_capability('mod/htmlcert:manageprotection', $this->get_context())) { $mform->addElement('checkbox', 'protection_print', get_string('setprotection', 'htmlcert'), get_string('print', 'htmlcert')); $mform->addElement('checkbox', 'protection_modify', '', get_string('modify', 'htmlcert')); $mform->addElement('checkbox', 'protection_copy', '', get_string('copy', 'htmlcert')); $mform->addHelpButton('protection_print', 'setprotection', 'htmlcert'); $mform->setType('protection_print', PARAM_BOOL); $mform->setType('protection_modify', PARAM_BOOL); $mform->setType('protection_copy', PARAM_BOOL); } $this->standard_coursemodule_elements(); $this->add_action_buttons(); } /** * Any data processing needed before the form is displayed. * * @param array $defaultvalues */ public function data_preprocessing(&$defaultvalues) { // Set the values in the form to what has been set in database if updating // or set default configured values if creating. if (!empty($defaultvalues['update'])) { if (!empty($defaultvalues['protection'])) { $protection = $this->build_protection_data($defaultvalues['protection']); $defaultvalues['protection_print'] = $protection->protection_print; $defaultvalues['protection_modify'] = $protection->protection_modify; $defaultvalues['protection_copy'] = $protection->protection_copy; } } else { $defaultvalues['protection_print'] = get_config('htmlcert', 'protection_print'); $defaultvalues['protection_modify'] = get_config('htmlcert', 'protection_modify'); $defaultvalues['protection_copy'] = get_config('htmlcert', 'protection_copy'); } } /** * Post process form data. * * @param \stdClass $data * * @throws \dml_exception */ public function data_postprocessing($data) { global $DB; parent::data_postprocessing($data); // If creating a new activity. if (!empty($data->add)) { foreach ($this->get_options_elements_with_required_caps() as $name => $capability) { if (!isset($data->$name) && !has_capability($capability, $this->get_context())) { $data->$name = get_config('htmlcert', $name); } } } else { // If updating, but a user can't manage protection, then get data from database. if (!has_capability('mod/htmlcert:manageprotection', $this->get_context())) { $htmlcert = $DB->get_record('htmlcert', array('id' => $data->instance)); $protection = $this->build_protection_data($htmlcert->protection); $data->protection_print = $protection->protection_print; $data->protection_modify = $protection->protection_modify; $data->protection_copy = $protection->protection_copy; } } } /** * Some basic validation. * * @param array $data * @param array $files * @return array the errors that were found */ public function validation($data, $files) { $errors = parent::validation($data, $files); // Check that the required time entered is valid if it was entered at all. if (!empty($data['requiredtime'])) { if ((!is_number($data['requiredtime']) || $data['requiredtime'] < 0)) { $errors['requiredtime'] = get_string('requiredtimenotvalid', 'htmlcert'); } } return $errors; } /** * Get a list of all options form elements with required capabilities for managing each element. * * @return array */ protected function get_options_elements_with_required_caps() { return [ 'emailstudents' => 'mod/htmlcert:manageemailstudents', 'emailteachers' => 'mod/htmlcert:manageemailteachers', 'emailothers' => 'mod/htmlcert:manageemailothers', 'verifyany' => 'mod/htmlcert:manageverifyany', 'requiredtime' => 'mod/htmlcert:managerequiredtime', 'protection_print' => 'mod/htmlcert:manageprotection', 'protection_modify' => 'mod/htmlcert:manageprotection', 'protection_copy' => 'mod/htmlcert:manageprotection' ]; } /** * Build a protection data to be able to set to the form. * * @param string $protection Protection sting from database. * * @return \stdClass */ protected function build_protection_data($protection) { $data = new stdClass(); $data->protection_print = 0; $data->protection_modify = 0; $data->protection_copy = 0; $protection = explode(', ', $protection); if (in_array(certificate::PROTECTION_PRINT, $protection)) { $data->protection_print = 1; } if (in_array(certificate::PROTECTION_MODIFY, $protection)) { $data->protection_modify = 1; } if (in_array(certificate::PROTECTION_COPY, $protection)) { $data->protection_copy = 1; } return $data; } }