forked from extern/egroupware
211 lines
5.8 KiB
PHP
211 lines
5.8 KiB
PHP
|
<?php
|
||
|
/**************************************************************************\
|
||
|
* eGroupWare - Calendar *
|
||
|
* http://www.egroupware.org *
|
||
|
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
|
||
|
* http://www.radix.net/~cknudsen *
|
||
|
* Modified by Mark Peters <milosch@phpwhere.org> *
|
||
|
* -------------------------------------------- *
|
||
|
* 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."<br>\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 "<p>boalarm::add(event="; print_r($event); ",time=$time,owner=$owner)</p>\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;
|
||
|
}
|
||
|
}
|
||
|
?>
|