/** * ensures internal date-time/date format for input date-time/date in string fromat * * @author Kjell-Inge Gustafsson, kigkonsult <*****@*****.**> * @since 2.14.1 - 2012-10-07 * Modified to also return original string value by Yitzchok Lavi <*****@*****.**> * @param array $datetime * @param int $parno optional, default FALSE * @param moxed $wtz optional, default null * @return array */ public static function _date_time_string($datetime, $parno = FALSE) { return ICalUtilityFunctions::_strdate2date($datetime, $parno, null); }
/** * sort iCal compoments * * ascending sort on properties (if exist) x-current-dtstart, dtstart, * x-current-dtend, dtend, x-current-due, due, duration, created, dtstamp, uid if called without arguments, * otherwise sorting on specific (argument) property values * * @author Kjell-Inge Gustafsson, kigkonsult <*****@*****.**> * @since 2.16.4 - 2012-12-17 * @param string $sortArg, optional * @return void * */ function sort($sortArg = FALSE) { if (is_array($this->components)) { if ($sortArg) { $sortArg = strtoupper($sortArg); if (!in_array($sortArg, array('ATTENDEE', 'CATEGORIES', 'CONTACT', 'DTSTAMP', 'LOCATION', 'ORGANIZER', 'PRIORITY', 'RELATED-TO', 'RESOURCES', 'STATUS', 'SUMMARY', 'UID', 'URL'))) { $sortArg = FALSE; } } /* set sort parameters for each component */ foreach ($this->components as $cix => &$c) { $c->srtk = array('0', '0', '0', '0'); if ('VTimeZone' == $c->objName) { if (FALSE === ($c->srtk[0] = $c->getProperty('tzid'))) { $c->srtk[0] = 0; } continue; } elseif ($sortArg) { if ('ATTENDEE' == $sortArg || 'CATEGORIES' == $sortArg || 'CONTACT' == $sortArg || 'RELATED-TO' == $sortArg || 'RESOURCES' == $sortArg) { $propValues = array(); $c->_getProperties($sortArg, $propValues); if (!empty($propValues)) { $sk = array_keys($propValues); $c->srtk[0] = $sk[0]; if ('RELATED-TO' == $sortArg) { $c->srtk[0] .= $c->getProperty('uid'); } } elseif ('RELATED-TO' == $sortArg) { $c->srtk[0] = $c->getProperty('uid'); } } elseif (FALSE !== ($d = $c->getProperty($sortArg))) { $c->srtk[0] = $d; if ('UID' == $sortArg) { if (FALSE !== ($d = $c->getProperty('recurrence-id'))) { $c->srtk[1] = ICalUtilityFunctions::_date2strdate($d); if (FALSE === ($c->srtk[2] = $c->getProperty('sequence'))) { $c->srtk[2] = PHP_INT_MAX; } } else { $c->srtk[1] = $c->srtk[2] = PHP_INT_MAX; } } } continue; } if (FALSE !== ($d = $c->getProperty('X-CURRENT-DTSTART'))) { $c->srtk[0] = ICalUtilityFunctions::_strdate2date($d[1]); unset($c->srtk[0]['unparsedtext']); } elseif (FALSE === ($c->srtk[0] = $c->getProperty('dtstart'))) { $c->srtk[1] = 0; } // sortkey 0 : dtstart if (FALSE !== ($d = $c->getProperty('X-CURRENT-DTEND'))) { $c->srtk[1] = ICalUtilityFunctions::_strdate2date($d[1]); // sortkey 1 : dtend/due(/dtstart+duration) unset($c->srtk[1]['unparsedtext']); } elseif (FALSE === ($c->srtk[1] = $c->getProperty('dtend'))) { if (FALSE !== ($d = $c->getProperty('X-CURRENT-DUE'))) { $c->srtk[1] = ICalUtilityFunctions::_strdate2date($d[1]); unset($c->srtk[1]['unparsedtext']); } elseif (FALSE === ($c->srtk[1] = $c->getProperty('due'))) { if (FALSE === ($c->srtk[1] = $c->getProperty('duration', FALSE, FALSE, TRUE))) { $c->srtk[1] = 0; } } } if (FALSE === ($c->srtk[2] = $c->getProperty('created'))) { // sortkey 2 : created/dtstamp if (FALSE === ($c->srtk[2] = $c->getProperty('dtstamp'))) { $c->srtk[2] = 0; } } if (FALSE === ($c->srtk[3] = $c->getProperty('uid'))) { // sortkey 3 : uid $c->srtk[3] = 0; } } // end foreach( $this->components as & $c /* sort */ usort($this->components, array('ICalUtilityFunctions', '_cmpfcn')); } }
/** * set calendar component property trigger * * @author Kjell-Inge Gustafsson, kigkonsult <*****@*****.**> * @since 2.14.1 - 2012-09-20 * @param mixed $year * @param mixed $month optional * @param int $day optional * @param int $week optional * @param int $hour optional * @param int $min optional * @param int $sec optional * @param bool $relatedStart optional * @param bool $before optional * @param array $params optional * @return bool */ function setTrigger($year, $month = null, $day = null, $week = FALSE, $hour = FALSE, $min = FALSE, $sec = FALSE, $relatedStart = TRUE, $before = TRUE, $params = FALSE) { if (empty($year) && empty($month) && empty($day) && empty($week) && empty($hour) && empty($min) && empty($sec)) { if ($this->getConfig('allowEmpty')) { $this->trigger = array('value' => null, 'params' => ICalUtilityFunctions::_setParams($params)); return TRUE; } else { return FALSE; } } if (ICalUtilityFunctions::_isArrayTimestampDate($year)) { // timestamp UTC $params = ICalUtilityFunctions::_setParams($month); $date = ICalUtilityFunctions::_timestamp2date($year, 7); foreach ($date as $k => $v) { ${$k} = $v; } } elseif (is_array($year) && (is_array($month) || empty($month))) { $params = ICalUtilityFunctions::_setParams($month); if (!(array_key_exists('year', $year) && array_key_exists('month', $year) && array_key_exists('day', $year))) { // when this must be a duration if (isset($params['RELATED']) && 'END' == strtoupper($params['RELATED'])) { $relatedStart = FALSE; } else { $relatedStart = array_key_exists('relatedStart', $year) && TRUE !== $year['relatedStart'] ? FALSE : TRUE; } $before = array_key_exists('before', $year) && TRUE !== $year['before'] ? FALSE : TRUE; } $SSYY = array_key_exists('year', $year) ? $year['year'] : null; $month = array_key_exists('month', $year) ? $year['month'] : null; $day = array_key_exists('day', $year) ? $year['day'] : null; $week = array_key_exists('week', $year) ? $year['week'] : null; $hour = array_key_exists('hour', $year) ? $year['hour'] : 0; //null; $min = array_key_exists('min', $year) ? $year['min'] : 0; //null; $sec = array_key_exists('sec', $year) ? $year['sec'] : 0; //null; $year = $SSYY; } elseif (is_string($year) && (is_array($month) || empty($month))) { // duration or date in a string $params = ICalUtilityFunctions::_setParams($month); if (in_array($year[0], array('P', '+', '-'))) { // duration $relatedStart = isset($params['RELATED']) && 'END' == strtoupper($params['RELATED']) ? FALSE : TRUE; $before = '-' == $year[0] ? TRUE : FALSE; if ('P' != $year[0]) { $year = substr($year, 1); } $date = ICalUtilityFunctions::_durationStr2arr($year); } else { // date $date = ICalUtilityFunctions::_strdate2date($year, 7); } unset($year, $month, $day, $date['unparsedtext']); if (empty($date)) { $sec = 0; } else { foreach ($date as $k => $v) { ${$k} = $v; } } } else { // single values in function input parameters $params = ICalUtilityFunctions::_setParams($params); } if (!empty($year) && !empty($month) && !empty($day)) { // date $params['VALUE'] = 'DATE-TIME'; $hour = $hour ? $hour : 0; $min = $min ? $min : 0; $sec = $sec ? $sec : 0; $this->trigger = array('params' => $params); $this->trigger['value'] = array('year' => $year, 'month' => $month, 'day' => $day, 'hour' => $hour, 'min' => $min, 'sec' => $sec, 'tz' => 'Z'); return TRUE; } elseif (empty($year) && empty($month) && (!empty($week) || 0 == $week || (!empty($day) || 0 == $day) || (!empty($hour) || 0 == $hour) || (!empty($min) || 0 == $min) || (!empty($sec) || 0 == $sec))) { unset($params['RELATED']); // set at output creation (END only) unset($params['VALUE']); // 'DURATION' default $this->trigger = array('params' => $params); $this->trigger['value'] = array(); if (!empty($week)) { $this->trigger['value']['week'] = $week; } if (!empty($day)) { $this->trigger['value']['day'] = $day; } if (!empty($hour)) { $this->trigger['value']['hour'] = $hour; } if (!empty($min)) { $this->trigger['value']['min'] = $min; } if (!empty($sec)) { $this->trigger['value']['sec'] = $sec; } if (empty($this->trigger['value'])) { $this->trigger['value']['sec'] = 0; $before = FALSE; } $relatedStart = FALSE !== $relatedStart ? TRUE : FALSE; $before = FALSE !== $before ? TRUE : FALSE; $this->trigger['value']['relatedStart'] = $relatedStart; $this->trigger['value']['before'] = $before; return TRUE; } return FALSE; }