mirror of
https://github.com/moodle/moodle.git
synced 2025-01-17 21:49:15 +01:00
MDL-60065 calendar: Deprecate calendar_get_mini and friends
This is no longer used and should be deprecated.
This commit is contained in:
parent
6038d62625
commit
5ff6114623
387
calendar/lib.php
387
calendar/lib.php
@ -1221,393 +1221,6 @@ function calendar_get_starting_weekday() {
|
||||
return $calendartype->get_starting_weekday();
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the HTML for a miniature calendar.
|
||||
*
|
||||
* @param array $courses list of course to list events from
|
||||
* @param array $groups list of group
|
||||
* @param array $users user's info
|
||||
* @param int|bool $calmonth calendar month in numeric, default is set to false
|
||||
* @param int|bool $calyear calendar month in numeric, default is set to false
|
||||
* @param string|bool $placement the place/page the calendar is set to appear - passed on the the controls function
|
||||
* @param int|bool $courseid id of the course the calendar is displayed on - passed on the the controls function
|
||||
* @param int $time the unixtimestamp representing the date we want to view, this is used instead of $calmonth
|
||||
* and $calyear to support multiple calendars
|
||||
* @return string $content return html table for mini calendar
|
||||
*/
|
||||
function calendar_get_mini($courses, $groups, $users, $calmonth = false, $calyear = false, $placement = false,
|
||||
$courseid = false, $time = 0) {
|
||||
global $CFG, $OUTPUT;
|
||||
|
||||
// Get the calendar type we are using.
|
||||
$calendartype = \core_calendar\type_factory::get_calendar_instance();
|
||||
|
||||
$display = new \stdClass;
|
||||
|
||||
// Assume we are not displaying this month for now.
|
||||
$display->thismonth = false;
|
||||
|
||||
$content = '';
|
||||
|
||||
// Do this check for backwards compatibility.
|
||||
// The core should be passing a timestamp rather than month and year.
|
||||
// If a month and year are passed they will be in Gregorian.
|
||||
if (!empty($calmonth) && !empty($calyear)) {
|
||||
// Ensure it is a valid date, else we will just set it to the current timestamp.
|
||||
if (checkdate($calmonth, 1, $calyear)) {
|
||||
$time = make_timestamp($calyear, $calmonth, 1);
|
||||
} else {
|
||||
$time = time();
|
||||
}
|
||||
$date = usergetdate($time);
|
||||
if ($calmonth == $date['mon'] && $calyear == $date['year']) {
|
||||
$display->thismonth = true;
|
||||
}
|
||||
// We can overwrite date now with the date used by the calendar type,
|
||||
// if it is not Gregorian, otherwise there is no need as it is already in Gregorian.
|
||||
if ($calendartype->get_name() != 'gregorian') {
|
||||
$date = $calendartype->timestamp_to_date_array($time);
|
||||
}
|
||||
} else if (!empty($time)) {
|
||||
// Get the specified date in the calendar type being used.
|
||||
$date = $calendartype->timestamp_to_date_array($time);
|
||||
$thisdate = $calendartype->timestamp_to_date_array(time());
|
||||
if ($date['month'] == $thisdate['month'] && $date['year'] == $thisdate['year']) {
|
||||
$display->thismonth = true;
|
||||
// If we are the current month we want to set the date to the current date, not the start of the month.
|
||||
$date = $thisdate;
|
||||
}
|
||||
} else {
|
||||
// Get the current date in the calendar type being used.
|
||||
$time = time();
|
||||
$date = $calendartype->timestamp_to_date_array($time);
|
||||
$display->thismonth = true;
|
||||
}
|
||||
|
||||
list($d, $m, $y) = array($date['mday'], $date['mon'], $date['year']); // This is what we want to display.
|
||||
|
||||
// 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 max number of days in this month for this calendar type.
|
||||
$display->maxdays = calendar_days_in_month($m, $y);
|
||||
// Get the starting week day for this month.
|
||||
$startwday = dayofweek(1, $m, $y);
|
||||
// Get the days in a week.
|
||||
$daynames = calendar_get_days();
|
||||
// Store the number of days in a week.
|
||||
$numberofdaysinweek = $calendartype->get_num_weekdays();
|
||||
|
||||
// Set the min and max weekday.
|
||||
$display->minwday = calendar_get_starting_weekday();
|
||||
$display->maxwday = $display->minwday + ($numberofdaysinweek - 1);
|
||||
|
||||
// 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 the events matching our criteria. Don't forget to offset the timestamps for the user's TZ.
|
||||
$events = calendar_get_legacy_events($display->tstart, $display->tend, $users, $groups, $courses);
|
||||
|
||||
// Set event course class for course events.
|
||||
if (!empty($events)) {
|
||||
foreach ($events as $eventid => $event) {
|
||||
if (!empty($event->modulename)) {
|
||||
$instances = get_fast_modinfo($event->courseid)->get_instances_of($event->modulename);
|
||||
if (empty($instances[$event->instance]->uservisible)) {
|
||||
unset($events[$eventid]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This is either a genius idea or an idiot idea: in order to not complicate things, we use this rule: if, after
|
||||
// possibly removing SITEID from $courses, there is only one course left, then clicking on a day in the month
|
||||
// will also set the $SESSION->cal_courses_shown variable to that one course. Otherwise, we 'd need to add extra
|
||||
// arguments to this function.
|
||||
$hrefparams = array();
|
||||
if (!empty($courses)) {
|
||||
$courses = array_diff($courses, array(SITEID));
|
||||
if (count($courses) == 1) {
|
||||
$hrefparams['course'] = reset($courses);
|
||||
}
|
||||
}
|
||||
|
||||
// We want to have easy access by day, since the display is on a per-day basis.
|
||||
calendar_events_by_day($events, $m, $y, $eventsbyday, $durationbyday, $typesbyday, $courses);
|
||||
|
||||
// Accessibility: added summary and <abbr> elements.
|
||||
$summary = get_string('calendarheading', 'calendar', userdate($display->tstart, get_string('strftimemonthyear')));
|
||||
// Begin table.
|
||||
$content .= '<table class="minicalendar calendartable" summary="' . $summary . '">';
|
||||
if (($placement !== false) && ($courseid !== false)) {
|
||||
$content .= '<caption>' . calendar_top_controls($placement,
|
||||
array('id' => $courseid, 'time' => $time)) . '</caption>';
|
||||
}
|
||||
$content .= '<tr class="weekdays">'; // Header row: day names.
|
||||
|
||||
// Print out the names of the weekdays.
|
||||
for ($i = $display->minwday; $i <= $display->maxwday; $i++) {
|
||||
$pos = $i % $numberofdaysinweek;
|
||||
$content .= '<th scope="col"><abbr title="' . $daynames[$pos]['fullname'] . '">' .
|
||||
$daynames[$pos]['shortname'] . "</abbr></th>\n";
|
||||
}
|
||||
|
||||
$content .= '</tr><tr>'; // End of day names; prepare for day numbers.
|
||||
|
||||
// For the table display. $week is the row; $dayweek is the column.
|
||||
$dayweek = $startwday;
|
||||
|
||||
// Padding (the first week may have blank days in the beginning).
|
||||
for ($i = $display->minwday; $i < $startwday; ++$i) {
|
||||
$content .= '<td class="dayblank"> </td>' ."\n";
|
||||
}
|
||||
|
||||
$weekend = CALENDAR_DEFAULT_WEEKEND;
|
||||
if (isset($CFG->calendar_weekend)) {
|
||||
$weekend = intval($CFG->calendar_weekend);
|
||||
}
|
||||
|
||||
// Now display all the calendar.
|
||||
$daytime = strtotime('-1 day', $display->tstart);
|
||||
for ($day = 1; $day <= $display->maxdays; ++$day, ++$dayweek) {
|
||||
$cellattributes = array();
|
||||
$daytime = strtotime('+1 day', $daytime);
|
||||
if ($dayweek > $display->maxwday) {
|
||||
// We need to change week (table row).
|
||||
$content .= '</tr><tr>';
|
||||
$dayweek = $display->minwday;
|
||||
}
|
||||
|
||||
// Reset vars.
|
||||
if ($weekend & (1 << ($dayweek % $numberofdaysinweek))) {
|
||||
// Weekend. This is true no matter what the exact range is.
|
||||
$class = 'weekend day';
|
||||
} else {
|
||||
// Normal working day.
|
||||
$class = 'day';
|
||||
}
|
||||
|
||||
$eventids = array();
|
||||
if (!empty($eventsbyday[$day])) {
|
||||
$eventids = $eventsbyday[$day];
|
||||
}
|
||||
|
||||
if (!empty($durationbyday[$day])) {
|
||||
$eventids = array_unique(array_merge($eventids, $durationbyday[$day]));
|
||||
}
|
||||
|
||||
$finishclass = false;
|
||||
|
||||
if (!empty($eventids)) {
|
||||
// There is at least one event on this day.
|
||||
$class .= ' hasevent';
|
||||
$hrefparams['view'] = 'day';
|
||||
$dayhref = calendar_get_link_href(new \moodle_url(CALENDAR_URL . 'view.php', $hrefparams), 0, 0, 0, $daytime);
|
||||
|
||||
$popupcontent = '';
|
||||
foreach ($eventids as $eventid) {
|
||||
if (!isset($events[$eventid])) {
|
||||
continue;
|
||||
}
|
||||
$event = new \calendar_event($events[$eventid]);
|
||||
$popupalt = '';
|
||||
$component = 'moodle';
|
||||
if (!empty($event->modulename)) {
|
||||
$popupicon = 'icon';
|
||||
$popupalt = $event->modulename;
|
||||
$component = $event->modulename;
|
||||
} else if ($event->courseid == SITEID) { // Site event.
|
||||
$popupicon = 'i/siteevent';
|
||||
} else if ($event->courseid != 0 && $event->courseid != SITEID
|
||||
&& $event->groupid == 0) { // Course event.
|
||||
$popupicon = 'i/courseevent';
|
||||
} else if ($event->groupid) { // Group event.
|
||||
$popupicon = 'i/groupevent';
|
||||
} else { // Must be a user event.
|
||||
$popupicon = 'i/userevent';
|
||||
}
|
||||
|
||||
if ($event->timeduration) {
|
||||
$startdate = $calendartype->timestamp_to_date_array($event->timestart);
|
||||
$enddate = $calendartype->timestamp_to_date_array($event->timestart + $event->timeduration - 1);
|
||||
if ($enddate['mon'] == $m && $enddate['year'] == $y && $enddate['mday'] == $day) {
|
||||
$finishclass = true;
|
||||
}
|
||||
}
|
||||
|
||||
$dayhref->set_anchor('event_' . $event->id);
|
||||
|
||||
$popupcontent .= \html_writer::start_tag('div');
|
||||
$popupcontent .= $OUTPUT->pix_icon($popupicon, $popupalt, $component);
|
||||
// Show ical source if needed.
|
||||
if (!empty($event->subscription) && $CFG->calendar_showicalsource) {
|
||||
$a = new \stdClass();
|
||||
$a->name = format_string($event->name, true);
|
||||
$a->source = $event->subscription->name;
|
||||
$name = get_string('namewithsource', 'calendar', $a);
|
||||
} else {
|
||||
if ($finishclass) {
|
||||
$samedate = $startdate['mon'] == $enddate['mon'] &&
|
||||
$startdate['year'] == $enddate['year'] &&
|
||||
$startdate['mday'] == $enddate['mday'];
|
||||
|
||||
if ($samedate) {
|
||||
$name = format_string($event->name, true);
|
||||
} else {
|
||||
$name = format_string($event->name, true) . ' (' . get_string('eventendtime', 'calendar') . ')';
|
||||
}
|
||||
} else {
|
||||
$name = format_string($event->name, true);
|
||||
}
|
||||
}
|
||||
// Include course's shortname into the event name, if applicable.
|
||||
if (!empty($event->courseid) && $event->courseid !== SITEID) {
|
||||
$course = get_course($event->courseid);
|
||||
$eventnameparams = (object)[
|
||||
'name' => $name,
|
||||
'course' => format_string($course->shortname, true, array('context' => $event->context))
|
||||
];
|
||||
$name = get_string('eventnameandcourse', 'calendar', $eventnameparams);
|
||||
}
|
||||
$popupcontent .= \html_writer::link($dayhref, $name);
|
||||
$popupcontent .= \html_writer::end_tag('div');
|
||||
}
|
||||
|
||||
if ($display->thismonth && $day == $d) {
|
||||
$popupdata = calendar_get_popup(true, $daytime, $popupcontent);
|
||||
} else {
|
||||
$popupdata = calendar_get_popup(false, $daytime, $popupcontent);
|
||||
}
|
||||
|
||||
// Class and cell content.
|
||||
if (isset($typesbyday[$day]['startglobal'])) {
|
||||
$class .= ' calendar_event_site';
|
||||
} else if (isset($typesbyday[$day]['startcourse'])) {
|
||||
$class .= ' calendar_event_course';
|
||||
} else if (isset($typesbyday[$day]['startgroup'])) {
|
||||
$class .= ' calendar_event_group';
|
||||
} else if (isset($typesbyday[$day]['startuser'])) {
|
||||
$class .= ' calendar_event_user';
|
||||
}
|
||||
if ($finishclass) {
|
||||
$class .= ' duration_finish';
|
||||
}
|
||||
$data = array(
|
||||
'url' => $dayhref->out(false),
|
||||
'day' => $day,
|
||||
'content' => $popupdata['data-core_calendar-popupcontent'],
|
||||
'title' => $popupdata['data-core_calendar-title']
|
||||
);
|
||||
$cell = $OUTPUT->render_from_template('core_calendar/minicalendar_day_link', $data);
|
||||
} else {
|
||||
$cell = $day;
|
||||
}
|
||||
|
||||
$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) {
|
||||
$class .= ' duration ' . $durationclass;
|
||||
}
|
||||
|
||||
// If event has a class set then add it to the table day <td> tag.
|
||||
// Note: only one colour for minicalendar.
|
||||
if (isset($eventsbyday[$day])) {
|
||||
foreach ($eventsbyday[$day] as $eventid) {
|
||||
if (!isset($events[$eventid])) {
|
||||
continue;
|
||||
}
|
||||
$event = $events[$eventid];
|
||||
if (!empty($event->class)) {
|
||||
$class .= ' ' . $event->class;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($display->thismonth && $day == $d) {
|
||||
// The current cell is for today - add appropriate classes and additional information for styling.
|
||||
$class .= ' today';
|
||||
$today = get_string('today', 'calendar') . ' ' . userdate(time(), get_string('strftimedayshort'));
|
||||
|
||||
if (!isset($eventsbyday[$day]) && !isset($durationbyday[$day])) {
|
||||
$class .= ' eventnone';
|
||||
$popupdata = calendar_get_popup(true, false);
|
||||
$data = array(
|
||||
'url' => '#',
|
||||
'day' => $day,
|
||||
'content' => $popupdata['data-core_calendar-popupcontent'],
|
||||
'title' => $popupdata['data-core_calendar-title']
|
||||
);
|
||||
$cell = $OUTPUT->render_from_template('core_calendar/minicalendar_day_link', $data);
|
||||
}
|
||||
$cell = get_accesshide($today . ' ') . $cell;
|
||||
}
|
||||
|
||||
// Just display it.
|
||||
$cellattributes['class'] = $class;
|
||||
$content .= \html_writer::tag('td', $cell, $cellattributes);
|
||||
}
|
||||
|
||||
// Padding (the last week may have blank days at the end).
|
||||
for ($i = $dayweek; $i <= $display->maxwday; ++$i) {
|
||||
$content .= '<td class="dayblank"> </td>';
|
||||
}
|
||||
$content .= '</tr>'; // Last row ends.
|
||||
|
||||
$content .= '</table>'; // Tabular display of days ends.
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the calendar popup.
|
||||
*
|
||||
* It called at multiple points in from calendar_get_mini.
|
||||
* Copied and modified from calendar_get_mini.
|
||||
*
|
||||
* @param bool $today false except when called on the current day.
|
||||
* @param mixed $timestart $events[$eventid]->timestart, OR false if there are no events.
|
||||
* @param string $popupcontent content for the popup window/layout.
|
||||
* @return string eventid for the calendar_tooltip popup window/layout.
|
||||
*/
|
||||
function calendar_get_popup($today = false, $timestart, $popupcontent = '') {
|
||||
$popupcaption = '';
|
||||
if ($today) {
|
||||
$popupcaption = get_string('today', 'calendar') . ' ';
|
||||
}
|
||||
|
||||
if (false === $timestart) {
|
||||
$popupcaption .= userdate(time(), get_string('strftimedayshort'));
|
||||
$popupcontent = get_string('eventnone', 'calendar');
|
||||
|
||||
} else {
|
||||
$popupcaption .= get_string('eventsfor', 'calendar', userdate($timestart, get_string('strftimedayshort')));
|
||||
}
|
||||
|
||||
return array(
|
||||
'data-core_calendar-title' => $popupcaption,
|
||||
'data-core_calendar-popupcontent' => $popupcontent,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the calendar upcoming event.
|
||||
*
|
||||
|
@ -1,6 +1,10 @@
|
||||
This files describes API changes in /calendar/* ,
|
||||
information provided here is intended especially for developers.
|
||||
|
||||
=== 3.4 ===
|
||||
* calendar_get_mini has been deprecated. Please update to use the new
|
||||
exporters and renderers.
|
||||
|
||||
=== 3.3 ===
|
||||
* calendar_event_hook() has been removed. Developers should be using the Moodle events system to achieve this behaviour,
|
||||
rather than using a hacky calendar specific implementation.
|
||||
|
@ -6383,3 +6383,53 @@ function get_user_access_sitewide($userid) {
|
||||
|
||||
return $accessdata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the HTML for a miniature calendar.
|
||||
*
|
||||
* @param array $courses list of course to list events from
|
||||
* @param array $groups list of group
|
||||
* @param array $users user's info
|
||||
* @param int|bool $calmonth calendar month in numeric, default is set to false
|
||||
* @param int|bool $calyear calendar month in numeric, default is set to false
|
||||
* @param string|bool $placement the place/page the calendar is set to appear - passed on the the controls function
|
||||
* @param int|bool $courseid id of the course the calendar is displayed on - passed on the the controls function
|
||||
* @param int $time the unixtimestamp representing the date we want to view, this is used instead of $calmonth
|
||||
* and $calyear to support multiple calendars
|
||||
* @return string $content return html table for mini calendar
|
||||
* @deprecated since Moodle 3.4. MDL-59333
|
||||
*/
|
||||
function calendar_get_mini($courses, $groups, $users, $calmonth = false, $calyear = false, $placement = false,
|
||||
$courseid = false, $time = 0) {
|
||||
global $PAGE;
|
||||
|
||||
debugging('calendar_get_mini() has been deprecated. Please update your code to use calendar_get_view.',
|
||||
DEBUG_DEVELOPER);
|
||||
|
||||
if (!empty($calmonth) && !empty($calyear)) {
|
||||
// Do this check for backwards compatibility.
|
||||
// The core should be passing a timestamp rather than month and year.
|
||||
// If a month and year are passed they will be in Gregorian.
|
||||
// Ensure it is a valid date, else we will just set it to the current timestamp.
|
||||
if (checkdate($calmonth, 1, $calyear)) {
|
||||
$time = make_timestamp($calyear, $calmonth, 1);
|
||||
} else {
|
||||
$time = time();
|
||||
}
|
||||
} else if (empty($time)) {
|
||||
// Get the current date in the calendar type being used.
|
||||
$time = time();
|
||||
}
|
||||
|
||||
if ($courseid == SITEID) {
|
||||
$course = get_site();
|
||||
} else {
|
||||
$course = get_course($courseid);
|
||||
}
|
||||
$calendar = new calendar_information(0, 0, 0, $time);
|
||||
$calendar->prepare_for_view($course, $courses);
|
||||
|
||||
$renderer = $PAGE->get_renderer('core_calendar');
|
||||
list($data, $template) = calendar_get_view($calendar, 'mini');
|
||||
return $renderer->render_from_template($template, $data);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user