Example #1
0
/**
 * 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);
}
Example #2
0
 /**
  * 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;
 }