/** * Displays a month in detail * * @param calendar_information $calendar * @param moodle_url $returnurl the url to return to * @return string */ public function show_month_detailed(calendar_information $calendar, moodle_url $returnurl = null) { global $CFG; if (empty($returnurl)) { $returnurl = $this->page->url; } // Get the calendar type we are using. $calendartype = \core_calendar\type_factory::get_calendar_instance(); // Store the display settings. $display = new stdClass(); $display->thismonth = false; // Get the specified date in the calendar type being used. $date = $calendartype->timestamp_to_date_array($calendar->time); $thisdate = $calendartype->timestamp_to_date_array(time()); if ($date['mon'] == $thisdate['mon'] && $date['year'] == $thisdate['year']) { $display->thismonth = true; $date = $thisdate; $calendar->time = time(); } // Get Gregorian date for the start of the month. $gregoriandate = $calendartype->convert_to_gregorian($date['year'], $date['mon'], 1); // Store the gregorian date values to be used later. list($gy, $gm, $gd, $gh, $gmin) = array($gregoriandate['year'], $gregoriandate['month'], $gregoriandate['day'], $gregoriandate['hour'], $gregoriandate['minute']); // Get the starting week day for this month. $startwday = dayofweek(1, $date['mon'], $date['year']); // Get the days in a week. $daynames = calendar_get_days(); // Store the number of days in a week. $numberofdaysinweek = $calendartype->get_num_weekdays(); $display->minwday = calendar_get_starting_weekday(); $display->maxwday = $display->minwday + ($numberofdaysinweek - 1); $display->maxdays = calendar_days_in_month($date['mon'], $date['year']); // These are used for DB queries, so we want unixtime, so we need to use Gregorian dates. $display->tstart = make_timestamp($gy, $gm, $gd, $gh, $gmin, 0); $display->tend = $display->tstart + $display->maxdays * DAYSECS - 1; // Align the starting weekday to fall in our display range // This is simple, not foolproof. if ($startwday < $display->minwday) { $startwday += $numberofdaysinweek; } // Get events from database $events = calendar_get_events($display->tstart, $display->tend, $calendar->users, $calendar->groups, $calendar->courses); if (!empty($events)) { foreach ($events as $eventid => $event) { $event = new calendar_event($event); if (!empty($event->modulename)) { $cm = get_coursemodule_from_instance($event->modulename, $event->instance); if (!\core_availability\info_module::is_user_visible($cm, 0, false)) { unset($events[$eventid]); } } } } // Extract information: events vs. time calendar_events_by_day($events, $date['mon'], $date['year'], $eventsbyday, $durationbyday, $typesbyday, $calendar->courses); $output = html_writer::start_tag('div', array('class' => 'header')); $output .= $this->course_filter_selector($returnurl, get_string('detailedmonthviewfor', 'calendar')); if (calendar_user_can_add_event($calendar->course)) { $output .= $this->add_event_button($calendar->course->id, 0, 0, 0, $calendar->time); } $output .= html_writer::end_tag('div', array('class' => 'header')); // Controls $output .= html_writer::tag('div', calendar_top_controls('month', array('id' => $calendar->courseid, 'time' => $calendar->time)), array('class' => 'controls')); $table = new html_table(); $table->attributes = array('class' => 'calendarmonth calendartable'); $table->summary = get_string('calendarheading', 'calendar', userdate($calendar->time, get_string('strftimemonthyear'))); $table->data = array(); // Get the day names as the header. $header = array(); for ($i = $display->minwday; $i <= $display->maxwday; ++$i) { $header[] = $daynames[$i % $numberofdaysinweek]['shortname']; } $table->head = $header; // For the table display. $week is the row; $dayweek is the column. $week = 1; $dayweek = $startwday; $row = new html_table_row(array()); // Paddding (the first week may have blank days in the beginning) for ($i = $display->minwday; $i < $startwday; ++$i) { $cell = new html_table_cell(' '); $cell->attributes = array('class' => 'nottoday dayblank'); $row->cells[] = $cell; } // Now display all the calendar $weekend = CALENDAR_DEFAULT_WEEKEND; if (isset($CFG->calendar_weekend)) { $weekend = intval($CFG->calendar_weekend); } $daytime = $display->tstart - DAYSECS; for ($day = 1; $day <= $display->maxdays; ++$day, ++$dayweek) { $daytime = $daytime + DAYSECS; if ($dayweek > $display->maxwday) { // We need to change week (table row) $table->data[] = $row; $row = new html_table_row(array()); $dayweek = $display->minwday; ++$week; } // Reset vars $cell = new html_table_cell(); $dayhref = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', array('view' => 'day', 'course' => $calendar->courseid)), 0, 0, 0, $daytime); $cellclasses = array(); if ($weekend & 1 << $dayweek % $numberofdaysinweek) { // Weekend. This is true no matter what the exact range is. $cellclasses[] = 'weekend'; } // Special visual fx if an event is defined if (isset($eventsbyday[$day])) { if (count($eventsbyday[$day]) == 1) { $title = get_string('oneevent', 'calendar'); } else { $title = get_string('manyevents', 'calendar', count($eventsbyday[$day])); } $cell->text = html_writer::tag('div', html_writer::link($dayhref, $day, array('title' => $title)), array('class' => 'day')); } else { $cell->text = html_writer::tag('div', $day, array('class' => 'day')); } // Special visual fx if an event spans many days $durationclass = false; if (isset($typesbyday[$day]['durationglobal'])) { $durationclass = 'duration_global'; } else { if (isset($typesbyday[$day]['durationcourse'])) { $durationclass = 'duration_course'; } else { if (isset($typesbyday[$day]['durationgroup'])) { $durationclass = 'duration_group'; } else { if (isset($typesbyday[$day]['durationuser'])) { $durationclass = 'duration_user'; } } } } if ($durationclass) { $cellclasses[] = 'duration'; $cellclasses[] = $durationclass; } // Special visual fx for today if ($display->thismonth && $day == $date['mday']) { $cellclasses[] = 'day today'; } else { $cellclasses[] = 'day nottoday'; } $cell->attributes = array('class' => join(' ', $cellclasses)); if (isset($eventsbyday[$day])) { $cell->text .= html_writer::start_tag('ul', array('class' => 'events-new')); foreach ($eventsbyday[$day] as $eventindex) { // If event has a class set then add it to the event <li> tag $attributes = array(); if (!empty($events[$eventindex]->class)) { $attributes['class'] = $events[$eventindex]->class; } $dayhref->set_anchor('event_' . $events[$eventindex]->id); $link = html_writer::link($dayhref, format_string($events[$eventindex]->name, true)); $cell->text .= html_writer::tag('li', $link, $attributes); } $cell->text .= html_writer::end_tag('ul'); } if (isset($durationbyday[$day])) { $cell->text .= html_writer::start_tag('ul', array('class' => 'events-underway')); foreach ($durationbyday[$day] as $eventindex) { $cell->text .= html_writer::tag('li', '[' . format_string($events[$eventindex]->name, true) . ']', array('class' => 'events-underway')); } $cell->text .= html_writer::end_tag('ul'); } $row->cells[] = $cell; } // Paddding (the last week may have blank days at the end) for ($i = $dayweek; $i <= $display->maxwday; ++$i) { $cell = new html_table_cell(' '); $cell->attributes = array('class' => 'nottoday dayblank'); $row->cells[] = $cell; } $table->data[] = $row; $output .= html_writer::table($table); return $output; }
function calendar_get_sideblock_upcoming($events, $linkhref = NULL) { $content = ''; $lines = count($events); if (!$lines) { return $content; } for ($i = 0; $i < $lines; ++$i) { if (!isset($events[$i]->time)) { // Just for robustness continue; } $events[$i] = calendar_add_event_metadata($events[$i]); $content .= '<div class="event"><span class="icon c0">' . $events[$i]->icon . '</span> '; if (!empty($events[$i]->referer)) { // That's an activity event, so let's provide the hyperlink $content .= $events[$i]->referer; } else { if (!empty($linkhref)) { $ed = usergetdate($events[$i]->timestart); $href = calendar_get_link_href(CALENDAR_URL . $linkhref, $ed['mday'], $ed['mon'], $ed['year']); $content .= '<a href="' . $href . '#event_' . $events[$i]->id . '">' . $events[$i]->name . '</a>'; } else { $content .= $events[$i]->name; } } $events[$i]->time = str_replace('»', '<br />»', $events[$i]->time); $content .= '<div class="date">' . $events[$i]->time . '</div></div>'; if ($i < $lines - 1) { $content .= '<hr />'; } } return $content; }
$cal_m = optional_param('cal_m'); $cal_d = optional_param('cal_d'); if (isguest()) { // Guests cannot do anything with events redirect(CALENDAR_URL . 'view.php?view=upcoming&course=' . $urlcourse); } $focus = ''; if (!($site = get_site())) { redirect($CFG->wwwroot . '/' . $CFG->admin . '/index.php'); } $strcalendar = get_string('calendar', 'calendar'); // Initialize the session variables calendar_session_vars(); $now = usergetdate(time()); $navlinks = array(); $calendar_navlink = array('name' => $strcalendar, 'link' => calendar_get_link_href(CALENDAR_URL . 'view.php?view=upcoming&course=' . $urlcourse . '&', $now['mday'], $now['mon'], $now['year']), 'type' => 'misc'); $day = intval($now['mday']); $mon = intval($now['mon']); $yr = intval($now['year']); if ($usehtmleditor = can_use_richtext_editor()) { $defaultformat = FORMAT_HTML; } else { $defaultformat = FORMAT_MOODLE; } // If a course has been supplied in the URL, change the filters to show that one if ($urlcourse > 0 && record_exists('course', 'id', $urlcourse)) { require_login($urlcourse, false); if ($urlcourse == SITEID) { // If coming from the site page, show all courses $SESSION->cal_courses_shown = calendar_get_default_courses(true); calendar_set_referring_course(0);
/** * Get event format time * * @param calendar_event $event event object * @param int $now current time in gmt * @param array $linkparams list of params for event link * @param bool $usecommonwords the words as formatted date/time. * @param int $showtime determine the show time GMT timestamp * @return string $eventtime link/string for event time */ function calendar_format_event_time($event, $now, $linkparams = null, $usecommonwords = true, $showtime = 0) { $starttime = $event->timestart; $endtime = $event->timestart + $event->timeduration; if (empty($linkparams) || !is_array($linkparams)) { $linkparams = array(); } $linkparams['view'] = 'day'; // OK, now to get a meaningful display... // Check if there is a duration for this event. if ($event->timeduration) { // Get the midnight of the day the event will start. $usermidnightstart = usergetmidnight($starttime); // Get the midnight of the day the event will end. $usermidnightend = usergetmidnight($endtime); // Check if we will still be on the same day. if ($usermidnightstart == $usermidnightend) { // Check if we are running all day. if ($event->timeduration == DAYSECS) { $time = get_string('allday', 'calendar'); } else { // Specify the time we will be running this from. $datestart = calendar_time_representation($starttime); $dateend = calendar_time_representation($endtime); $time = $datestart . ' <strong>»</strong> ' . $dateend; } // Set printable representation. if (!$showtime) { $day = calendar_day_representation($event->timestart, $now, $usecommonwords); $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), 0, 0, 0, $endtime); $eventtime = html_writer::link($url, $day) . ', ' . $time; } else { $eventtime = $time; } } else { // It must spans two or more days. $daystart = calendar_day_representation($event->timestart, $now, $usecommonwords) . ', '; if ($showtime == $usermidnightstart) { $daystart = ''; } $timestart = calendar_time_representation($event->timestart); $dayend = calendar_day_representation($event->timestart + $event->timeduration, $now, $usecommonwords) . ', '; if ($showtime == $usermidnightend) { $dayend = ''; } $timeend = calendar_time_representation($event->timestart + $event->timeduration); // Set printable representation. if ($now >= $usermidnightstart && $now < $usermidnightstart + DAYSECS) { $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), 0, 0, 0, $endtime); $eventtime = $timestart . ' <strong>»</strong> ' . html_writer::link($url, $dayend) . $timeend; } else { $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), 0, 0, 0, $endtime); $eventtime = html_writer::link($url, $daystart) . $timestart . ' <strong>»</strong> '; $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), 0, 0, 0, $starttime); $eventtime .= html_writer::link($url, $dayend) . $timeend; } } } else { // There is no time duration. $time = calendar_time_representation($event->timestart); // Set printable representation. if (!$showtime) { $day = calendar_day_representation($event->timestart, $now, $usecommonwords); $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), 0, 0, 0, $starttime); $eventtime = html_writer::link($url, $day) . ', ' . trim($time); } else { $eventtime = $time; } } // Check if It has expired. if ($event->timestart + $event->timeduration < $now) { $eventtime = '<span class="dimmed_text">' . str_replace(' href=', ' class="dimmed" href=', $eventtime) . '</span>'; } return $eventtime; }
/** * Get event format time * * @param calendar_event $event event object * @param int $now current time in gmt * @param array $linkparams list of params for event link * @param bool $usecommonwords the words as formatted date/time. * @param int $showtime determine the show time GMT timestamp * @return string $eventtime link/string for event time */ function calendar_format_event_time($event, $now, $linkparams = null, $usecommonwords = true, $showtime = 0) { $startdate = usergetdate($event->timestart); $enddate = usergetdate($event->timestart + $event->timeduration); $usermidnightstart = usergetmidnight($event->timestart); if ($event->timeduration) { // To avoid doing the math if one IF is enough :) $usermidnightend = usergetmidnight($event->timestart + $event->timeduration); } else { $usermidnightend = $usermidnightstart; } if (empty($linkparams) || !is_array($linkparams)) { $linkparams = array(); } $linkparams['view'] = 'day'; // OK, now to get a meaningful display... // First of all we have to construct a human-readable date/time representation if ($event->timeduration) { // It has a duration if ($usermidnightstart == $usermidnightend || $event->timestart == $usermidnightstart && ($event->timeduration == 86400 || $event->timeduration == 86399) || $event->timestart + $event->timeduration <= $usermidnightstart + 86400) { // But it's all on the same day $timestart = calendar_time_representation($event->timestart); $timeend = calendar_time_representation($event->timestart + $event->timeduration); $time = $timestart . ' <strong>»</strong> ' . $timeend; if ($event->timestart == $usermidnightstart && ($event->timeduration == 86400 || $event->timeduration == 86399)) { $time = get_string('allday', 'calendar'); } // Set printable representation if (!$showtime) { $day = calendar_day_representation($event->timestart, $now, $usecommonwords); $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), $enddate['mday'], $enddate['mon'], $enddate['year']); $eventtime = html_writer::link($url, $day) . ', ' . $time; } else { $eventtime = $time; } } else { // It spans two or more days $daystart = calendar_day_representation($event->timestart, $now, $usecommonwords) . ', '; if ($showtime == $usermidnightstart) { $daystart = ''; } $timestart = calendar_time_representation($event->timestart); $dayend = calendar_day_representation($event->timestart + $event->timeduration, $now, $usecommonwords) . ', '; if ($showtime == $usermidnightend) { $dayend = ''; } $timeend = calendar_time_representation($event->timestart + $event->timeduration); // Set printable representation if ($now >= $usermidnightstart && $now < $usermidnightstart + 86400) { $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), $enddate['mday'], $enddate['mon'], $enddate['year']); $eventtime = $timestart . ' <strong>»</strong> ' . html_writer::link($url, $dayend) . $timeend; } else { $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), $enddate['mday'], $enddate['mon'], $enddate['year']); $eventtime = html_writer::link($url, $daystart) . $timestart . ' <strong>»</strong> '; $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), $startdate['mday'], $startdate['mon'], $startdate['year']); $eventtime .= html_writer::link($url, $dayend) . $timeend; } } } else { $time = calendar_time_representation($event->timestart); // Set printable representation if (!$showtime) { $day = calendar_day_representation($event->timestart, $now, $usecommonwords); $url = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', $linkparams), $startdate['mday'], $startdate['mon'], $startdate['year']); $eventtime = html_writer::link($url, $day) . ', ' . trim($time); } else { $eventtime = $time; } } if ($event->timestart + $event->timeduration < $now) { // It has expired $eventtime = '<span class="dimmed_text">' . str_replace(' href=', ' class="dimmed" href=', $eventtime) . '</span>'; } return $eventtime; }
function calendar_show_month_detailed($m, $y, $courses, $groups, $users, $courseid) { global $CFG, $SESSION, $USER, $CALENDARDAYS; global $day, $mon, $yr; $getvars = 'from=month&cal_d=' . $day . '&cal_m=' . $mon . '&cal_y=' . $yr; // For filtering $display =& new stdClass(); $display->minwday = get_user_preferences('calendar_startwday', CALENDAR_STARTING_WEEKDAY); $display->maxwday = $display->minwday + 6; if (!empty($m) && !empty($y)) { $thisdate = usergetdate(time()); // Time and day at the user's location if ($m == $thisdate['mon'] && $y == $thisdate['year']) { // Navigated to this month $date = $thisdate; $display->thismonth = true; } else { // Navigated to other month, let's do a nice trick and save us a lot of work... if (!checkdate($m, 1, $y)) { $date = array('mday' => 1, 'mon' => $thisdate['mon'], 'year' => $thisdate['year']); $display->thismonth = true; } else { $date = array('mday' => 1, 'mon' => $m, 'year' => $y); $display->thismonth = false; } } } else { $date = usergetdate(time()); $display->thismonth = true; } // Fill in the variables we 're going to use, nice and tidy list($d, $m, $y) = array($date['mday'], $date['mon'], $date['year']); // This is what we want to display $display->maxdays = calendar_days_in_month($m, $y); $startwday = 0; if (get_user_timezone_offset() < 99) { // We 'll keep these values as GMT here, and offset them when the time comes to query the db $display->tstart = gmmktime(0, 0, 0, $m, 1, $y); // This is GMT $display->tend = gmmktime(23, 59, 59, $m, $display->maxdays, $y); // GMT $startwday = gmdate('w', $display->tstart); // $display->tstart is already GMT, so don't use date(): messes with server's TZ } else { // no timezone info specified $display->tstart = mktime(0, 0, 0, $m, 1, $y); $display->tend = mktime(23, 59, 59, $m, $display->maxdays, $y); $startwday = date('w', $display->tstart); // $display->tstart not necessarily GMT, so use date() } // Align the starting weekday to fall in our display range if ($startwday < $display->minwday) { $startwday += 7; } // Get events from database $events = calendar_get_events(usertime($display->tstart), usertime($display->tend), $users, $groups, $courses); if (!empty($events)) { foreach ($events as $eventid => $event) { if (!empty($event->modulename)) { $cm = get_coursemodule_from_instance($event->modulename, $event->instance); if (!groups_course_module_visible($cm)) { unset($events[$eventid]); } } } } // Extract information: events vs. time calendar_events_by_day($events, $m, $y, $eventsbyday, $durationbyday, $typesbyday, $courses); $text = ''; if (!isguest() && !empty($USER->id) && calendar_user_can_add_event()) { $text .= '<div class="buttons"><form action="' . CALENDAR_URL . 'event.php" method="get">'; $text .= '<div>'; $text .= '<input type="hidden" name="action" value="new" />'; $text .= '<input type="hidden" name="course" value="' . $courseid . '" />'; $text .= '<input type="hidden" name="cal_m" value="' . $m . '" />'; $text .= '<input type="hidden" name="cal_y" value="' . $y . '" />'; $text .= '<input type="submit" value="' . get_string('newevent', 'calendar') . '" />'; $text .= '</div></form></div>'; } $text .= '<label for="cal_course_flt_jump">' . get_string('detailedmonthview', 'calendar') . ':</label>' . calendar_course_filter_selector($getvars); echo '<div class="header">' . $text . '</div>'; echo '<div class="controls">'; echo calendar_top_controls('month', array('id' => $courseid, 'm' => $m, 'y' => $y)); echo '</div>'; // Start calendar display echo '<table class="calendarmonth"><tr class="weekdays">'; // Begin table. First row: day names // Print out the names of the weekdays for ($i = $display->minwday; $i <= $display->maxwday; ++$i) { // This uses the % operator to get the correct weekday no matter what shift we have // applied to the $display->minwday : $display->maxwday range from the default 0 : 6 echo '<th scope="col">' . get_string($CALENDARDAYS[$i % 7], 'calendar') . '</th>'; } echo '</tr><tr>'; // End of day names; prepare for day numbers // For the table display. $week is the row; $dayweek is the column. $week = 1; $dayweek = $startwday; // Paddding (the first week may have blank days in the beginning) for ($i = $display->minwday; $i < $startwday; ++$i) { echo '<td class="nottoday"> </td>' . "\n"; } // Now display all the calendar for ($day = 1; $day <= $display->maxdays; ++$day, ++$dayweek) { if ($dayweek > $display->maxwday) { // We need to change week (table row) echo "</tr>\n<tr>"; $dayweek = $display->minwday; ++$week; } // Reset vars $cell = ''; $dayhref = calendar_get_link_href(CALENDAR_URL . 'view.php?view=day&course=' . $courseid . '&', $day, $m, $y); if (CALENDAR_WEEKEND & 1 << $dayweek % 7) { // Weekend. This is true no matter what the exact range is. $class = 'weekend'; } else { // Normal working day. $class = ''; } // Special visual fx if an event is defined if (isset($eventsbyday[$day])) { if (count($eventsbyday[$day]) == 1) { $title = get_string('oneevent', 'calendar'); } else { $title = get_string('manyevents', 'calendar', count($eventsbyday[$day])); } $cell = '<div class="day"><a href="' . $dayhref . '" title="' . $title . '">' . $day . '</a></div>'; } else { $cell = '<div class="day">' . $day . '</div>'; } // Special visual fx if an event spans many days if (isset($typesbyday[$day]['durationglobal'])) { $class .= ' duration_global'; } else { if (isset($typesbyday[$day]['durationcourse'])) { $class .= ' duration_course'; } else { if (isset($typesbyday[$day]['durationgroup'])) { $class .= ' duration_group'; } else { if (isset($typesbyday[$day]['durationuser'])) { $class .= ' duration_user'; } } } } // Special visual fx for today if ($display->thismonth && $day == $d) { $class .= ' today'; } else { $class .= ' nottoday'; } // Just display it if (!empty($class)) { $class = ' class="' . trim($class) . '"'; } echo '<td' . $class . '>' . $cell; if (isset($eventsbyday[$day])) { echo '<ul class="events-new">'; foreach ($eventsbyday[$day] as $eventindex) { // If event has a class set then add it to the event <li> tag $eventclass = ''; if (!empty($events[$eventindex]->class)) { $eventclass = ' class="' . $events[$eventindex]->class . '"'; } echo '<li' . $eventclass . '><a href="' . $dayhref . '#event_' . $events[$eventindex]->id . '">' . format_string($events[$eventindex]->name, true) . '</a></li>'; } echo '</ul>'; } if (isset($durationbyday[$day])) { echo '<ul class="events-underway">'; foreach ($durationbyday[$day] as $eventindex) { echo '<li>[' . format_string($events[$eventindex]->name, true) . ']</li>'; } echo '</ul>'; } echo "</td>\n"; } // Paddding (the last week may have blank days at the end) for ($i = $dayweek; $i <= $display->maxwday; ++$i) { echo '<td class="nottoday"> </td>'; } echo "</tr>\n"; // Last row ends echo "</table>\n"; // Tabular display of days ends // OK, now for the filtering display echo '<div class="filters"><table><tr>'; // Global events if ($SESSION->cal_show_global) { echo '<td class="event_global" style="width: 8px;"></td><td><strong>' . get_string('globalevents', 'calendar') . ':</strong> '; echo get_string('shown', 'calendar') . ' (<a href="' . CALENDAR_URL . 'set.php?var=showglobal&' . $getvars . '">' . get_string('clickhide', 'calendar') . '</a>)</td>' . "\n"; } else { echo '<td style="width: 8px;"></td><td><strong>' . get_string('globalevents', 'calendar') . ':</strong> '; echo get_string('hidden', 'calendar') . ' (<a href="' . CALENDAR_URL . 'set.php?var=showglobal&' . $getvars . '">' . get_string('clickshow', 'calendar') . '</a>)</td>' . "\n"; } // Course events if (!empty($SESSION->cal_show_course)) { echo '<td class="event_course" style="width: 8px;"></td><td><strong>' . get_string('courseevents', 'calendar') . ':</strong> '; echo get_string('shown', 'calendar') . ' (<a href="' . CALENDAR_URL . 'set.php?var=showcourses&' . $getvars . '">' . get_string('clickhide', 'calendar') . '</a>)</td>' . "\n"; } else { echo '<td style="width: 8px;"></td><td><strong>' . get_string('courseevents', 'calendar') . ':</strong> '; echo get_string('hidden', 'calendar') . ' (<a href="' . CALENDAR_URL . 'set.php?var=showcourses&' . $getvars . '">' . get_string('clickshow', 'calendar') . '</a>)</td>' . "\n"; } echo "</tr>\n"; if (!empty($USER->id) && !isguest()) { echo '<tr>'; // Group events if ($SESSION->cal_show_groups) { echo '<td class="event_group" style="width: 8px;"></td><td><strong>' . get_string('groupevents', 'calendar') . ':</strong> '; echo get_string('shown', 'calendar') . ' (<a href="' . CALENDAR_URL . 'set.php?var=showgroups&' . $getvars . '">' . get_string('clickhide', 'calendar') . '</a>)</td>' . "\n"; } else { echo '<td style="width: 8px;"></td><td><strong>' . get_string('groupevents', 'calendar') . ':</strong> '; echo get_string('hidden', 'calendar') . ' (<a href="' . CALENDAR_URL . 'set.php?var=showgroups&' . $getvars . '">' . get_string('clickshow', 'calendar') . '</a>)</td>' . "\n"; } // User events if ($SESSION->cal_show_user) { echo '<td class="event_user" style="width: 8px;"></td><td><strong>' . get_string('userevents', 'calendar') . ':</strong> '; echo get_string('shown', 'calendar') . ' (<a href="' . CALENDAR_URL . 'set.php?var=showuser&' . $getvars . '">' . get_string('clickhide', 'calendar') . '</a>)</td>' . "\n"; } else { echo '<td style="width: 8px;"></td><td><strong>' . get_string('userevents', 'calendar') . ':</strong> '; echo get_string('hidden', 'calendar') . ' (<a href="' . CALENDAR_URL . 'set.php?var=showuser&' . $getvars . '">' . get_string('clickshow', 'calendar') . '</a>)</td>' . "\n"; } echo "</tr>\n"; } echo '</table></div>'; }
if ($action !== '') { $url->param('action', $action); } if ($course !== NULL) { $url->param('course', $course->id); } $PAGE->set_url($url); $calendar = new calendar_information(0, 0, 0, $time); $calendar->prepare_for_view($course, $courses); $pagetitle = get_string('export', 'calendar'); // Print title and header if ($issite) { $PAGE->navbar->add($course->shortname, new moodle_url('/course/view.php', array('id' => $course->id))); } $link = new moodle_url(CALENDAR_URL . 'view.php', array('view' => 'upcoming', 'course' => $calendar->courseid)); $PAGE->navbar->add(get_string('calendar', 'calendar'), calendar_get_link_href($link, 0, 0, 0, $time)); $PAGE->navbar->add($pagetitle); $PAGE->set_title($course->shortname . ': ' . get_string('calendar', 'calendar') . ': ' . $pagetitle); $PAGE->set_heading($course->fullname); $PAGE->set_pagelayout('standard'); $renderer = $PAGE->get_renderer('core_calendar'); $calendar->add_sidecalendar_blocks($renderer); // Get the calendar type we are using. $calendartype = \core_calendar\type_factory::get_calendar_instance(); $now = $calendartype->timestamp_to_date_array($time); $weekend = CALENDAR_DEFAULT_WEEKEND; if (isset($CFG->calendar_weekend)) { $weekend = intval($CFG->calendar_weekend); } $numberofdaysinweek = $calendartype->get_num_weekdays(); $formdata = array('allownextweek' => $weekend & 1 << $now['wday'], 'allownextmonth' => calendar_days_in_month($now['mon'], $now['year']) - $now['mday'] < $numberofdaysinweek, 'allowthisweek' => !($weekend & 1 << $now['wday'] && !($weekend & 1 << ($now['wday'] + 1) % $numberofdaysinweek)));
require_login(); if (empty($CFG->enablecalendarexport)) { die('no export'); } if (!($site = get_site())) { redirect($CFG->wwwroot . '/' . $CFG->admin . '/index.php'); } // Initialize the session variables calendar_session_vars(); $pagetitle = get_string('export', 'calendar'); $navlinks = array(); $now = usergetdate(time()); if (!empty($courseid) && $course->id != SITEID) { $navlinks[] = array('name' => $course->shortname, 'link' => "{$CFG->wwwroot}/course/view.php?id={$course->id}", 'type' => 'misc'); } $navlinks[] = array('name' => get_string('calendar', 'calendar'), 'link' => calendar_get_link_href(CALENDAR_URL . 'view.php?view=upcoming&course=' . $courseid . '&', $now['mday'], $now['mon'], $now['year']), 'type' => 'misc'); $navlinks[] = array('name' => $pagetitle, 'link' => null, 'type' => 'misc'); $navigation = build_navigation($navlinks); if (!checkdate($mon, $day, $yr)) { $day = intval($now['mday']); $mon = intval($now['mon']); $yr = intval($now['year']); } $time = make_timestamp($yr, $mon, $day); if (empty($USER->id) or isguest()) { $defaultcourses = calendar_get_default_courses(); calendar_set_filters($courses, $groups, $users, $defaultcourses, $defaultcourses); } else { calendar_set_filters($courses, $groups, $users); } if (empty($USER->id) or isguest()) {
/** * Displays a month in detail * * @param calendar_information $calendar * @return string */ public function show_month_detailed(calendar_information $calendar, moodle_url $returnurl = null) { global $CFG; if (empty($returnurl)) { $returnurl = $this->page->url; } $date = usergetdate(time()); $display = new stdClass(); $display->minwday = get_user_preferences('calendar_startwday', calendar_get_starting_weekday()); $display->maxwday = $display->minwday + 6; $display->thismonth = $date['mon'] == $calendar->month; $display->maxdays = calendar_days_in_month($calendar->month, $calendar->year); $startwday = 0; if (get_user_timezone_offset() < 99) { // We 'll keep these values as GMT here, and offset them when the time comes to query the db $display->tstart = gmmktime(0, 0, 0, $calendar->month, 1, $calendar->year); // This is GMT $display->tend = gmmktime(23, 59, 59, $calendar->month, $display->maxdays, $calendar->year); // GMT $startwday = gmdate('w', $display->tstart); // $display->tstart is already GMT, so don't use date(): messes with server's TZ } else { // no timezone info specified $display->tstart = mktime(0, 0, 0, $calendar->month, 1, $calendar->year); $display->tend = mktime(23, 59, 59, $calendar->month, $display->maxdays, $calendar->year); $startwday = date('w', $display->tstart); // $display->tstart not necessarily GMT, so use date() } // Align the starting weekday to fall in our display range if ($startwday < $display->minwday) { $startwday += 7; } // Get events from database $events = calendar_get_events(usertime($display->tstart), usertime($display->tend), $calendar->users, $calendar->groups, $calendar->courses); if (!empty($events)) { foreach ($events as $eventid => $event) { $event = new calendar_event($event); if (!empty($event->modulename)) { $cm = get_coursemodule_from_instance($event->modulename, $event->instance); if (!groups_course_module_visible($cm)) { unset($events[$eventid]); } } } } // Extract information: events vs. time calendar_events_by_day($events, $calendar->month, $calendar->year, $eventsbyday, $durationbyday, $typesbyday, $calendar->courses); $output = html_writer::start_tag('div', array('class' => 'header')); if (calendar_user_can_add_event($calendar->course)) { $output .= $this->add_event_button($calendar->course->id, null, $calendar->month, $calendar->year); } $output .= get_string('detailedmonthview', 'calendar') . ': ' . $this->course_filter_selector($returnurl); $output .= html_writer::end_tag('div', array('class' => 'header')); // Controls $output .= html_writer::tag('div', calendar_top_controls('month', array('id' => $calendar->courseid, 'm' => $calendar->month, 'y' => $calendar->year)), array('class' => 'controls')); $days = calendar_get_days(); $table = new html_table(); $table->attributes = array('class' => 'calendarmonth calendartable'); $table->data = array(); $header = new html_table_row(); $header->attributes = array('class' => 'weekdays'); $header->cells = array(); for ($i = $display->minwday; $i <= $display->maxwday; ++$i) { // This uses the % operator to get the correct weekday no matter what shift we have // applied to the $display->minwday : $display->maxwday range from the default 0 : 6 $cell = new html_table_cell(get_string($days[$i % 7], 'calendar')); $cell->header = true; $header->cells[] = $cell; } // For the table display. $week is the row; $dayweek is the column. $week = 1; $dayweek = $startwday; // Create an array of all the week days. $wdays = array(0 => '<strong>' . get_string('sunday', 'calendar') . '</strong>', 1 => '<strong>' . get_string('monday', 'calendar') . '</strong>', 2 => '<strong>' . get_string('tuesday', 'calendar') . '</strong>', 3 => '<strong>' . get_string('wednesday', 'calendar') . '</strong>', 4 => '<strong>' . get_string('thursday', 'calendar') . '</strong>', 5 => '<strong>' . get_string('friday', 'calendar') . '</strong>', 6 => '<strong>' . get_string('saturday', 'calendar') . '</strong>'); // Loop only if the day offset is greater than 0. // This loop involves shifting the days around until the desired start day // is at the start of the array. $daycount = 0; while ($display->minwday > $daycount++) { $wdays_end = array_shift($wdays); array_push($wdays, $wdays_end); } // Now we set the (modified) array to the table header to be displayed. $table->head = $wdays; $row = new html_table_row(array()); // Paddding (the first week may have blank days in the beginning) for ($i = $display->minwday; $i < $startwday; ++$i) { $cell = new html_table_cell(' '); $cell->attributes = array('class' => 'nottoday'); $row->cells[] = $cell; } // Now display all the calendar $weekend = CALENDAR_DEFAULT_WEEKEND; if (isset($CFG->calendar_weekend)) { $weekend = intval($CFG->calendar_weekend); } for ($calendar->day = 1; $calendar->day <= $display->maxdays; ++$calendar->day, ++$dayweek) { if ($dayweek > $display->maxwday) { // We need to change week (table row) $table->data[] = $row; $row = new html_table_row(array()); $dayweek = $display->minwday; ++$week; } // Reset vars $cell = new html_table_cell(); $dayhref = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', array('view' => 'day', 'course' => $calendar->courseid)), $calendar->day, $calendar->month, $calendar->year); $cellclasses = array(); if ($weekend & 1 << $dayweek % 7) { // Weekend. This is true no matter what the exact range is. $cellclasses[] = 'weekend'; } // Special visual fx if an event is defined if (isset($eventsbyday[$calendar->day])) { if (count($eventsbyday[$calendar->day]) == 1) { $title = get_string('oneevent', 'calendar'); } else { $title = get_string('manyevents', 'calendar', count($eventsbyday[$calendar->day])); } $cell->text = html_writer::tag('div', html_writer::link($dayhref, $calendar->day, array('title' => $title)), array('class' => 'day')); } else { $cell->text = html_writer::tag('div', $calendar->day, array('class' => 'day')); } // Special visual fx if an event spans many days $durationclass = false; if (isset($typesbyday[$calendar->day]['durationglobal'])) { $durationclass = 'duration_global'; } else { if (isset($typesbyday[$calendar->day]['durationcourse'])) { $durationclass = 'duration_course'; } else { if (isset($typesbyday[$calendar->day]['durationgroup'])) { $durationclass = 'duration_group'; } else { if (isset($typesbyday[$calendar->day]['durationuser'])) { $durationclass = 'duration_user'; } } } } if ($durationclass) { $cellclasses[] = 'duration'; $cellclasses[] = $durationclass; } // Special visual fx for today if ($display->thismonth && $calendar->day == $calendar->day) { $cellclasses[] = 'today'; } else { $cellclasses[] = 'nottoday'; } $cell->attributes = array('class' => join(' ', $cellclasses)); if (isset($eventsbyday[$calendar->day])) { $cell->text .= html_writer::start_tag('ul', array('class' => 'events-new')); foreach ($eventsbyday[$calendar->day] as $eventindex) { // If event has a class set then add it to the event <li> tag $attributes = array(); if (!empty($events[$eventindex]->class)) { $attributes['class'] = $events[$eventindex]->class; } $dayhref->set_anchor('event_' . $events[$eventindex]->id); $link = html_writer::link($dayhref, format_string($events[$eventindex]->name, true)); $cell->text .= html_writer::tag('li', $link, $attributes); } $cell->text .= html_writer::end_tag('ul'); } if (isset($durationbyday[$calendar->day])) { $cell->text .= html_writer::start_tag('ul', array('class' => 'events-underway')); foreach ($durationbyday[$calendar->day] as $eventindex) { $cell->text .= html_writer::tag('li', '[' . format_string($events[$eventindex]->name, true) . ']', array('class' => 'events-underway')); } $cell->text .= html_writer::end_tag('ul'); } $row->cells[] = $cell; } // Paddding (the last week may have blank days at the end) for ($i = $dayweek; $i <= $display->maxwday; ++$i) { $cell = new html_table_cell(' '); $cell->attributes = array('class' => 'nottoday'); $row->cells[] = $cell; } $table->data[] = $row; $output .= html_writer::table($table); // OK, now for the filtering display $output .= $this->filter_selection_table($calendar); return $output; }
if ($yr !== 0) { $url->param('cal_y', $yr); } if ($course !== NULL) { $url->param('course', $course->id); } $PAGE->set_url($url); $calendar = new calendar_information($day, $mon, $yr); $calendar->prepare_for_view($course, $courses); $pagetitle = get_string('export', 'calendar'); // Print title and header if ($issite) { $PAGE->navbar->add($course->shortname, new moodle_url('/course/view.php', array('id' => $course->id))); } $link = new moodle_url(CALENDAR_URL . 'view.php', array('view' => 'upcoming', 'course' => $calendar->courseid)); $PAGE->navbar->add(get_string('calendar', 'calendar'), calendar_get_link_href($link, $now['mday'], $now['mon'], $now['year'])); $PAGE->navbar->add($pagetitle); $PAGE->set_title($course->shortname . ': ' . get_string('calendar', 'calendar') . ': ' . $pagetitle); $PAGE->set_heading($course->fullname); $PAGE->set_button(calendar_preferences_button($course)); $PAGE->set_pagelayout('standard'); $renderer = $PAGE->get_renderer('core_calendar'); $calendar->add_sidecalendar_blocks($renderer); echo $OUTPUT->header(); echo $renderer->start_layout(); switch ($action) { case 'advanced': // Why nothing? break; case '': default:
function show_month_detailed($baseparams, $display, $m, $y, $courses, $groups, $users, $courseid, $activefilters, $waitlistedsessions, $events) { global $USER, $SESSION, $OUTPUT; global $timenow; $calendardays = calendar_get_days(); $weekend = CALENDAR_DEFAULT_WEEKEND; if (isset($CFG->calendar_weekend)) { $weekend = intval($CFG->calendar_weekend); } // Extract information: events vs. time calendar_events_by_day($events, $m, $y, $eventsbyday, $durationbyday, $typesbyday, $courses); echo $OUTPUT->container_start(null, 'calendarcontainer'); echo $OUTPUT->box_start('generalbox monthlycalendar'); $text = ''; echo $OUTPUT->container($text, 'header'); echo $OUTPUT->container(top_controls($m, $y), 'controls'); // Start calendar display echo html_writer::start_tag('table', array('class' => 'calendarmonth', 'summary' => get_string('calendar:tablesummary', 'block_facetoface'))); echo html_writer::start_tag('tr', array('class' => 'weekdays')); // Begin table. First row: day names // Print out the names of the weekdays for($i = $display->minwday; $i <= $display->maxwday; ++$i) { // This uses the % operator to get the correct weekday no matter what shift we have // applied to the $display->minwday : $display->maxwday range from the default 0 : 6 $day = $calendardays[$i % 7]; echo html_writer::tag('th', get_string($day, 'calendar'), array('scope' => 'col')); } echo html_writer::end_tag('tr') . html_writer::start_tag('tr'); // End of day names; prepare for day numbers // For the table display. $week is the row; $dayweek is the column. $week = 1; $dayweek = $display->startwday; // Paddding (the first week may have blank days in the beginning) for($i = $display->minwday; $i < $display->startwday; ++$i) { echo html_writer::tag('td', ' ', array('class' => 'nottoday')) . "\n"; } // Now display all the calendar for($day = 1; $day <= $display->maxdays; ++$day, ++$dayweek) { if ($dayweek > $display->maxwday) { // We need to change week (table row) echo html_writer::end_tag('tr') . html_writer::start_tag('tr'); $dayweek = $display->minwday; ++$week; } // Reset vars $cell = ''; $dayhref = calendar_get_link_href(new moodle_url(CALENDAR_URL.'view.php', array('view' => 'day', 'course' => $courseid)), $day, $m, $y); if ($weekend & (1 << ($dayweek % 7))) { // Weekend. This is true no matter what the exact range is. $class = 'weekend'; } else { // Normal working day. $class = ''; } // Special visual fx if an event is defined if (isset($eventsbyday[$day])) { if (count($eventsbyday[$day]) == 1) { $title = get_string('oneevent', 'calendar'); } else { $title = get_string('manyevents', 'calendar', count($eventsbyday[$day])); } $cell = $OUTPUT->container(html_writer::link($dayhref, $day, array('title' => $title)), array('class' => 'day')); } else { $cell = $OUTPUT->container($day, array('class' => 'day')); } // Special visual fx if an event spans many days if (isset($typesbyday[$day]['durationglobal'])) { $class .= ' duration_global'; } else if (isset($typesbyday[$day]['durationcourse'])) { $class .= ' duration_course'; } else if (isset($typesbyday[$day]['durationgroup'])) { $class .= ' duration_group'; } else if (isset($typesbyday[$day]['durationuser'])) { $class .= ' duration_user'; } // Special visual fx for today $today = strftime('%d', $timenow); if ($display->thismonth && $day == $today) { $class .= ' today'; } else { $class .= ' nottoday'; } // Just display it if (!empty($class)) { $class = array('class' => trim($class)); } else { $class = array(); } $cellid = sprintf('cell%d%02d%02d', $y, $m, $day);// outputs 'cellYYYYMMDD' string as intended echo html_writer::start_tag('td', array_merge(array('id' => $cellid), $class)) . $cell; if (isset($eventsbyday[$day])) { echo html_writer::start_tag('ul'); $i = 1; foreach ($eventsbyday[$day] as $eventindex) { if ($i < MAX_EVENTS_PER_DAY or count($eventsbyday[$day]) == MAX_EVENTS_PER_DAY) { // If event has a class set then add it to the event <li> tag $eventattributes = array(); if (!empty($events[$eventindex]->class)) { $eventattributes['class'] = $events[$eventindex]->class; } $day_string = $dayhref->out(); echo html_writer::tag('li', html_writer::link(new moodle_url($day_string. '#event_'.$events[$eventindex]->id), format_string($events[$eventindex]->name, true), $eventattributes)); $i++; } else { echo html_writer::tag('li', get_string('xevents', 'block_facetoface', count($eventsbyday[$day]) - MAX_EVENTS_PER_DAY + 1)); break; } } echo html_writer::end_tag('ul'); } echo html_writer::end_tag('td') . "\n"; } // Paddding (the last week may have blank days at the end) for($i = $dayweek; $i <= $display->maxwday; ++$i) { echo html_writer::tag('td', ' ', array('class' => 'nottoday')); } echo html_writer::end_tag('tr') . "\n"; // Last row ends echo html_writer::end_tag('table') . "\n"; // Tabular display of days ends echo $OUTPUT->box_end(); echo $OUTPUT->container_end(); // Advertising side-bar echo $OUTPUT->box_start('generalbox calendarsidebar'); print_waitlisted_content($waitlistedsessions); echo $OUTPUT->box_end(); }
//TODO: wrong require_login(); } else { $PAGE->set_context(get_context_instance(CONTEXT_SYSTEM)); //TODO: wrong } } $calendar = new calendar_information($day, $mon, $yr); $calendar->courseid = $courseid; // Initialize the session variables calendar_session_vars(); //add_to_log($course->id, "course", "view", "view.php?id=$course->id", "$course->id"); $now = usergetdate(time()); $pagetitle = ''; $strcalendar = get_string('calendar', 'calendar'); $link = calendar_get_link_href(new moodle_url(CALENDAR_URL . 'view.php', array('view' => 'upcoming', 'course' => $courseid)), $now['mday'], $now['mon'], $now['year']); $PAGE->navbar->add($strcalendar, $link); if (!checkdate($mon, $day, $yr)) { $day = intval($now['mday']); $mon = intval($now['mon']); $yr = intval($now['year']); } $time = make_timestamp($yr, $mon, $day); switch ($view) { case 'day': $PAGE->navbar->add(userdate($time, get_string('strftimedate'))); $pagetitle = get_string('dayview', 'calendar'); break; case 'month': $PAGE->navbar->add(userdate($time, get_string('strftimemonthyear'))); $pagetitle = get_string('detailedmonthview', 'calendar');
function calendar_format_event_time($event, $now, $morehref, $usecommonwords = true) { $startdate = usergetdate($event->timestart); $enddate = usergetdate($event->timestart + $event->timeduration); $usermidnightstart = usergetmidnight($event->timestart); if ($event->timeduration) { // To avoid doing the math if one IF is enough :) $usermidnightend = usergetmidnight($event->timestart + $event->timeduration); } else { $usermidnightend = $usermidnightstart; } // OK, now to get a meaningful display... // First of all we have to construct a human-readable date/time representation if ($event->timestart + $event->timeduration < $now) { // It has expired, so we don't care about duration $day = calendar_day_representation($event->timestart + $event->timeduration, $now, $usecommonwords); $time = calendar_time_representation($event->timestart + $event->timeduration); // This var always has the printable time representation $eventtime = '<span class="dimmed_text"><a class="dimmed" href="' . calendar_get_link_href(CALENDAR_URL . 'view.php?view=day' . $morehref . '&', $enddate['mday'], $enddate['mon'], $enddate['year']) . '">' . $day . '</a> (' . $time . ')</span>'; } else { if ($event->timeduration) { // It has a duration if ($usermidnightstart == $usermidnightend) { // But it's all on the same day $day = calendar_day_representation($event->timestart, $now, $usecommonwords); $timestart = calendar_time_representation($event->timestart); $timeend = calendar_time_representation($event->timestart + $event->timeduration); // Set printable representation $eventtime = calendar_get_link_tag($day, CALENDAR_URL . 'view.php?view=day' . $morehref . '&', $enddate['mday'], $enddate['mon'], $enddate['year']) . ' (' . $timestart . ' <strong>»</strong> ' . $timeend . ')'; } else { // It spans two or more days $daystart = calendar_day_representation($event->timestart, $now, $usecommonwords); $dayend = calendar_day_representation($event->timestart + $event->timeduration, $now, $usecommonwords); $timestart = calendar_time_representation($event->timestart); $timeend = calendar_time_representation($event->timestart + $event->timeduration); // Set printable representation $eventtime = calendar_get_link_tag($daystart, CALENDAR_URL . 'view.php?view=day' . $morehref . '&', $startdate['mday'], $startdate['mon'], $startdate['year']) . ' (' . $timestart . ') <strong>»</strong> ' . calendar_get_link_tag($dayend, CALENDAR_URL . 'view.php?view=day' . $morehref . '&', $enddate['mday'], $enddate['mon'], $enddate['year']) . ' (' . $timeend . ')'; } } else { // It's an "instantaneous" event $day = calendar_day_representation($event->timestart, $now, $usecommonwords); $time = calendar_time_representation($event->timestart); // Set printable representation $eventtime = calendar_get_link_tag($day, CALENDAR_URL . 'view.php?view=day' . $morehref . '&', $startdate['mday'], $startdate['mon'], $startdate['year']) . ' (' . $time . ')'; } } return $eventtime; }