namespace core_completion;
use stdClass;
+use context_course;
/**
* Bulk activity completion manager class
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
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);
return parent::render_from_template('core_course/bulkactivitycompletion', $data);
}
+ public function defaultcompletion($data) {
+ return parent::render_from_template('core_course/defaultactivitycompletion', $data);
+ }
+
}
--- /dev/null
+<?php
+
+// 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 <http://www.gnu.org/licenses/>.
+
+/**
+ * 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();
--- /dev/null
+{{!
+ 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 <http://www.gnu.org/licenses/>.
+}}
+{{!
+ @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"}
+ ]
+ }
+ }]
+ }
+}}
+<div class="container-fluid">
+ <div class="row m-b-2">
+ <div class="col">{{#str}}bulkactivitydetail, moodle{{/str}}</div>
+ </div>
+<form method="post" action="defaultcompletion.php" class="mform">
+ <div class="row m-b-2">
+ <div class="col">
+ <input type="submit" value="{{#str}}edit{{/str}}" class="btn btn-primary" name="submitbutton" aria-label="{{#str}}updateactivities, completion{{/str}}" />
+ <input type="reset" value="{{#str}}cancel{{/str}}" class="btn btn-secondary" aria-label="{{#str}}resetactivities, completion{{/str}}" />
+ </div>
+ </div>
+ <div class="top-section row m-b-1">
+ <div class="col-sm-6">
+ <input type="checkbox" class="mastercheck m-r-1" aria-label="{{#str}}checkall, completion{{/str}}">
+ <label class="font-weight-bold">{{#str}}activitieslabel, moodle{{/str}}</label>
+ </div>
+ <div class="col-sm-6">
+ <label class="font-weight-bold">{{#str}}completiontracking, moodle{{/str}}</label>
+ <span>{{{helpicon}}}</span>
+ </div>
+ </div>
+ <div class="modules">
+ {{#modules}}
+ <div class="module-section m-b-1">
+ <div class="row m-b-1">
+ <div class="col-sm-12">
+ <input type="checkbox" class="m-r-1" name="modids[]" value="{{id}}" aria-label="{{#str}}checkactivity, completion, {{formatedname}}{{/str}}">
+ <img src={{icon}} />
+ <span>{{formatedname}}</span>
+ </div>
+ </div>
+ </div>
+ {{/modules}}
+ </div>
+ <input type="hidden" name="id" value="{{courseid}}" />
+ <input type="hidden" name="sesskey" value="{{sesskey}}" />
+ <div class="row">
+ <div class="col">
+ <input type="submit" value="{{#str}}edit{{/str}}" class="btn btn-primary" name="submitbutton" />
+ <input type="reset" value="{{#str}}cancel{{/str}}" class="btn btn-secondary" />
+ </div>
+ </div>
+</form>
+</div>
+
+{{#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
$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';
border-bottom: 1px solid #ccc;
}
+.module-section {
+ border-bottom: 1px solid #ccc;
+}
+
/**
* Display sizes:
}
}
+.module-section {
+ border-bottom: 1px solid #ccc;
+}
/**
* Display sizes:
.top-section label {
font-weight: bold;
}
+.module-section {
+ border-bottom: 1px solid #ccc;
+}
/**
* Display sizes:
* Large displays 1200 +