diff --git a/completion/classes/manager.php b/completion/classes/manager.php index f7eca84fb5b..97f8d7d4cd1 100644 --- a/completion/classes/manager.php +++ b/completion/classes/manager.php @@ -27,6 +27,7 @@ namespace core_completion; use stdClass; +use context_course; /** * Bulk activity completion manager class @@ -117,4 +118,23 @@ class manager { return $strings; } + public function get_activities_and_resources() { + global $DB, $OUTPUT; + // Get enabled activities and resources. + $modules = $DB->get_records('modules', ['visible' => 1], 'name ASC'); + $data = new stdClass(); + $data->courseid = $this->courseid; + $data->sesskey = sesskey(); + $data->helpicon = $OUTPUT->help_icon('temphelp', 'moodle'); + // Add icon information. + $data->modules = array_values($modules); + $coursecontext = context_course::instance($this->courseid); + foreach ($data->modules as $module) { + $module->icon = $OUTPUT->pix_url('icon', $module->name)->out(); + $module->formatedname = format_string(get_string('pluginname', 'mod_' . $module->name), true, ['context' => $coursecontext]); + } + + return $data; + } + } \ No newline at end of file diff --git a/course/classes/output/bulk_activity_completion_renderer.php b/course/classes/output/bulk_activity_completion_renderer.php index 0df8ca3ac5e..4f18b8aad2b 100644 --- a/course/classes/output/bulk_activity_completion_renderer.php +++ b/course/classes/output/bulk_activity_completion_renderer.php @@ -44,10 +44,16 @@ class core_course_bulk_activity_completion_renderer extends plugin_renderer_base get_string('coursecompletion', 'completion') ); + $tabs[] = new tabobject( + 'defaultcompletion', + new moodle_url('/course/defaultcompletion.php', ['id' => $courseid]), + get_string('defaultcompletion', 'completion') + ); + $tabs[] = new tabobject( 'bulkcompletion', new moodle_url('/course/bulkcompletion.php', ['id' => $courseid]), - get_string('bulkactivitycompletion', 'completion'); + get_string('bulkactivitycompletion', 'completion') ); return $this->tabtree($tabs, $page); @@ -58,4 +64,8 @@ class core_course_bulk_activity_completion_renderer extends plugin_renderer_base return parent::render_from_template('core_course/bulkactivitycompletion', $data); } + public function defaultcompletion($data) { + return parent::render_from_template('core_course/defaultactivitycompletion', $data); + } + } diff --git a/course/defaultcompletion.php b/course/defaultcompletion.php new file mode 100644 index 00000000000..99ea48afcba --- /dev/null +++ b/course/defaultcompletion.php @@ -0,0 +1,75 @@ +. + +/** + * Bulk activity completion selection + * + * @package core_completion + * @category completion + * @copyright 2017 Adrian Greeve + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(__DIR__.'/../config.php'); +require_once($CFG->dirroot.'/course/lib.php'); +require_once($CFG->libdir.'/completionlib.php'); + +$id = required_param('id', PARAM_INT); // course id +// @TODO: Change this to module IDs. +$cmids = optional_param_array('cmid', [], PARAM_INT); + +// Perform some basic access control checks. +if ($id) { + + if($id == SITEID){ + // Don't allow editing of 'site course' using this form. + print_error('cannoteditsiteform'); + } + + if (!$course = $DB->get_record('course', array('id' => $id))) { + print_error('invalidcourseid'); + } + require_login($course); + require_capability('moodle/course:update', context_course::instance($course->id)); + +} else { + require_login(); + print_error('needcourseid'); +} + +// Set up the page. +$PAGE->set_course($course); +$PAGE->set_url('/course/bulkcompletion.php', array('id' => $course->id)); +$PAGE->set_title($course->shortname); +$PAGE->set_heading($course->fullname); +$PAGE->set_pagelayout('admin'); + +// Get all that stuff I need for the renderer. +$manager = new \core_completion\manager($id); +$activityresourcedata = $manager->get_activities_and_resources(); + +$renderer = $PAGE->get_renderer('core_course', 'bulk_activity_completion'); + +// Print the form. +echo $OUTPUT->header(); +echo $OUTPUT->heading(get_string('editcoursecompletionsettings', 'core_completion')); + +echo $renderer->navigation($id, 'defaultcompletion'); + +echo $renderer->defaultcompletion($activityresourcedata); + +echo $OUTPUT->footer(); diff --git a/course/templates/defaultactivitycompletion.mustache b/course/templates/defaultactivitycompletion.mustache new file mode 100644 index 00000000000..f40548d77c8 --- /dev/null +++ b/course/templates/defaultactivitycompletion.mustache @@ -0,0 +1,94 @@ +{{! + This file is part of Moodle - http://moodle.org/ + + Moodle is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Moodle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Moodle. If not, see . +}} +{{! + @template core_course/defaultactivitycompletion + + Activity completion selector. + + Example context (json): + { + "courseid": "2", + "sesskey": "AAAAAA", + "modules": [{ + "id": "10", + "formatedname": "Assignment", + "icon": { + "attributes": [ + {"name": "src", "value": "https://raw.githubusercontent.com/moodle/moodle/master/pix/t/check.png"}, + {"name": "alt", "value": "Assignment icon"} + ] + } + }] + } +}} +
+
+
{{#str}}bulkactivitydetail, moodle{{/str}}
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + {{{helpicon}}} +
+
+
+ {{#modules}} +
+
+
+ + + {{formatedname}} +
+
+
+ {{/modules}} +
+ + +
+
+ + +
+
+
+
+ +{{#js}} +require([ + 'jquery', +], function($) { + $('.mastercheck').click(function() { + var checked = $('.mastercheck').is(':checked'); + $('input[type=checkbox]').each(function() { + $(this).prop('checked', checked); + }); + }); +}); +{{/js}} \ No newline at end of file diff --git a/lang/en/completion.php b/lang/en/completion.php index 5674cef259b..88596b8c249 100644 --- a/lang/en/completion.php +++ b/lang/en/completion.php @@ -115,6 +115,7 @@ $string['csvdownload'] = 'Download in spreadsheet format (UTF-8 .csv)'; $string['datepassed'] = 'Date passed'; $string['days'] = 'Days'; $string['daysoftotal'] = '{$a->days} of {$a->total}'; +$string['defaultcompletion'] = 'Default activity completion'; $string['deletecompletiondata'] = 'Delete completion data'; $string['dependencies'] = 'Dependencies'; $string['dependenciescompleted'] = 'Completion of other courses'; diff --git a/theme/boost/scss/moodle/course.scss b/theme/boost/scss/moodle/course.scss index a2385a7de72..1beec6137b1 100644 --- a/theme/boost/scss/moodle/course.scss +++ b/theme/boost/scss/moodle/course.scss @@ -1157,6 +1157,10 @@ span.editinstructions { border-bottom: 1px solid #ccc; } +.module-section { + border-bottom: 1px solid #ccc; +} + /** * Display sizes: diff --git a/theme/bootstrapbase/less/moodle/course.less b/theme/bootstrapbase/less/moodle/course.less index 257cc6b1195..57825ef507c 100644 --- a/theme/bootstrapbase/less/moodle/course.less +++ b/theme/bootstrapbase/less/moodle/course.less @@ -1144,6 +1144,9 @@ span.editinstructions { } } +.module-section { + border-bottom: 1px solid #ccc; +} /** * Display sizes: diff --git a/theme/bootstrapbase/style/moodle.css b/theme/bootstrapbase/style/moodle.css index 31fa0415f8d..4f5e6ba6186 100644 --- a/theme/bootstrapbase/style/moodle.css +++ b/theme/bootstrapbase/style/moodle.css @@ -6884,6 +6884,9 @@ span.editinstructions { .top-section label { font-weight: bold; } +.module-section { + border-bottom: 1px solid #ccc; +} /** * Display sizes: * Large displays 1200 +