예제 #1
0
            $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);
예제 #2
0
/**
 * 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;
}
예제 #3
0
}
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();
}