2001-07-16 13:38:40 +02:00
|
|
|
<?php
|
|
|
|
/**************************************************************************\
|
2001-07-18 19:32:10 +02:00
|
|
|
* phpGroupWare - Calendar *
|
2001-07-16 13:38:40 +02:00
|
|
|
* http://www.phpgroupware.org *
|
2001-07-18 19:32:10 +02:00
|
|
|
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
|
|
|
|
* http://www.radix.net/~cknudsen *
|
|
|
|
* Modified by Mark Peters <skeeter@phpgroupware.org> *
|
2001-07-16 13:38:40 +02:00
|
|
|
* -------------------------------------------- *
|
|
|
|
* 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$ */
|
|
|
|
|
|
|
|
class socalendar
|
|
|
|
{
|
2001-11-03 02:52:26 +01:00
|
|
|
// var $debug = True;
|
2001-07-18 19:32:10 +02:00
|
|
|
var $debug = False;
|
2001-07-16 13:38:40 +02:00
|
|
|
var $cal;
|
|
|
|
var $db;
|
|
|
|
var $owner;
|
2001-10-23 12:58:53 +02:00
|
|
|
var $g_owner;
|
|
|
|
var $is_group = False;
|
2001-07-16 13:38:40 +02:00
|
|
|
var $datetime;
|
2001-07-18 19:32:10 +02:00
|
|
|
var $filter;
|
|
|
|
var $cat_id;
|
2001-07-16 13:38:40 +02:00
|
|
|
|
2001-08-12 16:47:23 +02:00
|
|
|
function socalendar($param)
|
2001-07-16 13:38:40 +02:00
|
|
|
{
|
2001-08-17 02:24:20 +02:00
|
|
|
$this->db = $GLOBALS['phpgw']->db;
|
2001-07-16 13:38:40 +02:00
|
|
|
$this->datetime = CreateObject('phpgwapi.datetime');
|
2001-08-12 16:47:23 +02:00
|
|
|
|
2001-08-17 02:24:20 +02:00
|
|
|
$this->owner = (!isset($param['owner']) || $param['owner'] == 0?$GLOBALS['phpgw_info']['user']['account_id']:$param['owner']);
|
|
|
|
$this->filter = (isset($param['filter']) && $param['filter'] != ''?$param['filter']:$this->filter);
|
|
|
|
$this->cat_id = (isset($param['category']) && $param['category'] != ''?$param['category']:$this->cat_id);
|
2001-10-23 12:58:53 +02:00
|
|
|
if(isset($param['g_owner']) && is_array($param['g_owner']))
|
|
|
|
{
|
|
|
|
$this->is_group = True;
|
|
|
|
$this->g_owner = $param['g_owner'];
|
|
|
|
}
|
2001-07-18 19:32:10 +02:00
|
|
|
if($this->debug)
|
|
|
|
{
|
2001-11-03 02:52:26 +01:00
|
|
|
echo '<!-- SO Filter : '.$this->filter.' -->'."\n";
|
|
|
|
echo '<!-- SO cat_id : '.$this->cat_id.' -->'."\n";
|
2001-07-18 19:32:10 +02:00
|
|
|
}
|
2001-08-30 21:06:24 +02:00
|
|
|
$this->cal = CreateObject('calendar.socalendar_');
|
|
|
|
$this->cal->open('INBOX',intval($this->owner));
|
2001-07-16 13:38:40 +02:00
|
|
|
}
|
|
|
|
|
2001-09-07 18:37:11 +02:00
|
|
|
function maketime($time)
|
|
|
|
{
|
|
|
|
return mktime($time['hour'],$time['min'],$time['sec'],$time['month'],$time['mday'],$time['year']);
|
|
|
|
}
|
|
|
|
|
2001-07-16 13:38:40 +02:00
|
|
|
function read_entry($id)
|
|
|
|
{
|
2001-07-18 19:32:10 +02:00
|
|
|
return $this->cal->fetch_event($id);
|
2001-07-16 13:38:40 +02:00
|
|
|
}
|
|
|
|
|
2001-10-23 12:58:53 +02:00
|
|
|
function list_events($startYear,$startMonth,$startDay,$endYear=0,$endMonth=0,$endDay=0,$owner_id=0)
|
2001-07-16 13:38:40 +02:00
|
|
|
{
|
2001-07-18 19:32:10 +02:00
|
|
|
$extra = '';
|
2001-08-17 02:24:20 +02:00
|
|
|
$extra .= (strpos($this->filter,'private')?'AND phpgw_cal.is_public=0 ':'');
|
2001-09-20 23:29:16 +02:00
|
|
|
$extra .= ($this->cat_id?"AND phpgw_cal.category like '%".$this->cat_id."%' ":'');
|
2001-10-23 12:58:53 +02:00
|
|
|
if($owner_id)
|
|
|
|
{
|
|
|
|
return $this->cal->list_events($startYear,$startMonth,$startDay,$endYear,$endMonth,$endDay,$extra,$this->datetime->tz_offset,$owner_id);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return $this->cal->list_events($startYear,$startMonth,$startDay,$endYear,$endMonth,$endDay,$extra,$this->datetime->tz_offset);
|
|
|
|
}
|
2001-07-16 13:38:40 +02:00
|
|
|
}
|
|
|
|
|
2001-10-23 12:58:53 +02:00
|
|
|
function list_repeated_events($syear,$smonth,$sday,$eyear,$emonth,$eday,$owner_id=0)
|
2001-07-16 13:38:40 +02:00
|
|
|
{
|
2001-08-17 02:24:20 +02:00
|
|
|
if($GLOBALS['phpgw_info']['server']['calendar_type'] != 'sql')
|
2001-07-16 13:38:40 +02:00
|
|
|
{
|
|
|
|
return Array();
|
|
|
|
}
|
|
|
|
|
2001-07-22 01:35:22 +02:00
|
|
|
$starttime = mktime(0,0,0,$smonth,$sday,$syear) - $this->datetime->tz_offset;
|
|
|
|
$endtime = mktime(23,59,59,$emonth,$eday,$eyear) - $this->datetime->tz_offset;
|
|
|
|
// $starttime = mktime(0,0,0,$smonth,$sday,$syear);
|
|
|
|
// $endtime = mktime(23,59,59,$emonth,$eday,$eyear);
|
2001-10-26 01:51:35 +02:00
|
|
|
$sql = "AND (phpgw_cal.cal_type='M') "
|
|
|
|
. 'AND (phpgw_cal_user.cal_login in (';
|
2001-10-23 12:58:53 +02:00
|
|
|
if($owner_id)
|
|
|
|
{
|
2001-11-03 02:52:26 +01:00
|
|
|
if(is_array($owner_id))
|
|
|
|
{
|
|
|
|
$sql .= implode(',',$owner_id);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$sql .= $owner_id;
|
|
|
|
}
|
2001-10-23 12:58:53 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2001-10-26 01:51:35 +02:00
|
|
|
$sql .= (!$this->is_group?$this->owner:implode(',',$this->g_owner));
|
2001-10-23 12:58:53 +02:00
|
|
|
}
|
2001-10-26 01:51:35 +02:00
|
|
|
|
|
|
|
$member_groups = $GLOBALS['phpgw']->accounts->membership($this->user);
|
|
|
|
@reset($member_groups);
|
|
|
|
while(list($key,$group_info) = each($member_groups))
|
|
|
|
{
|
|
|
|
$member[] = $group_info['account_id'];
|
|
|
|
}
|
|
|
|
@reset($member);
|
2001-11-29 04:12:01 +01:00
|
|
|
// $sql .= ','.implode(',',$member).') ';
|
2001-11-03 02:52:26 +01:00
|
|
|
// $sql .= 'AND (phpgw_cal.datetime <= '.$starttime.') ';
|
|
|
|
// $sql .= 'AND (((phpgw_cal_repeats.recur_enddate >= '.$starttime.') AND (phpgw_cal_repeats.recur_enddate <= '.$endtime.')) OR (phpgw_cal_repeats.recur_enddate=0))) '
|
2001-11-29 04:12:01 +01:00
|
|
|
$sql .= ') AND ((phpgw_cal_repeats.recur_enddate >= '.$starttime.') OR (phpgw_cal_repeats.recur_enddate=0))) '
|
2001-10-23 12:58:53 +02:00
|
|
|
. (strpos($this->filter,'private')?'AND phpgw_cal.is_public=0 ':'')
|
|
|
|
. ($this->cat_id?"AND phpgw_cal.category like '%".$this->cat_id."%' ":'')
|
|
|
|
. 'ORDER BY phpgw_cal.datetime ASC, phpgw_cal.edatetime ASC, phpgw_cal.priority ASC';
|
2001-07-18 19:32:10 +02:00
|
|
|
|
|
|
|
if($this->debug)
|
|
|
|
{
|
2001-11-03 02:52:26 +01:00
|
|
|
echo '<!-- SO list_repeated_events : SQL : '.$sql.' -->'."\n";
|
2001-07-18 19:32:10 +02:00
|
|
|
}
|
2001-07-16 13:38:40 +02:00
|
|
|
|
2001-07-28 15:17:30 +02:00
|
|
|
return $this->get_event_ids(True,$sql);
|
|
|
|
}
|
|
|
|
|
|
|
|
function list_events_keyword($keywords)
|
|
|
|
{
|
|
|
|
$sql = 'AND (phpgw_cal_user.cal_login='.$this->owner.') ';
|
2001-07-16 13:38:40 +02:00
|
|
|
|
2001-07-28 15:17:30 +02:00
|
|
|
$words = split(' ',$keywords);
|
|
|
|
for ($i=0;$i<count($words);$i++)
|
|
|
|
{
|
2001-08-17 02:24:20 +02:00
|
|
|
$sql .= ($i==0?' AND (':'');
|
|
|
|
$sql .= ($i>0?' OR ':'');
|
2001-07-28 15:17:30 +02:00
|
|
|
$sql .= "(UPPER(phpgw_cal.title) LIKE UPPER('%".$words[$i]."%') OR "
|
|
|
|
. "UPPER(phpgw_cal.description) LIKE UPPER('%".$words[$i]."%'))";
|
2001-08-17 02:24:20 +02:00
|
|
|
$sql .= ($i==count($words) - 1?') ':'');
|
2001-07-28 15:17:30 +02:00
|
|
|
}
|
|
|
|
|
2001-08-17 02:24:20 +02:00
|
|
|
$sql .= (strpos($this->filter,'private')?'AND phpgw_cal.is_public=0 ':'');
|
2001-09-20 23:29:16 +02:00
|
|
|
$sql .= ($this->cat_id?"AND phpgw_cal.category like '%".$this->cat_id."%' ":'');
|
2001-07-28 15:17:30 +02:00
|
|
|
$sql .= 'ORDER BY phpgw_cal.datetime ASC, phpgw_cal.edatetime ASC, phpgw_cal.priority ASC';
|
|
|
|
return $this->get_event_ids(False,$sql);
|
2001-07-16 13:38:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function read_from_store($startYear,$startMonth,$startDay,$endYear='',$endMonth='',$endDay='')
|
|
|
|
{
|
|
|
|
$events = $this->list_events($startYear,$startMonth,$startDay,$endYear,$endMonth,$endDay);
|
|
|
|
$events_cached = Array();
|
|
|
|
for($i=0;$i<count($events);$i++)
|
|
|
|
{
|
|
|
|
$events_cached[] = $this->read_entry($events[$i]);
|
|
|
|
}
|
|
|
|
return $events_cached;
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_event_ids($include_repeats=False, $sql='')
|
|
|
|
{
|
|
|
|
return $this->cal->get_event_ids($include_repeats,$sql);
|
|
|
|
}
|
|
|
|
|
2001-09-07 18:37:11 +02:00
|
|
|
function find_uid($uid)
|
|
|
|
{
|
|
|
|
$sql = " AND (phpgw_cal.uid = '".$uid."') ";
|
|
|
|
|
|
|
|
$found = $this->cal->get_event_ids(False,$sql);
|
|
|
|
if(!$found)
|
|
|
|
{
|
|
|
|
$found = $this->cal->get_event_ids(True,$sql);
|
|
|
|
}
|
2001-09-17 04:33:19 +02:00
|
|
|
if(is_array($found))
|
|
|
|
{
|
|
|
|
return $found[0];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return False;
|
|
|
|
}
|
2001-09-07 18:37:11 +02:00
|
|
|
}
|
|
|
|
|
2001-07-22 01:35:22 +02:00
|
|
|
function add_entry(&$event)
|
2001-07-16 13:38:40 +02:00
|
|
|
{
|
2001-07-18 19:32:10 +02:00
|
|
|
$this->cal->store_event($event);
|
|
|
|
}
|
|
|
|
|
|
|
|
function delete_entry($id)
|
|
|
|
{
|
|
|
|
$this->cal->delete_event($id);
|
|
|
|
}
|
|
|
|
|
|
|
|
function expunge()
|
|
|
|
{
|
|
|
|
$this->cal->expunge();
|
2001-07-16 13:38:40 +02:00
|
|
|
}
|
|
|
|
|
2001-08-01 13:06:17 +02:00
|
|
|
function delete_calendar($owner)
|
|
|
|
{
|
|
|
|
$this->cal->delete_calendar($owner);
|
|
|
|
}
|
|
|
|
|
|
|
|
function change_owner($account_id,$new_owner)
|
|
|
|
{
|
2001-08-17 02:24:20 +02:00
|
|
|
if($GLOBALS['phpgw_info']['server']['calendar_type'] == 'sql')
|
2001-08-01 13:06:17 +02:00
|
|
|
{
|
2001-10-16 04:05:25 +02:00
|
|
|
$this->cal->stream->query('UPDATE phpgw_cal SET owner='.$new_owner.' WHERE owner='.$account_id,__LINE__,__FILE__);
|
|
|
|
$this->cal->stream->query('UPDATE phpgw_cal_user SET cal_login='.$new_owner.' WHERE cal_login='.$account_id);
|
2001-08-01 13:06:17 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-07-22 01:35:22 +02:00
|
|
|
function set_status($id,$status)
|
|
|
|
{
|
|
|
|
$this->cal->set_status($id,$this->owner,$status);
|
|
|
|
}
|
2001-07-18 19:32:10 +02:00
|
|
|
|
2001-09-04 05:17:49 +02:00
|
|
|
function get_alarm($id)
|
|
|
|
{
|
|
|
|
if($GLOBALS['phpgw_info']['server']['calendar_type'] == 'sql')
|
|
|
|
{
|
|
|
|
return $this->cal->get_alarm($id);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-12-02 23:19:48 +01:00
|
|
|
function find_recur_exceptions($event_id)
|
|
|
|
{
|
|
|
|
if($GLOBALS['phpgw_info']['server']['calendar_type'] == 'sql')
|
|
|
|
{
|
|
|
|
$arr = Array();
|
|
|
|
$this->cal->query('SELECT datetime FROM phpgw_cal WHERE reference='.$event_id,__LINE__,__FILE__);
|
|
|
|
if($this->cal->num_rows())
|
|
|
|
{
|
|
|
|
while($this->cal->next_record())
|
|
|
|
{
|
|
|
|
$arr[] = intval($this->cal->f('datetime'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(count($arr) == 0)
|
|
|
|
{
|
|
|
|
return False;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return $arr;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return False;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-07-16 13:38:40 +02:00
|
|
|
/* Begin mcal equiv functions */
|
|
|
|
function get_cached_event()
|
|
|
|
{
|
|
|
|
return $this->cal->event;
|
|
|
|
}
|
|
|
|
|
2001-11-06 03:05:47 +01:00
|
|
|
function add_attribute($var,$value,$element='**(**')
|
2001-07-16 13:38:40 +02:00
|
|
|
{
|
2001-08-06 04:41:36 +02:00
|
|
|
$this->cal->add_attribute($var,$value,$element);
|
2001-07-16 13:38:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function event_init()
|
|
|
|
{
|
|
|
|
$this->cal->event_init();
|
|
|
|
}
|
|
|
|
|
2001-09-07 18:37:11 +02:00
|
|
|
function set_date($element,$year,$month,$day=0,$hour=0,$min=0,$sec=0)
|
|
|
|
{
|
|
|
|
$this->cal->set_date($element,$year,$month,$day,$hour,$min,$sec);
|
|
|
|
}
|
|
|
|
|
2001-07-16 13:38:40 +02:00
|
|
|
function set_start($year,$month,$day=0,$hour=0,$min=0,$sec=0)
|
|
|
|
{
|
|
|
|
$this->cal->set_start($year,$month,$day,$hour,$min,$sec);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_end($year,$month,$day=0,$hour=0,$min=0,$sec=0)
|
|
|
|
{
|
|
|
|
$this->cal->set_end($year,$month,$day,$hour,$min,$sec);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_title($title='')
|
|
|
|
{
|
|
|
|
$this->cal->set_title($title);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_description($description='')
|
|
|
|
{
|
|
|
|
$this->cal->set_description($description);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_class($class)
|
|
|
|
{
|
|
|
|
$this->cal->set_class($class);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_category($category='')
|
|
|
|
{
|
|
|
|
$this->cal->set_category($category);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_alarm($alarm)
|
|
|
|
{
|
|
|
|
$this->cal->set_alarm($alarm);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_recur_none()
|
|
|
|
{
|
|
|
|
$this->cal->set_recur_none();
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_recur_daily($year,$month,$day,$interval)
|
|
|
|
{
|
|
|
|
$this->cal->set_recur_daily($year,$month,$day,$interval);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_recur_weekly($year,$month,$day,$interval,$weekdays)
|
|
|
|
{
|
|
|
|
$this->cal->set_recur_weekly($year,$month,$day,$interval,$weekdays);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_recur_monthly_mday($year,$month,$day,$interval)
|
|
|
|
{
|
|
|
|
$this->cal->set_recur_monthly_mday($year,$month,$day,$interval);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_recur_monthly_wday($year,$month,$day,$interval)
|
|
|
|
{
|
|
|
|
$this->cal->set_recur_monthly_wday($year,$month,$day,$interval);
|
|
|
|
}
|
|
|
|
|
|
|
|
function set_recur_yearly($year,$month,$day,$interval)
|
|
|
|
{
|
|
|
|
$this->cal->set_recur_yearly($year,$month,$day,$interval);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* End mcal equiv functions */
|
|
|
|
}
|
|
|
|
?>
|