. /** * @package mod_forum * @copyright Jamie Pratt * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ if (!defined('MOODLE_INTERNAL')) { die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page } require_once ($CFG->dirroot.'/course/moodleform_mod.php'); class mod_forum_mod_form extends moodleform_mod { function definition() { global $CFG, $COURSE, $DB; $mform =& $this->_form; //------------------------------------------------------------------------------- $mform->addElement('header', 'general', get_string('general', 'form')); $mform->addElement('text', 'name', get_string('forumname', 'forum'), 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'); $mform->addRule('name', get_string('maximumchars', '', 255), 'maxlength', 255, 'client'); $this->add_intro_editor(true, get_string('forumintro', 'forum')); $forumtypes = forum_get_forum_types(); core_collator::asort($forumtypes, core_collator::SORT_STRING); $mform->addElement('select', 'type', get_string('forumtype', 'forum'), $forumtypes); $mform->addHelpButton('type', 'forumtype', 'forum'); $mform->setDefault('type', 'general'); // Attachments and word count. $mform->addElement('header', 'attachmentswordcounthdr', get_string('attachmentswordcount', 'forum')); $choices = get_max_upload_sizes($CFG->maxbytes, $COURSE->maxbytes, 0, $CFG->forum_maxbytes); $choices[1] = get_string('uploadnotallowed'); $mform->addElement('select', 'maxbytes', get_string('maxattachmentsize', 'forum'), $choices); $mform->addHelpButton('maxbytes', 'maxattachmentsize', 'forum'); $mform->setDefault('maxbytes', $CFG->forum_maxbytes); $choices = array( 0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 20 => 20, 50 => 50, 100 => 100 ); $mform->addElement('select', 'maxattachments', get_string('maxattachments', 'forum'), $choices); $mform->addHelpButton('maxattachments', 'maxattachments', 'forum'); $mform->setDefault('maxattachments', $CFG->forum_maxattachments); $mform->addElement('selectyesno', 'displaywordcount', get_string('displaywordcount', 'forum')); $mform->addHelpButton('displaywordcount', 'displaywordcount', 'forum'); $mform->setDefault('displaywordcount', 0); // Subscription and tracking. $mform->addElement('header', 'subscriptionandtrackinghdr', get_string('subscriptionandtracking', 'forum')); $options = array(); $options[FORUM_CHOOSESUBSCRIBE] = get_string('subscriptionoptional', 'forum'); $options[FORUM_FORCESUBSCRIBE] = get_string('subscriptionforced', 'forum'); $options[FORUM_INITIALSUBSCRIBE] = get_string('subscriptionauto', 'forum'); $options[FORUM_DISALLOWSUBSCRIBE] = get_string('subscriptiondisabled','forum'); $mform->addElement('select', 'forcesubscribe', get_string('subscriptionmode', 'forum'), $options); $mform->addHelpButton('forcesubscribe', 'subscriptionmode', 'forum'); $options = array(); $options[FORUM_TRACKING_OPTIONAL] = get_string('trackingoptional', 'forum'); $options[FORUM_TRACKING_OFF] = get_string('trackingoff', 'forum'); if ($CFG->forum_allowforcedreadtracking) { $options[FORUM_TRACKING_FORCED] = get_string('trackingon', 'forum'); } $mform->addElement('select', 'trackingtype', get_string('trackingtype', 'forum'), $options); $mform->addHelpButton('trackingtype', 'trackingtype', 'forum'); $default = $CFG->forum_trackingtype; if ((!$CFG->forum_allowforcedreadtracking) && ($default == FORUM_TRACKING_FORCED)) { $default = FORUM_TRACKING_OPTIONAL; } $mform->setDefault('trackingtype', $default); if ($CFG->enablerssfeeds && isset($CFG->forum_enablerssfeeds) && $CFG->forum_enablerssfeeds) { //------------------------------------------------------------------------------- $mform->addElement('header', 'rssheader', get_string('rss')); $choices = array(); $choices[0] = get_string('none'); $choices[1] = get_string('discussions', 'forum'); $choices[2] = get_string('posts', 'forum'); $mform->addElement('select', 'rsstype', get_string('rsstype'), $choices); $mform->addHelpButton('rsstype', 'rsstype', 'forum'); $choices = array(); $choices[0] = '0'; $choices[1] = '1'; $choices[2] = '2'; $choices[3] = '3'; $choices[4] = '4'; $choices[5] = '5'; $choices[10] = '10'; $choices[15] = '15'; $choices[20] = '20'; $choices[25] = '25'; $choices[30] = '30'; $choices[40] = '40'; $choices[50] = '50'; $mform->addElement('select', 'rssarticles', get_string('rssarticles'), $choices); $mform->addHelpButton('rssarticles', 'rssarticles', 'forum'); $mform->disabledIf('rssarticles', 'rsstype', 'eq', '0'); } //------------------------------------------------------------------------------- $mform->addElement('header', 'blockafterheader', get_string('blockafter', 'forum')); $options = array(); $options[0] = get_string('blockperioddisabled','forum'); $options[60*60*24] = '1 '.get_string('day'); $options[60*60*24*2] = '2 '.get_string('days'); $options[60*60*24*3] = '3 '.get_string('days'); $options[60*60*24*4] = '4 '.get_string('days'); $options[60*60*24*5] = '5 '.get_string('days'); $options[60*60*24*6] = '6 '.get_string('days'); $options[60*60*24*7] = '1 '.get_string('week'); $mform->addElement('select', 'blockperiod', get_string('blockperiod', 'forum'), $options); $mform->addHelpButton('blockperiod', 'blockperiod', 'forum'); $mform->addElement('text', 'blockafter', get_string('blockafter', 'forum')); $mform->setType('blockafter', PARAM_INT); $mform->setDefault('blockafter', '0'); $mform->addRule('blockafter', null, 'numeric', null, 'client'); $mform->addHelpButton('blockafter', 'blockafter', 'forum'); $mform->disabledIf('blockafter', 'blockperiod', 'eq', 0); $mform->addElement('text', 'warnafter', get_string('warnafter', 'forum')); $mform->setType('warnafter', PARAM_INT); $mform->setDefault('warnafter', '0'); $mform->addRule('warnafter', null, 'numeric', null, 'client'); $mform->addHelpButton('warnafter', 'warnafter', 'forum'); $mform->disabledIf('warnafter', 'blockperiod', 'eq', 0); $coursecontext = context_course::instance($COURSE->id); plagiarism_get_form_elements_module($mform, $coursecontext, 'mod_forum'); //------------------------------------------------------------------------------- $this->standard_grading_coursemodule_elements(); $this->standard_coursemodule_elements(); //------------------------------------------------------------------------------- // buttons $this->add_action_buttons(); } function definition_after_data() { parent::definition_after_data(); $mform =& $this->_form; $type =& $mform->getElement('type'); $typevalue = $mform->getElementValue('type'); //we don't want to have these appear as possible selections in the form but //we want the form to display them if they are set. if ($typevalue[0]=='news') { $type->addOption(get_string('namenews', 'forum'), 'news'); $mform->addHelpButton('type', 'namenews', 'forum'); $type->freeze(); $type->setPersistantFreeze(true); } if ($typevalue[0]=='social') { $type->addOption(get_string('namesocial', 'forum'), 'social'); $type->freeze(); $type->setPersistantFreeze(true); } } function data_preprocessing(&$default_values) { parent::data_preprocessing($default_values); // Set up the completion checkboxes which aren't part of standard data. // We also make the default value (if you turn on the checkbox) for those // numbers to be 1, this will not apply unless checkbox is ticked. $default_values['completiondiscussionsenabled']= !empty($default_values['completiondiscussions']) ? 1 : 0; if (empty($default_values['completiondiscussions'])) { $default_values['completiondiscussions']=1; } $default_values['completionrepliesenabled']= !empty($default_values['completionreplies']) ? 1 : 0; if (empty($default_values['completionreplies'])) { $default_values['completionreplies']=1; } $default_values['completionpostsenabled']= !empty($default_values['completionposts']) ? 1 : 0; if (empty($default_values['completionposts'])) { $default_values['completionposts']=1; } } function add_completion_rules() { $mform =& $this->_form; $group=array(); $group[] =& $mform->createElement('checkbox', 'completionpostsenabled', '', get_string('completionposts','forum')); $group[] =& $mform->createElement('text', 'completionposts', '', array('size'=>3)); $mform->setType('completionposts',PARAM_INT); $mform->addGroup($group, 'completionpostsgroup', get_string('completionpostsgroup','forum'), array(' '), false); $mform->disabledIf('completionposts','completionpostsenabled','notchecked'); $group=array(); $group[] =& $mform->createElement('checkbox', 'completiondiscussionsenabled', '', get_string('completiondiscussions','forum')); $group[] =& $mform->createElement('text', 'completiondiscussions', '', array('size'=>3)); $mform->setType('completiondiscussions',PARAM_INT); $mform->addGroup($group, 'completiondiscussionsgroup', get_string('completiondiscussionsgroup','forum'), array(' '), false); $mform->disabledIf('completiondiscussions','completiondiscussionsenabled','notchecked'); $group=array(); $group[] =& $mform->createElement('checkbox', 'completionrepliesenabled', '', get_string('completionreplies','forum')); $group[] =& $mform->createElement('text', 'completionreplies', '', array('size'=>3)); $mform->setType('completionreplies',PARAM_INT); $mform->addGroup($group, 'completionrepliesgroup', get_string('completionrepliesgroup','forum'), array(' '), false); $mform->disabledIf('completionreplies','completionrepliesenabled','notchecked'); return array('completiondiscussionsgroup','completionrepliesgroup','completionpostsgroup'); } function completion_rule_enabled($data) { return (!empty($data['completiondiscussionsenabled']) && $data['completiondiscussions']!=0) || (!empty($data['completionrepliesenabled']) && $data['completionreplies']!=0) || (!empty($data['completionpostsenabled']) && $data['completionposts']!=0); } function get_data() { $data = parent::get_data(); if (!$data) { return false; } // Turn off completion settings if the checkboxes aren't ticked if (!empty($data->completionunlocked)) { $autocompletion = !empty($data->completion) && $data->completion==COMPLETION_TRACKING_AUTOMATIC; if (empty($data->completiondiscussionsenabled) || !$autocompletion) { $data->completiondiscussions = 0; } if (empty($data->completionrepliesenabled) || !$autocompletion) { $data->completionreplies = 0; } if (empty($data->completionpostsenabled) || !$autocompletion) { $data->completionposts = 0; } } return $data; } }