mirror of
https://github.com/moodle/moodle.git
synced 2025-01-31 12:45:04 +01:00
MDL-40121 Support old activities with subtypes
This commit is contained in:
parent
28c61e0aa2
commit
6619945b06
@ -291,6 +291,47 @@ class format_singleactivity extends format_base {
|
||||
return $this->activity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the current user can add the activity of the specified type to this course.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function can_add_activity() {
|
||||
global $CFG;
|
||||
if (!($modname = $this->get_activitytype())) {
|
||||
return false;
|
||||
}
|
||||
if (!has_capability('moodle/course:manageactivities', context_course::instance($this->courseid))) {
|
||||
return false;
|
||||
}
|
||||
if (!course_allowed_module($this->get_course(), $modname)) {
|
||||
return false;
|
||||
}
|
||||
$libfile = "$CFG->dirroot/mod/$modname/lib.php";
|
||||
if (!file_exists($libfile)) {
|
||||
return null;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the activity type requires subtypes.
|
||||
*
|
||||
* @return bool|null (null if the check is not possible)
|
||||
*/
|
||||
public function activity_has_subtypes() {
|
||||
global $CFG;
|
||||
if (!($modname = $this->get_activitytype())) {
|
||||
return null;
|
||||
}
|
||||
$libfile = "$CFG->dirroot/mod/$modname/lib.php";
|
||||
if (!file_exists($libfile)) {
|
||||
return null;
|
||||
}
|
||||
include_once($libfile);
|
||||
return function_exists($modname. '_get_types');
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows course format to execute code on moodle_page::set_course()
|
||||
*
|
||||
@ -335,10 +376,20 @@ class format_singleactivity extends format_base {
|
||||
}
|
||||
}
|
||||
if ($cm === null) {
|
||||
if (has_capability('moodle/course:manageactivities', context_course::instance($this->courseid))) {
|
||||
// Teacher is redirected to create a new activity.
|
||||
$url = new moodle_url('/course/modedit.php',
|
||||
array('course' => $this->courseid, 'section' => 0, 'add' => $this->get_activitytype()));
|
||||
if ($this->can_add_activity()) {
|
||||
// This is a user who has capability to create an activity.
|
||||
if ($this->activity_has_subtypes()) {
|
||||
// Activity that requires subtype can not be added automatically.
|
||||
if (optional_param('addactivity', 0, PARAM_INT)) {
|
||||
return;
|
||||
} else {
|
||||
$url = new moodle_url('/course/view.php', array('id' => $this->courseid, 'addactivity' => 1));
|
||||
redirect($url);
|
||||
}
|
||||
}
|
||||
// Redirect to the add activity form.
|
||||
$url = new moodle_url('/course/mod.php', array('id' => $this->courseid,
|
||||
'section' => 0, 'sesskey' => sesskey(), 'add' => $this->get_activitytype()));
|
||||
redirect($url);
|
||||
} else {
|
||||
// Student views an empty course page.
|
||||
|
@ -43,18 +43,21 @@ class format_singleactivity_renderer extends plugin_renderer_base {
|
||||
*/
|
||||
public function display($course, $orphaned) {
|
||||
$courserenderer = $this->page->get_renderer('core', 'course');
|
||||
$output = '';
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
if ($orphaned) {
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
|
||||
$output = '';
|
||||
if (!empty($modinfo->sections[1])) {
|
||||
$output .= $this->output->heading(get_string('orphaned', 'format_singleactivity'), 3, 'sectionname');
|
||||
$output .= $this->output->box(get_string('orphanedwarning', 'format_singleactivity'));
|
||||
$output .= $courserenderer->course_section_cm_list($course, 1, 1);
|
||||
}
|
||||
return $output;
|
||||
} else {
|
||||
return $courserenderer->course_section_cm_list($course, 0, 0);
|
||||
$output .= $courserenderer->course_section_cm_list($course, 0, 0);
|
||||
if (empty($modinfo->sections[0]) && course_get_format($course)->activity_has_subtypes()) {
|
||||
// Course format was unable to automatically redirect to add module page.
|
||||
$output .= $courserenderer->course_section_add_cm_control($course, 0, 0);
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user