Skip to content

Commit

Permalink
MDL-7028 rewritten course reset + forum role_unassign cleanup fixes; …
Browse files Browse the repository at this point in the history
…merged from MOODLE_19_STABLE
  • Loading branch information
skodak committed Nov 29, 2007
1 parent 80f29a5 commit 0b5a80a
Show file tree
Hide file tree
Showing 39 changed files with 1,707 additions and 428 deletions.
129 changes: 53 additions & 76 deletions course/reset.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,101 +7,78 @@
specific data. Each module must be modified to take advantage of this new feature.
The feature will also reset the start date of the course if necessary.
*/
require('../config.php');

$id = required_param('id', PARAM_INT);
require('../config.php');
require_once('reset_form.php');

if (! $course = get_record('course', 'id', $id)) {
error("Course is misconfigured");
}

require_login($course->id);
$id = required_param('id', PARAM_INT);

require_capability('moodle/course:update', get_context_instance(CONTEXT_COURSE, $course->id));
if (!$course = get_record('course', 'id', $id)) {
error("Course is misconfigured");
}

$strreset = get_string('reset');
$strresetcourse = get_string('resetcourse');
$strremove = get_string('remove');
require_login($course);
require_capability('moodle/course:update', get_context_instance(CONTEXT_COURSE, $course->id));

$navlinks = array();
$navlinks[] = array('name' => $strresetcourse, 'link' => null, 'type' => 'misc');
$navigation = build_navigation($navlinks);
$strreset = get_string('reset');
$strresetcourse = get_string('resetcourse');
$strremove = get_string('remove');

print_header($course->fullname.': '.$strresetcourse, $course->fullname.': '.$strresetcourse, $navigation);
$navlinks = array(array('name' => $strresetcourse, 'link' => null, 'type' => 'misc'));
$navigation = build_navigation($navlinks);

print_simple_box_start();
$mform = new course_reset_form();

print_heading($strresetcourse);
if ($mform->is_cancelled()) {
redirect($CFG->wwwroot.'/course/view.php?id='.$id);

/// If we have data, then process it.
if ($data = data_submitted() and confirm_sesskey()) {
} else if ($data = $mform->get_data(false)) { // no magic quotes

$data->courseid = $course->id;
if (isset($data->selectdefault)) {
$_POST = array();
$mform = new course_reset_form();
$mform->load_defaults();

reset_course_userdata($data, true);
} else if (isset($data->deselectall)) {
$_POST = array();
$mform = new course_reset_form();

if (!empty($data->reset_start_date)) {
if (set_field('course', 'startdate',
make_timestamp($data->startyear, $data->startmonth, $data->startday),
'id', $course->id)) {
notify(get_string('datechanged'), 'notifysuccess');
}
} else {
print_header($course->fullname.': '.$strresetcourse, $course->fullname.': '.$strresetcourse, $navigation);
print_heading($strresetcourse);

$data->reset_start_date_old = $course->startdate;
$status = reset_course_userdata($data);

$data = array();;
foreach ($status as $item) {
$line = array();
$line[] = $item['component'];
$line[] = $item['item'];
$line[] = ($item['error']===false) ? get_string('ok') : '<div class="notifyproblem">'.$item['error'].'</div>';
$data[] = $line;
}

$table = new object();
$table->head = array(get_string('resetcomponent'), get_string('resettask'), get_string('resetstatus'));
$table->size = array('20%', '40%', '40%');
$table->align = array('left', 'left', 'left');
$table->width = '80%';
$table->data = $data;
print_table($table);

print_continue('view.php?id='.$course->id); // Back to course page
print_simple_box_end();
print_footer($course);
exit;
}
}

print_header($course->fullname.': '.$strresetcourse, $course->fullname.': '.$strresetcourse, $navigation);
print_heading($strresetcourse);

print_simple_box(get_string('resetinfo'), 'center', '60%');

/// Print forms so the user can make choices about what to delete

print_simple_box(get_string('resetinfo'), 'center', '60%');

echo '<form id="reset" action="reset.php" method="POST">';

print_heading(get_string('course'), 'left', 3);

echo '<div class="courseinfo">';
echo $strremove.':<br />';
print_checkbox('reset_teachers', 1, false, get_string('teachers'), '', ''); echo '<br />';
print_checkbox('reset_students', 1, true, get_string('students'), '', ''); echo '<br />';
print_checkbox('reset_events', 1, true, get_string('courseevents', 'calendar'), '', ''); echo '<br />';
print_checkbox('reset_logs', 1, true, get_string('logs'), '', ''); echo '<br />';
print_checkbox('reset_groups', 1, true, get_string('groups'), '', ''); echo '<br />';
print_checkbox('reset_start_date', 1, true, get_string('startdate'), '', '');
print_date_selector('startday', 'startmonth', 'startyear');
helpbutton('coursestartdate', get_string('startdate'));
echo '</div>';

// Check each module and see if there is specific data to be removed

if ($allmods = get_records('modules') ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$modfile = $CFG->dirroot .'/mod/'. $modname .'/lib.php';
$mod_reset_course_form = $modname .'_reset_course_form';
if (file_exists($modfile)) {
@include_once($modfile);
if (function_exists($mod_reset_course_form)) {
print_heading(get_string('modulenameplural', $modname), 'left', 3);
echo '<div class="'.$modname.'info">';
$mod_reset_course_form($course);
echo '</div>';
}
}
}
} else {
error('No modules are installed!');
}

echo '<input name="id" value="'.$course->id.'" type="hidden" />';
echo '<input name="sesskey" value="'.sesskey().'" type="hidden" />';
echo '<p align="center"><input name="submit" value="'.$strresetcourse.'" type="submit" /></p>';
echo '</form>';

print_simple_box_end();
print_footer($course);
$mform->display();
print_footer($course);

?>
124 changes: 124 additions & 0 deletions course/reset_form.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<?php // $Id$
require_once $CFG->libdir.'/formslib.php';

class course_reset_form extends moodleform {
function definition (){
global $CFG, $COURSE;

$mform =& $this->_form;

$mform->addElement('header', 'generalheader', get_string('general'));

$mform->addElement('date_selector', 'reset_start_date', get_string('startdate'), array('optional'=>true));
$mform->setHelpButton('reset_start_date', array('coursestartdate', get_string('startdate')));
$mform->addElement('checkbox', 'reset_events', get_string('deleteevents', 'calendar'));
$mform->addElement('checkbox', 'reset_logs', get_string('deletelogs'));
$mform->addElement('checkbox', 'reset_notes', get_string('deletenotes', 'notes'));


$mform->addElement('header', 'rolesheader', get_string('roles'));

$roles = get_assignable_roles(get_context_instance(CONTEXT_COURSE, $COURSE->id));
$mform->addElement('select', 'reset_roles', get_string('unenrolroleusers'), $roles, array('multiple' => 'multiple'));
$mform->addElement('checkbox', 'reset_roles_overrides', get_string('deletecourseoverrides', 'role'));
$mform->setAdvanced('reset_roles_overrides');
$mform->addElement('checkbox', 'reset_roles_local', get_string('deletelocalroles', 'role'));


$mform->addElement('header', 'gradebookheader', get_string('gradebook', 'grades'));

$mform->addElement('checkbox', 'reset_gradebook_items', get_string('removeallcourseitems', 'grades'));
$mform->addElement('checkbox', 'reset_gradebook_grades', get_string('removeallcoursegrades', 'grades'));
$mform->disabledIf('reset_gradebook_grades', 'reset_gradebook_items', 'checked');


$mform->addElement('header', 'groupheader', get_string('groups'));

$mform->addElement('checkbox', 'reset_groups_remove', get_string('deleteallgroups', 'group'));
$mform->setAdvanced('reset_groups_remove');
$mform->addElement('checkbox', 'reset_groups_members', get_string('removegroupsmembers', 'group'));
$mform->setAdvanced('reset_groups_members');
$mform->disabledIf('reset_groups_members', 'reset_groups_remove', 'checked');

if (!empty($CFG->enablegroupings)) {
$mform->addElement('checkbox', 'reset_groupings_remove', get_string('deleteallgroupings', 'group'));
$mform->setAdvanced('reset_groupings_remove');
$mform->addElement('checkbox', 'reset_groupings_members', get_string('removegroupingsmembers', 'group'));
$mform->setAdvanced('reset_groupings_members');
$mform->disabledIf('reset_groupings_members', 'reset_groupings_remove', 'checked');
}

$unsupported_mods = array();
if ($allmods = get_records('modules') ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
if (!count_records($modname, 'course', $COURSE->id)) {
continue; // skip mods with no instances
}
$modfile = $CFG->dirroot."/mod/$modname/lib.php";
$mod_reset_course_form_definition = $modname.'_reset_course_form_definition';
$mod_reset__userdata = $modname.'_reset_userdata';
if (file_exists($modfile)) {
include_once($modfile);
if (function_exists($mod_reset_course_form_definition)) {
$mod_reset_course_form_definition($mform);
} else if (!function_exists($mod_reset__userdata)) {
$unsupported_mods[] = $mod;
}
} else {
debugging('Missing lib.php in '.$modname.' module');
}
}
}
// mention unsupported mods
if (!empty($unsupported_mods)) {
$mform->addElement('header', 'unsupportedheader', get_string('resetnotimplemented'));
foreach($unsupported_mods as $mod) {
$mform->addElement('static', 'unsup'.$mod->name, get_string('modulenameplural', $mod->name));
$mform->setAdvanced('unsup'.$mod->name);
}
}

$mform->addElement('hidden', 'id', $COURSE->id);

$buttonarray = array();
$buttonarray[] = &$mform->createElement('submit', 'submitbutton', get_string('resetcourse'));
$buttonarray[] = &$mform->createElement('submit', 'selectdefault', get_string('selectdefault'));
$buttonarray[] = &$mform->createElement('submit', 'deselectall', get_string('deselectall'));
$buttonarray[] = &$mform->createElement('cancel');
$mform->addGroup($buttonarray, 'buttonar', '', array(' '), false);
$mform->closeHeaderBefore('buttonar');
}

function load_defaults() {
global $CFG, $COURSE;

$mform =& $this->_form;

$defaults = array ('reset_events'=>1, 'reset_logs'=>1, 'reset_roles_local'=>1, 'reset_gradebook_grades'=>1, 'reset_notes'=>1);

if (!empty($COURSE->defaultrole)) {
$defaults['reset_roles'] = array($COURSE->defaultrole);
} else {
$defaults['reset_roles'] = array($CFG->defaultcourseroleid);
}

if ($allmods = get_records('modules') ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$modfile = $CFG->dirroot."/mod/$modname/lib.php";
$mod_reset_course_form_defaults = $modname.'_reset_course_form_defaults';
if (file_exists($modfile)) {
@include_once($modfile);
if (function_exists($mod_reset_course_form_defaults)) {
$defaults = $defaults + $mod_reset_course_form_defaults($COURSE);
}
}
}
}

foreach ($defaults as $element=>$default) {
$mform->setDefault($element, $default);
}
}
}
2 changes: 1 addition & 1 deletion group/groupings.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
$data[] = $line;
}
}
$tabke = new object();
$table = new object();
$table->head = array($strgrouping, $strgroups, $struses, $stredit);
$table->size = array('30%', '50%', '10%', '10%');
$table->align = array('left', 'left', 'center', 'center');
Expand Down
40 changes: 31 additions & 9 deletions group/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@ function groups_delete_group($groupid) {
return false;
}

// delete group calendar events
delete_records('event', 'groupid', $groupid);
//first delete usage in groupings_groups
delete_records('groupings_groups', 'groupid', $groupid);
//delete members
Expand Down Expand Up @@ -195,25 +197,43 @@ function groups_delete_grouping($groupingid) {
}

/**
* Remove all users from group
* Remove all users from all groups in course
* @param int $courseid
* @param bool $showfeedback
* @return bool success
*/
function groups_delete_group_members($courseid, $showfeedback=false) {
global $CFG;

$sql = "DELETE FROM {$CFG->prefix}groups_members
WHERE groupid in (SELECT id FROM {$CFG->prefix}groups g WHERE g.courseid = $courseid)";
$groupssql = "SELECT id FROM {$CFG->prefix}groups g WHERE g.courseid = $courseid";
delete_records_select('groups_members', "groupid IN ($groupssql)");

execute_sql($sql, false);
if ($showfeedback) {
notify(get_string('deleted').' groups_members');
}

return true;
}

/**
* Remove all groups from all groupings in course
* @param int $courseid
* @param bool $showfeedback
* @return bool success
*/
function groups_delete_groupings_groups($courseid, $showfeedback=false) {
global $CFG;

$groupssql = "SELECT id FROM {$CFG->prefix}groups g WHERE g.courseid = $courseid";
delete_records_select('groupings_groups', "groupid IN ($groupssql)");

if ($showfeedback) {
notify(get_string('deleted').' groupings_groups');
}

return true;
}

/**
* Delete all groups from course
* @param int $courseid
Expand All @@ -224,12 +244,11 @@ function groups_delete_groups($courseid, $showfeedback=false) {
global $CFG;
require_once($CFG->libdir.'/gdlib.php');

// delete any uses of groups
$sql = "DELETE FROM {$CFG->prefix}groupings_groups
WHERE groupid in (SELECT id FROM {$CFG->prefix}groups g WHERE g.courseid = $courseid)";
execute_sql($sql, false);
$groupssql = "SELECT id FROM {$CFG->prefix}groups g WHERE g.courseid = $courseid";

groups_delete_group_members($courseid, false);
// delete any uses of groups
groups_delete_groupings_groups($courseid, $showfeedback);
groups_delete_group_members($courseid, $showfeedback);

// delete group pictures
if ($groups = get_records('groups', 'courseid', $courseid)) {
Expand All @@ -238,6 +257,9 @@ function groups_delete_groups($courseid, $showfeedback=false) {
}
}

// delete group calendar events
delete_records_select('event', "groupid IN ($groupssql)");

delete_records('groups', 'courseid', $courseid);
if ($showfeedback) {
notify(get_string('deleted').' groups');
Expand Down
1 change: 1 addition & 0 deletions lang/en_utf8/assignment.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
$string['configitemstocount'] = 'Nature of items to be counted for student submissions in online assignments.';
$string['configmaxbytes'] = 'Default maximum assignment size for all assignments on the site (subject to course limits and other local settings)';
$string['confirmdeletefile'] = 'Are you absolutely sure you want to delete this file?<br /><strong>$a</strong>';
$string['deleteallsubmissions'] = 'Delete all submissions';
$string['deletefilefailed'] = 'Deleting of file failed.';
$string['description'] = 'Description';
$string['draft'] = 'Draft';
Expand Down
1 change: 1 addition & 0 deletions lang/en_utf8/calendar.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
$string['daywithnoevents'] = 'There are no events this day.';
$string['default'] = 'Default';
$string['deleteevent'] = 'Delete event';
$string['deleteevents'] = 'Delete events';
$string['detailedmonthview'] = 'Detailed Month View';
$string['durationminutes'] = 'Duration in minutes';
$string['durationnone'] = 'Without duration';
Expand Down
1 change: 1 addition & 0 deletions lang/en_utf8/chat.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
$string['normalkeepalive'] = 'KeepAlive';
$string['normalstream'] = 'Stream';
$string['noscheduledsession'] = 'No scheduled session';
$string['removemessages'] = 'Remove all messages';
$string['repeatdaily'] = 'At the same time every day';
$string['repeatnone'] = 'No repeats - publish the specified time only';
$string['repeattimes'] = 'Repeat sessions';
Expand Down
Loading

0 comments on commit 0b5a80a

Please sign in to comment.