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()
*
}
}
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.
*/
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;
}
}