mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-01-07 14:39:56 +01:00
fix for bug [ 1004481 ] alarm management: you could not create alarms for other participants, even if you had the required write-grants from them
This commit is contained in:
parent
e29ca14960
commit
04f4ccf8ac
210
calendar/inc/class.boalarm.inc.php
Executable file
210
calendar/inc/class.boalarm.inc.php
Executable file
@ -0,0 +1,210 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
Reference in New Issue
Block a user