/**
  * 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;
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * 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;
 }