egroupware/calendar/inc/class.calendar_ajax.inc.php

110 lines
3.0 KiB
PHP

<?php
/**
* Calendar - ajax class
*
* @link http://www.egroupware.org
* @author Christian Binder <christian.binder@freakmail.de>
* @package calendar
* @copyright (c) 2006 by Christian Binder <christian.binder@freakmail.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
/**
* General object of the calendar ajax class
*/
class calendar_ajax {
/**
* calendar object to handle events
*
* @var calendar_boupdate
*/
var $calendar;
function __construct()
{
$this->calendar = new calendar_boupdate();
}
/**
* moves an event to another date/time
*
* @param string $eventID id of the event which has to be moved
* @param string $calendarOwner the owner of the calendar the event is in
* @param string $targetDateTime the datetime where the event should be moved to, format: YYYYMMDD
* @param string $targetOwner the owner of the target calendar
* @return string XML response if no error occurs
*/
function moveEvent($eventId,$calendarOwner,$targetDateTime,$targetOwner)
{
// we do not allow dragging into another users calendar ATM
if(!$calendarOwner == $targetOwner)
{
return false;
}
$old_event=$event=$this->calendar->read($eventId);
$duration=$event['end']-$event['start'];
$event['start'] = $this->calendar->date2ts($targetDateTime);
$event['end'] = $event['start']+$duration;
$status_reset_to_unknown = false;
$sameday = (date('Ymd', $old_event['start']) == date('Ymd', $event['start']));
foreach((array)$event['participants'] as $uid => $status)
{
calendar_so::split_status($status,$q,$r);
if ($uid[0] != 'c' && $uid[0] != 'e' && $uid != $this->calendar->user && $status != 'U')
{
$preferences = CreateObject('phpgwapi.preferences',$uid);
$part_prefs = $preferences->read_repository();
switch ($part_prefs['calendar']['reset_stati'])
{
case 'no':
break;
case 'startday':
if ($sameday) break;
default:
$status_reset_to_unknown = true;
$event['participants'][$uid] = calendar_so::combine_status('U',$q,$r);
// todo: report reset status to user
}
}
}
$conflicts=$this->calendar->update($event);
$response = new xajaxResponse();
if(!is_array($conflicts))
{
$response->addRedirect('');
}
else
{
$response->addScriptCall(
'egw_openWindowCentered2',
$GLOBALS['egw_info']['server']['webserver_url'].'/index.php?menuaction=calendar.calendar_uiforms.edit
&cal_id='.$event['id']
.'&start='.$event['start']
.'&end='.$event['end']
.'&non_interactive=true'
.'&cancel_needs_refresh=true',
'',750,410);
}
if ($status_reset_to_unknown)
{
foreach((array)$event['participants'] as $uid => $status)
{
if ($uid[0] != 'c' && $uid[0] != 'e' && $uid != $this->calendar->user)
{
calendar_so::split_status($status,$q,$r);
$status = calendar_so::combine_status('U',$q,$r);
$this->calendar->set_status($event['id'], $uid, $status, 0, true);
}
}
}
return $response->getXML();
}
}