<?php // $Id: class.iCalBase.inc.php 9707 2007-12-12 13:46:31Z mlaurent $
if ( count( get_included_files() ) == 1 ) die( '---' );
//+----------------------------------------------------------------------+
//| WAMP (XP-SP1/1.3.24/4.0.12/4.3.0)                                    |
//+----------------------------------------------------------------------+
//| Copyright (c) 1992-2003 Michael Wimmer                               |
//+----------------------------------------------------------------------+
//| I don't have the time to read through all the licences to find out   |
//| what the exactly say. But it's simple. It's free for non commercial  |
//| projects, but as soon as you make money with it, i want my share :-) |
//| (License : Free for non-commercial use)                              |
//+----------------------------------------------------------------------+
//| Authors: Michael Wimmer <flaimo@gmx.net>                             |
//+----------------------------------------------------------------------+
//
// $Id: class.iCalBase.inc.php 9707 2007-12-12 13:46:31Z mlaurent $

/**
* @package iCalendar Everything to generate simple iCal files
*/
/**
* Base Class for the different Modules
*
* Last Change: 2003-03-29
* Tested with WAMP (XP-SP1/1.3.24/4.0.4/4.3.0)
*
* @desc Container for a single event
* @access private
* @author Michael Wimmer <flaimo 'at' gmx 'dot' net>
* @copyright Michael Wimmer
* @link http://www.flaimo.com/
* @package iCalendar
* @version 1.032
*/
class iCalBase {

	/*-------------------*/
	/* V A R I A B L E S */
	/*-------------------*/

	/**#@+
	* @access private
	* @var string
	*/
	/**
	* Detailed information for the module
	*
	* @desc Detailed information for the module
	*/
	var $description;

	/**
	* iso code language (en, de,…)
	*
	* @desc iso code language (en, de,…)
	*/
	var $lang;

	/**
	* If not empty, contains a Link for that module
	*
	* @desc If not empty, contains a Link for that module
	*/
	var $url;

	/**
	* Headline for the module (mostly displayed in your cal programm)
	*
	* @desc Headline for the module
	*/
	var $summary;

	/**
	* String of days for the recurring module (example: “SU,MO”)
	*
	* @desc String of days for the recurring module
	*/
	var $rec_days;

	/**
	* Short string symbolizing the startday of the week
	*
	* @desc Short string symbolizing the startday of the week
	*/
	var $week_start = 1;

	/**
	* Location of the module
	*
	* @desc Location of the module
	*/
	var $location;

	/**
	* String with the categories asigned to the module
	*
	* @desc String with the categories asigned to the module
	*/
	var $categories;

	/**
	* last modification date in iCal format
	*
	* @desc last modification date in iCal format
	*/
	var $last_mod;
	/**#@-*/

	/**#@+
	* @access private
	* @var array
	*/
	/**
	* Organizer of the module; $organizer[0] = Name, $organizer[1] = e-mail
	*
	* @desc Organizer of the module; $organizer[0] = Name, $organizer[1] = e-mail
	*/
	var $organizer = array('vCalEvent class', 'http://www.flaimo.com');

	/**
	* List of short strings symbolizing the weekdays
	*
	* @desc List of short strings symbolizing the weekdays
	*/
	var $shortDaynames = array('SU','MO','TU','WE','TH','FR','SA');

	/**
	* If the method is REQUEST, all attendees are listet in the file
	*
	* key = attendee name, value = e-mail, second value = role of the attendee
	* [0 = CHAIR | 1 = REQ | 2 = OPT | 3 =NON] (example: array('Michi' => 'flaimo@gmx.net,1'); )
	*
	* @desc If the method is REQUEST, all attendees are listet in the file
	*/
	var $attendees = array();

	/**
	* Array with the categories asigned to the module (example:
	* array('Freetime','Party'))
	*
	* @desc Array with the categories asigned to the module
	*/
	var $categories_array;

	/**
	* Exeptions dates for the recurring module (Array of timestamps)
	*
	* @desc Exeptions dates for the recurring module
	*/
	var $exept_dates;
	/**#@-*/

	/**#@+
	* @access private
	* @var int
	*/
	/**
	* set to 0
	*
	* @desc set to 0
	*/
	var $sequence;

	/**
	* 0 = once, 1-7 = secoundly - yearly
	*
	* @desc 0 = once, 1-7 = secoundly - yearly
	*/
	var $frequency;

	/**
	* If not empty, contains the status of the module
	* (0 = TENTATIVE, 1 = CONFIRMED, 2 = CANCELLED)
	*
	* @desc If not empty, contains the status of the module
	*/
	var $status;

	/**
	* interval of the recurring date (example: every 2,3,4 weeks)
	*
	* @desc
	*/
	var $interval = 1;

	/**
	* PRIVATE (0) or PUBLIC (1) or CONFIDENTIAL (2)
	*
	* @desc PRIVATE (0) or PUBLIC (1) or CONFIDENTIAL (2)
	*/
	var $class;

	/**
	* set to 5 (value between 0 and 9)
	*
	* @desc set to 5 (value between 0 and 9)
	*/
	var $priority;

	/**
	* Timestamp of the last modification
	*
	* @desc Timestamp of the last modification
	*/
	var $last_mod_ts;
	/**#@-*/

	/*-----------------------*/
	/* C O N S T R U C T O R */
	/*-----------------------*/

	/**#@+
	* @access private
	* @return void
	*/

	function iCalBase() {

	} // end constructor

	/*-------------------*/
	/* F U N C T I O N S */
	/*-------------------*/


	/**
	* Set $startdate variable
	*
	* @desc Set $startdate variable
	* @param string $isocode
	* @see getStartDate()
	* @see $startdate
	* @uses isValidLanguageCode()
	*/
	function setLanguage($isocode = '') {
		$this->lang = (string) (($this->isValidLanguageCode($isocode) == TRUE) ? ';LANGUAGE=' . $isocode : '');
	} // end function

	/**
	* Set $description variable
	*
	* @desc Set $description variable
	* @param string $description
	* @see getDescription()
	* @see $description
	*/
	function setDescription($description) {
		$this->description = (string) $description;
	} // end function

	/**
	* Set $organizer variable
	*
	* @desc Set $organizer variable
	* @param (array) $organizer
	* @see getOrganizerName()
	* @see getOrganizerMail()
	* @see $organizer
	*/
	function setOrganizer($organizer = '') {
		if (is_array($organizer)) {
			$this->organizer = (array) $organizer;
		} // end if
	} // end function

	/**
	* Set $url variable
	*
	* @desc Set $url variable
	* @param string $url
	* @see getURL()
	* @see $url
	* @since 1.011 - 2002-12-22
	*/
	function setURL($url = '') {
		$this->url = (string) $url;
	} // end function

	/**
	* Set $summary variable
	*
	* @desc Set $summary variable
	* @param string $summary
	* @see getSummary()
	* @see $summary
	*/
	function setSummary($summary = '') {
		$this->summary = (string) $summary;
	} // end function

	/**
	* Set $sequence variable
	*
	* @desc Set $sequence variable
	* @param int $int
	* @see getSequence()
	* @see $sequence
	*/
	function setSequence($int = 0) {
		$this->sequence = (int) $int;
	} // end function

	/**
	* Sets a string with weekdays of the recurring module
	*
	* @desc Sets a string with weekdays of the recurring event
	* @param (array) $recdays integers
	* @see getDays()
	* @see $rec_days
	* @since 1.010 - 2002-10-26
	*/
	function setDays($recdays = '') {
		$this->rec_days = (string) '';
		if (!is_array($recdays) || count($recdays) == 0) {
			$this->rec_days = (string) $this->shortDaynames[1];
		} else {
			if (count($recdays) > 1) {
				$recdays = array_values(array_unique($recdays));
			} // end if
			foreach ($recdays as $day) {
				if (array_key_exists($day, $this->shortDaynames)) {
					$this->rec_days .= (string) $this->shortDaynames[$day] . ',';
				} // end if
			} // end foreach
			$this->rec_days = (string) substr($this->rec_days,0,strlen($this->rec_days)-1);
		} // end if
	} // end function

	/**
	* Sets the starting day for the week (0 = Sunday)
	*
	* @desc Sets the starting day for the week (0 = Sunday)
	* @param int $weekstart  0–6
	* @see getWeekStart()
	* @see $week_start
	* @since 1.010 - 2002-10-26
	*/
	function setWeekStart($weekstart = 1) {
		if (is_int($weekstart) && preg_match('(^([0-6]{1})$)', $weekstart)) {
			$this->week_start = (int) $weekstart;
		} // end if
	} // end function

	/**
	* Set $attendees variable
	*
	* @desc Set $attendees variable
	* @param (array) $attendees
	* @see getAttendees()
	* @see $attendees
	* @since 1.001 - 2002-10-10
	*/
	function setAttendees($attendees = '') {
		if (is_array($attendees)) {
			$this->attendees = (array) $attendees;
		} // end if
	} // end function

	/**
	* Set $location variable
	*
	* @desc Set $location variable
	* @param string $location
	* @see getLocation()
	* @see $location
	*/
	function setLocation($location = '') {
		if (strlen(trim($location)) > 0) {
			$this->location = (string) $location;
		} // end if
	} // end function

	/**
	* Set $categories_array variable
	*
	* @desc Set $categories_array variable
	* @param string $categories
	* @see getCategoriesArray()
	* @see $categories_array
	*/
	function setCategoriesArray($categories = '') {
		$this->categories_array = (array) $categories;
	} // end function

	/**
	* Set $categories variable
	*
	* @desc Set $categories variable
	* @param string $categories
	* @see getCategories()
	* @see $categories
	*/
	function setCategories($categories = '') {
		$this->setCategoriesArray($categories);
		$this->categories = (string) implode(',',$categories);
	} // end function

	/**
	* Sets the frequency of a recurring event
	*
	* @desc Sets the frequency of a recurring event
	* @param int $int  Integer 0–7
	* @see getFrequency()
	* @see $frequencies
	* @since 1.010 - 2002-10-26
	*/
	function setFrequency($int = 0) {
		$this->frequency = (int) $int;
	} // end function

	/**
	* Set $status variable
	*
	* @desc Set $status variable
	* @param int $status
	* @see getStatus()
	* @see $status
	* @since 1.011 - 2002-12-22
	*/
	function setStatus($status = 1) {
		$this->status = (int) $status;
	} // end function

	/**
	* Sets the interval for a recurring event (2 = every 2 [days|weeks|years|…])
	*
	* @desc Sets the interval for a recurring event
	* @param int $interval
	* @see getInterval()
	* @see $interval
	* @since 1.010 - 2002-10-26
	*/
	function setInterval($interval = 1) {
			$this->interval = (int) $interval;
	} // end function

	/**
	* Sets an array of formated exeptions dates based on an array with timestamps
	*
	* @desc Sets an array of formated exeptions dates based on an array with timestamps
	* @param (array) $exeptdates
	* @see getExeptDates()
	* @see $exept_dates
	* @since 1.010 - 2002-10-26
	*/
	function setExeptDates($exeptdates = '') {
		if (!is_array($exeptdates)) {
			$this->exept_dates = (array) array();
		} else {
			foreach ($exeptdates as $timestamp) {
				$this->exept_dates[] = gmdate('Ymd\THi00\Z',$timestamp);
			} // end foreach
		} // end if
	} // end function

	/**
	* Set $class variable
	*
	* @desc Set $class variable
	* @param int $int
	* @see getClass()
	* @see $class
	*/
	function setClass($int = 0) {
		$this->class = (int) $int;
	} // end function

	/**
	* Set $priority variable
	*
	* @desc Set $priority variable
	* @param int $int
	* @see getPriority()
	* @see $priority
	*/
	function setPriority($int = 5) {
		$this->priority = (int) ((is_int($int) && preg_match('(^([0-9]{1})$)', $int)) ? $int : 5);
	} // end function

	/**
	* Set $last_mod_ts variable
	*
	* @desc Set $last_mod_ts variable
	* @param int $timestamp
	* @see getLastModTS()
	* @see $last_mod_ts
	* @since 1.020 - 2002-12-24
	*/
	function setLastModTS($timestamp = 0) {
		if (is_int($timestamp) && $timestamp > 0) {
			$this->last_mod_ts = (int) $timestamp;
		} // end if
	} // end function

	/**
	* Set $last_mod variable
	*
	* @desc Set $last_mod variable
	* @param int $last_mod
	* @see getLastMod()
	* @see $last_mod
	* @since 1.020 - 2002-12-24
	*/
	function setLastMod($timestamp = 0) {
		$this->setLastModTS($timestamp);
		$this->last_mod = (string) gmdate('Ymd\THi00\Z',$this->last_mod_ts);
	} // end function
	/**#@-*/

	/**
	* Checks if a given string is a valid iso-language-code
	*
	* @desc Checks if a given string is a valid iso-language-code
	* @param string $code  String that should validated
	* @return boolean isvalid  If string is valid or not
	* @access protected
	* @since 1.001 - 2002/10/19
	*/
	function isValidLanguageCode($code = '') {
		$ret = (boolean) ((preg_match('(^([a-zA-Z]{2})((_|-)[a-zA-Z]{2})?$)',trim($code)) > 0) ? TRUE : FALSE);
        return $ret;
	} // end function


	/**#@+
	* @access public
	*/
	/**
	* Get $startdate variable
	*
	* @desc Get $startdate variable
	* @return (int) $startdate
	* @see setStartDate()
	* @see $startdate
	*/
	function &getLanguage() {
		$ret = (string) $this->lang;
        return $ret;
	} // end function

	/**
	* Get $description variable
	*
	* @desc Get $description variable
	* @return string $description
	* @see setDescription()
	* @see $description
	*/
	function &getDescription() {
		$ret = (string) $this->description;
        return $ret;
	} // end function

	/**
	* Get name from $organizer variable
	*
	* @desc Get name from $organizer variable
	* @return (array) $organizer
	* @see setOrganizer()
	* @see getOrganizerMail()
	* @see $organizer
	* @since 1.011 - 2002-12-22
	*/
	function &getOrganizerName() {
		$ret = (string) $this->organizer[0];
        return $ret;
	} // end function

	/**
	* Get e-mail from $organizer variable
	*
	* @desc Get e-mail from $organizer variable
	* @return (array) $organizer
	* @see setOrganizer()
	* @see getOrganizerName()
	* @see $organizer
	* @since 1.011 - 2002-12-22
	*/
	function &getOrganizerMail() {
		$ret = (string) $this->organizer[1];
        return $ret;
	} // end function

	/**
	* Get $url variable
	*
	* @desc Get $url variable
	* @return string $url
	* @see setURL()
	* @see $url
	* @since 1.011 - 2002-12-22
	*/
	function &getURL() {
		$ret = (string) $this->url;
        return $ret;
	} // end function

	/**
	* Get $summary variable
	*
	* @desc Get $summary variable
	* @return string $summary
	* @see setSummary()
	* @see $summary
	*/
	function &getSummary() {
		$ret = (string) $this->summary;
        return $ret;
	} // end function

	/**
	* Get $sequence variable
	*
	* @desc Get $sequence variable
	* @return (int) $sequence
	* @see setSequence()
	* @see $sequence
	*/
	function &getSequence() {
		$ret = (int) $this->sequence;
        return $ret;
	} // end function

	/**
	* Returns a string with recurring days
	*
	* @desc Returns a string with recurring days
	* @return string $rec_days
	* @see setDays()
	* @see $rec_days
	* @since 1.010 - 2002-10-26
	*/
	function &getDays() {
		$ret = (string) $this->rec_days;
        return $ret;
	} // end function

	/**
	* Get the string from the $week_start variable
	*
	* @desc Get the string from the $week_start variable
	* @return string $shortDaynames
	* @see setWeekStart()
	* @see $week_start
	* @since 1.010 - 2002-10-26
	*/
	function &getWeekStart() {
		$ret = (string) ((array_key_exists($this->week_start, $this->shortDaynames)) ? $this->shortDaynames[$this->week_start] : $this->shortDaynames[1]);
        return $ret;
	} // end function

	/**
	* Get $attendees variable
	*
	* @desc Get $attendees variable
	* @return string $attendees
	* @see setAttendees()
	* @see $attendees
	* @since 1.001 - 2002-10-10
	*/
	function &getAttendees() {
		$ret = (array) $this->attendees;
        return $ret;
	} // end function

	/**
	* Get $location variable
	*
	* @desc Get $location variable
	* @return string $location
	* @see setLocation()
	* @see $location
	*/
	function &getLocation() {
		$ret = (string) $this->location;
        return $ret;
	} // end function

	/**
	* Get $categories_array variable
	*
	* @desc Get $categories_array variable
	* @return (array) $categories_array
	* @see setCategoriesArray()
	* @see $categories_array
	*/
	function &getCategoriesArray() {
		$ret = (array) $this->categories_array;
        return $ret;
	} // end function

	/**
	* Get $categories variable
	*
	* @desc Get $categories variable
	* @return string $categories
	* @see setCategories()
	* @see $categories
	*/
	function &getCategories() {
		$ret = (string) $this->categories;
        return $ret;
	} // end function

	/**
	* Get $frequency variable
	*
	* @desc Get $frequency variable
	* @return string $frequencies
	* @see setFrequency()
	* @see $frequencies
	* @since 1.010 - 2002-10-26
	*/
	function &getFrequency() {
		$ret = (int) $this->frequency;
        return $ret;
	} // end function

	/**
	* Get $status variable
	*
	* @desc Get $status variable
	* @return string $statuscode
	* @see setStatus()
	* @see $status
	* @since 1.011 - 2002-12-22
	*/
	function &getStatus() {
		$ret = (int) $this->status;
        return $ret;
	} // end function

	/**
	* Get $interval variable
	*
	* @desc Get $interval variable
	* @return (int) $interval
	* @see setInterval()
	* @see $interval
	* @since 1.010 - 2002-10-26
	*/
	function &getInterval() {
		$ret = (int) $this->interval;
        return $ret;
	} // end function

	/**
	* Returns a string with exeptiondates
	*
	* @desc Returns a string with exeptiondates
	* @return string $return
	* @see setExeptDates()
	* @see $exept_dates
	* @since 1.010 - 2002-10-26
	*/
	function &getExeptDates() {
		$return = (string) '';
		foreach ($this->exept_dates as $date) {
			$return .= (string) $date . ',';
		} // end foreach
		$return = (string) substr($return,0,strlen($return)-1);
		return $return;
	} // end function

	/**
	* Get $class variable
	*
	* @desc Get $class variable
	* @return string $class
	* @see setClass()
	* @see $class
	*/
	function &getClass() {
		$ret = (int) $this->class;
        return $ret;
	} // end function

	/**
	* Get $priority variable
	*
	* @desc Get $priority variable
	* @return string $priority
	* @see setPriority()
	* @see $priority
	*/
	function &getPriority() {
		$ret = (int) $this->priority;
        return $ret;
	} // end function

	/**
	* Get $last_mod_ts variable
	*
	* @desc Get $last_mod_ts variable
	* @return (int) $last_mod_ts
	* @see setLastModTS()
	* @see $last_mod_ts
	* @since 1.020 - 2002-12-24
	*/
	function &getLastModTS() {
		$ret = (int) $this->last_mod_ts;
        return $ret;
	} // end function

	/**
	* Get $last_mod variable
	*
	* @desc Get $last_mod variable
	* @return (int) $last_mod
	* @see setLastMod()
	* @see $last_mod
	* @since 1.020 - 2002-12-24
	*/
	function &getLastMod() {
		$ret = (string) $this->last_mod;
        return $ret;
	} // end function
	/**#@-*/
} // end class iCalBase
?>