<?php
  /**************************************************************************\
  * phpGroupWare - ICal Calendar                                             *
  * http://www.phpgroupware.org                                              *
  * Created 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$ */

if (isset($phpgw_info['flags']['included_classes']['calendar_']) && 
    $phpgw_info['flags']['included_classes']['calendar_'] == True)
{
	return;
}

$phpgw_info['flags']['included_classes']['calendar_'] = True;

class calendar_ extends calendar__
{
	function open($calendar='',$user='',$passwd='',$options='')
	{
		global $phpgw, $phpgw_info;

		if($user=='')
		{
			$user = $phpgw_info['user']['account_lid'];
		}
		elseif(is_int($user)) 
		{
			$this->user = $phpgw->accounts->id2name($user);
		}
		elseif(is_string($user))
		{
			$this->user = $user;
		}
		if($options != '')
		{
			$this->stream = mcal_open('{'.$phpgw_info['server']['icap_server'].'/'.$phpgw_info['server']['icap_type'].'}'.$calendar,$this->user,$passwd,$options);
		}
		else
		{
			$this->stream = mcal_open('{'.$phpgw_info['server']['icap_server'].'/'.$phpgw_info['server']['icap_type'].'}'.$calendar,$this->user,$passwd);
		}
	}

	function popen($calendar='',$user='',$passwd='',$options='')
	{
		global $phpgw, $phpgw_info;

		if($user=='')
		{
			$this->user = $phpgw_info['user']['account_lid'];
		}
		elseif(is_int($user)) 
		{
			$this->user = $phpgw->accounts->id2name($user);
		}
		elseif(is_string($user))
		{
			$this->user = $user;
		}
		if($options != '')
		{
			$this->stream = mcal_popen('{'.$phpgw_info['server']['icap_server'].'/'.$phpgw_info['server']['icap_type'].'}'.$calendar,$this->user,$passwd,$options);
		}
		else
		{
			$this->stream = mcal_popen('{'.$phpgw_info['server']['icap_server'].'/'.$phpgw_info['server']['icap_type'].'}'.$calendar,$this->user,$passwd);
		}
	}

	function reopen($calendar,$options='')
	{
		if($options != '')
		{
			$this->stream = mcal_reopen($calendar,$options);
		}
		else
		{
			$this->stream = mcal_reopen($calendar);
		}
	}

	function close($options='')
	{
		if($options != '')
		{
			return mcal_close($this->stream,$options);
		}
		else
		{
			return mcal_close($this->stream);
		}
	}

	function create_calendar($calendar)
	{
		return mcal_create_calendar($this->stream,$calendar);
	}

	function rename_calendar($old_name,$new_name)
	{
		return mcal_rename_calendar($this->stream,$old_name,$new_name);
	}

	function delete_calendar($calendar)
	{
		return mcal_delete_calendar($this->stream,$calendar);
	}

	function fetch_event($event_id,$options='')
	{
		if(!isset($this->stream))
		{
			return False;
		}
	
		$this->event = CreateObject('calendar.calendar_item');
	  
		if($options != '')
		{
			$this->event = mcal_fetch_event($this->stream,$event_id,$options);
		}
		else
		{
			$this->event = mcal_fetch_event($this->stream,$event_id);
		}

		// Need to load the $this->event variable with the $event structure from
		// the mcal_fetch_event() call
		// Use http://www.php.net/manual/en/function.mcal-fetch-event.php as the reference
		// This only needs legacy support
		
		return $this->event;
	}

	function list_events($startYear,$startMonth,$startDay,$endYear='',$endMonth='',$endYear='')
	{
		if($endYear != '' && $endMonth != '' && $endDay != '')
		{
			$events = mcal_list_events($this->stream,$startYear,$startMonth,$startDay,$endYear,$endMonth,$endYear);
		}
		else
		{
			$events = mcal_list_events($this->stream,$startYear,$startMonth,$startDay);
		}

		return $events;
	}

	function append_event()
	{
		return mcal_append_event($this->stream);
	}

	function store_event()
	{
		return mcal_store_event($this->stream);
	}

	function delete_event($event_id)
	{
		return mcal_delete_event($this->stream,$event_id);
	}

	function snooze($event_id)
	{
		return mcal_snooze($this->stream,$event_id);
	}

	function list_alarms($begin_year='',$begin_month='',$begin_day='',$end_year='',$end_month='',$end_day='')
	{
		if($end_day == '')
		{
			if($end_month == '')
			{
				if($end_year == '')
				{
					if($begin_day == '')
					{
						if($begin_month == '')
						{
							if($begin_year == '')
							{
								return mcal_list_alarms($this->stream);
							}
							else
							{
								return mcal_list_alarms($this->stream,$begin_year);
							}
						}
						else
						{
							return mcal_list_alarms($this->stream,$begin_year,$begin_month);
						}
					}
					else
					{
						return mcal_list_alarms($this->stream,$begin_year,$begin_month,$begin_day);
					}
				}
				else
				{
					return mcal_list_alarms($this->stream,$begin_year,$begin_month,$begin_day,$end_year);
				}
			}
			else
			{
				return mcal_list_alarms($this->stream,$begin_year,$begin_month,$begin_day,$end_year,$end_month);
			}
		}
		else
		{
			return mcal_list_alarms($this->stream,$begin_year,$begin_month,$begin_day,$end_year,$end_month,$end_day);
		}
	}
	
	function event_init()
	{
		$this->event = CreateObject('calendar.calendar_item');
		return mcal_event_init($this->stream);
	}

	function set_category($category='')
	{
		calendar__::set_category($category);
		return mcal_event_set_category($this->stream,$category);
	}
	
	function set_title($title='')
	{
		calendar__::set_title($title);
		return mcal_event_set_title($this->stream,$title);
	}

	function set_description($description='')
	{
		calendar__::set_description($description);
		return mcal_event_set_description($this->stream,$description);
	}

	function set_start($year,$month,$day=0,$hour=0,$min=0,$sec=0)
	{
		calendar__::set_start($year,$month,$day,$hour,$min,$sec);
		return mcal_event_set_start($this->stream,$year,$month,$day,$hour,$min,$sec);
	}

	function set_end($year,$month,$day=0,$hour=0,$min=0,$sec=0)
	{
		calendar__::set_end($year,$month,$day,$hour,$min,$sec);
		return mcal_event_set_end($this->stream,$year,$month,$day,$hour,$min,$sec);
	}

	function set_alarm($alarm)
	{
		calendar__::set_alarm($alarm);
		return mcal_event_set_alarm ($this->stream,$alarm);
	}

	function set_class($class)
	{
		calendar__::set_class($class);
		return mcal_event_set_class($this->stream,$class);
	}

	// The function definition doesn't look correct...
	// Need more information for this function
	function next_recurrence($weekstart,$next)
	{
		return mcal_next_recurrence($this->stream,$weekstart,$next);
	}

	function set_recur_none()
	{
		calendar__::set_recur_none();
		return mcal_event_set_recur_none($this->stream);
	}

	function set_recur_daily($year,$month,$day,$interval)
	{
		calendar__::set_recur_daily($year,$month,$day,$interval);
		return mcal_event_set_recur_daily($this->stream,$year,$month,$day,$interval);
	}
	
	function set_recur_weekly($year,$month,$day,$interval,$weekdays)
	{
		calendar__::set_recur_weekly($year,$month,$day,$interval,$weekdays);
		return mcal_event_set_recur_weekly($this->stream,$year,$month,$day,$interval,$weekdays);
	}

	function set_recur_monthly_mday($year,$month,$day,$interval)
	{
		calendar__::set_recur_monthly_mday($year,$month,$day,$interval);
		return mcal_event_set_recur_monthly_mday($this->stream,$year,$month,$day,$interval);
	}
	
	function set_recur_monthly_wday($year,$month,$day,$interval)
	{
		calendar__::set_recur_monthly_wday($year,$month,$day,$interval);
		return mcal_event_set_recur_monthly_wday($this->stream,$year,$month,$day,$interval);
	}

	function set_recur_yearly($year,$month,$day,$interval)
	{
		calendar__::set_recur_yearly($year,$month,$day,$interval);
		return mcal_event_set_recur_yearly($this->stream,$year,$month,$day,$interval);
	}

	function fetch_current_stream_event()
	{
		$this->event = mcal_fetch_current_stream_event($this->stream);
		return $this->event
	}

	function add_attribute($attribute,$value)
	{
		calendar__::add_attribute($attribute,$value);
		return mcal_event_add_attribute($this->stream,$attribute,$value);
	}

	function expunge()
	{
		return mcal_expunge($this->stream);
	}

	/**************** Local functions for ICAL based Calendar *****************/
	
	function set_status($id,$owner,$status)
	{
		$status_code_short = Array(
			REJECTED =>	'R',
			NO_RESPONSE	=> 'U',
			TENTATIVE	=>	'T',
			ACCEPTED	=>	'A'
		);
		$this->add_attribute('status['.$owner.']',$status_code_short[$status]);
//		$this->stream->query("UPDATE calendar_entry_user SET cal_status='".$status_code_short[$status]."' WHERE cal_id=".$id." AND cal_login=".$owner,__LINE__,__FILE__);
		return True;
	}
}