/** * Returns the courses to load events for, the * * @param array $courseeventsfrom An array of courses to load calendar events for * @param bool $ignorefilters specify the use of filters, false is set as default * @return array An array of courses, groups, and user to load calendar events for based upon filters */ function calendar_set_filters(array $courseeventsfrom, $ignorefilters = false) { global $USER, $CFG, $DB; // For backwards compatability we have to check whether the courses array contains // just id's in which case we need to load course objects. $coursestoload = array(); foreach ($courseeventsfrom as $id => $something) { if (!is_object($something)) { $coursestoload[] = $id; unset($courseeventsfrom[$id]); } } if (!empty($coursestoload)) { // TODO remove this in 2.2 debugging('calendar_set_filters now preferes an array of course objects with preloaded contexts', DEBUG_DEVELOPER); $courseeventsfrom = array_merge($courseeventsfrom, $DB->get_records_list('course', 'id', $coursestoload)); } $courses = array(); $user = false; $group = false; // capabilities that allow seeing group events from all groups // TODO: rewrite so that moodle/calendar:manageentries is not necessary here $allgroupscaps = array('moodle/site:accessallgroups', 'moodle/calendar:manageentries'); $isloggedin = isloggedin(); if ($ignorefilters || calendar_show_event_type(CALENDAR_EVENT_COURSE)) { $courses = array_keys($courseeventsfrom); } if ($ignorefilters || calendar_show_event_type(CALENDAR_EVENT_GLOBAL)) { $courses[] = SITEID; } $courses = array_unique($courses); sort($courses); if (!empty($courses) && in_array(SITEID, $courses)) { // Sort courses for consistent colour highlighting // Effectively ignoring SITEID as setting as last course id $key = array_search(SITEID, $courses); unset($courses[$key]); $courses[] = SITEID; } if ($ignorefilters || $isloggedin && calendar_show_event_type(CALENDAR_EVENT_USER)) { $user = $USER->id; } if (!empty($courseeventsfrom) && (calendar_show_event_type(CALENDAR_EVENT_GROUP) || $ignorefilters)) { if (count($courseeventsfrom) == 1) { $course = reset($courseeventsfrom); if (has_any_capability($allgroupscaps, context_course::instance($course->id))) { $coursegroups = groups_get_all_groups($course->id, 0, 0, 'g.id'); $group = array_keys($coursegroups); } } if ($group === false) { if (!empty($CFG->calendar_adminseesall) && has_any_capability($allgroupscaps, context_system::instance())) { $group = true; } else { if ($isloggedin) { $groupids = array(); // We already have the courses to examine in $courses // For each course... foreach ($courseeventsfrom as $courseid => $course) { // If the user is an editing teacher in there, if (!empty($USER->groupmember[$course->id])) { // We've already cached the users groups for this course so we can just use that $groupids = array_merge($groupids, $USER->groupmember[$course->id]); } else { if ($course->groupmode != NOGROUPS || !$course->groupmodeforce) { // If this course has groups, show events from all of those related to the current user $coursegroups = groups_get_user_groups($course->id, $USER->id); $groupids = array_merge($groupids, $coursegroups['0']); } } } if (!empty($groupids)) { $group = $groupids; } } } } } if (empty($courses)) { $courses = false; } return array($courses, $group, $user); }
/** * Displays a filter selection table * * @param calendar_information $calendar * @return string */ protected function filter_selection_table(calendar_information $calendar, moodle_url $returnurl = null) { global $SESSION; if ($returnurl === null) { $returnurl = $this->page->url; } $output = html_writer::start_tag('div', array('class' => 'filters')); $output .= html_writer::start_tag('table'); $output .= html_writer::start_tag('tr'); // Global events $link = new moodle_url(CALENDAR_URL . 'set.php', array('var' => 'showglobal', 'return' => base64_encode($returnurl->out(false)), 'sesskey' => sesskey())); if (calendar_show_event_type(CALENDAR_EVENT_GLOBAL)) { $output .= html_writer::tag('td', '', array('class' => 'calendar_event_global', 'style' => 'width:8px;')); $output .= html_writer::tag('td', html_writer::tag('strong', get_string('globalevents', 'calendar')) . ' ' . get_string('shown', 'calendar') . ' (' . html_writer::link($link, get_string('clickhide', 'calendar')) . ')'); } else { $output .= html_writer::tag('td', '', array('style' => 'width:8px;')); $output .= html_writer::tag('td', html_writer::tag('strong', get_string('globalevents', 'calendar')) . ' ' . get_string('hidden', 'calendar') . ' (' . html_writer::link($link, get_string('clickshow', 'calendar')) . ')'); } // Course events $link = new moodle_url(CALENDAR_URL . 'set.php', array('var' => 'showcourses', 'return' => base64_encode($returnurl->out(false)), 'sesskey' => sesskey())); if (calendar_show_event_type(CALENDAR_EVENT_COURSE)) { $output .= html_writer::tag('td', '', array('class' => 'calendar_event_course', 'style' => 'width:8px;')); $output .= html_writer::tag('td', html_writer::tag('strong', get_string('courseevents', 'calendar')) . ' ' . get_string('shown', 'calendar') . ' (' . html_writer::link($link, get_string('clickhide', 'calendar')) . ')'); } else { $output .= html_writer::tag('td', '', array('style' => 'width:8px;')); $output .= html_writer::tag('td', html_writer::tag('strong', get_string('courseevents', 'calendar')) . ' ' . get_string('hidden', 'calendar') . ' (' . html_writer::link($link, get_string('clickshow', 'calendar')) . ')'); } $output .= html_writer::end_tag('tr'); if (isloggedin() && !isguestuser()) { $output .= html_writer::start_tag('tr'); // Group events $link = new moodle_url(CALENDAR_URL . 'set.php', array('var' => 'showgroups', 'return' => base64_encode($returnurl->out(false)), 'sesskey' => sesskey())); if (calendar_show_event_type(CALENDAR_EVENT_GROUP)) { $output .= html_writer::tag('td', '', array('class' => 'calendar_event_group', 'style' => 'width:8px;')); $output .= html_writer::tag('td', html_writer::tag('strong', get_string('groupevents', 'calendar')) . ' ' . get_string('shown', 'calendar') . ' (' . html_writer::link($link, get_string('clickhide', 'calendar')) . ')'); } else { $output .= html_writer::tag('td', '', array('style' => 'width:8px;')); $output .= html_writer::tag('td', html_writer::tag('strong', get_string('groupevents', 'calendar')) . ' ' . get_string('hidden', 'calendar') . ' (' . html_writer::link($link, get_string('clickshow', 'calendar')) . ')'); } // User events $link = new moodle_url(CALENDAR_URL . 'set.php', array('var' => 'showuser', 'return' => base64_encode($returnurl->out(false)), 'sesskey' => sesskey())); if (calendar_show_event_type(CALENDAR_EVENT_USER)) { $output .= html_writer::tag('td', '', array('class' => 'calendar_event_user', 'style' => 'width:8px;')); $output .= html_writer::tag('td', html_writer::tag('strong', get_string('userevents', 'calendar')) . ' ' . get_string('shown', 'calendar') . ' (' . html_writer::link($link, get_string('clickhide', 'calendar')) . ')'); } else { $output .= html_writer::tag('td', '', array('style' => 'width:8px;')); $output .= html_writer::tag('td', html_writer::tag('strong', get_string('userevents', 'calendar')) . ' ' . get_string('hidden', 'calendar') . ' (' . html_writer::link($link, get_string('clickshow', 'calendar')) . ')'); } $output .= html_writer::end_tag('tr'); } $output .= html_writer::end_tag('table'); $output .= html_writer::end_tag('div'); return $output; }