うだがわです。
自分も以前から気になっていたので調べてみました。
course/moodleform_mod.php の651行目から下記のようになっています。
$trackingdefault = COMPLETION_TRACKING_NONE;
// If system and activity default is on, set it.
if ($CFG->completiondefault && $this->_features->defaultcompletion) {
$hasrules = plugin_supports('mod', $this->_modname, FEATURE_COMPLETION_HAS_RULES, true);
$tracksviews = plugin_supports('mod', $this->_modname, FEATURE_COMPLETION_TRACKS_VIEWS, true);
if ($hasrules || $tracksviews) {
$trackingdefault = COMPLETION_TRACKING_AUTOMATIC;
} else {
$trackingdefault = COMPLETION_TRACKING_MANUAL;
}
}
mod_forum は FEATURE_COMPLETION_HAS_RULES と FEATURE_COMPLETION_TRACKS_VIEWS が両方とも true なのでここで最終的に $trackingdefault = COMPLETION_TRACKING_AUTOMATIC セットされるはずで、実際にその値がセットされていることも確認できました。
そしてその後に
$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->setDefault('completion', $trackingdefault);
$mform->addHelpButton('completion', 'completion', 'completion');
と続くのですが、ここに COMPLETION_TRACKING_AUTOMATIC は無く、setDefault() で指定されているものの、実際にはセットされていません。(getOption()すると2が帰ってくるので$mformにはセットされている)
しばらくあとで
// Automatic option only appears if possible
if ($gotcompletionoptions) {
$mform->getElement('completion')->addOption(
get_string('completion_automatic', 'completion'),
COMPLETION_TRACKING_AUTOMATIC);
}
となり、リストに COMPLETION_TRACKING_AUTOMATIC が追加されるようです。
問題はここからで、ここで $mform->getElement('completion')->setSelected(COMPLETION_TRACKING_AUTOMATIC) としても変わりなく、前の方にある setDefault() を消しても変わりがありません。おそらくどこかで COMPLETION_TRACKING_MANUAL で上書きされているのだと思われますがまだ調査中です。