From 70237f7eccebbc83c57df3e7bc3585e285e52579 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Sat, 31 Mar 2012 16:13:04 -0400 Subject: [PATCH] rewrite OC_Calendar_APP class --- apps/calendar/lib/app.php | 219 +++++++++++++++++++++++++------------- 1 file changed, 143 insertions(+), 76 deletions(-) diff --git a/apps/calendar/lib/app.php b/apps/calendar/lib/app.php index b4d9f844c19..8bc416d2ce4 100644 --- a/apps/calendar/lib/app.php +++ b/apps/calendar/lib/app.php @@ -1,143 +1,210 @@ + * Copyright (c) 2012 Georg Ehrke * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. - */ - -/** + * * This class manages our app actions */ OC_Calendar_App::$l10n = new OC_L10N('calendar'); class OC_Calendar_App{ + /* + * @brief: language object for calendar app + */ public static $l10n; - public static function getCalendar($id){ - return OC_Calendar_Calendar::find( $id ); - } - - public static function getEventObject($id){ - $event_object = OC_Calendar_Object::find( $id ); - if( $event_object === false ){ - OC_JSON::error(); - exit(); + /* + * @brief: returns informations about a calendar + * @param: int $id - id of the calendar + * @param: bool $security - check access rights or not + * @param: bool $shared - check if the user got access via sharing + * @return: mixed - bool / array + */ + public static function getCalendar($id, $security = true, $shared = false){ + $calendar = OC_Calendar_Object::find($id); + if($shared === true){ + if(OC_Calendar_Share::check_access(OC_User::getUser(), $id, OC_Calendar_Share::CALENDAR)){ + return $calendar; + } } - - //self::getCalendar( $event_object['calendarid'] );//access check - return $event_object; + if($security === true){ + if($calendar['userid'] != OC_User::getUser()){ + return false; + } + } + if($calendar === false){ + return false; + } + return OC_Calendar_Calendar::find($id); } - - public static function check_access($id){ - $event_object = self::getEventObject($id); - $calendar = self::getCalendar($event_object['calendarid']); - if($calendar['userid'] == OC_User::getUser()){ - return 'owner'; + + /* + * @brief: returns informations about an event + * @param: int $id - id of the event + * @param: bool $security - check access rights or not + * @param: bool $shared - check if the user got access via sharing + * @return: mixed - bool / array + */ + public static function getEventObject($id, $security = true, $shared = false){ + $event = OC_Calendar_Object::find($id); + if($shared === true){ + if(OC_Calendar_Share::check_access(OC_User::getUser(), $id, OC_Calendar_Share::EVENT)){ + return $calendar; + } } - if(OC_Calendar_Share::check_access(OC_User::getUser(), $id, OC_Calendar_Share::EVENT)){ - if(OC_Calendar_Share::is_editing_allowed(OC_User::getUser(), $id, OC_Calendar_Share::EVENT)){ - return 'rw'; - }else{ - return 'r'; + if($security === true){ + $calendar = self::getCalendar($event['calendarid'], false); + if($calendar['userid'] != OC_User::getUser()){ + return false; } } - return false; + if($event === false){ + return false; + } + return $event; } - - public static function getVCalendar($id){ - $event_object = self::getEventObject( $id ); - - $vcalendar = OC_VObject::parse($event_object['calendardata']); - // Check if the vcalendar is valid - if(is_null($vcalendar)){ - OC_JSON::error(); - exit(); + + /* + * @brief: returns the parsed calendar data + * @param: int $id - id of the event + * @param: bool $security - check access rights or not + * @return: mixed - bool / object + */ + public static function getVCalendar($id, $security = true){ + $event_object = self::getEventObject($id, $security); + if($event_object === false){ + return false; + } + $vobject = OC_VObject::parse($event_object['calendardata']); + if(is_null($vobject)){ + return false; } - return $vcalendar; + return $vobject; } - - public static function isNotModified($vevent, $lastmodified) - { + + /* + * + */ + public static function isNotModified($vevent, $lastmodified){ $last_modified = $vevent->__get('LAST-MODIFIED'); if($last_modified && $lastmodified != $last_modified->getDateTime()->format('U')){ OC_JSON::error(array('modified'=>true)); exit; } } - - public static function getCategoryOptions() - { - return array( - self::$l10n->t('Birthday'), - self::$l10n->t('Business'), - self::$l10n->t('Call'), - self::$l10n->t('Clients'), - self::$l10n->t('Deliverer'), - self::$l10n->t('Holidays'), - self::$l10n->t('Ideas'), - self::$l10n->t('Journey'), - self::$l10n->t('Jubilee'), - self::$l10n->t('Meeting'), - self::$l10n->t('Other'), - self::$l10n->t('Personal'), - self::$l10n->t('Projects'), - self::$l10n->t('Questions'), - self::$l10n->t('Work'), - ); + /* + * THIS FUNCTION IS DEPRECATED AND WILL BE REMOVED SOON + * @brief: returns the valid categories + * @return: array - categories + */ + public static function getCategoryOptions(){ + return OC_Calendar_Object::getCategoryOptions(self::$l10n); } - + + /* + * @brief: returns the options for an repeating event + * @return: array - valid inputs for repeating events + */ public static function getRepeatOptions(){ return OC_Calendar_Object::getRepeatOptions(self::$l10n); } - + + /* + * @brief: returns the options for the end of an repeating event + * @return: array - valid inputs for the end of an repeating events + */ public static function getEndOptions(){ return OC_Calendar_Object::getEndOptions(self::$l10n); } - + + /* + * @brief: returns the options for an monthly repeating event + * @return: array - valid inputs for monthly repeating events + */ public static function getMonthOptions(){ return OC_Calendar_Object::getMonthOptions(self::$l10n); } - + + /* + * @brief: returns the options for an weekly repeating event + * @return: array - valid inputs for weekly repeating events + */ public static function getWeeklyOptions(){ return OC_Calendar_Object::getWeeklyOptions(self::$l10n); } - + + /* + * @brief: returns the options for an yearly repeating event + * @return: array - valid inputs for yearly repeating events + */ public static function getYearOptions(){ return OC_Calendar_Object::getYearOptions(self::$l10n); } - + + /* + * @brief: returns the options for an yearly repeating event which occurs on specific days of the year + * @return: array - valid inputs for yearly repeating events + */ public static function getByYearDayOptions(){ return OC_Calendar_Object::getByYearDayOptions(); } - + + /* + * @brief: returns the options for an yearly repeating event which occurs on specific month of the year + * @return: array - valid inputs for yearly repeating events + */ public static function getByMonthOptions(){ return OC_Calendar_Object::getByMonthOptions(self::$l10n); } + /* + * @brief: returns the options for an yearly repeating event which occurs on specific week numbers of the year + * @return: array - valid inputs for yearly repeating events + */ public static function getByWeekNoOptions(){ return OC_Calendar_Object::getByWeekNoOptions(); } - + + /* + * @brief: returns the options for an yearly or monthly repeating event which occurs on specific days of the month + * @return: array - valid inputs for yearly or monthly repeating events + */ public static function getByMonthDayOptions(){ return OC_Calendar_Object::getByMonthDayOptions(); } + /* + * @brief: returns the options for an monthly repeating event which occurs on specific weeks of the month + * @return: array - valid inputs for monthly repeating events + */ public static function getWeekofMonth(){ return OC_Calendar_Object::getWeekofMonth(self::$l10n); } - public static function prepareForOutput($event, $vevent){ - $return_event = array(); - $return_event['id'] = (int)$event['id']; - $return_event['title'] = htmlspecialchars(($event['summary']!=NULL || $event['summary'] != '')?$event['summary']: self::$l10n->t('unnamed')); - $return_event['description'] = isset($vevent->DESCRIPTION)?htmlspecialchars($vevent->DESCRIPTION->value):''; - $last_modified = $vevent->__get('LAST-MODIFIED'); + /* + * @brief: returns the prepared output for the json calendar data + * @param: array $event - array with event informations (self::getEventObject) + * @return: array - prepared output + */ + public static function prepareForOutput($event){ + if(isset($event['calendardata'])){ + $object = self::getVCalendar($event['calendardata'], false); + $vevent = $object->VEVENT; + }else{ + $vevent = $event['vevent']; + }$last_modified = $vevent->__get('LAST-MODIFIED'); if ($last_modified){ $lastmodified = $last_modified->getDateTime()->format('U'); }else{ $lastmodified = 0; } - $return_event['lastmodified'] = (int)$lastmodified; - return $return_event; + $last_modified = ($vevent->__get('LAST-MODIFIED'))?$last_modified->getDateTime()->format('U'):0; + $return = array('id'=>(int)$event['id'], + 'title' => htmlspecialchars(($event['summary']!=NULL || $event['summary'] != '')?$event['summary']: self::$l10n->t('unnamed')), + 'description' => isset($vevent->DESCRIPTION)?htmlspecialchars($vevent->DESCRIPTION->value):'', + 'lastmodified'=>(int)$lastmodified); + return $return; } } -- 2.39.5