/** * Checks if given user is the responsible lecturer or is member of a * related group * * @global object $perm The globa perm object. * @param CourseEvent $event The course event to check against. * @param string $user_id The id of the user. * @return boolean */ protected static function checkRelated(CourseEvent $event, $user_id) { global $perm; $check_related = false; $permission = $perm->get_studip_perm($event->range_id, $user_id); switch ($permission) { case 'dozent': $related_persons = $event->dozenten->pluck(user_id); if (sizeof($related_persons)) { if (in_array($user_id, $related_persons)) { $check_related = true; } } else { $check_related = true; } break; case 'tutor': $check_related = true; break; default: $group_ids = $event->statusgruppen->pluck('statusgruppe_id'); if (sizeof($group_ids)) { $member = StatusgruppeUser::findBySQL('statusgruppe_id IN(?) AND user_id = ?', array($group_ids, $user_id)); $check_related = sizeof($member) > 0; } else { $check_related = true; } } return $check_related; }
/** * Retrieves all contact groups (statusgruppen) owned by the given user * where at least one member has granted access to his calender for the user. * * @param string $user_id User id of the owner. * @return type */ public static function getGroups($user_id) { $groups = array(); $calendar_owners = CalendarUser::getOwners($user_id)->pluck('owner_id'); $sg_groups = SimpleORMapCollection::createFromArray(Statusgruppen::findByRange_id($user_id))->orderBy('position')->pluck('statusgruppe_id'); if (sizeof($calendar_owners)) { $sg_users = StatusgruppeUser::findBySQL('statusgruppe_id IN(?) AND user_id IN(?)', array($sg_groups, $calendar_owners)); foreach ($sg_users as $sg_user) { $groups[$sg_user->group->id] = $sg_user->group; } } return $groups; }