$contents = get_string('bookingmeanwhilefull', 'booking') . " " . $booking->option[$answer]->text; $contents .= $OUTPUT->single_button($url, 'get'); echo $OUTPUT->box($contents, 'box generalbox', 'notice'); echo $OUTPUT->footer(); die; } } else { $contents = get_string('nobookingselected', 'booking'); $contents .= $OUTPUT->single_button($url, 'get'); echo $OUTPUT->box($contents, 'box generalbox', 'notice'); echo $OUTPUT->footer(); die; } } // we have to refresh $booking as it is modified by submitted data; $booking = new booking_options($cm->id, TRUE, $urlParams, $page, $perPage); $booking->apply_tags(); $booking->get_url_params(); $event = \mod_booking\event\course_module_viewed::create(array('objectid' => $PAGE->cm->instance, 'context' => $PAGE->context)); $event->add_record_snapshot('course', $PAGE->course); $event->trigger(); /// Display the booking and possibly results $bookinglist = $booking->allbookedusers; echo '<div class="clearer"></div>'; echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide'); echo $html = html_writer::tag('div', '<a id="gotop" href="#goenrol">' . get_string('goenrol', 'booking') . '</a>', array('style' => 'width:100%; font-weight: bold; text-align: right;')); echo html_writer::tag('div', format_module_intro('booking', $booking->booking, $cm->id), array('class' => 'intro')); if (!empty($booking->booking->duration)) { echo html_writer::start_tag('div'); echo html_writer::tag('label', get_string('eventduration', 'booking') . ': ', array('class' => 'bold')); echo html_writer::tag('span', $booking->booking->duration);
/** * Gets the principal information of booking status and booking options * to be used by other functions * @param $bookingid id of the module * @param $sort which field use to sort options * @param $urlParams parameters for searching * @param $view if we need it for editing or viewing * @return object with $booking->option as an array for the booking option valus for each booking option */ function booking_get_booking($cm, $sort = '', $urlParams = array('searchText' => '', 'searchLocation' => '', 'searchInstitution' => ''), $view = TRUE) { global $CFG, $DB; require_once "{$CFG->dirroot}/mod/booking/locallib.php"; if ($sort == '') { $sort = 'id'; } $bookingid = $cm->instance; // Gets a full booking record $context = context_module::instance($cm->id); /// Initialise the returned array, which is a matrix: $allresponses[responseid][userid] = responseobject $allresponses = array(); /// bookinglist $bookinglist[optionid][sortnumber] = userobject; $bookinglist = array(); /// First get all the users who have access here $mainuserfields = user_picture::fields(); $allresponses = get_users_by_capability($context, 'mod/booking:choose', $mainuserfields . ', u.id', 'u.lastname ASC, u.firstname ASC', '', '', '', '', true, true); $bookingObject = new booking_options($cm->id, TRUE, $urlParams); if ($view) { $bookingObject->apply_tags(); } $booking = $bookingObject->booking; $options = $bookingObject->options; if ($options) { $answers = $DB->get_records('booking_answers', array('bookingid' => $bookingid), 'id'); foreach ($options as $option) { $booking->option[$option->id] = $option; if (!$option->coursestarttime == 0) { $booking->option[$option->id]->coursestarttimetext = userdate($option->coursestarttime, get_string('strftimedatetime')); } else { $booking->option[$option->id]->coursestarttimetext = get_string("starttimenotset", 'booking'); } if (!$option->courseendtime == 0) { $booking->option[$option->id]->courseendtimetext = userdate($option->courseendtime, get_string('strftimedatetime'), '', false); } else { $booking->option[$option->id]->courseendtimetext = get_string("endtimenotset", 'booking'); } // we have to change $taken is different from booking_show_results $answerstocount = array(); if ($answers) { foreach ($answers as $answer) { if ($answer->optionid == $option->id && isset($allresponses[$answer->userid])) { $answerstocount[] = $answer; } } } $taken = count($answerstocount); $totalavailable = $option->maxanswers + $option->maxoverbooking; if (!$option->limitanswers) { $booking->option[$option->id]->status = "available"; $booking->option[$option->id]->taken = $taken; $booking->option[$option->id]->availspaces = "unlimited"; } else { if ($taken < $option->maxanswers) { $booking->option[$option->id]->status = "available"; $booking->option[$option->id]->availspaces = $option->maxanswers - $taken; $booking->option[$option->id]->taken = $taken; $booking->option[$option->id]->availwaitspaces = $option->maxoverbooking; } elseif ($taken >= $option->maxanswers && $taken < $totalavailable) { $booking->option[$option->id]->status = "waitspaceavailable"; $booking->option[$option->id]->availspaces = 0; $booking->option[$option->id]->taken = $option->maxanswers; $booking->option[$option->id]->availwaitspaces = $option->maxoverbooking - ($taken - $option->maxanswers); } elseif ($taken >= $totalavailable) { $booking->option[$option->id]->status = "full"; $booking->option[$option->id]->availspaces = 0; $booking->option[$option->id]->taken = $option->maxanswers; $booking->option[$option->id]->availwaitspaces = 0; } } if (time() > $booking->option[$option->id]->bookingclosingtime and $booking->option[$option->id]->bookingclosingtime != 0) { $booking->option[$option->id]->status = "closed"; } if ($option->bookingclosingtime) { $booking->option[$option->id]->bookingclosingtime = userdate($option->bookingclosingtime, get_string('strftimedate'), '', false); } else { $booking->option[$option->id]->bookingclosingtime = false; } } } return $booking; }
} if ($action !== '') { $urlParams['action'] = $action; } $url = new moodle_url('/mod/booking/report.php', $urlParams); $PAGE->set_url($url); if (!($cm = get_coursemodule_from_id('booking', $id))) { error("Course Module ID was incorrect"); } if (!($course = $DB->get_record("course", array("id" => $cm->course)))) { print_error('coursemisconf'); } require_course_login($course, false, $cm); $context = context_module::instance($cm->id); if ($optionid == 0) { $bookingData = new booking_options($cm->id, FALSE, $urlParams); $bookingData->apply_tags(); $bookinglist = $bookingData->allbookedusers; if (has_capability('mod/booking:readresponses', $context)) { require_capability('mod/booking:readresponses', $context); } } else { $bookingData = new booking_option($cm->id, $optionid, $urlParams, $page, $perPage); $bookingData->apply_tags(); $bookingData->get_url_params(); if (!(booking_check_if_teacher($bookingData->option, $USER) || has_capability('mod/booking:readresponses', $context))) { require_capability('mod/booking:readresponses', $context); } $event = \mod_booking\event\report_viewed::create(array('objectid' => $optionid, 'context' => context_module::instance($cm->id))); $event->trigger(); }