egroupware/calendar/inc/class.calendar__.inc.php

299 lines
9.1 KiB
PHP
Executable File

<?php
/**************************************************************************\
* phpGroupWare - Calendar *
* http://www.phpgroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Modified by Mark Peters <skeeter@phpgroupware.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$ */
include(PHPGW_SERVER_ROOT.'/calendar/version.inc.php');
if(extension_loaded('mcal') == False)
{
define(RECUR_NONE,0);
define(RECUR_DAILY,1);
define(RECUR_WEEKLY,2);
define(RECUR_MONTHLY_MDAY,3);
define(RECUR_MONTHLY_WDAY,4);
define(RECUR_YEARLY,5);
define(M_SUNDAY,1);
define(M_MONDAY,2);
define(M_TUESDAY,4);
define(M_WEDNESDAY,8);
define(M_THURSDAY,16);
define(M_FRIDAY,32);
define(M_SATURDAY,64);
define(M_WEEKDAYS,63);
define(M_WEEKEND,65);
define(M_ALLDAYS,127);
}
define(MSG_DELETED,0);
define(MSG_MODIFIED,1);
define(MSG_ADDED,2);
define(REJECTED,0);
define(NO_RESPONSE,1);
define(TENTATIVE,2);
define(ACCEPTED,3);
class calendar__
{
var $event;
var $stream;
var $user;
var $users_status;
var $modified;
var $deleted;
var $added;
function send_update($msg_type,$participants,$old_event=False,$new_event=False)
{
global $phpgw, $phpgw_info;
$phpgw_info['user']['preferences'] = $phpgw->common->create_emailpreferences($phpgw_info['user']['preferences']);
$sender = $phpgw_info['user']['preferences']['email']['address'];
$temp_tz_offset = $phpgw_info['user']['preferences']['common']['tz_offset'];
$temp_timeformat = $phpgw_info['user']['preferences']['common']['timeformat'];
$temp_dateformat = $phpgw_info['user']['preferences']['common']['dateformat'];
$tz_offset = ((60 * 60) * intval($temp_tz_offset));
$t_old_start_time = mktime($old_event->start->hour,$old_event->start->min,$old_event->start->sec,$old_event->start->month,$old_event->start->mday,$old_event->start->year);
if($t_old_start_time < (time() - 86400))
{
return False;
}
$temp_user = $phpgw_info['user'];
if((is_int($this->user) && $this->user != $temp_user['account_id']) ||
(is_string($this->user) && $this->user != $temp_user['account_lid']))
{
if(is_string($this->user))
{
$user = $phpgw->accounts->name2id($this->user);
}
elseif(is_int($this->user))
{
$user = $this->user;
}
$accounts = CreateObject('phpgwapi.accounts',$user);
$phpgw_info['user'] = $accounts->read_repository();
$pref = CreateObject('phpgwapi.preferences',$user);
$phpgw_info['user']['preferences'] = $pref->read_repository();
}
else
{
$user = $phpgw_info['user']['account_id'];
}
$phpgw_info['user']['preferences'] = $phpgw->common->create_emailpreferences($phpgw_info['user']['preferences'],$user);
$send = CreateObject('phpgwapi.send');
switch($msg_type)
{
case MSG_DELETED:
$action = 'Deleted';
$event_id = $old_event->id;
$msgtype = '"calendar";';
break;
case MSG_MODIFIED:
$action = 'Modified';
$event_id = $old_event->id;
$msgtype = '"calendar"; Version="'.$phpgw_info['server']['versions']['calendar'].'"; Id="'.$new_event->id.'"';
break;
case MSG_ADDED:
$action = 'Added';
$event_id = $old_event->id;
$msgtype = '"calendar"; Version="'.$phpgw_info['server']['versions']['calendar'].'"; Id="'.$new_event->id.'"';
break;
}
if($old_event != False)
{
$old_event_datetime = $t_old_start_time - $tz_offset;
}
if($new_event != False)
{
$new_event_datetime = mktime($new_event->start->hour,$new_event->start->min,$new_event->start->sec,$new_event->start->month,$new_event->start->mday,$new_event->start->year) - $tz_offset;
}
for($i=0;$i<count($participants);$i++)
{
if($participants[$i] != $phpgw_info['user']['account_id'])
{
$preferences = CreateObject('phpgwapi.preferences',$participants[$i]);
$part_prefs = $preferences->read_repository();
if(!isset($part_prefs['calendar']['send_updates']) || $part_prefs['calendar']['send_updates'] == False)
{
continue;
}
$part_prefs = $phpgw->common->create_emailpreferences($part_prefs,$participants[$i]);
$to = $part_prefs['email']['address'];
$phpgw_info['user']['preferences']['common']['tz_offset'] = $part_prefs['common']['tz_offset'];
$phpgw_info['user']['preferences']['common']['timeformat'] = $part_prefs['common']['timeformat'];
$phpgw_info['user']['preferences']['common']['dateformat'] = $part_prefs['common']['dateformat'];
if($old_event != False)
{
$old_event_date = $phpgw->common->show_date($old_event_datetime);
}
if($new_event != False)
{
$new_event_date = $phpgw->common->show_date($new_event_datetime);
}
switch($msg_type)
{
case MSG_DELETED:
$action_date = $old_event_date;
$body = 'Your meeting scehduled for '.$old_event_date.' has been canceled';
break;
case MSG_MODIFIED:
$action_date = $new_event_date;
$body = 'Your meeting that had been scheduled for '.$old_event_date.' has been rescheduled to '.$new_event_date;
break;
case MSG_ADDED:
$action_date = $new_event_date;
$body = 'You have a meeting scheduled for '.$new_event_date;
break;
}
$subject = 'Calendar Event ('.$action.') #'.$event_id.': '.$action_date.' (L)';
$send->msg('email',$to,$subject,$body,$msgtype,'','','',$sender);
}
}
unset($send);
if((is_int($this->user) && $this->user != $temp_user['account_id']) ||
(is_string($this->user) && $this->user != $temp_user['account_lid']))
{
$phpgw_info['user'] = $temp_user;
}
$phpgw_info['user']['preferences']['common']['tz_offset'] = $temp_tz_offset;
$phpgw_info['user']['preferences']['common']['timeformat'] = $temp_timeformat;
$phpgw_info['user']['preferences']['common']['dateformat'] = $temp_dateformat;
}
function prepare_recipients(&$new_event,$old_event)
{
for($i=0;$i<count($old_event->participants);$i++)
{
$delete = True;
for($k=0;$k<count($new_event->participants);$k++)
{
if($new_event->participants[$k] == $old_event->participants[$i])
{
$delete = False;
$this->modified[] = $new_event->participants[$k];
$new_event->status[$k] = $old_event->status[$i];
}
}
if($delete == True)
{
$this->deleted[] = $old_event->participants[$i];
}
}
for($i=0;$i<count($new_event->participants);$i++)
{
$add = True;
for($k=0;$k<count($old_event->participants);$k++)
{
if($new_event->participants[$i] == $old_event->participants[$k])
{
$add = False;
}
}
if($add == True)
{
$this->added[] = $new_event->participants[$i];
$new_event->status[$i] = 'U';
}
}
if(count($this->added) > 0 || count($this->modified) > 0 || count($this->deleted) > 0)
{
if(count($this->added) > 0)
{
$this->send_update(MSG_ADDED,$this->added,'',$new_event);
}
if(count($this->modified) > 0)
{
$this->send_update(MSG_MODIFIED,$this->modified,$old_event,$new_event);
}
if(count($this->deleted) > 0)
{
$this->send_update(MSG_DELETED,$this->deleted,$old_event);
}
}
}
function set_common_recur($year,$month,$day)
{
if(intval($day) == 0 && intval($month) == 0 && intval($year) == 0)
{
$this->event->rpt_end_use = 0;
$this->event->rpt_end = 0;
$this->event->rpt_end_day = 0;
$this->event->rpt_end_month = 0;
$this->event->rpt_end_year = 0;
}
else
{
$this->event->rpt_end_use = 1;
$this->event->rpt_end = mktime(0,0,0,intval($month),intval($day),intval($year));
$this->event->rpt_end -= ((60 * 60) * intval($phpgw_info['user']['preferences']['common']['tz_offset']));
$this->event->rpt_end_day = intval($day);
$this->event->rpt_end_month = intval($month);
$this->event->rpt_end_year = intval($year);
}
$this->event->rpt_sun = 0;
$this->event->rpt_mon = 0;
$this->event->rpt_tue = 0;
$this->event->rpt_wed = 0;
$this->event->rpt_thu = 0;
$this->event->rpt_fri = 0;
$this->event->rpt_sat = 0;
$this->event->rpt_days = 'nnnnnnn';
$this->event->rpt_freq = intval($interval);
// Legacy Support (New)
$this->event->recur_interval = intval($interval);
if(intval($day) == 0 && intval($month) == 0 && intval($year) == 0)
{
$this->event->recur_enddate->year = 0;
$this->event->recur_enddate->month = 0;
$this->event->recur_enddate->mday = 0;
}
else
{
$this->event->recur_enddate->year = intval($year);
$this->event->recur_enddate->month = intval($month);
$this->event->recur_enddate->mday = intval($day);
}
$this->event->recur_enddate->hour = 0;
$this->event->recur_enddate->min = 0;
$this->event->recur_enddate->sec = 0;
$this->event->recur_enddate->alarm = 0;
$this->event->recur_data = 0;
}
}