MDL-65138 course: add a setting for course publishing
authorSimey Lameze <simey@moodle.com>
Tue, 26 Mar 2019 01:46:23 +0000 (09:46 +0800)
committerSimey Lameze <simey@moodle.com>
Mon, 1 Apr 2019 07:39:07 +0000 (15:39 +0800)
admin/settings/subsystems.php
course/lib.php
course/publish/backup.php
course/publish/index.php
course/publish/metadata.php
course/tests/courselib_test.php
lang/en/hub.php

index de5f75b..e5c660b 100644 (file)
@@ -48,4 +48,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
 
     $optionalsubsystems->add(new admin_setting_configcheckbox('allowstealth', new lang_string('allowstealthmodules'),
         new lang_string('allowstealthmodules_help'), 0, 1, 0));
+
+    $optionalsubsystems->add(new admin_setting_configcheckbox('enablecoursepublishing',
+        new lang_string('enablecoursepublishing', 'hub'), new lang_string('enablecoursepublishing_help', 'hub'), 0));
 }
index 36e7bd0..6903e0d 100644 (file)
@@ -3994,7 +3994,7 @@ function course_get_user_administration_options($course, $context) {
         $options->outcomes = !empty($CFG->enableoutcomes) && has_capability('moodle/course:update', $context);
         $options->badges = !empty($CFG->enablebadges);
         $options->import = has_capability('moodle/restore:restoretargetimport', $context);
-        $options->publish = has_capability('moodle/course:publish', $context);
+        $options->publish = !empty($CFG->enablecoursepublishing) && has_capability('moodle/course:publish', $context);
         $options->reset = has_capability('moodle/course:reset', $context);
         $options->roles = has_capability('moodle/role:switchroles', $context);
     } else {
index c50951f..5194773 100644 (file)
@@ -45,8 +45,9 @@ $hubcourseid = required_param('hubcourseid', PARAM_INT);
 //some permissions and parameters checking
 $course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
 require_login($course);
-if (!has_capability('moodle/course:publish', context_course::instance($id))
-        or !confirm_sesskey()) {
+
+$context = context_course::instance($courseid);
+if (empty($CFG->enablecoursepublishing) || !has_capability('moodle/course:publish', $context) || !confirm_sesskey()) {
     throw new moodle_exception('nopermission');
 }
 
index 1ce7fee..7bff473 100644 (file)
@@ -39,7 +39,10 @@ $PAGE->set_pagelayout('incourse');
 $PAGE->set_title(get_string('publish', 'core_hub') . ': ' . $COURSE->fullname);
 $PAGE->set_heading($COURSE->fullname);
 
-require_capability('moodle/course:publish', context_course::instance($courseid));
+$context = context_course::instance($courseid);
+if (empty($CFG->enablecoursepublishing) || !has_capability('moodle/course:publish', $context)) {
+    throw new moodle_exception('nopermission');
+}
 
 // If the site is not registered display an error page.
 if (!\core\hub\registration::is_registered()) {
index 21ffb34..dbe7ce2 100644 (file)
@@ -46,7 +46,10 @@ $PAGE->set_pagelayout('incourse');
 $PAGE->set_title(get_string('course') . ': ' . $course->fullname);
 $PAGE->set_heading($course->fullname);
 
-require_capability('moodle/course:publish', context_course::instance($id));
+$context = context_course::instance($courseid);
+if (empty($CFG->enablecoursepublishing) || !has_capability('moodle/course:publish', $context)) {
+    throw new moodle_exception('nopermission');
+}
 
 // Retrieve hub name and hub url.
 require_sesskey();
index d82830b..26197f0 100644 (file)
@@ -3193,7 +3193,7 @@ class core_course_courselib_testcase extends advanced_testcase {
         $this->assertFalse($adminoptions->outcomes);
         $this->assertTrue($adminoptions->badges);
         $this->assertTrue($adminoptions->import);
-        $this->assertTrue($adminoptions->publish);
+        $this->assertFalse($adminoptions->publish);
         $this->assertTrue($adminoptions->reset);
         $this->assertTrue($adminoptions->roles);
     }
index 92af304..e607eee 100644 (file)
@@ -75,6 +75,8 @@ $string['edulevelsecondary'] = 'Secondary';
 $string['eduleveltertiary'] = 'Tertiary';
 $string['emailalert'] = 'Email notifications';
 $string['emailalert_help'] = 'If this is enabled the hub administrator will send you emails about security issues and other important news.';
+$string['enablecoursepublishing'] = "Course sharing on Moodle.net";
+$string['enablecoursepublishing_help'] = "Moodle.net is our community site for sharing courses and content with other Moodle users worldwide. A course may be shared for others to enrol in (requires email-based self-registration on the site and self enrolment in the course) or as a backup file for others to download.";
 $string['enrollable'] = 'Enrollable';
 $string['errorbadimageheightwidth'] = 'The image should have a maximum size of {$a->width} X {$a->height}';
 $string['errorcourseinfo'] = 'An error occurred when retrieving course metadata from {$a}. Please try again to retrieve the course metadata by reloading this page later. Otherwise you can decide to continue the registration process with the following default metadata. ';