function organizer_make_infobox($params, $organizer, $context, &$popups) { global $PAGE; user_preference_allow_ajax_update('mod_organizer_showpasttimeslots', PARAM_BOOL); user_preference_allow_ajax_update('mod_organizer_showmyslotsonly', PARAM_BOOL); user_preference_allow_ajax_update('mod_organizer_showfreeslotsonly', PARAM_BOOL); $PAGE->requires->js_init_call('M.mod_organizer.init_infobox'); $output = ''; if ($organizer->alwaysshowdescription || time() > $organizer->allowregistrationsfromdate) { $output = organizer_make_description_section($organizer); } switch ($params['mode']) { case ORGANIZER_TAB_APPOINTMENTS_VIEW: break; case ORGANIZER_TAB_STUDENT_VIEW: $output .= organizer_make_myapp_section($params, $organizer, organizer_get_last_user_appointment($organizer), $popups); break; case ORGANIZER_TAB_REGISTRATION_STATUS_VIEW: $output .= organizer_make_reminder_section($params, $context); break; default: print_error("Wrong view mode: {$params['mode']}"); } $output .= organizer_make_slotoptions_section($params); $output .= organizer_make_messages_section($params); return $output; }
function organizer_reregister_appointment($slotid, $groupid = 0) { global $DB, $USER; $semaphore = sem_get($slotid); sem_acquire($semaphore); $slot = new organizer_slot($slotid); if ($slot->is_full()) { return false; } $ok = true; if (organizer_is_group_mode()) { $memberids = $DB->get_fieldset_select('groups_members', 'userid', "groupid = {$groupid}"); foreach ($memberids as $memberid) { $app = organizer_get_last_user_appointment($slot->organizerid, $memberid); $ok ^= organizer_register_single_appointment($slotid, $memberid, $USER->id, $groupid); if (isset($app)) { $ok ^= organizer_unregister_single_appointment($app->slotid, $memberid); } } } else { $app = organizer_get_last_user_appointment($slot->organizerid); $ok ^= organizer_register_single_appointment($slotid, $USER->id); if (isset($app)) { $ok ^= organizer_unregister_single_appointment($app->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); sem_release($semaphore); return $ok; }
$row[] = $organizer->intro; $cm = get_coursemodule_from_instance('organizer', $organizer->id, $course->id, false, MUST_EXIST); $context = context_module::instance($cm->id, MUST_EXIST); if (has_capability('mod/organizer:viewregistrations', $context)) { $a = organizer_get_counters($organizer); if ($organizer->isgrouporganizer) { $reg = get_string('mymoodle_registered_group_short', 'organizer', $a); $att = get_string('mymoodle_attended_group_short', 'organizer', $a); $str = '<p>' . $reg . '</p><p>' . $att . '</p>'; } else { $reg = get_string('mymoodle_registered_short', 'organizer', $a); $att = get_string('mymoodle_attended_short', 'organizer', $a); $str = '<p>' . $reg . '</p><p>' . $att . '</p>'; } $row[] = $str; $row[] = '-'; } else { $row[] = organizer_get_overview_student($organizer, true); $app = organizer_get_last_user_appointment($organizer, null, false); if ($app) { $row[] = organizer_display_grade($organizer, $app->grade); } else { $row[] = '-'; } } $table->data[] = $row; } echo $OUTPUT->heading(get_string('modulenameplural', 'organizer'), 2); echo html_writer::table($table); echo $OUTPUT->footer(); die;
function organizer_organizer_student_action_allowed($action, $slot) { global $DB; if (!$DB->record_exists('organizer_slots', array('id' => $slot))) { return false; } $slotx = new organizer_slot($slot); list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $canregister = has_capability('mod/organizer:register', $context, null, false); $canunregister = has_capability('mod/organizer:unregister', $context, null, false); $canreregister = $canregister && $canunregister; $myapp = organizer_get_last_user_appointment($organizer); if ($myapp) { $regslot = $DB->get_record('organizer_slots', array('id' => $myapp->slotid)); if (isset($regslot)) { $regslotx = new organizer_slot($regslot); } } $myslotexists = isset($regslot); $organizerdisabled = $slotx->organizer_unavailable() || $slotx->organizer_expired(); $slotdisabled = $slotx->is_past_due() || $slotx->is_past_deadline(); $myslotpending = $myslotexists && $regslotx->is_past_deadline() && !$regslotx->is_evaluated(); $ismyslot = $myslotexists && $slotx->id == $regslot->id; $slotfull = $slotx->is_full(); $disabled = $myslotpending || $organizerdisabled || $slotdisabled || !$slotx->organizer_user_has_access() || $slotx->is_evaluated(); if ($myslotexists) { if (!$slotdisabled) { if ($ismyslot) { $disabled |= !$canunregister || isset($regslotx) && $regslotx->is_evaluated() && !$myapp->allownewappointments; } else { $disabled |= $slotfull || !$canreregister || isset($regslotx) && $regslotx->is_evaluated() && !$myapp->allownewappointments; } } $allowedaction = $ismyslot ? ORGANIZER_ACTION_UNREGISTER : ORGANIZER_ACTION_REREGISTER; } else { $disabled |= $slotfull || !$canregister || $ismyslot; $allowedaction = $ismyslot ? ORGANIZER_ACTION_UNREGISTER : ORGANIZER_ACTION_REGISTER; } return !$disabled && $action == $allowedaction; }
function organizer_get_overview_student($organizer, $forindex = false) { global $DB; if (!$forindex) { $str = '<div class="assignment overview">'; $str .= organizer_get_overview_link($organizer); $class = "class=\"info organizerinfo\""; $element = "div"; } else { $str = ''; $class = ""; $element = "p"; } if ($organizer->isgrouporganizer) { $group = organizer_fetch_group($organizer); $app = organizer_get_last_user_appointment($organizer); if ($app && isset($app->attended) && (int) $app->attended === 1) { $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid)); $a = new stdClass(); $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer')); $a->groupname = $group->name; $completedapp = get_string('mymoodle_completed_app_group', 'organizer', $a) . ($forindex ? '' : "<br />(" . get_string('grade') . ": " . organizer_display_grade($organizer, $app->grade) . ")"); if ($app->allownewappointments) { $completedapp .= "<br />" . get_string('can_reregister', 'organizer'); } $str .= "<{$element} {$class}>{$completedapp}</{$element}>"; } else { if ($app && isset($app->attended) && (int) $app->attended === 0) { $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid)); $a = new stdClass(); $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer')); $a->groupname = $group->name; $missedapp = get_string('mymoodle_missed_app_group', 'organizer', $a) . ($forindex ? '' : "<br />(" . get_string('grade') . ": " . organizer_display_grade($organizer, $app->grade) . ")"); if ($app->allownewappointments) { $missedapp .= "<br />" . get_string('can_reregister', 'organizer'); } $str .= "<{$element} {$class}>{$missedapp}</{$element}>"; if (isset($organizer->duedate)) { $a = new stdClass(); $a->date = userdate($organizer->duedate, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($organizer->duedate, get_string('timetemplate', 'organizer')); if ($organizer->duedate > time()) { $orgexpires = get_string('mymoodle_organizer_expires', 'organizer', $a); } else { $orgexpires = get_string('mymoodle_organizer_expired', 'organizer', $a); } $str .= "<{$element} {$class}>{$orgexpires}</{$element}>"; } } else { if ($app && !isset($app->attended)) { $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid)); $a = new stdClass(); $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer')); $a->groupname = $group->name; if (isset($slot->locationlink) && $slot->locationlink != '') { $a->location = html_writer::link($slot->locationlink, $slot->location, array('target' => '_blank')); } else { $a->location = $slot->location; } if ($slot->starttime > time()) { $upcomingapp = get_string('mymoodle_upcoming_app_group', 'organizer', $a); $str .= "<{$element} {$class}>{$upcomingapp}</{$element}>"; } else { $pending = get_string('mymoodle_pending_app_group', 'organizer', $a); $str .= "<{$element} {$class}>{$pending}</{$element}>"; } } else { $noregslot = get_string('mymoodle_no_reg_slot', 'organizer'); $str .= "<{$element} {$class}>{$noregslot}</{$element}>"; if (isset($organizer->duedate)) { $a = new stdClass(); $a->date = userdate($organizer->duedate, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($organizer->duedate, get_string('timetemplate', 'organizer')); if ($organizer->duedate > time()) { $orgexpires = get_string('mymoodle_organizer_expires', 'organizer', $a); } else { $orgexpires = get_string('mymoodle_organizer_expired', 'organizer', $a); } $str .= "<{$element} {$class}>{$orgexpires}</{$element}>"; } } } } } else { $app = organizer_get_last_user_appointment($organizer); if ($app && isset($app->attended) && (int) $app->attended === 1) { $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid)); $a = new stdClass(); $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer')); $completedapp = get_string('mymoodle_completed_app', 'organizer', $a) . ($forindex ? '' : "<br />(" . get_string('grade') . ": " . organizer_display_grade($organizer, $app->grade) . ")"); if ($app->allownewappointments) { $completedapp .= "<br />" . get_string('can_reregister', 'organizer'); } $str .= "<{$element} {$class}>{$completedapp}</{$element}>"; } else { if ($app && isset($app->attended) && (int) $app->attended === 0) { $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid)); $a = new stdClass(); $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer')); $missedapp = get_string('mymoodle_missed_app', 'organizer', $a) . ($forindex ? '' : "<br />(" . get_string('grade') . ": " . organizer_display_grade($organizer, $app->grade) . ")"); if ($app->allownewappointments) { $missedapp .= "<br />" . get_string('can_reregister', 'organizer'); } $str .= "<{$element} {$class}>{$missedapp}</{$element}>"; if (isset($organizer->duedate)) { $a = new stdClass(); $a->date = userdate($organizer->duedate, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($organizer->duedate, get_string('timetemplate', 'organizer')); if ($organizer->duedate > time()) { $orgexpires = get_string('mymoodle_organizer_expires', 'organizer', $a); } else { $orgexpires = get_string('mymoodle_organizer_expired', 'organizer', $a); } $str .= "<{$element} {$class}>{$orgexpires}</{$element}>"; } } else { if ($app && !isset($app->attended)) { $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid)); $a = new stdClass(); $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer')); if (isset($slot->locationlink) && $slot->locationlink != '') { $a->location = html_writer::link($slot->locationlink, $slot->location, array('target' => '_blank')); } else { $a->location = $slot->location; } if ($slot->starttime > time()) { $upcomingapp = get_string('mymoodle_upcoming_app', 'organizer', $a); $str .= "<{$element} {$class}>{$upcomingapp}</{$element}>"; } else { $pending = get_string('mymoodle_pending_app', 'organizer', $a); $str .= "<{$element} {$class}>{$pending}</{$element}>"; } } else { $noregslot = get_string('mymoodle_no_reg_slot', 'organizer'); $str .= "<{$element} {$class}>{$noregslot}</{$element}>"; if (isset($organizer->duedate)) { $a = new stdClass(); $a->date = userdate($organizer->duedate, get_string('fulldatetemplate', 'organizer')); $a->time = userdate($organizer->duedate, get_string('timetemplate', 'organizer')); if ($organizer->duedate > time()) { $orgexpires = get_string('mymoodle_organizer_expires', 'organizer', $a); } else { $orgexpires = get_string('mymoodle_organizer_expired', 'organizer', $a); } $str .= '<' . $element . ' ' . $class . '>' . $orgexpires . '</' . $element . '>'; } } } } } if (!$forindex) { $str .= '</div>'; } return $str; }
function organizer_student_action($params, $slot) { global $DB, $OUTPUT; $slotx = new organizer_slot($slot); list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $canregister = has_capability('mod/organizer:register', $context, null, false); $canunregister = has_capability('mod/organizer:unregister', $context, null, false); $canreregister = $canregister && $canunregister; $myapp = organizer_get_last_user_appointment($organizer); if ($myapp) { $regslot = $DB->get_record('organizer_slots', array('id' => $myapp->slotid)); if (isset($regslot)) { $regslotx = new organizer_slot($regslot); } } $myslotexists = isset($regslot); $organizerdisabled = $slotx->organizer_unavailable() || $slotx->organizer_expired(); $slotdisabled = $slotx->is_past_due() || $slotx->is_past_deadline(); $myslotpending = $myslotexists && $regslotx->is_past_deadline() && !$regslotx->is_evaluated(); $ismyslot = $myslotexists && $slotx->id == $regslot->id; $slotfull = $slotx->is_full(); $disabled = $myslotpending || $organizerdisabled || $slotdisabled || !$slotx->organizer_user_has_access() || $slotx->is_evaluated(); if ($myslotexists) { if (!$slotdisabled) { if ($ismyslot) { $disabled |= !$canunregister || isset($regslotx) && $regslotx->is_evaluated() && !$myapp->allownewappointments; } else { $disabled |= $slotfull || !$canreregister || isset($regslotx) && $regslotx->is_evaluated() && !$myapp->allownewappointments; } } $action = $ismyslot ? 'unregister' : 'reregister'; } else { $disabled |= $slotfull || !$canregister || $ismyslot; $action = $ismyslot ? 'unregister' : 'register'; } if ($ismyslot || organizer_is_my_slot($slotx)) { $comment_url = new moodle_url('/mod/organizer/comment_edit.php', array('id' => $params['id'], 'slot' => $slotx->id)); $comment_btn_disabled = $organizerdisabled || !$slotx->organizer_user_has_access(); $comment_btn = $OUTPUT->single_button($comment_url, get_string("btn_comment", 'organizer'), 'post', array('disabled' => $comment_btn_disabled)); return organizer_get_reg_button($action, $slotx->id, $params, $disabled) . '<br/>' . $comment_btn; } else { return organizer_get_reg_button($action, $slotx->id, $params, $disabled); } }
private function _addevalfields() { global $DB; $mform = $this->_form; $data = $this->_customdata; $now = time(); $i = 0; foreach ($data['slots'] as $slotid) { $mform->addElement('hidden', 'slots[' . $i++ . ']', $slotid); $slot = $DB->get_record('organizer_slots', array('id' => $slotid)); $organizer = $DB->get_record('organizer', array('id' => $slot->organizerid)); $appgroup = array(); $checkboxname = "slotenable[{$slotid}]"; $appgroup[] = $mform->createElement('static', '', '', '<p>'); $box = $appgroup[] = $mform->createElement('checkbox', $checkboxname); $mform->setDefault($checkboxname, true); $date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer')); $time = userdate($slot->starttime, get_string('timetemplate', 'organizer')) . ' - ' . userdate($slot->starttime + $slot->duration, get_string('timetemplate', 'organizer')); $appgroup[] = $mform->createElement('static', '', '', " <strong>{$date}, {$time}</strong>"); if ($slot->starttime > $now) { $appgroup[] = $mform->createElement('static', '', '', ' <em>(' . get_string('eval_not_occured', 'organizer') . ')</em>'); } $appgroup[] = $mform->createElement('static', '', '', '</p>'); $apps = $DB->get_records('organizer_slot_appointments', array('slotid' => $slotid)); if ($organizer->isgrouporganizer && count($apps) != 0) { $app = reset($apps); $groupname = $DB->get_field('groups', 'name', array('id' => $app->groupid)); $appgroup[] = $mform->createElement('static', '', '', "<br/><strong>{$groupname}</strong> " . get_string('eval_allow_new_appointments', 'organizer')); $appgroup[] = $mform->createElement('advcheckbox', "allownewappointments", '', '', array('group' => 0, 'class' => "allow{$slotid}"), array(0, 1)); $mform->setType("allownewappointments", PARAM_INT); $mform->setDefault("allownewappointments", $app->allownewappointments); } $mform->insertElementBefore($mform->createElement('group', '', '', $appgroup, '', false), 'buttonar'); $apps = $DB->get_records('organizer_slot_appointments', array('slotid' => $slotid)); if (count($apps) == 0) { $appgroup = array(); $appgroup[] = $mform->createElement('static', '', '', get_string('eval_no_participants', 'organizer')); $mform->insertElementBefore($mform->createElement('group', '', '', $appgroup, '', false), 'buttonar'); $mform->setDefault($checkboxname, false); $box->freeze(); } foreach ($apps as $app) { $user = $DB->get_record('user', array('id' => $app->userid)); $name = "apps[{$app->id}]"; $lastapp = organizer_get_last_user_appointment($slot->organizerid, $app->userid); if ($lastapp->id != $app->id) { $link = new moodle_url('/mod/organizer/view_action.php', array('id' => $data['id'], 'mode' => $data['mode'], 'action' => 'eval', 'slots[]' => $lastapp->slotid, 'sesskey' => sesskey())); $title = $this->_organizer_get_name_link($user->id) . '<br/><em>' . get_string('cannot_eval', 'organizer') . '</em> ' . html_writer::link($link, get_string('eval_link', 'organizer')) . '<br/>'; $appgroup = array(); $appgroup[] = $mform->createElement('static', '', '', $title); } else { $title = $this->_organizer_get_name_link($user->id) . '<br/>'; $appgroup = array(); $appgroup[] = $mform->createElement('static', '', '', $title); $appgroup[] = $mform->createElement('static', '', '', get_string('eval_attended', 'organizer')); $appgroup[] = $mform->createElement('advcheckbox', "attended", '', '', null, array(0, 1)); $maxgrade = $organizer->grade; if ($maxgrade != 0) { $grademenu = organizer_make_grades_menu_organizer($maxgrade); $appgroup[] = $mform->createElement('static', '', '', get_string('eval_grade', 'organizer')); $appgroup[] = $mform->createElement('select', "grade", '', $grademenu); } $appgroup[] = $mform->createElement('static', '', '', '<span class="nobreak">'); $appgroup[] = $mform->createElement('static', '', '', get_string('eval_feedback', 'organizer')); $appgroup[] = $mform->createElement('text', "feedback", '', array('size' => 24)); $appgroup[] = $mform->createElement('static', '', '', "</span>"); if ($organizer->isgrouporganizer) { $appgroup[] = $mform->createElement('hidden', "allownewappointments", 0, array('class' => "allow{$slotid}")); } else { $appgroup[] = $mform->createElement('static', '', '', '<span class="nobreak">'); $appgroup[] = $mform->createElement('static', '', '', get_string('eval_allow_new_appointments', 'organizer')); $appgroup[] = $mform->createElement('advcheckbox', "allownewappointments", '', '', null, array(0, 1)); $appgroup[] = $mform->createElement('static', '', '', "</span>"); } $mform->disabledIf("{$name}[attended]", $checkboxname); $mform->disabledIf("{$name}[grade]", $checkboxname); $mform->disabledIf("{$name}[feedback]", $checkboxname); $mform->disabledIf("{$name}[allownewappointments]", $checkboxname); $mform->setType("{$name}[attended]", PARAM_INT); $mform->setDefault("{$name}[attended]", $app->attended); if ($maxgrade != 0) { $mform->setType("{$name}[grade]", PARAM_INT); $mform->setDefault("{$name}[grade]", $app->grade); } $mform->setType("{$name}[feedback]", PARAM_TEXT); $mform->setDefault("{$name}[feedback]", $app->feedback); $mform->setType("{$name}[allownewappointments]", PARAM_INT); $mform->setDefault("{$name}[allownewappointments]", $app->allownewappointments); } $mform->insertElementBefore($mform->createElement('group', $name, '', $appgroup, ' ', true), 'buttonar'); } $mform->insertElementBefore($mform->createElement('html', '<hr />'), 'buttonar'); } }