예제 #1
0
 /**
  * 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);
 }
예제 #2
0
파일: VCalendar.php 프로젝트: ephp/cal
 /**
  * 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'));
     }
 }
예제 #3
0
 /**
  * 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;
 }