diff --git a/calendar/inc/class.boalarm.inc.php b/calendar/inc/class.boalarm.inc.php new file mode 100755 index 0000000000..83528d2e8e --- /dev/null +++ b/calendar/inc/class.boalarm.inc.php @@ -0,0 +1,210 @@ + * + * http://www.radix.net/~cknudsen * + * Modified by Mark Peters * + * -------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the * + * Free Software Foundation; either version 2 of the License, or (at your * + * option) any later version. * + \**************************************************************************/ + + /* $Id$ */ + + define('PHPGW_ACL_DELETEALARM',PHPGW_ACL_DELETE); // for now + define('PHPGW_ACL_SETALARM',PHPGW_ACL_EDIT); + define('PHPGW_ACL_READALARM',PHPGW_ACL_READ); + + class boalarm + { + var $so; + var $cal; + var $cal_id; + + var $tz_offset; + + var $debug = False; +// var $debug = True; + + var $public_functions = array( + 'add' => True, + 'delete' => True + ); + + function boalarm() + { + $cal_id = (isset($_POST['cal_id'])?(int)$_POST['cal_id']:''); + if($cal_id) + { + $this->cal_id = $cal_id; + } + $this->bo = CreateObject('calendar.bocalendar',1); + $this->so = CreateObject('calendar.socalendar',1); + $this->tz_offset = $GLOBALS['phpgw']->datetime->tz_offset; + + if($this->debug) + { + echo "BO Owner : ".$this->bo->owner."
\n"; + } + + if($this->bo->use_session) + { + $this->save_sessiondata(); + } + } + + function save_sessiondata() + { + $data = array( + 'filter' => $this->bo->filter, + 'cat_id' => $this->bo->cat_id, + 'owner' => $this->bo->owner, + 'year' => $this->bo->year, + 'month' => $this->bo->month, + 'day' => $this->bo->day + ); + $this->bo->save_sessiondata($data); + } + + function read_entry($cal_id) + { + return $this->bo->read_entry((int)$cal_id); + } + + /*! + @function add + @abstract adds a new alarm to an event + @syntax add(&$event,$time,$login_id) + @param &$event event to add the alarm too + @param $time for the alarm in sec before the starttime of the event + @param $login_id user to alarm + @returns the alarm or False + */ + function add(&$event,$time,$owner) + { + //echo "

boalarm::add(event="; print_r($event); ",time=$time,owner=$owner)

\n"; + if (!$this->check_perms(PHPGW_ACL_SETALARM,$owner) || !($cal_id = $event['id'])) + { + return False; + } + $alarm = Array( + 'time' => ($etime=$this->bo->maketime($event['start'])) - $time, + 'offset' => $time, + 'owner' => $owner, + 'enabled' => 1 + ); + $alarm['id'] = $this->so->save_alarm($cal_id,$alarm); + $event['alarm'][$alarm['id']] = $alarm; + $event['alarm'][$alarm['id']]['time'] = $alarm['time'] - $this->tz_offset; // allows viewing alarm time in users timezone + + return $alarm; + } + + /*! + @function check_perms + @abstract checks if user has a certain grant from the owner of an alarm or event + @syntax check_perms($grant,$owner) + @param $grant PHPGW_ACL_{SET|READ|DELETE}ALARM (defined at the top of this file) + */ + function check_perms($grant,$owner) + { + return $this->bo->check_perms($grant,0,$owner); + } + + /*! + @function participants + @abstract get the participants of an event, the user has grants to alarm + @syntax participants($event,$fullnames=True) + @param $event or cal_id of an event + @param $fullnames if true return array with fullnames as values + @returns array with account_ids as keys + */ + function participants($event,$fullnames=True) + { + if (!is_array($event)) + { + $event = $this->read_entry($event); + } + if (!$event) + { + return False; + } + $participants = array(); + foreach ($event['participants'] as $uid => $status) + { + if ($this->check_perms(PHPGW_ACL_SETALARM,$uid)) + { + $participants[$uid] = $fullnames ? $GLOBALS['phpgw']->common->grab_owner_name($uid) : True; + } + } + return $participants; + } + + /*! + @function enable + @abstract enable or disable one or more alarms identified by its ids + @syntax enable($ids,$enable=True) + @param $ids array with alarm ids as keys (!) + @returns the number of alarms enabled or -1 for insuficent permission to do so + @note Not found alarms or insuficent perms stop the enableing of multiple alarms + */ + function enable($alarms,$enable=True) + { + $enabled = 0; + foreach ($alarms as $id => $field) + { + if (!($alarm = $this->so->read_alarm($id))) + { + return 0; // alarm not found + } + if (!$alarm['enabled'] == !$enable) + { + continue; // nothing to do + } + if ($enable && !$this->check_perms(PHPGW_ACL_SETALARM,$alarm['owner']) || + !$enable && !$this->check_perms(PHPGW_ACL_DELETEALARM,$alarm['owner'])) + { + return -1; + } + $alarm['enabled'] = (int)(!$alarm['enabled']); + if ($this->so->save_alarm($alarm['cal_id'],$alarm)) + { + ++$enabled; + } + } + return $enabled; + } + + /*! + @function delete + @abstract delete one or more alarms identified by its ids + @syntax delete($ids) + @param $ids array with alarm ids as keys (!) + @returns the number of alarms deleted or -1 for insuficent permission to do so + @note Not found alarms or insuficent perms stop the deleting of multiple alarms + */ + function delete($alarms) + { + $deleted = 0; + foreach ($alarms as $id => $field) + { + if (!($alarm = $this->so->read_alarm($id))) + { + return 0; // alarm not found + } + if (!$this->check_perms(PHPGW_ACL_DELETEALARM,$alarm['owner'])) + { + return -1; + } + if ($this->so->delete_alarm($id)) + { + ++$deleted; + } + } + return $deleted; + } + } +?>