function organizer_unregister_appointment($slotid, $groupid) { global $DB, $USER; $ok = true; if (organizer_is_group_mode()) { $memberids = $DB->get_fieldset_select('groups_members', 'userid', "groupid = {$groupid}"); foreach ($memberids as $memberid) { $ok ^= organizer_unregister_single_appointment($slotid, $memberid); } } else { $ok ^= organizer_unregister_single_appointment($slotid, $USER->id); } list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $slot = $DB->get_record('organizer_slots', array('id' => $slotid)); organizer_add_event_slot($cm->id, $slot); //FIXME!!! return $ok; }
if (!organizer_security_check_slots($slot)) { print_error('Security failure: Selected slot doesn\'t belong to this organizer!'); } if (!organizer_organizer_student_action_allowed($action, $slot)) { print_error('Inconsistent state: Cannot execute registration action! Please navigate back and refresh your browser!'); } $group = organizer_fetch_my_group(); $groupid = $group ? $group->id : 0; $success = organizer_reregister_appointment($slot, $groupid); if ($success) { organizer_prepare_and_send_message($slot, 'register_notify:teacher:reregister'); if ($group) { organizer_prepare_and_send_message($slot, 'group_registration_notify:student:reregister'); } } else { if (organizer_is_group_mode()) { $redirecturl->param('messages[]', 'message_error_slot_full_group'); } else { $redirecturl->param('messages[]', 'message_error_slot_full_single'); } } redirect($redirecturl); /* } else if ($action == ORGANIZER_ACTION_REMIND) { list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $count = 0; if ($organizer->isgrouporganizer) { $members = groups_get_members($user); foreach ($members as $member) { $success = organizer_prepare_and_send_message(array('user' => $member->id, 'organizer' => $organizer), 'register_reminder:student'); // ---------------------------------------- MESSAGE!!!
private function _addfields($defaults) { $mform = $this->_form; $mform->addElement('header', 'slotdetails', get_string('slotdetails', 'organizer')); $teachers = $this->_load_teachers($defaults); /* if (!isset($defaults['teacherid'])) { $teachers[-1] = get_string('teacher_unchanged', 'organizer'); } */ $group = array(); $group[] = $mform->createElement('select', 'teacherid', get_string('teacher', 'organizer'), $teachers); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('teacherid', isset($defaults['teacherid']))); $mform->setType('teacherid', PARAM_INT); $mform->addGroup($group, 'teachergrp', get_string('teacher', 'organizer'), ORGANIZER_SPACING, false); $mform->addElement('hidden', 'mod_teacherid', 0); $mform->setType('mod_teacherid', PARAM_BOOL); /* if (!isset($defaults['teacherid'])) { $mform->setDefault('teacherid', -1); } */ $group = array(); $group[] = $mform->createElement('advcheckbox', 'teachervisible', get_string('teachervisible', 'organizer'), null, null, array(0, 1)); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('teachervisible', isset($defaults['teachervisible']))); $mform->setDefault('teachervisible', 1); $mform->addGroup($group, '', get_string('teachervisible', 'organizer'), ORGANIZER_SPACING, false); $mform->addElement('hidden', 'mod_teachervisible', 0); $mform->setType('mod_teachervisible', PARAM_BOOL); $group = array(); $group[] = $mform->createElement('advcheckbox', 'isanonymous', get_string('isanonymous', 'organizer'), null, null, array(0, 1)); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('isanonymous', isset($defaults['isanonymous']))); $mform->setDefault('isanonymous', 0); $mform->addGroup($group, '', get_string('isanonymous', 'organizer'), ORGANIZER_SPACING, false); $mform->addElement('hidden', 'mod_isanonymous', 0); $mform->setType('mod_isanonymous', PARAM_BOOL); $group = array(); $group[] = $mform->createElement('text', 'location', get_string('location', 'organizer'), array('size' => '64', 'group' => null)); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('location', isset($defaults['location']))); $mform->setType('location', PARAM_TEXT); $mform->addGroup($group, 'locationgroup', get_string('location', 'organizer'), ORGANIZER_SPACING, false); $mform->addElement('hidden', 'mod_location', 0); $mform->setType('mod_location', PARAM_BOOL); $group = array(); $group[] = $mform->createElement('text', 'locationlink', get_string('locationlink', 'organizer'), array('size' => '64', 'group' => null)); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('locationlink', isset($defaults['locationlink']))); $mform->setType('locationlink', PARAM_URL); $mform->addGroup($group, 'locationlinkgroup', get_string('locationlink', 'organizer'), ORGANIZER_SPACING, false); $mform->addElement('hidden', 'mod_locationlink', 0); $mform->setType('mod_locationlink', PARAM_BOOL); if (!organizer_is_group_mode()) { $group = array(); $group[] = $mform->createElement('text', 'maxparticipants', get_string('maxparticipants', 'organizer'), array('size' => '3', 'group' => null)); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('maxparticipants', isset($defaults['maxparticipants']))); $mform->addGroup($group, 'maxparticipantsgroup', get_string('maxparticipants', 'organizer'), ORGANIZER_SPACING, false); $mform->addElement('hidden', 'mod_maxparticipants', 0); $mform->setType('mod_maxparticipants', PARAM_BOOL); $mform->setType('maxparticipants', PARAM_INT); } else { $mform->addElement('hidden', 'maxparticipants', 1); $mform->addElement('hidden', 'mod_maxparticipants', 0); $mform->setType('maxparticipants', PARAM_INT); $mform->setType('mod_maxparticipants', PARAM_BOOL); } $group = array(); if ($defaults['now']) { $group[] = $mform->createElement('duration', 'availablefrom', get_string('availablefrom', 'organizer'), null, array('group' => null, 'disabled' => true)); } else { $group[] = $mform->createElement('duration', 'availablefrom', get_string('availablefrom', 'organizer')); } $group[] = $mform->createElement('static', '', '', get_string('relative_deadline_before', 'organizer') . ' ' . get_string('relative_deadline_now', 'organizer')); $group[] = $mform->createElement('checkbox', 'availablefrom[now]', get_string('relative_deadline_now', 'organizer')); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('availablefrom', isset($defaults['availablefrom']))); $mform->setDefault('availablefrom', ''); $mform->setDefault('availablefrom[now]', $defaults['now']); $mform->addGroup($group, 'availablefromgroup', get_string('availablefrom', 'organizer'), ORGANIZER_SPACING, false); $availablefromgroup = $mform->getElement('availablefromgroup')->getElements(); $availablefrom = $availablefromgroup[0]->getElements(); $availablefrom[1]->removeOption(1); $mform->addElement('hidden', 'mod_availablefrom', 0); $mform->setType('mod_availablefrom', PARAM_BOOL); $group = array(); $group[] = $mform->createElement('duration', 'notificationtime', get_string('notificationtime', 'organizer'), null, null, array(0, 1)); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('notificationtime', isset($defaults['notificationtime']))); $mform->setDefault('notificationtime', ''); $mform->addGroup($group, 'notificationtimegroup', get_string('notificationtime', 'organizer'), ORGANIZER_SPACING, false); $mform->addElement('hidden', 'mod_notificationtime', 0); $mform->setType('mod_notificationtime', PARAM_BOOL); $notificationtimegroup = $mform->getElement('notificationtimegroup')->getElements(); $notificationtime = $notificationtimegroup[0]->getElements(); $notificationtime[1]->removeOption(1); $mform->addElement('header', 'other', get_string('otherheader', 'organizer')); $group = array(); $group[] = $mform->createElement('textarea', 'comments', get_string('appointmentcomments', 'organizer'), array('wrap' => 'virtual', 'rows' => '10', 'cols' => '60')); $group[] = $mform->createElement('static', '', '', $this->_warning_icon('comments', isset($defaults['comments']))); $mform->setDefault('comments', ''); $mform->addGroup($group, '', get_string('appointmentcomments', 'organizer'), ORGANIZER_SPACING, false); $mform->addElement('hidden', 'mod_comments', 0); $mform->setType('mod_comments', PARAM_BOOL); }
function organizer_get_participant_list($params, $slot, $app, &$popups) { global $DB, $USER; $slotx = new organizer_slot($slot); $dir = isset($params['pdir']) ? $params['pdir'] : 'ASC'; if (isset($params['psort']) && $params['psort'] == 'name') { $orderby = " ORDER BY u.lastname {$dir}, u.firstname {$dir}, u.idnumber ASC"; } else { if (isset($params['psort']) && $params['psort'] == 'id') { $orderby = " ORDER BY u.idnumber {$dir}, u.lastname ASC, u.firstname ASC"; } else { $orderby = " ORDER BY u.lastname {$dir}, u.firstname {$dir}, u.idnumber ASC"; } } $query = "SELECT a.*, u.firstname, u.lastname, u.idnumber\n FROM {organizer_slot_appointments} a\n INNER JOIN {user} u ON a.userid = u.id\n WHERE a.slotid = :slotid {$orderby}"; $param = array('slotid' => $slotx->id); $appointments = $DB->get_records_sql($query, $param); $count = count($appointments); $groupmode = organizer_is_group_mode(); $isownslot = $app && $app->slotid == $slotx->id; $wasownslot = false; foreach ($appointments as $someapp) { if ($someapp->userid == $USER->id) { $wasownslot = true; break; } } if (!$slotx->is_available()) { $when = userdate($slotx->starttime - $slotx->availablefrom, get_string('fulldatetimetemplate', 'organizer')); return "<em>" . get_string('unavailableslot', 'organizer') . "<br/>{$when}</em>"; } $content = ''; $studentview = $params['mode'] == ORGANIZER_TAB_STUDENT_VIEW; $ismyslot = $isownslot || $wasownslot; $groupmode = organizer_is_group_mode(); if ($studentview) { if ($slot->isanonymous) { if ($ismyslot) { $idnumber = organizer_get_user_idnumber($app->userid); $content .= organizer_get_name_link($app->userid) . ($idnumber ? " ({$idnumber}) " : " ") . '<br />'; $content .= '<em>' . get_string('slot_anonymous', 'organizer') . '</em><br />'; } else { $content .= '<em>' . get_string('slot_anonymous', 'organizer') . '</em><br />'; } } else { // not anonymous if ($groupmode) { $app = reset($appointments); if ($app === false) { $content = '<em>' . get_string('nogroup', 'organizer') . '</em><br />'; } else { $groupid = $app->groupid; $groupname = $DB->get_field('groups', 'name', array('id' => $groupid)); $content = "<em>{$groupname}</em><br />"; } } else { $content = ''; } foreach ($appointments as $appointment) { $idnumber = organizer_get_user_idnumber($appointment->userid); $content .= organizer_get_name_link($appointment->userid) . ($idnumber ? " ({$idnumber}) " : " "); if ($groupmode) { $content .= ' '; $content .= organizer_is_group_mode() && $appointment->userid == $appointment->applicantid ? organizer_get_img('pix/applicant.gif', 'applicant', get_string('applicant', 'organizer')) : ''; } $content .= '<br />'; } } } else { if ($count == 0) { $content .= $groupmode ? '<em>' . get_string('nogroup', 'organizer') . '</em><br />' : '<em>' . get_string('noparticipants', 'organizer') . '</em><br />'; } else { $app = reset($appointments); if ($groupmode) { $groupid = $app->groupid; $groupname = $DB->get_field('groups', 'name', array('id' => $groupid)); $list = "<em>{$groupname}</em><br />"; } else { $list = ''; } foreach ($appointments as $appointment) { $idnumber = organizer_get_user_idnumber($appointment->userid); $list .= '<div style="float: left;">'; $list .= organizer_get_name_link($appointment->userid) . ($idnumber ? " ({$idnumber})" : ""); if ($groupmode) { $list .= ' '; $list .= organizer_is_group_mode() && $appointment->userid == $appointment->applicantid ? organizer_get_img('pix/applicant.gif', 'applicant', get_string('applicant', 'organizer')) : ''; } $list .= '</div>'; $list .= '<div style="float: right;">' . organizer_app_details($params, $appointment, $popups) . '</div><div style="clear: both;"></div>'; } $content .= $list; } } if (!$groupmode) { $a = new stdClass(); $a->numtakenplaces = $count; $a->totalplaces = $slot->maxparticipants; if ($slot->maxparticipants - $count != 0) { if ($count == 1) { $content .= "<em>" . get_string('places_taken_sg', 'organizer', $a) . "</em>"; } else { $content .= "<em>" . get_string('places_taken_pl', 'organizer', $a) . "</em>"; } } else { if ($count == 1) { $content .= "<span style=\"color: red;\"><em>" . get_string('places_taken_sg', 'organizer', $a) . "</em></span>"; } else { $content .= "<span style=\"color: red;\"><em>" . get_string('places_taken_pl', 'organizer', $a) . "</em></span>"; } } } else { if ($count == 0) { $content .= "<em>" . get_string('group_slot_available', 'organizer') . "</em>"; } else { $content .= "<span style=\"color: red;\"><em>" . get_string('group_slot_full', 'organizer') . "</em></span>"; } } $content .= ' ' . ($slot->isanonymous ? organizer_get_img('pix/anon.png', 'anonymous', get_string('slot_anonymous', 'organizer')) : ''); return $content; }
private function _add_review_slots() { $mform =& $this->_form; if (isset($mform->_submitValues['now'])) { $mform->insertElementBefore($mform->createElement('static', 'availablefromdummy', get_string('availablefrom', 'organizer'), 'Starting now'), 'notificationtime'); $mform->addHelpButton('availablefromdummy', 'availablefrom', 'organizer'); $mform->addElement('hidden', 'availablefrom', 0); } else { $mform->insertElementBefore($mform->createElement('duration', 'availablefrom', get_string('availablefrom', 'organizer')), 'notificationtime'); $mform->addHelpButton('availablefrom', 'availablefrom', 'organizer'); } $mform->insertElementBefore($mform->createElement('header', 'slottimeframes', get_string('rewievslotsheader', 'organizer')), 'other'); $slots = isset($mform->_submitValues['newslots']) ? $mform->_submitValues['newslots'] : array(); $startdate = mktime(0, 0, 0, $mform->_submitValues['startdate']['month'], $mform->_submitValues['startdate']['day'], $mform->_submitValues['startdate']['year']); $enddate = mktime(0, 0, 0, $mform->_submitValues['enddate']['month'], $mform->_submitValues['enddate']['day'], $mform->_submitValues['enddate']['year']); $teacherid = $mform->_submitValues['teacherid']; $events = $this->_organizer_load_events($teacherid, $startdate, $enddate + ORGANIZER_DAY_IN_SECS); $id = 0; $totalslots = 0; $collcount = 0; for ($day = 0; $day < ORGANIZER_NUM_DAYS; $day++) { $dayempty = true; for ($date = $startdate; $date < $enddate + ORGANIZER_DAY_IN_SECS; $date += ORGANIZER_DAY_IN_SECS) { $datedata = getdate($date); $dayofweek = ($datedata['wday'] + 6) % 7; if ($day == $dayofweek) { $heading = true; foreach ($slots as $slot) { if ($slot['selected'] && $slot['day'] == $day) { if ($heading) { $mform->insertElementBefore($mform->createElement('html', '<strong>' . userdate($date, get_string('fulldatelongtemplate', 'organizer')) . '</strong><br />'), 'other'); $heading = false; } $duration = $mform->_submitValues['duration']['number']; $unit = $mform->_submitValues['duration']['timeunit']; $collisions = $this->_check_collision($slot, $date, $events); $collcount += count($collisions); $disabled = count($collisions) ? true : false; $dayslot = $this->_create_slot_review_group($date, $id, $slot['from'], $slot['to'], $duration, $unit, $disabled); $mform->insertElementBefore($mform->createElement('group', "reviewgroup{$id}", '', $dayslot, ORGANIZER_SPACING, false), 'other'); $head = true; foreach ($collisions as $event) { if ($head) { $mform->insertElementBefore($mform->createElement('html', '<span class="error">' . get_string('collision', 'organizer') . '</span><br />'), 'other'); $head = false; } $mform->insertElementBefore($mform->createElement('html', ' - <strong>' . $event->name . '</strong> from ' . userdate($event->timestart, get_string('timetemplate', 'organizer')) . ' to ' . userdate($event->timestart + $event->timeduration, get_string('timetemplate', 'organizer')) . '<br />'), 'other'); $disabled = true; } if (!$disabled) { $totalslots += intval(($slot['to'] - $slot['from']) / ($duration * $unit)); } $dayempty = false; $id++; } } } } if ($dayempty) { $mform->insertElementBefore($mform->createElement('html', get_string('noslots', 'organizer') . get_string("day_{$day}", 'organizer')), 'other'); } $mform->insertElementBefore($mform->createElement('html', '<hr />'), 'other'); } global $DB; if (organizer_is_group_mode()) { list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $slots = $DB->get_records('organizer_slots', array('organizerid' => $organizer->id)); $a = new stdClass(); $a->numplaces = $totalslots; $a->totalplaces = count($slots) + $a->numplaces; $groups = groups_get_all_groups($course->id, 0, $cm->groupingid); $a->numgroups = count($groups); $html = get_string('addslots_placesinfo_group', 'organizer', $a); } else { list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $slots = $DB->get_records('organizer_slots', array('organizerid' => $organizer->id)); $placecount = 0; foreach ($slots as $slot) { $placecount += $slot->maxparticipants; } $a = new stdClass(); $a->numplaces = $totalslots * $mform->_submitValues['maxparticipants']; $a->totalplaces = $placecount + $a->numplaces; $a->numstudents = count(get_enrolled_users($context, 'mod/organizer:register')); $html = get_string('addslots_placesinfo', 'organizer', $a); } $mform->insertElementBefore($mform->createElement('html', $html), 'other'); return count($collcount) == 0; }