diff --git a/classes/create_form.php b/classes/create_form.php index 26417dc..fc15409 100644 --- a/classes/create_form.php +++ b/classes/create_form.php @@ -76,6 +76,25 @@ public function definition() { $mform->addElement('checkbox', 'hidecourses', get_string('hidecourses', 'local_course_merge')); $mform->setDefault('hidecourses', 1); + // Hide child courses from teachers. + $mform->addElement('checkbox', 'hidecoursesteachers', get_string('hidecoursesfromteachers', 'local_course_merge')); + $mform->setDefault('hidecoursesteachers', 0); + + // Group mode. + $choices = array(); + $choices[''] = get_string('groupsdont', 'local_course_merge'); + $choices[NOGROUPS] = get_string('groupsnone', 'local_course_merge'); + $choices[SEPARATEGROUPS] = get_string('groupsseparate', 'local_course_merge'); + $choices[VISIBLEGROUPS] = get_string('groupsvisible', 'local_course_merge'); + $mform->addElement('select', 'groupmode', get_string('groupmode', 'local_course_merge'), $choices); + $mform->addHelpButton('groupmode', 'groupmode', 'local_course_merge'); + $mform->setDefault('groupmode', get_config('moodlecourse', 'groupmode')); + + // Force Group mode. + $mform->addElement('selectyesno', 'groupmodeforce', get_string('groupmodeforce', 'group')); + $mform->addHelpButton('groupmodeforce', 'groupmodeforce', 'group'); + $mform->setDefault('groupmodeforce', get_config('moodlecourse', 'groupmodeforce')); + // Move child courses to a category. if (has_capability('local/course_merge:categorize_course', $categorycontext)) { $categories = helper::get_category_selector(); diff --git a/classes/merge_course.php b/classes/merge_course.php index 373874a..2cd82bc 100644 --- a/classes/merge_course.php +++ b/classes/merge_course.php @@ -66,8 +66,12 @@ public static function create_course($data, $coursestolink) { $tocreate->showgrades = $courseconfig->showgrades; $tocreate->showreports = $courseconfig->showreports; $tocreate->maxbytes = $courseconfig->maxbytes; - $tocreate->groupmode = $courseconfig->groupmode; - $tocreate->groupmodeforce = $courseconfig->groupmodeforce; + if (!isset($data->groupmode) || ($data->groupmode == '')) { + $tocreate->groupmode = (int)$courseconfig->groupmode; + } else { + $tocreate->groupmode = $data->groupmode; + } + $tocreate->groupmodeforce = $data->groupmodeforce; $tocreate->visible = $courseconfig->visible; $tocreate->lang = $courseconfig->lang; $tocreate->enablecompletion = $courseconfig->enablecompletion; @@ -125,6 +129,24 @@ public static function hide_courses($coursestolink) { } } + /** + * Hide the source courses from teachers. + * + * This removes the capability to view hidden courses from editingteacher and teacher roles. + * + * @param array $coursestolink the source courses. + */ + public static function hide_courses_from_teachers($coursestolink) { + global $DB; + $editingteacherid = $DB->get_field('role', 'id', ['shortname' => 'editingteacher']); + $teacherid = $DB->get_field('role', 'id', ['shortname' => 'teacher']); + foreach ($coursestolink as $oldcourseid) { + $context = \context_course::instance($oldcourseid); + assign_capability('moodle/course:viewhiddencourses', CAP_PREVENT, $editingteacherid, $context->id, true); + assign_capability('moodle/course:viewhiddencourses', CAP_PREVENT, $teacherid, $context->id, true); + } + } + /** * Create the metalinks between the new course and the source courses. * diff --git a/index.php b/index.php index 27b7303..e53841d 100644 --- a/index.php +++ b/index.php @@ -77,6 +77,11 @@ local_course_merge\merge_course::hide_courses($coursestolink); } + // Hide child courses from teachers. + if (isset($data->hidecoursesteachers) && ($data->hidecoursesteachers != '') && $data->hidecoursesteachers > 0) { + local_course_merge\merge_course::hide_courses_from_teachers($coursestolink); + } + // If set, move child courses. if (!empty($data->newchildcategory) && $data->newchildcategory != COURSE_MERGE_DEFAULT_CATEGORY) { local_course_merge\merge_course::move_courses($coursestolink, $data->newchildcategory); diff --git a/lang/en/local_course_merge.php b/lang/en/local_course_merge.php index 54bd2ba..c7c9836 100644 --- a/lang/en/local_course_merge.php +++ b/lang/en/local_course_merge.php @@ -58,7 +58,22 @@ $string['extractnametitle_desc'] = 'The full title of the course. Used to populate [TITLE].'; $string['generalsettings'] = 'General settings'; $string['generalsettingsinfo'] = ''; +$string['groupmode'] = 'Group mode'; +$string['groupmode_help'] = 'This setting has 4 options: + +* Use default - will use the default course configuration global setting. +* No groups +* Separate groups - Each group member can only see their own group, others are invisible +* Visible groups - Each group member works in their own group, but can also see other groups + +The group mode defined at course level is the default mode for all activities within the course. Each activity that supports groups can also define its own group mode, though if the group mode is forced at course level, the group mode setting for each activity is ignored.'; +$string['groupsdont'] = 'Use default'; +$string['groupsnone'] = 'No groups'; +$string['groupsonly'] = 'Groups only'; +$string['groupsseparate'] = 'Separate groups'; +$string['groupsvisible'] = 'Visible groups'; $string['hidecourses'] = 'Hide original courses from students'; +$string['hidecoursesfromteachers'] = 'Hide original courses from teachers'; $string['idnumberexists'] = 'Could not create merged course shell: a course with the idnumber {$a} already exists.'; $string['maxcategorydepth'] = 'Maximum category depth'; $string['maxcategorydepth_desc'] = 'Restrict the courses which can be merged together by category depth.';