You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

287 lines
13 KiB

<?PHP // $Id: sessions.php,v 1.2.2.3 2009/02/23 19:22:41 dlnsk Exp $
require_once('../../config.php');
require_once($CFG->libdir.'/blocklib.php');
require_once('locallib.php');
require_once('lib.php');
require_once('add_form.php');
require_once('update_form.php');
require_once('duration_form.php');
if (!function_exists('grade_update')) { //workaround for buggy PHP versions
require_once($CFG->libdir.'/gradelib.php');
}
$id = required_param('id', PARAM_INT);
$action = required_param('action', PARAM_ACTION);
if ($id) {
if (! $cm = $DB->get_record('course_modules', array('id'=> $id))) {
error('Course Module ID was incorrect');
}
if (! $course = $DB->get_record('course', array('id'=> $cm->course))) {
error('Course is misconfigured');
}
if (! $attforblock = $DB->get_record('attforblock', array('id'=> $cm->instance))) {
error("Course module is incorrect");
}
}
require_login($course->id);
if (! $user = $DB->get_record('user', array('id'=> $USER->id) )) {
error("No such user in this course");
}
if (!$context = get_context_instance(CONTEXT_MODULE, $cm->id)) {
print_error('badcontext');
}
require_capability('mod/attforblock:manageattendances', $context);
$navlinks[] = array('name' => $attforblock->name, 'link' => "view.php?id=$id", 'type' => 'activity');
$navlinks[] = array('name' => get_string($action, 'attforblock'), 'link' => null, 'type' => 'activityinstance');
$navigation = build_navigation($navlinks);
print_header("$course->shortname: ".$attforblock->name.' - '.get_string($action,'attforblock'), $course->fullname,
$navigation, "", "", true, "&nbsp;", navmenu($course));
//////////////////////////////////////////////////////////
// Adding sessions
//////////////////////////////////////////////////////////
if ($action === 'add') {
show_tabs($cm, $context, 'add');
$mform_add = new mod_attforblock_add_form('sessions.php', array('course'=>$course, 'cm'=>$cm, 'modcontext'=>$context));
if ($fromform = $mform_add->get_data()) {
$duration = $fromform->durtime['hours']*HOURSECS + $fromform->durtime['minutes']*MINSECS;
$now = time();
if (isset($fromform->addmultiply)) {
$startdate = $fromform->sessiondate;// + $fromform->stime['hour']*3600 + $fromform->stime['minute']*60;
$starttime = $startdate - usergetmidnight($startdate);
$enddate = $fromform->sessionenddate + ONE_DAY; // because enddate in 0:0am
//get number of days
$days = (int)ceil(($enddate - $startdate) / ONE_DAY);
if($days <= 0)
error(get_string('wrongdatesselected','attforblock'), "sessions.php?id=$id&amp;action=add");
else {
add_to_log($course->id, 'attendance', 'multiply sessions added', 'mod/attforblock/manage.php?id='.$id, $user->lastname.' '.$user->firstname);
// Getting first day of week
$sdate = $startdate;
$dinfo = usergetdate($sdate);
if ($CFG->calendar_startwday === '0') { //week start from sunday
$startweek = $startdate - $dinfo['wday'] * ONE_DAY; //call new variable
} else {
$wday = $dinfo['wday'] === 0 ? 7 : $dinfo['wday'];
$startweek = $startdate - ($wday-1) * ONE_DAY;
}
// Adding sessions
$wdaydesc = array(0=>'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
while ($sdate < $enddate) {
if($sdate < $startweek + ONE_WEEK) {
$dinfo = usergetdate($sdate);
if(key_exists($wdaydesc[$dinfo['wday']] ,$fromform->sdays)) {
//check whether this date there is in our session days
// if(count_records('attendance_sessions', 'courseid', $course->id, 'sessdate', $sdate) > 0) {
// notify(strftime(get_string('strftimedmy', 'attforblock'), $sdate).': '.get_string('sessionexist','attforblock'));
// $sdate += ONE_DAY;
// continue;
// }
$rec->courseid = $course->id;
$rec->attendanceid = $attforblock->id;
$rec->sessdate = usergetmidnight($sdate) + $starttime;
$rec->duration = $duration;
$rec->description = $fromform->sdescription;
$rec->timemodified = $now;
if ($fromform->sessiontype == COMMONSESSION) {
if(!$DB->insert_record('attendance_sessions', $rec))
error(get_string('erroringeneratingsessions','attforblock'), "sessions.php?id=$id&amp;action=add");
} else {
foreach ($fromform->groups as $groupid) {
$rec->groupid = $groupid;
if(!insert_record('attendance_sessions', $rec))
error(get_string('erroringeneratingsessions','attforblock'), "sessions.php?id=$id&amp;action=add");
}
}
}
$sdate += ONE_DAY;
} else {
$startweek += ONE_WEEK * $fromform->period;
$sdate = $startweek;
}
}
notice(get_string('sessionsgenerated','attforblock'));
}
} else {
// insert one session
$rec->courseid = $course->id;
$rec->attendanceid = $attforblock->id;
$rec->sessdate = $fromform->sessiondate;
$rec->duration = $duration;
$rec->description = $fromform->sdescription;
$rec->timemodified = $now;
if ($fromform->sessiontype == COMMONSESSION) {
if(insert_record('attendance_sessions', $rec)) {
add_to_log($course->id, 'attendance', 'one session added', 'mod/attforblock/manage.php?id='.$id, $user->lastname.' '.$user->firstname);
notice(get_string('sessionadded','attforblock'));
} else
error(get_string('errorinaddingsession','attforblock'), "sessions.php?id=$id&amp;action=add");
} else {
foreach ($fromform->groups as $groupid) {
$rec->groupid = $groupid;
if(!insert_record('attendance_sessions', $rec))
error(get_string('errorinaddingsession','attforblock'), "sessions.php?id=$id&amp;action=add");
}
add_to_log($course->id, 'attendance', 'one session added', 'mod/attforblock/manage.php?id='.$id, $user->lastname.' '.$user->firstname);
notice(get_string('sessionadded','attforblock'));
}
}
}
$mform_add->display();
}
//////////////////////////////////////////////////////////
// Updating sessions
//////////////////////////////////////////////////////////
if ($action === 'update') {
$sessionid = required_param('sessionid');
$mform_update = new mod_attforblock_update_form('sessions.php', array('course'=>$course,
'cm'=>$cm,
'modcontext'=>$context,
'sessionid'=>$sessionid));
if ($mform_update->is_cancelled()) {
redirect('manage.php?id='.$id);
}
if ($fromform = $mform_update->get_data()) {
if (!$att = $DB->get_record('attendance_sessions', array('id'=> $sessionid) )) {
error('No such session in this course');
}
// $newdate = mktime($newhour, $newminute, 0, $newmonth, $newday, $newyear); //new variables called here
//check for duplicate
// $count = count_records('attendance_sessions','courseid', $course->id, 'sessdate', $newdate);
// if($count != 0 && $newdate != $att->sessdate) //duplicate session exists
// error(get_string('sessionalreadyexists','attforblock'),"sessions.php?id=".$id."&amp;sessionid=".
// $sessionid."&amp;sessdate=".$att->sessdate."&amp;action=update");
// else
// {
//update session
$att->sessdate = $fromform->sessiondate;
$att->duration = $fromform->durtime['hours']*HOURSECS + $fromform->durtime['minutes']*MINSECS;
$att->description = $fromform->sdescription;
$att->timemodified = time();
$DB->update_record('attendance_sessions', $att);
add_to_log($course->id, 'attendance', 'Session updated', 'mod/attforblock/manage.php?id='.$id, $user->lastname.' '.$user->firstname);
//notice(get_string('sessionupdated','attforblock'), 'manage.php?id='.$id);
redirect('manage.php?id='.$id, get_string('sessionupdated','attforblock'), 3);
// }
}
print_heading(get_string('update','attforblock').' ' .get_string('attendanceforthecourse','attforblock').' :: ' .$course->fullname);
$mform_update->display();
}
//////////////////////////////////////////////////////////
// Deleting sessions
//////////////////////////////////////////////////////////
if ($action === 'delete') {
$sessionid = required_param('sessionid');
$confirm = optional_param('confirm');
if (!$att = $DB->get_record('attendance_sessions', array('id'=> $sessionid) )) {
error('No such session in this course');
}
if (isset($confirm)) {
$DB->delete_records('attendance_log', array('sessionid'=> $sessionid));
$DB->delete_records('attendance_sessions', array('id'=> $sessionid));
add_to_log($course->id, 'attendance', 'Session deleted', 'mod/attforblock/manage.php?id='.$id, $user->lastname.' '.$user->firstname);
$attforblockrecord = $DB->get_record('attforblock', array('course'=> $course->id));
attforblock_update_grades($attforblockrecord);
redirect('manage.php?id='.$id, get_string('sessiondeleted','attforblock'), 3);
}
print_heading(get_string('deletingsession','attforblock').' :: ' .$course->fullname);
notice_yesno(get_string('deletecheckfull', '', get_string('session', 'attforblock')).
'<br /><br />'.userdate($att->sessdate, get_string('strftimedmyhm', 'attforblock')).': '.
($att->description ? $att->description : get_string('nodescription', 'attforblock')),
"sessions.php?id=$id&amp;sessionid=$sessionid&amp;action=delete&amp;confirm=1", $_SERVER['HTTP_REFERER']);
}
if ($action === 'deleteselected') {
$confirm = optional_param('confirm');
if (isset($confirm)) {
$sessionid = required_param('sessionid');
$ids = implode(',', explode('_', $sessionid));
$DB->delete_records_select('attendance_log', "sessionid IN ($ids)");
$DB->delete_records_select('attendance_sessions', "id IN ($ids)");
add_to_log($course->id, 'attendance', 'Several sessions deleted', 'mod/attforblock/manage.php?id='.$id, $user->lastname.' '.$user->firstname);
$attforblockrecord = $DB->get_record('attforblock',array('course'=> $course->id));
attforblock_update_grades($attforblockrecord);
redirect('manage.php?id='.$id, get_string('sessiondeleted','attforblock'), 3);
}
$fromform = data_submitted();
$slist = implode(',', array_keys($fromform->sessid));
$sessions = $DB->get_records_list('attendance_sessions', array('id'=> $slist), 'sessdate');
print_heading(get_string('deletingsession','attforblock').' :: ' .$course->fullname);
$message = '<br />';
foreach ($sessions as $att) {
$message .= '<br />'.userdate($att->sessdate, get_string('strftimedmyhm', 'attforblock')).': '.
($att->description ? $att->description : get_string('nodescription', 'attforblock'));
}
$slist = implode('_', array_keys($fromform->sessid));
notice_yesno(get_string('deletecheckfull', '', get_string('sessions', 'attforblock')).$message,
"sessions.php?id=$id&amp;sessionid=$slist&amp;action=deleteselected&amp;confirm=1", $_SERVER['HTTP_REFERER']);
}
//////////////////////////////////////////////////////////
// Change duration
//////////////////////////////////////////////////////////
if ($action === 'changeduration') {
$fromform = data_submitted();
$slist = isset($fromform->sessid) ? implode('_', array_keys($fromform->sessid)) : '';
$mform_duration = new mod_attforblock_duration_form('sessions.php', array('course'=>$course,
'cm'=>$cm,
'modcontext'=>$context,
'ids'=>$slist));
if ($mform_duration->is_cancelled()) {
redirect('manage.php?id='.$id);
}
if ($fromform = $mform_duration->get_data()) {
$now = time();
$slist = implode(',', explode('_', $fromform->ids));
if (!$sessions = $DB->get_records_list('attendance_sessions', array('id'=> $slist) )) {
error('No such session in this course');
}
foreach ($sessions as $sess) {
$sess->duration = $fromform->durtime['hours']*HOURSECS + $fromform->durtime['minutes']*MINSECS;
$sess->timemodified = $now;
$DB->update_record('attendance_sessions', $sess);
}
add_to_log($course->id, 'attendance', 'Session updated', 'mod/attforblock/manage.php?id='.$id, $user->lastname.' '.$user->firstname);
redirect('manage.php?id='.$id, get_string('sessionupdated','attforblock'), 3);
}
print_heading(get_string('update','attforblock').' ' .get_string('attendanceforthecourse','attforblock').' :: ' .$course->fullname);
$mform_duration->display();
}
print_footer($course);
?>