From 9958a08cfa67e1b16cbf9b20a40071fc9a65012c Mon Sep 17 00:00:00 2001 From: moodler Date: Sun, 23 May 2004 11:05:45 +0000 Subject: [PATCH] Calendar fixes (this was the last thing I wanted to fix for 1.3). - events are now shown in a consistent way - upcoming events and days are calculated with the same function - it's now not possible to edit module events directly - various tidying up --- calendar/lib.php | 62 +++++++++----- calendar/view.php | 212 ++++++++++++++++------------------------------ 2 files changed, 117 insertions(+), 157 deletions(-) diff --git a/calendar/lib.php b/calendar/lib.php index ae4b874c79..4ddac0275b 100644 --- a/calendar/lib.php +++ b/calendar/lib.php @@ -240,7 +240,7 @@ function calendar_get_mini($courses, $groups, $users, $cal_month = false, $cal_y return $content; } -function calendar_get_upcoming($courses, $groups, $users, $daysinfuture, $maxevents) { +function calendar_get_upcoming($courses, $groups, $users, $daysinfuture, $maxevents, $fromtime=0) { global $CFG; $display = &New object; @@ -256,11 +256,12 @@ function calendar_get_upcoming($courses, $groups, $users, $daysinfuture, $maxeve $now = time(); // We 'll need this later $nowsecs = $now % SECS_IN_DAY; // this too $nowdays = $now - $nowsecs; // and this - $date = usergetdate($now); // Nominal datetime - // Fill in the variables we 're going to use, nice and tidy - list($d, $m, $y) = array($date['mday'], $date['mon'], $date['year']); - $display->tstart = gmmktime(0, 0, 0, $m, $d, $y); + if ($fromtime) { + $display->tstart = $fromtime; + } else { + $display->tstart = usergetmidnight(time()); + } // This effectively adds as many days as needed, and the final SECS_IN_DAY - 1 // serves to cover the duration until the end of the final day. We could @@ -269,10 +270,9 @@ function calendar_get_upcoming($courses, $groups, $users, $daysinfuture, $maxeve // Get the events matching our criteria $whereclause = calendar_sql_where($display->tstart, $display->tend, $users, $groups, $courses); - if($whereclause === false) { + if ($whereclause === false) { $events = false; - } - else { + } else { $whereclause .= ' ORDER BY timestart'; // We want them this way $events = get_records_select('event', $whereclause); } @@ -353,9 +353,11 @@ function calendar_get_upcoming($courses, $groups, $users, $daysinfuture, $maxeve // also that it is an automatically-generated event. And of course that the // three fields for get_coursemodule_from_instance are set correctly. + calendar_get_course_cached($coursecache, $event->courseid); + $module = calendar_get_module_cached($coursecache, $event->modulename, $event->instance, $event->courseid); - if($module === false) { + if ($module === false) { // This shouldn't have happened. What to do now? // Just ignore it continue; @@ -364,41 +366,63 @@ function calendar_get_upcoming($courses, $groups, $users, $daysinfuture, $maxeve $modulename = get_string('modulename', $event->modulename); $eventtype = get_string($event->eventtype, $event->modulename); $icon = $CFG->modpixpath.'/'.$event->modulename.'/icon.gif'; - $output[$outkey]->referer = ''.$event->name.''; + $output[$outkey]->icon = ''; + $output[$outkey]->referer = ''.$event->name.''; $output[$outkey]->name = $event->name; $output[$outkey]->time = $eventtime; $output[$outkey]->description = $event->description; - } - else if($event->courseid == 1) { + $output[$outkey]->courselink = ''.$coursecache[$event->courseid]->fullname.''; + $output[$outkey]->timestart = $event->timestart; + $output[$outkey]->id = $event->id; + $output[$outkey]->cmid = $module->id; + $output[$outkey]->modulename = $event->modulename; + + + + } else if($event->courseid == 1) { $output[$outkey]->icon = ''; $output[$outkey]->name = $event->name; $output[$outkey]->time = $eventtime; $output[$outkey]->description = $event->description; - } - else if($event->courseid > 1) { + $output[$outkey]->timestart = $event->timestart; + $output[$outkey]->id = $event->id; + + + + } else if($event->courseid > 1) { // Course event calendar_get_course_cached($coursecache, $event->courseid); - $output[$outkey]->referer = ''.$coursecache[$event->courseid]->fullname.''; $output[$outkey]->icon = ''; $output[$outkey]->name = $event->name; $output[$outkey]->time = $eventtime; $output[$outkey]->description = $event->description; - } - else if($event->groupid) { + $output[$outkey]->courselink = ''.$coursecache[$event->courseid]->fullname.''; + $output[$outkey]->timestart = $event->timestart; + $output[$outkey]->id = $event->id; + + + + } else if($event->groupid) { // Group event $output[$outkey]->icon = ''; $output[$outkey]->name = $event->name; $output[$outkey]->time = $eventtime; $output[$outkey]->description = $event->description; - } - else if($event->userid) { + $output[$outkey]->timestart = $event->timestart; + $output[$outkey]->id = $event->id; + + + + } else if($event->userid) { // User event $output[$outkey]->icon = ''; $output[$outkey]->name = $event->name; $output[$outkey]->time = $eventtime; $output[$outkey]->description = $event->description; + $output[$outkey]->timestart = $event->timestart; + $output[$outkey]->id = $event->id; } ++$processed; } diff --git a/calendar/view.php b/calendar/view.php index 0446c31a97..9f6dfc3f1b 100644 --- a/calendar/view.php +++ b/calendar/view.php @@ -164,10 +164,12 @@ print_footer(); + + function calendar_show_day($d, $m, $y, $courses, $groups, $users) { - global $CFG, $THEME; + global $CFG, $THEME, $db; - if(!checkdate($m, $d, $y)) { + if (!checkdate($m, $d, $y)) { $now = usergetdate(time()); list($d, $m, $y) = array(intval($now['mday']), intval($now['mon']), intval($now['year'])); } @@ -175,22 +177,17 @@ function calendar_show_day($d, $m, $y, $courses, $groups, $users) { $getvars = 'from=day&cal_d='.$d.'&cal_m='.$m.'&cal_y='.$y; // For filtering $starttime = make_timestamp($y, $m, $d); - $endtime = $starttime + SECS_IN_DAY - 1; - $whereclause = calendar_sql_where($starttime, $endtime, $users, $groups, $courses); + $endtime = $starttime + SECS_IN_DAY - 1; - if($whereclause === false) { - $events = array(); - } - else { - $events = get_records_select('event', $whereclause); - } + $events = calendar_get_upcoming($courses, $groups, $users, 1, 100, $starttime); // New event button - if(isguest()) { + if (isguest()) { $text = get_string('dayview', 'calendar').': '.calendar_course_filter_selector($getvars); - } - else { - $text = '
'.get_string('dayview', 'calendar').': '.calendar_course_filter_selector($getvars).'
'; + + } else { + $text = '
'.get_string('dayview', 'calendar').': '. + calendar_course_filter_selector($getvars).'
'; $text.= '
'; $text.= ''; $text.= ''; @@ -202,40 +199,31 @@ function calendar_show_day($d, $m, $y, $courses, $groups, $users) { print_side_block_start($text, '', 'mycalendar'); echo '

'.calendar_top_controls('day', array('d' => $d, 'm' => $m, 'y' => $y)).'

'; - if($events === false) { + if (empty($events)) { // There is nothing to display today. echo '

'.get_string('daywithnoevents', 'calendar').'

'; - } - else { - $coursecache = array(); - $summarize = array(); + + } else { + + $underway = array(); // First, print details about events that start today - foreach($events as $event) { - if($event->timestart >= $starttime && $event->timestart <= $endtime) { - // Print this - calendar_print_event_table($event, $starttime, $endtime, $coursecache); - } - else { - // Save this for later - $summarize[] = $event->id; + foreach ($events as $event) { + if ($event->timestart >= $starttime && $event->timestart <= $endtime) { // Print it now + unset($event->time); + calendar_print_event($event); + + } else { // Save this for later + $underway[] = $event; } } // Then, show a list of all events that just span this day - if(!empty($summarize)) { - $until = get_string('durationuntil', 'calendar'); + if (!empty($underway)) { echo '

'.get_string('spanningevents', 'calendar').':

'; - echo '

'; } } @@ -513,125 +501,73 @@ function calendar_show_upcoming_events($courses, $groups, $users, $futuredays, $ } print_side_block_start($text, '', 'mycalendar'); - foreach ($events as $event) { - calendar_print_event($event); + if ($events) { + foreach ($events as $event) { + calendar_print_event($event); + } + } else { + echo '
'; + print_heading(get_string('noupcomingevents', 'calendar')); } print_side_block_end(); } function calendar_print_event($event) { - global $THEME; + global $CFG, $THEME; - echo ''; - echo ""; + echo ""; + echo "\n
cellcontent2\" class=\"forumpostpicture\" width=\"16\" valign=\"top\">"; + static $strftimetime; + + echo ''; + echo "'; - echo ""; - echo ""; - echo "\n
cellcontent2\" class=\"eventfullpicture\" width=\"32\" valign=\"top\">"; if (!empty($event->icon)) { echo $event->icon; + } else { + print_spacer(16,16); } echo 'cellheading\" class=\"forumpostheader\" width=\"100%\">"; + echo "cellheading\" class=\"eventfullheader\" width=\"100%\">"; - if(!empty($event->referer) and empty($event->icon)) { - echo ''.$event->referer.': '; - } - echo ''.$event->name."   "; - echo ''.$event->time.''; - - echo "
cellcontent2\" valign=\"top\" class=\"forumpostside\" width=\"16\"> cellcontent\" class=\"forumpostmessage\">\n"; - echo format_text($event->description, FORMAT_HTML); - echo "

\n\n"; -} - - -function calendar_print_event_table($event, $starttime, $endtime, &$coursecache, $alldetails = false) { - global $CFG; - - echo ''; - - if(calendar_edit_event_allowed($event)) { - echo ''; + if (!empty($event->referer)) { + echo ''.$event->referer.' '; + } else { + echo ''.$event->name.""; } - else { - echo ''; + if (!empty($event->courselink)) { + echo '
'.$event->courselink.' '; } - - echo "\n\n
'.$event->name; - echo ' '.get_string('tt_editevent', 'calendar').''; - echo ' '.get_string('tt_deleteevent', 'calendar').''; - echo '
'.$event->name.'
"; - - if(!empty($event->modulename)) { - // The module name is set. This handling code should be synchronized with that in calendar_get_upcoming() - $module = calendar_get_module_cached($coursecache, $event->modulename, $event->instance, $event->courseid); - if($module === false) { - // This shouldn't have happened. What to do now? Just ignore it... - echo '
'; - return; - } - $modulename = get_string('modulename', $event->modulename); - $eventtype = get_string($event->eventtype, $event->modulename); - $icon = $CFG->modpixpath.'/'.$event->modulename.'/icon.gif'; - $coursereferer = ''.$coursecache[$module->course]->fullname.''; - $instancereferer = ''.$module->name.''; - - echo '
'.get_string('course').':
'.$coursereferer.'
'; - echo '
'.$modulename.':
'.$instancereferer.'
'; - } - else if($event->courseid > 1) { - $course = calendar_get_course_cached($coursecache, $event->courseid); - $coursereferer = ''.$course->fullname.''; - echo '
'.get_string('course').':
'.$coursereferer.'
'; - } - else if($event->courseid == 1) { - echo '
'.get_string('typesite', 'calendar').'
'; - } - - if($event->timeduration) { - if($event->timestart + $event->timeduration > $endtime || $alldetails) { - // It doesn't end today, or full details requested, so we 'll go into a little more trouble - $enddate = usergetdate($event->timestart + $event->timeduration); - $enddisplay = calendar_get_link_tag( - calendar_day_representation($event->timestart + $event->timeduration, $starttime, false), - CALENDAR_URL.'view.php?view=day&', $enddate['mday'], $enddate['mon'], $enddate['year']); - $enddisplay .= ', '.calendar_time_representation($event->timestart + $event->timeduration); - } - else { - $enddisplay = calendar_time_representation($event->timestart + $event->timeduration); - } - if($alldetails) { - // We want to give a full representation of the event's date - $startdate = usergetdate($event->timestart); - $startdisplay = calendar_get_link_tag( - calendar_day_representation($event->timestart, $starttime, false), - CALENDAR_URL.'view.php?view=day&', $startdate['mday'], $startdate['mon'], $startdate['year']); - $startdisplay .= ', '.calendar_time_representation($event->timestart); - } - else { - $startdisplay = calendar_time_representation($event->timestart); + if (!empty($event->time)) { + echo ''.$event->time.''; + } else { + if (!isset($strftimetime)) { + $strftimetime = get_string('strftimetime'); } - echo '
'.get_string('eventstarttime', 'calendar').':
'.$startdisplay.'
'; - echo '
'.get_string('eventendtime', 'calendar').':
'.$enddisplay.'
'; + echo ''.userdate($event->timestart, $strftimetime).''; } - else { - // Event without duration - if($alldetails) { - // We want to give a full representation of the event's date - $startdate = usergetdate($event->timestart); - $startdisplay = calendar_get_link_tag( - calendar_day_representation($event->timestart, $starttime, false), - CALENDAR_URL.'view.php?view=day&', $startdate['mday'], $startdate['mon'], $startdate['year']); - $startdisplay .= ', '.calendar_time_representation($event->timestart); - } - else { - $startdisplay = calendar_time_representation($event->timestart); + + echo "
cellcontent2\" valign=\"top\" class=\"eventfullside\" width=\"32\"> cellcontent\" class=\"eventfullmessage\">\n"; + echo format_text($event->description, FORMAT_HTML); + if (calendar_edit_event_allowed($event)) { + echo '
'; + if (empty($event->cmid)) { + $editlink = CALENDAR_URL.'event.php?action=edit&id='.$event->id; + $deletelink = CALENDAR_URL.'event.php?action=delete&id='.$event->id; + } else { + $editlink = "$CFG->wwwroot/mod/$event->modulename/view.php?id=$event->cmid"; + $deletelink = "$CFG->wwwroot/course/mod.php?delete=$event->cmid"; } - echo '
'.get_string('eventinstanttime', 'calendar').':
'.$startdisplay.'
'; + echo ' '.get_string('tt_editevent', 'calendar').''; + echo ' '.get_string('tt_deleteevent', 'calendar').''; + echo '
'; } + echo "

\n\n"; - echo ''.$event->description.''."\n"; - echo "\n\n"; } -- 2.39.5