Skip to content

Commit

Permalink
**new feature** in bulk resett all completion #63
Browse files Browse the repository at this point in the history
Added some new strings for the new feature

Correction in strings

requested changes made

Applying pending changes
  • Loading branch information
mixedfruitjuice authored and danmarsden committed Jun 7, 2023
1 parent dedfc25 commit 1247cf2
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 2 deletions.
112 changes: 112 additions & 0 deletions bulkresetcompletion.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<?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/>.

/**
* Manually reset completion date for a course for a selected amount of users.
*
* @package local_recompletion
* @copyright 2023 Catalyst IT
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

defined('MOODLE_INTERNAL') || die();

require_once(__DIR__ . '/../../config.php');
require_once($CFG->dirroot . '/user/lib.php');
require_once($CFG->libdir . '/formslib.php');

$courseid = required_param('id', PARAM_INT);
$userid = optional_param('user', 0, PARAM_INT);
$users = optional_param_array('users', [], PARAM_INT);

$course = $DB->get_record('course', ['id' => $courseid], '*', MUST_EXIST);
require_login($course);

$context = context_course::instance($course->id);
require_capability('local/recompletion:manage', $context);

$PAGE->set_url('/local/recompletion/editcompletion.php', ['id' => $course->id]);

if (empty($users) && empty($userid)) {
// The first time list hack.
if ($post = data_submitted()) {
foreach ($post as $k => $v) {
if (preg_match('/^user(\d+)$/', $k, $m)) {
$users[] = (int) $m[1];
}
}
}

if (empty($users)) {
redirect($CFG->wwwroot . '/local/recompletion/participants.php?id=' . $course->id,
get_string('nousersselected', 'local_recompletion'));
}
}

if (empty($users)) {
$users = [$userid];
// Get this users current completion date and use that in the form.
$params = ['userid' => $userid, 'course' => $courseid];
$ccompletion = new \completion_completion($params);
if ($ccompletion->is_complete()) {
$date = $ccompletion->timecompleted;
}
}

if (empty($date)) {
// Use current time as default.
$date = time();
}

$form = new local_recompletion_coursecompletion_form('editcompletion.php',
['course' => $courseid, 'users' => $users, 'date' => $date]);

if ($form->is_cancelled()) {
redirect($CFG->wwwroot . '/local/recompletion/participants.php?id=' . $course->id);
} else if ($data = $form->get_data()) {
if (!empty($data->newcompletion)) {
// Update course completion.
foreach ($users as $user) {
$params = ['userid' => $user, 'course' => $courseid];
$ccompletion = new \completion_completion($params);
if ($ccompletion->is_complete()) {
// If we already have a completion date, clear it first so that mark_complete works.
$ccompletion->timecompleted = null;
}
$ccompletion->mark_complete($data->newcompletion);
}
redirect($CFG->wwwroot . '/local/recompletion/participants.php?id=' . $course->id,
get_string('completionupdated', 'local_recompletion'));
}
}

$userlist = user_get_users_by_id($users);

echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('editcompletion', 'local_recompletion'));
echo $OUTPUT->box(get_string('editcompletion_desc', 'local_recompletion'));

echo html_writer::start_div('userlist');
foreach ($userlist as $user) {
echo html_writer::div(fullname($user));
}
echo html_writer::end_div();

echo html_writer::start_div('userform');
$form->display();
echo html_writer::end_div();

echo $OUTPUT->footer();
24 changes: 24 additions & 0 deletions editcompletion.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@
require_once('../../config.php');
require_once($CFG->dirroot.'/user/lib.php');
require_once($CFG->libdir.'/formslib.php');
require_once($CFG->dirroot.'/local/recompletion/locallib.php');
require_once($CFG->dirroot.'/course/lib.php');
require_once($CFG->libdir.'/completionlib.php');
require_once($CFG->libdir.'/gradelib.php');
require_once($CFG->dirroot . '/mod/assign/locallib.php');
require_once($CFG->dirroot . '/mod/quiz/lib.php');

$courseid = required_param('id', PARAM_INT);
$userid = optional_param('user', 0, PARAM_INT);
Expand Down Expand Up @@ -70,6 +76,24 @@
$date = time();
}

// Function to reset completion for $users.
$resetcompletion = optional_param('reset_completion', 0, PARAM_BOOL);
if ($resetcompletion && confirm_sesskey()) {
$config = $DB->get_records_menu('local_recompletion_config', array('course' => $course->id), '', 'name, value');
$config = (object) $config;

foreach ($users as $user) {
$userid = $user;
$reset = new local_recompletion\task\check_recompletion();
$errors = $reset->reset_user($userid, $course, $config);
}

redirect($CFG->wwwroot.'/local/recompletion/participants.php?id='.$course->id,
get_string('completionreset', 'local_recompletion'));
}



$form = new local_recompletion_coursecompletion_form('editcompletion.php',
array('course' => $courseid, 'users' => $users, 'date' => $date));

Expand Down
2 changes: 2 additions & 0 deletions lang/en/local_recompletion.php
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,10 @@
$string['bulkchangedate'] = 'Change completion date for selected users';
$string['nousersselected'] = 'No users were selected';
$string['resetallcompletion'] = 'Reset all completion';
$string['bulkresetallcompletion'] = 'Reset all completion for selected users';
$string['resetcompletionfor'] = 'Reset completion for {$a}';
$string['completionresetuser'] = 'Completion for {$a} in this course has been reset.';
$string['completionreset'] = 'Completion for the selected students in this course has been reset.';
$string['modifycompletiondates'] = 'Modify course completion dates';
$string['assignevent'] = 'Update course completion on grade change';
$string['defaultsettings'] = 'Recompletion default settings';
Expand Down
2 changes: 1 addition & 1 deletion participants.php
Original file line number Diff line number Diff line change
Expand Up @@ -199,12 +199,12 @@
if ($bulkoperations) {
echo '<br /><div class="buttons"><div class="form-inline">';
echo '<input type="submit" name="submit" value="'.get_string('bulkchangedate', 'local_recompletion').'"/>';
echo '<input type="submit" name="reset_completion" value="'.get_string('bulkresetallcompletion', 'local_recompletion').'"/>';
echo '<input type="hidden" name="id" value="' . $course->id . '" />';
echo '</div></div>';
}

echo '</form>';

echo '</div>'; // Userlist.

$enrolrenderer = $PAGE->get_renderer('core_enrol');
Expand Down
2 changes: 1 addition & 1 deletion styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
margin-bottom: 20px;
margin-left: 60px;
font-weight: bold;
}
}

0 comments on commit 1247cf2

Please sign in to comment.