mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 16:32:18 +02:00
MDL-16234 defaults support in plugin_supports()
This commit is contained in:
parent
1eda520124
commit
61fceb866d
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
<?php //$Id$
|
||||
require_once ($CFG->libdir.'/formslib.php');
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
/**
|
||||
* This class adds extra methods to form wrapper specific to be used for module
|
||||
* add / update forms (mod/{modname}.mod_form.php replaces deprecated mod/{modname}/mod_form.php
|
||||
@ -124,26 +126,26 @@ class moodleform_mod extends moodleform {
|
||||
}
|
||||
|
||||
// Completion: If necessary, freeze fields
|
||||
$completion=new completion_info($COURSE);
|
||||
if($completion->is_enabled()) {
|
||||
$completion = new completion_info($COURSE);
|
||||
if ($completion->is_enabled()) {
|
||||
// If anybody has completed the activity, these options will be 'locked'
|
||||
$completedcount = empty($this->_cm)
|
||||
? 0
|
||||
: $completion->count_user_data($this->_cm);
|
||||
|
||||
$freeze=false;
|
||||
if(!$completedcount) {
|
||||
if($mform->elementExists('unlockcompletion')) {
|
||||
$freeze = false;
|
||||
if (!$completedcount) {
|
||||
if ($mform->elementExists('unlockcompletion')) {
|
||||
$mform->removeElement('unlockcompletion');
|
||||
}
|
||||
} else {
|
||||
// Has the element been unlocked?
|
||||
if($mform->exportValue('unlockcompletion')) {
|
||||
if ($mform->exportValue('unlockcompletion')) {
|
||||
// Yes, add in warning text and set the hidden variable
|
||||
$mform->insertElementBefore(
|
||||
$mform->createElement('static','completedunlocked',
|
||||
get_string('completedunlocked','completion'),
|
||||
get_string('completedunlockedtext','completion')),
|
||||
$mform->createElement('static', 'completedunlocked',
|
||||
get_string('completedunlocked', 'completion'),
|
||||
get_string('completedunlockedtext', 'completion')),
|
||||
'unlockcompletion');
|
||||
$mform->removeElement('unlockcompletion');
|
||||
$mform->getElement('completionunlocked')->setValue(1);
|
||||
@ -151,22 +153,22 @@ class moodleform_mod extends moodleform {
|
||||
// No, add in the warning text with the count (now we know
|
||||
// it) before the unlock button
|
||||
$mform->insertElementBefore(
|
||||
$mform->createElement('static','completedwarning',
|
||||
get_string('completedwarning','completion'),
|
||||
get_string('completedwarningtext','completion',$completedcount)),
|
||||
$mform->createElement('static', 'completedwarning',
|
||||
get_string('completedwarning', 'completion'),
|
||||
get_string('completedwarningtext', 'completion', $completedcount)),
|
||||
'unlockcompletion');
|
||||
$mform->setHelpButton('completedwarning', array('completionlocked', get_string('help_completionlocked', 'completion'), 'completion'));
|
||||
|
||||
$freeze=true;
|
||||
$freeze = true;
|
||||
}
|
||||
}
|
||||
|
||||
if($freeze) {
|
||||
if ($freeze) {
|
||||
$mform->freeze('completion');
|
||||
if($mform->elementExists('completionview')) {
|
||||
if ($mform->elementExists('completionview')) {
|
||||
$mform->freeze('completionview'); // don't use hardFreeze or checkbox value gets lost
|
||||
}
|
||||
if($mform->elementExists('completionusegrade')) {
|
||||
if ($mform->elementExists('completionusegrade')) {
|
||||
$mform->freeze('completionusegrade');
|
||||
}
|
||||
$mform->freeze($this->_customcompletionelements);
|
||||
@ -207,10 +209,10 @@ class moodleform_mod extends moodleform {
|
||||
|
||||
// Completion: Don't let them choose automatic completion without turning
|
||||
// on some conditions
|
||||
if(array_key_exists('completion',$data) && $data['completion']==COMPLETION_TRACKING_AUTOMATIC) {
|
||||
if(empty($data['completionview']) && empty($data['completionusegrade']) &&
|
||||
if (array_key_exists('completion', $data) && $data['completion']==COMPLETION_TRACKING_AUTOMATIC) {
|
||||
if (empty($data['completionview']) && empty($data['completionusegrade']) &&
|
||||
!$this->completion_rule_enabled($data)) {
|
||||
$errors['completion']=get_string('badautocompletion','completion');
|
||||
$errors['completion'] = get_string('badautocompletion', 'completion');
|
||||
}
|
||||
}
|
||||
|
||||
@ -238,14 +240,14 @@ class moodleform_mod extends moodleform {
|
||||
* @param mixed $features array or object describing supported features - groups, groupings, groupmembersonly, etc.
|
||||
* @param string $modname Name of module e.g. 'label'
|
||||
*/
|
||||
function standard_coursemodule_elements($features=null,$modname=null){
|
||||
function standard_coursemodule_elements($features=null, $modname=null){
|
||||
global $COURSE, $CFG, $DB;
|
||||
$mform =& $this->_form;
|
||||
|
||||
// Guess module name if not supplied
|
||||
if(!$modname) {
|
||||
if (!$modname) {
|
||||
$matches=array();
|
||||
if(!preg_match('/^mod_([^_]+)_mod_form$/',$this->_formname,$matches)) {
|
||||
if (!preg_match('/^mod_([^_]+)_mod_form$/', $this->_formname, $matches)) {
|
||||
debugging('Use $modname parameter or rename form to mod_xx_mod_form, where xx is name of your module');
|
||||
error('Unknown module name for form');
|
||||
}
|
||||
@ -292,7 +294,7 @@ class moodleform_mod extends moodleform {
|
||||
$this->_features->idnumber = true;
|
||||
}
|
||||
|
||||
if(!isset($this->_features->defaultcompletion)) {
|
||||
if (!isset($this->_features->defaultcompletion)) {
|
||||
$this->_features->defaultcompletion = true;
|
||||
}
|
||||
|
||||
@ -349,64 +351,63 @@ class moodleform_mod extends moodleform {
|
||||
}
|
||||
|
||||
// Conditional activities: completion tracking section
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
$completion=new completion_info($COURSE);
|
||||
if($completion->is_enabled()) {
|
||||
$completion = new completion_info($COURSE);
|
||||
if ($completion->is_enabled()) {
|
||||
$mform->addElement('header', '', get_string('activitycompletion', 'completion'));
|
||||
|
||||
// Unlock button for if people have completed it (will
|
||||
// be removed in definition_after_data if they haven't)
|
||||
$mform->addElement('submit','unlockcompletion',get_string('unlockcompletion','completion'));
|
||||
$mform->addElement('submit', 'unlockcompletion', get_string('unlockcompletion', 'completion'));
|
||||
$mform->registerNoSubmitButton('unlockcompletion');
|
||||
$mform->addElement('hidden','completionunlocked',0);
|
||||
$mform->addElement('hidden', 'completionunlocked', 0);
|
||||
|
||||
$mform->addElement('select', 'completion', get_string('completion','completion'),
|
||||
array(COMPLETION_TRACKING_NONE=>get_string('completion_none','completion'),
|
||||
COMPLETION_TRACKING_MANUAL=>get_string('completion_manual','completion')));
|
||||
$mform->addElement('select', 'completion', get_string('completion', 'completion'),
|
||||
array(COMPLETION_TRACKING_NONE=>get_string('completion_none', 'completion'),
|
||||
COMPLETION_TRACKING_MANUAL=>get_string('completion_manual', 'completion')));
|
||||
$mform->setHelpButton('completion', array('completion', get_string('help_completion', 'completion'), 'completion'));
|
||||
$mform->setDefault('completion',$this->_features->defaultcompletion
|
||||
$mform->setDefault('completion', $this->_features->defaultcompletion
|
||||
? COMPLETION_TRACKING_MANUAL
|
||||
: COMPLETION_TRACKING_NONE);
|
||||
|
||||
// Automatic completion once you view it
|
||||
$gotcompletionoptions=false;
|
||||
if(plugin_supports('mod',$modname,FEATURE_COMPLETION_TRACKS_VIEWS)) {
|
||||
$mform->addElement('checkbox', 'completionview', get_string('completionview','completion'),
|
||||
get_string('completionview_text','completion'));
|
||||
$gotcompletionoptions = false;
|
||||
if (plugin_supports('mod', $modname, FEATURE_COMPLETION_TRACKS_VIEWS, false)) {
|
||||
$mform->addElement('checkbox', 'completionview', get_string('completionview', 'completion'),
|
||||
get_string('completionview_text', 'completion'));
|
||||
$mform->setHelpButton('completionview', array('completionview', get_string('help_completionview', 'completion'), 'completion'));
|
||||
$mform->disabledIf('completionview','completion','ne',COMPLETION_TRACKING_AUTOMATIC);
|
||||
$gotcompletionoptions=true;
|
||||
$mform->disabledIf('completionview', 'completion', 'ne', COMPLETION_TRACKING_AUTOMATIC);
|
||||
$gotcompletionoptions = true;
|
||||
}
|
||||
|
||||
// Automatic completion once it's graded
|
||||
if(plugin_supports('mod',$modname,FEATURE_GRADE_HAS_GRADE)) {
|
||||
$mform->addElement('checkbox', 'completionusegrade', get_string('completionusegrade','completion'),
|
||||
get_string('completionusegrade_text','completion'));
|
||||
if (plugin_supports('mod', $modname, FEATURE_GRADE_HAS_GRADE, false)) {
|
||||
$mform->addElement('checkbox', 'completionusegrade', get_string('completionusegrade', 'completion'),
|
||||
get_string('completionusegrade_text', 'completion'));
|
||||
$mform->setHelpButton('completionusegrade', array('completionusegrade', get_string('help_completionusegrade', 'completion'), 'completion'));
|
||||
$mform->disabledIf('completionusegrade','completion','ne',COMPLETION_TRACKING_AUTOMATIC);
|
||||
$gotcompletionoptions=true;
|
||||
$mform->disabledIf('completionusegrade', 'completion', 'ne', COMPLETION_TRACKING_AUTOMATIC);
|
||||
$gotcompletionoptions = true;
|
||||
}
|
||||
|
||||
// Automatic completion according to module-specific rules
|
||||
$this->_customcompletionelements = $this->add_completion_rules();
|
||||
foreach($this->_customcompletionelements as $element) {
|
||||
$mform->disabledIf($element,'completion','ne',COMPLETION_TRACKING_AUTOMATIC);
|
||||
foreach ($this->_customcompletionelements as $element) {
|
||||
$mform->disabledIf($element, 'completion', 'ne', COMPLETION_TRACKING_AUTOMATIC);
|
||||
}
|
||||
|
||||
$gotcompletionoptions = $gotcompletionoptions ||
|
||||
count($this->_customcompletionelements)>0;
|
||||
|
||||
// Automatic option only appears if possible
|
||||
if($gotcompletionoptions) {
|
||||
if ($gotcompletionoptions) {
|
||||
$mform->getElement('completion')->addOption(
|
||||
get_string('completion_automatic','completion'),
|
||||
get_string('completion_automatic', 'completion'),
|
||||
COMPLETION_TRACKING_AUTOMATIC);
|
||||
}
|
||||
|
||||
// Completion expected at particular date? (For progress tracking)
|
||||
$mform->addElement('date_selector', 'completionexpected', get_string('completionexpected','completion'), array('optional'=>true));
|
||||
$mform->addElement('date_selector', 'completionexpected', get_string('completionexpected', 'completion'), array('optional'=>true));
|
||||
$mform->setHelpButton('completionexpected', array('completionexpected', get_string('help_completionexpected', 'completion'), 'completion'));
|
||||
$mform->disabledIf('completionexpected','completion','eq',COMPLETION_TRACKING_NONE);
|
||||
$mform->disabledIf('completionexpected', 'completion', 'eq', COMPLETION_TRACKING_NONE);
|
||||
}
|
||||
|
||||
$this->standard_hidden_coursemodule_elements();
|
||||
|
@ -286,11 +286,11 @@ define ('PASSWORD_NONALPHANUM', '.,;:!?_-+/*@#&$');
|
||||
// Used for plugin_supports() to report features that are, or are not, supported by a module.
|
||||
|
||||
/** True if module can provide a grade */
|
||||
define('FEATURE_GRADE_HAS_GRADE','grade_has_grade');
|
||||
define('FEATURE_GRADE_HAS_GRADE', 'grade_has_grade');
|
||||
/** True if module has code to track whether somebody viewed it */
|
||||
define('FEATURE_COMPLETION_TRACKS_VIEWS','completion_tracks_views');
|
||||
define('FEATURE_COMPLETION_TRACKS_VIEWS', 'completion_tracks_views');
|
||||
/** True if module has custom completion rules */
|
||||
define('FEATURE_COMPLETION_HAS_RULES','completion_has_rules');
|
||||
define('FEATURE_COMPLETION_HAS_RULES', 'completion_has_rules');
|
||||
|
||||
|
||||
|
||||
@ -6100,31 +6100,41 @@ function get_list_of_plugins($plugin='mod', $exclude='', $basedir='') {
|
||||
* @param string $type Plugin type e.g. 'mod'
|
||||
* @param string $name Plugin name
|
||||
* @param string $feature Feature code (FEATURE_xx constant)
|
||||
* @return Feature result (false if not supported, null if feature is unknown
|
||||
* [=not supported, usually]; otherwise usually true but may have
|
||||
* other feature-specific value)
|
||||
* @param mixed $default default value if feature support unknown
|
||||
* @return mixed Feature result (false if not supported, null if feature is unknown,
|
||||
* otherwise usually true but may have other feature-specific value)
|
||||
*/
|
||||
function plugin_supports($type,$name,$feature) {
|
||||
function plugin_supports($type, $name, $feature, $default=null) {
|
||||
global $CFG;
|
||||
|
||||
$name = clean_param($name, PARAM_SAFEDIR);
|
||||
|
||||
switch($type) {
|
||||
case 'mod' :
|
||||
$file=$CFG->dirroot.'/mod/'.$name.'/lib.php';
|
||||
$function=$name.'_supports';
|
||||
$file = $CFG->dirroot.'/mod/'.$name.'/lib.php';
|
||||
$function = $name.'_supports';
|
||||
break;
|
||||
default:
|
||||
throw new Exception('Unsupported plugin type ('.$type.')');
|
||||
}
|
||||
|
||||
// Load library and look for function
|
||||
require_once($file);
|
||||
if(function_exists($function)) {
|
||||
if (file_exists($file)) {
|
||||
require_once($file);
|
||||
}
|
||||
if (function_exists($function)) {
|
||||
// Function exists, so just return function result
|
||||
return $function($feature);
|
||||
$supports = $function($feature);
|
||||
if (is_null($supports)) {
|
||||
return $default;
|
||||
} else {
|
||||
return $supports;
|
||||
}
|
||||
} else {
|
||||
switch($feature) {
|
||||
// If some features can also be checked in other ways
|
||||
// for legacy support, this could be added here
|
||||
default: return null;
|
||||
default: return $default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user