/** * set calendar component property rdate * * @author Kjell-Inge Gustafsson, kigkonsult <*****@*****.**> * @since 2.21.11 - 2015-03-10 * @param array $rdates * @param array $params * @param integer $index * @uses calendarComponent::getConfig() * @uses iCalUtilityFunctions::_setMval() * @uses calendarComponent::$rdate * @uses iCalUtilityFunctions::_setParams() * @uses calendarComponent::$objName * @uses iCalUtilityFunctions::_isArrayDate() * @uses iCalUtilityFunctions::_chkdatecfg() * @uses iCalUtilityFunctions::_existRem() * @uses iCalUtilityFunctions::_strDate2arr() * @uses iCalUtilityFunctions::_isArrayTimestampDate() * @uses iCalUtilityFunctions::_isOffset() * @uses iCalUtilityFunctions::_timestamp2date() * @uses iCalUtilityFunctions::_chkDateArr() * @uses iCalUtilityFunctions::$fmt * @uses iCalUtilityFunctions::_strdate2date() * @uses iCalUtilityFunctions::_duration2arr() * @uses iCalUtilityFunctions::_durationStr2arr() * @return bool */ function setRdate($rdates, $params = FALSE, $index = FALSE) { if (empty($rdates)) { if ($this->getConfig('allowEmpty')) { iCalUtilityFunctions::_setMval($this->rdate, '', $params, FALSE, $index); return TRUE; } else { return FALSE; } } $input = array('params' => iCalUtilityFunctions::_setParams($params, array('VALUE' => 'DATE-TIME'))); if (in_array($this->objName, array('vtimezone', 'standard', 'daylight'))) { unset($input['params']['TZID']); $input['params']['VALUE'] = 'DATE-TIME'; } $zArr = array('GMT', 'UTC', 'Z'); $toZ = isset($params['TZID']) && in_array(strtoupper($params['TZID']), $zArr) ? TRUE : FALSE; /* check if PERIOD, if not set */ if ((!isset($input['params']['VALUE']) || !in_array($input['params']['VALUE'], array('DATE', 'PERIOD'))) && isset($rdates[0]) && is_array($rdates[0]) && 2 == count($rdates[0]) && isset($rdates[0][0]) && isset($rdates[0][1]) && !isset($rdates[0]['timestamp']) && (is_array($rdates[0][0]) && (isset($rdates[0][0]['timestamp']) || iCalUtilityFunctions::_isArrayDate($rdates[0][0])) || is_string($rdates[0][0]) && 8 <= strlen(trim($rdates[0][0]))) && (is_array($rdates[0][1]) || is_string($rdates[0][1]) && 3 <= strlen(trim($rdates[0][1])))) { $input['params']['VALUE'] = 'PERIOD'; } /* check 1:st date, upd. $parno (opt) and save ev. timezone **/ $date = reset($rdates); if (isset($input['params']['VALUE']) && 'PERIOD' == $input['params']['VALUE']) { // PERIOD $date = reset($date); } iCalUtilityFunctions::_chkdatecfg($date, $parno, $input['params']); iCalUtilityFunctions::_existRem($input['params'], 'VALUE', 'DATE-TIME'); // remove default foreach ($rdates as $rpix => $theRdate) { $inputa = null; iCalUtilityFunctions::_strDate2arr($theRdate); if (is_array($theRdate)) { if (isset($input['params']['VALUE']) && 'PERIOD' == $input['params']['VALUE']) { // PERIOD foreach ($theRdate as $rix => $rPeriod) { iCalUtilityFunctions::_strDate2arr($theRdate); if (is_array($rPeriod)) { if (iCalUtilityFunctions::_isArrayTimestampDate($rPeriod)) { // timestamp if (isset($rPeriod['tz']) && !iCalUtilityFunctions::_isOffset($rPeriod['tz'])) { if (isset($input['params']['TZID'])) { $rPeriod['tz'] = $input['params']['TZID']; } else { $input['params']['TZID'] = $rPeriod['tz']; } } $inputab = iCalUtilityFunctions::_timestamp2date($rPeriod, $parno); } elseif (iCalUtilityFunctions::_isArrayDate($rPeriod)) { $d = 3 < count($rPeriod) ? iCalUtilityFunctions::_chkDateArr($rPeriod, $parno) : iCalUtilityFunctions::_chkDateArr($rPeriod, 6); if (isset($d['tz']) && 'Z' != $d['tz'] && iCalUtilityFunctions::_isOffset($d['tz'])) { $strdate = sprintf(iCalUtilityFunctions::$fmt['YmdHise'], (int) $d['year'], (int) $d['month'], (int) $d['day'], (int) $d['hour'], (int) $d['min'], (int) $d['sec'], $d['tz']); $inputab = iCalUtilityFunctions::_strdate2date($strdate, 7); unset($inputab['unparsedtext']); } else { $inputab = $d; } } elseif (1 == count($rPeriod) && 8 <= strlen(reset($rPeriod))) { // text-date $inputab = iCalUtilityFunctions::_strdate2date(reset($rPeriod), $parno); unset($inputab['unparsedtext']); } else { // array format duration $inputab = iCalUtilityFunctions::_duration2arr($rPeriod); } } elseif (3 <= strlen(trim($rPeriod)) && in_array($rPeriod[0], array('P', '+', '-'))) { if ('P' != $rPeriod[0]) { $rPeriod = substr($rPeriod, 1); } $inputab = iCalUtilityFunctions::_durationStr2arr($rPeriod); } elseif (8 <= strlen(trim($rPeriod))) { // text date ex. 2006-08-03 10:12:18 $inputab = iCalUtilityFunctions::_strdate2date($rPeriod, $parno); unset($inputab['unparsedtext']); } if (0 == $rpix && 0 == $rix) { if (isset($inputab['tz']) && in_array(strtoupper($inputab['tz']), $zArr)) { $inputab['tz'] = 'Z'; $toZ = TRUE; } } else { if (isset($inputa[0]['tz']) && 'Z' == $inputa[0]['tz'] && isset($inputab['year'])) { $inputab['tz'] = 'Z'; } else { unset($inputab['tz']); } } if ($toZ && isset($inputab['year'])) { $inputab['tz'] = 'Z'; } $inputa[] = $inputab; } } elseif (iCalUtilityFunctions::_isArrayTimestampDate($theRdate)) { // timestamp if (isset($theRdate['tz']) && !iCalUtilityFunctions::_isOffset($theRdate['tz'])) { if (isset($input['params']['TZID'])) { $theRdate['tz'] = $input['params']['TZID']; } else { $input['params']['TZID'] = $theRdate['tz']; } } $inputa = iCalUtilityFunctions::_timestamp2date($theRdate, $parno); } else { // date[-time] $inputa = iCalUtilityFunctions::_chkDateArr($theRdate, $parno); if (isset($inputa['tz']) && 'Z' != $inputa['tz'] && iCalUtilityFunctions::_isOffset($inputa['tz'])) { $strdate = sprintf(iCalUtilityFunctions::$fmt['YmdHise'], (int) $inputa['year'], (int) $inputa['month'], (int) $inputa['day'], (int) $inputa['hour'], (int) $inputa['min'], (int) $inputa['sec'], $inputa['tz']); $inputa = iCalUtilityFunctions::_strdate2date($strdate, 7); unset($inputa['unparsedtext']); } } } elseif (8 <= strlen(trim($theRdate))) { // text date ex. 2006-08-03 10:12:18 $inputa = iCalUtilityFunctions::_strdate2date($theRdate, $parno); unset($inputa['unparsedtext']); if ($toZ) { $inputa['tz'] = 'Z'; } } if (!isset($input['params']['VALUE']) || 'PERIOD' != $input['params']['VALUE']) { // no PERIOD if (0 == $rpix && !$toZ) { $toZ = isset($inputa['tz']) && in_array(strtoupper($inputa['tz']), $zArr) ? TRUE : FALSE; } if ($toZ) { $inputa['tz'] = 'Z'; } if (3 == $parno) { unset($inputa['hour'], $inputa['min'], $inputa['sec'], $inputa['tz']); } elseif (isset($inputa['tz'])) { $inputa['tz'] = (string) $inputa['tz']; } if (isset($input['params']['TZID']) || isset($input['value'][0]) && !isset($input['value'][0]['tz'])) { if (!$toZ) { unset($inputa['tz']); } } } $input['value'][] = $inputa; } if (3 == $parno) { $input['params']['VALUE'] = 'DATE'; unset($input['params']['TZID']); } if ($toZ) { unset($input['params']['TZID']); } iCalUtilityFunctions::_setMval($this->rdate, $input['value'], $input['params'], FALSE, $index); return TRUE; }
/** * convert timestamp to date array, default UTC or adjusted for offset/timezone * * @author Kjell-Inge Gustafsson, kigkonsult <*****@*****.**> * @since 2.15.1 - 2012-10-17 * @param mixed $timestamp * @param int $parno * @param string $wtz * @return array */ public static function _timestamp2date($timestamp, $parno = 6, $wtz = null) { if (is_array($timestamp)) { $tz = isset($timestamp['tz']) ? $timestamp['tz'] : $wtz; $timestamp = $timestamp['timestamp']; } $tz = isset($tz) ? $tz : $wtz; if (empty($tz) || 'Z' == $tz || 'GMT' == strtoupper($tz)) { $tz = 'UTC'; } elseif (iCalUtilityFunctions::_isOffset($tz)) { $offset = iCalUtilityFunctions::_tz2offset($tz); $tz = 'UTC'; } try { $d = new DateTime("@{$timestamp}"); // set UTC date if (isset($offset) && 0 != $offset) { // adjust for offset $d->modify($offset . ' seconds'); } elseif ('UTC' != $tz) { $d->setTimezone(new DateTimeZone($tz)); } // convert to local date $date = $d->format('Y-m-d-H-i-s'); unset($d); } catch (Exception $e) { $date = date('Y-m-d-H-i-s', $timestamp); } $date = explode('-', $date); $output = array('year' => $date[0], 'month' => $date[1], 'day' => $date[2]); if (3 != $parno) { $output['hour'] = $date[3]; $output['min'] = $date[4]; $output['sec'] = $date[5]; if ('UTC' == $tz && (!isset($offset) || 0 == $offset)) { $output['tz'] = 'Z'; } } return $output; }
/** * set calendar component property rdate * * @author Kjell-Inge Gustafsson, kigkonsult <*****@*****.**> * @since 2.5.1 - 2008-11-07 * @param array $rdates * @param array $params, optional * @param integer $index, optional * @return bool */ function setRdate($rdates, $params = FALSE, $index = FALSE) { if (empty($rdates)) { if ($this->getConfig('allowEmpty')) { iCalUtilityFunctions::_setMval($this->rdate, null, $params, FALSE, $index); return TRUE; } else { return FALSE; } } $input = array('params' => iCalUtilityFunctions::_setParams($params, array('VALUE' => 'DATE-TIME'))); if (in_array($this->objName, array('vtimezone', 'standard', 'daylight'))) { unset($input['params']['TZID']); $input['params']['VALUE'] = 'DATE-TIME'; } /* check if PERIOD, if not set */ if ((!isset($input['params']['VALUE']) || !in_array($input['params']['VALUE'], array('DATE', 'PERIOD'))) && isset($rdates[0]) && is_array($rdates[0]) && 2 == count($rdates[0]) && isset($rdates[0][0]) && isset($rdates[0][1]) && !isset($rdates[0]['timestamp']) && (is_array($rdates[0][0]) && (isset($rdates[0][0]['timestamp']) || iCalUtilityFunctions::_isArrayDate($rdates[0][0])) || is_string($rdates[0][0]) && 8 <= strlen(trim($rdates[0][0]))) && (is_array($rdates[0][1]) || is_string($rdates[0][1]) && 3 <= strlen(trim($rdates[0][1])))) { $input['params']['VALUE'] = 'PERIOD'; } /* check 1:st date, upd. $parno (opt) and save ev. timezone **/ $date = reset($rdates); if (isset($input['params']['VALUE']) && 'PERIOD' == $input['params']['VALUE']) { // PERIOD $date = reset($date); } iCalUtilityFunctions::_chkdatecfg($date, $parno, $input['params']); if (in_array($this->objName, array('vtimezone', 'standard', 'daylight'))) { unset($input['params']['TZID']); } iCalUtilityFunctions::_existRem($input['params'], 'VALUE', 'DATE-TIME'); // remove default foreach ($rdates as $rpix => $theRdate) { $inputa = null; if (is_array($theRdate)) { if (isset($input['params']['VALUE']) && 'PERIOD' == $input['params']['VALUE']) { // PERIOD foreach ($theRdate as $rix => $rPeriod) { if (is_array($rPeriod)) { if (iCalUtilityFunctions::_isArrayTimestampDate($rPeriod)) { // timestamp $inputab = isset($rPeriod['tz']) ? iCalUtilityFunctions::_timestamp2date($rPeriod, $parno) : iCalUtilityFunctions::_timestamp2date($rPeriod, 6); } elseif (iCalUtilityFunctions::_isArrayDate($rPeriod)) { $inputab = 3 < count($rPeriod) ? iCalUtilityFunctions::_date_time_array($rPeriod, $parno) : iCalUtilityFunctions::_date_time_array($rPeriod, 6); } elseif (1 == count($rPeriod) && 8 <= strlen(reset($rPeriod))) { // text-date $inputab = iCalUtilityFunctions::_date_time_string(reset($rPeriod), $parno); } else { // array format duration $inputab = iCalUtilityFunctions::_duration_array($rPeriod); } } elseif (3 <= strlen(trim($rPeriod)) && in_array($rPeriod[0], array('P', '+', '-'))) { if ('P' != $rPeriod[0]) { $rPeriod = substr($rPeriod, 1); } $inputab = iCalUtilityFunctions::_duration_string($rPeriod); } elseif (8 <= strlen(trim($rPeriod))) { // text date ex. 2006-08-03 10:12:18 $inputab = iCalUtilityFunctions::_date_time_string($rPeriod, $parno); } if (isset($input['params']['TZID']) || isset($inputab['tz']) && !iCalUtilityFunctions::_isOffset($inputab['tz']) || isset($inputa[0]) && !isset($inputa[0]['tz']) || isset($inputa[0]['tz']) && !iCalUtilityFunctions::_isOffset($inputa[0]['tz'])) { unset($inputab['tz']); } $inputa[] = $inputab; } } elseif (iCalUtilityFunctions::_isArrayTimestampDate($theRdate)) { // timestamp $inputa = iCalUtilityFunctions::_timestamp2date($theRdate, $parno); } else { // date[-time] $inputa = iCalUtilityFunctions::_date_time_array($theRdate, $parno); } } elseif (8 <= strlen(trim($theRdate))) { // text date ex. 2006-08-03 10:12:18 $inputa = iCalUtilityFunctions::_date_time_string($theRdate, $parno); } if (!isset($input['params']['VALUE']) || 'PERIOD' != $input['params']['VALUE']) { // no PERIOD if (3 == $parno) { unset($inputa['hour'], $inputa['min'], $inputa['sec'], $inputa['tz']); } elseif (isset($inputa['tz'])) { $inputa['tz'] = (string) $inputa['tz']; } if (isset($input['params']['TZID']) || isset($inputa['tz']) && !iCalUtilityFunctions::_isOffset($inputa['tz']) || isset($input['value'][0]) && !isset($input['value'][0]['tz']) || isset($input['value'][0]['tz']) && !iCalUtilityFunctions::_isOffset($input['value'][0]['tz'])) { unset($inputa['tz']); } } $input['value'][] = $inputa; } if (3 == $parno) { $input['params']['VALUE'] = 'DATE'; unset($input['params']['TZID']); } iCalUtilityFunctions::_setMval($this->rdate, $input['value'], $input['params'], FALSE, $index); return TRUE; }
/** * convert format for input date (UTC) to internal date with parameters * * @author Kjell-Inge Gustafsson, kigkonsult <*****@*****.**> * @since 2.11.8 - 2012-01-19 * @param mixed $year * @param mixed $month optional * @param int $day optional * @param int $hour optional * @param int $min optional * @param int $sec optional * @param array $params optional * @return array */ public static function _setDate2($year, $month = FALSE, $day = FALSE, $hour = FALSE, $min = FALSE, $sec = FALSE, $params = FALSE) { $input = null; iCalUtilityFunctions::_strDate2arr($year); if (iCalUtilityFunctions::_isArrayDate($year)) { $input['value'] = iCalUtilityFunctions::_date_time_array($year, 7); $input['params'] = iCalUtilityFunctions::_setParams($month, array('VALUE' => 'DATE-TIME')); } elseif (iCalUtilityFunctions::_isArrayTimestampDate($year)) { $input['value'] = iCalUtilityFunctions::_timestamp2date($year, 7); $input['params'] = iCalUtilityFunctions::_setParams($month, array('VALUE' => 'DATE-TIME')); } elseif (8 <= strlen(trim($year))) { // ex. 2006-08-03 10:12:18 $input['value'] = iCalUtilityFunctions::_date_time_string($year, 7); unset($input['value']['unparsedtext']); $input['params'] = iCalUtilityFunctions::_setParams($month, array('VALUE' => 'DATE-TIME')); } else { $input['value'] = array('year' => $year, 'month' => $month, 'day' => $day, 'hour' => $hour, 'min' => $min, 'sec' => $sec); $input['params'] = iCalUtilityFunctions::_setParams($params, array('VALUE' => 'DATE-TIME')); } $parno = iCalUtilityFunctions::_existRem($input['params'], 'VALUE', 'DATE-TIME', 7); // remove default if (!isset($input['value']['hour'])) { $input['value']['hour'] = 0; } if (!isset($input['value']['min'])) { $input['value']['min'] = 0; } if (!isset($input['value']['sec'])) { $input['value']['sec'] = 0; } if (isset($input['params']['TZID']) && !empty($input['params']['TZID'])) { if ('Z' != $input['params']['TZID'] && iCalUtilityFunctions::_isOffset($input['params']['TZID'])) { // utc offset in TZID to tz $input['value']['tz'] = $input['params']['TZID']; unset($input['params']['TZID']); } elseif (in_array(strtoupper($input['params']['TZID']), array('GMT', 'UTC', 'Z'))) { // time zone Z $input['value']['tz'] = 'Z'; unset($input['params']['TZID']); } } if (!isset($input['value']['tz']) || !iCalUtilityFunctions::_isOffset($input['value']['tz'])) { $input['value']['tz'] = 'Z'; } return $input; }
/** * convert format for input date (UTC) to internal date with parameters * * @author Kjell-Inge Gustafsson <*****@*****.**> * @since 2.4.17 - 2008-10-31 * @param mixed $year * @param mixed $month optional * @param int $day optional * @param int $hour optional * @param int $min optional * @param int $sec optional * @param array $params optional * @return array */ public static function _setDate2($year, $month = FALSE, $day = FALSE, $hour = FALSE, $min = FALSE, $sec = FALSE, $params = FALSE) { $input = null; if (iCalUtilityFunctions::_isArrayDate($year)) { $input['value'] = iCalUtilityFunctions::_date_time_array($year, 7); $input['params'] = iCalUtilityFunctions::_setParams($month, array('VALUE' => 'DATE-TIME')); } elseif (iCalUtilityFunctions::_isArrayTimestampDate($year)) { $input['value'] = iCalUtilityFunctions::_timestamp2date($year, 7); $input['params'] = iCalUtilityFunctions::_setParams($month, array('VALUE' => 'DATE-TIME')); } elseif (8 <= strlen(trim($year))) { // ex. 2006-08-03 10:12:18 $input['value'] = iCalUtilityFunctions::_date_time_string($year, 7); $input['params'] = iCalUtilityFunctions::_setParams($month, array('VALUE' => 'DATE-TIME')); } else { $input['value'] = array('year' => $year, 'month' => $month, 'day' => $day, 'hour' => $hour, 'min' => $min, 'sec' => $sec); $input['params'] = iCalUtilityFunctions::_setParams($params, array('VALUE' => 'DATE-TIME')); } $parno = iCalUtilityFunctions::_existRem($input['params'], 'VALUE', 'DATE-TIME', 7); // remove default if (!isset($input['value']['hour'])) { $input['value']['hour'] = 0; } if (!isset($input['value']['min'])) { $input['value']['min'] = 0; } if (!isset($input['value']['sec'])) { $input['value']['sec'] = 0; } if (!isset($input['value']['tz']) || !iCalUtilityFunctions::_isOffset($input['value']['tz'])) { $input['value']['tz'] = 'Z'; } return $input; }