Browse Source

Fixes #269 Allow Calendar events to be enabled/disabled

Also includes script to perform clean-up if settings change.
MOODLE_32_STABLE
Dan Marsden 8 years ago
parent
commit
afe0a72e7f
  1. 19
      classes/calendar_helpers.php
  2. 8
      lang/en/attendance.php
  3. 4
      lib.php
  4. 91
      resetcalendar.php
  5. 4
      settings.php

19
classes/calendar_helpers.php

@ -32,12 +32,17 @@ require_once(dirname(__FILE__).'/../../../calendar/lib.php');
* @return bool result of calendar event creation * @return bool result of calendar event creation
*/ */
function attendance_create_calendar_event(&$session) { function attendance_create_calendar_event(&$session) {
global $DB;
// We don't want to create multiple calendar events for 1 session. // We don't want to create multiple calendar events for 1 session.
if ($session->caleventid) { if ($session->caleventid) {
return $session->caleventid; return $session->caleventid;
} }
if (empty(get_config('attendance', 'enablecalendar'))) {
// Calendar events are not used.
return true;
}
global $DB;
$attendance = $DB->get_record('attendance', array('id' => $session->attendanceid)); $attendance = $DB->get_record('attendance', array('id' => $session->attendanceid));
$caleventdata = new stdClass(); $caleventdata = new stdClass();
@ -68,6 +73,12 @@ function attendance_create_calendar_event(&$session) {
*/ */
function attendance_create_calendar_events($sessionsids) { function attendance_create_calendar_events($sessionsids) {
global $DB; global $DB;
if (empty(get_config('attendance', 'enablecalendar'))) {
// Calendar events are not used.
return true;
}
$sessions = $DB->get_recordset_list('attendance_sessions', 'id', $sessionsids); $sessions = $DB->get_recordset_list('attendance_sessions', 'id', $sessionsids);
foreach ($sessions as $session) { foreach ($sessions as $session) {
@ -87,6 +98,12 @@ function attendance_create_calendar_events($sessionsids) {
* @return bool result of updating * @return bool result of updating
*/ */
function attendance_update_calendar_event($caleventid, $timeduration, $timestart) { function attendance_update_calendar_event($caleventid, $timeduration, $timestart) {
if (empty(get_config('attendance', 'enablecalendar'))) {
// Calendar events are not used.
return true;
}
$caleventdata = new stdClass(); $caleventdata = new stdClass();
$caleventdata->timeduration = $timeduration; $caleventdata->timeduration = $timeduration;
$caleventdata->timestart = $timestart; $caleventdata->timestart = $timestart;

8
lang/en/attendance.php

@ -168,6 +168,8 @@ $string['emailuser'] = 'Email user';
$string['emailuser_help'] = 'If checked, a warning will be sent to the student.'; $string['emailuser_help'] = 'If checked, a warning will be sent to the student.';
$string['emptyacronym'] = 'Empty acronyms are not allowed. Status record not updated.'; $string['emptyacronym'] = 'Empty acronyms are not allowed. Status record not updated.';
$string['emptydescription'] = 'Empty descriptions are not allowed. Status record not updated.'; $string['emptydescription'] = 'Empty descriptions are not allowed. Status record not updated.';
$string['enablecalendar'] = 'Create calendar events';
$string['enablecalendar_desc'] = 'If enabled, a calendar event will be created for each attendance session. After changing this setting you should run the reset calendar report.';
$string['enablewarnings'] = 'Enable warnings'; $string['enablewarnings'] = 'Enable warnings';
$string['enablewarnings_desc'] = 'This allows a warning set to be defined for an attendance and email notifications to users when attendance drops below the configured threshold. <br/><strong>WARNING: This is a new feature and has not been tested extensively. Please use at your own-risk and provide feeback in the moodle forums if you find it works well.</strong>'; $string['enablewarnings_desc'] = 'This allows a warning set to be defined for an attendance and email notifications to users when attendance drops below the configured threshold. <br/><strong>WARNING: This is a new feature and has not been tested extensively. Please use at your own-risk and provide feeback in the moodle forums if you find it works well.</strong>';
$string['endofperiod'] = 'End of period'; $string['endofperiod'] = 'End of period';
@ -180,6 +182,8 @@ $string['errorinaddingsession'] = 'Error in adding session';
$string['erroringeneratingsessions'] = 'Error in generating sessions '; $string['erroringeneratingsessions'] = 'Error in generating sessions ';
$string['eventdurationupdated'] = 'Session duration updated'; $string['eventdurationupdated'] = 'Session duration updated';
$string['eventreportviewed'] = 'Attendance report viewed'; $string['eventreportviewed'] = 'Attendance report viewed';
$string['eventscreated'] = 'Calendar events created';
$string['eventsdeleted'] = 'Calendar events deleted';
$string['eventsessionadded'] = 'Session added'; $string['eventsessionadded'] = 'Session added';
$string['eventsessiondeleted'] = 'Session deleted'; $string['eventsessiondeleted'] = 'Session deleted';
$string['eventsessionupdated'] = 'Session updated'; $string['eventsessionupdated'] = 'Session updated';
@ -243,6 +247,7 @@ $string['noattendanceusers'] = 'It is not possible to export any data as there a
$string['noautomark'] = 'Disabled'; $string['noautomark'] = 'Disabled';
$string['noattforuser'] = 'No attendance records exist for the user'; $string['noattforuser'] = 'No attendance records exist for the user';
$string['nodescription'] = 'Regular class session'; $string['nodescription'] = 'Regular class session';
$string['noeventstoreset'] = 'There are no calendar events that require an update.';
$string['nogroups'] = 'You can\'t add group sessions. No groups exists in course.'; $string['nogroups'] = 'You can\'t add group sessions. No groups exists in course.';
$string['noguest'] = 'Guest can\'t see attendance'; $string['noguest'] = 'Guest can\'t see attendance';
$string['noofdaysabsent'] = 'No of days absent'; $string['noofdaysabsent'] = 'No of days absent';
@ -337,6 +342,9 @@ $string['requiredentry_help'] = '<p align="center"><b>Attendance</b></p>
<p align="left"><strong>Temporay user will be deleted in all cases after merge action</strong></p>'; <p align="left"><strong>Temporay user will be deleted in all cases after merge action</strong></p>';
$string['requiresubnet'] = 'Require network address'; $string['requiresubnet'] = 'Require network address';
$string['requiresubnet_help'] = 'Attendance recording may be restricted to particular subnets by specifying a comma-separated list of partial or full IP addresses.'; $string['requiresubnet_help'] = 'Attendance recording may be restricted to particular subnets by specifying a comma-separated list of partial or full IP addresses.';
$string['resetcalendar'] = 'Reset calendar';
$string['resetcaledarcreate'] = 'Calendar events have been enabled but a number of existing sessions do not have events. Do you want to create calendar events for all existing sessions?';
$string['resetcaledardelete'] = 'Calendar events have been disabled but a number of existing sessions have events that should be deleted. Do you want to delete all existing events?';
$string['resetdescription'] = 'Remember that deleting attendance data will erase information from database. You can just hide older sessions having changed start date of course!'; $string['resetdescription'] = 'Remember that deleting attendance data will erase information from database. You can just hide older sessions having changed start date of course!';
$string['resetstatuses'] = 'Reset statuses to default'; $string['resetstatuses'] = 'Reset statuses to default';
$string['restoredefaults'] = 'Restore defaults'; $string['restoredefaults'] = 'Restore defaults';

4
lib.php

@ -486,6 +486,10 @@ function attendance_print_settings_tabs($selected = 'settings') {
$tabs[] = new tabobject('atrisk', $CFG->wwwroot . '/mod/attendance/atrisk.php', $tabs[] = new tabobject('atrisk', $CFG->wwwroot . '/mod/attendance/atrisk.php',
get_string('atriskreport', 'attendance'), get_string('atriskreport', 'attendance'), false); get_string('atriskreport', 'attendance'), get_string('atriskreport', 'attendance'), false);
} }
$tabs[] = new tabobject('resetcalendar', $CFG->wwwroot.'/mod/attendance/resetcalendar.php',
get_string('resetcalendar', 'attendance'), get_string('resetcalendar', 'attendance'), false);
ob_start(); ob_start();
print_tabs(array($tabs), $selected); print_tabs(array($tabs), $selected);
$tabmenu = ob_get_contents(); $tabmenu = ob_get_contents();

91
resetcalendar.php

@ -0,0 +1,91 @@
<?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/>.
/**
* Reset Calendar events.
*
* @package mod_attendance
* @copyright 2017 onwards Dan Marsden http://danmarsden.com
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once('../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->dirroot.'/mod/attendance/lib.php');
require_once($CFG->dirroot.'/mod/attendance/locallib.php');
$action = optional_param('action', '', PARAM_ALPHA);
admin_externalpage_setup('managemodules');
$context = context_system::instance();
// Check permissions.
require_capability('mod/attendance:viewreports', $context);
$exportfilename = 'attendanceatrisk.csv';
$PAGE->set_url('/mod/attendance/resetcalendar.php');
$PAGE->set_heading($SITE->fullname);
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('resetcalendar', 'mod_attendance'));
$tabmenu = attendance_print_settings_tabs('resetcalendar');
echo $tabmenu;
if (get_config('attendance', 'enablecalendar')) {
// Check to see if all sessions have calendar events.
if ($action == 'create' && confirm_sesskey()) {
$sessions = $DB->get_recordset('attendance_sessions', array('caleventid' => 0));
foreach ($sessions as $session) {
attendance_create_calendar_event($session);
if ($session->caleventid) {
$DB->update_record('attendance_sessions', $session);
}
}
$sessions->close();
echo $OUTPUT->notification(get_string('eventscreated', 'mod_attendance'), 'notifysuccess');
} else {
if ($DB->record_exists('attendance_sessions', array('caleventid' => 0))) {
$createurl = new moodle_url('/mod/attendance/resetcalendar.php', array('action' => 'create'));
$returnurl = new moodle_url('/admin/settings.php', array('section' => 'modsettingattendance'));
echo $OUTPUT->confirm(get_string('resetcaledarcreate', 'mod_attendance'), $createurl, $returnurl);
} else {
echo $OUTPUT->box(get_string("noeventstoreset", "mod_attendance"));
}
}
} else {
if ($action == 'delete' && confirm_sesskey()) {
$caleventids = $DB->get_records_select_menu('attendance_sessions', 'caleventid > 0', array(), '', 'caleventid, caleventid as id2');
$DB->delete_records_list('event', 'id', $caleventids);
$DB->execute("UPDATE {attendance_sessions} set caleventid = 0");
echo $OUTPUT->notification(get_string('eventsdeleted', 'mod_attendance'), 'notifysuccess');
} else {
// Check to see if there are any events that need to be deleted.
if ($DB->record_exists_select('attendance_sessions', 'caleventid > 0')) {
$deleteurl = new moodle_url('/mod/attendance/resetcalendar.php', array('action' => 'delete'));
$returnurl = new moodle_url('/admin/settings.php', array('section' => 'modsettingattendance'));
echo $OUTPUT->confirm(get_string('resetcaledardelete', 'mod_attendance'), $deleteurl, $returnurl);
} else {
echo $OUTPUT->box(get_string("noeventstoreset", "mod_attendance"));
}
}
}
echo $OUTPUT->footer();

4
settings.php

@ -74,6 +74,10 @@ if ($ADMIN->fulltree) {
get_string('defaultview', 'attendance'), get_string('defaultview', 'attendance'),
get_string('defaultview_desc', 'attendance'), ATT_VIEW_WEEKS, $options)); get_string('defaultview_desc', 'attendance'), ATT_VIEW_WEEKS, $options));
$settings->add(new admin_setting_configcheckbox('attendance/enablecalendar',
get_string('enablecalendar', 'attendance'),
get_string('enablecalendar_desc', 'attendance'), 1));
$settings->add(new admin_setting_configcheckbox('attendance/enablewarnings', $settings->add(new admin_setting_configcheckbox('attendance/enablewarnings',
get_string('enablewarnings', 'attendance'), get_string('enablewarnings', 'attendance'),
get_string('enablewarnings_desc', 'attendance'), 0)); get_string('enablewarnings_desc', 'attendance'), 0));

Loading…
Cancel
Save