Beispiel #1
0
  public function set_attribute($attr, $value, $params=NULL) {
    switch ($attr) {
    case 'UID':
      if (strpos($value, '@') !== FALSE) {
        $this->setUID(substr($value, 0, strpos($value, '@')));
      } else {
        $this->setUID($value);
      }
      break;
    case 'RECURRENCE-ID':
      $this->recurid = $value;
      break;
    case 'DESCRIPTION':
      $this->setDescription(iCalendar::ical_unescape_text($value));
      break;
    case 'LOCATION':
      $this->setLocation(iCalendar::ical_unescape_text($value));
      break;
    case 'SUMMARY':
      $this->setSummary(iCalendar::ical_unescape_text($value));
      break;
    case 'CATEGORIES':
        $categories = explode(',', $value);
        $this->categories = array();
        foreach ($categories as $category) {
            $this->categories[] = trim(iCalendar::ical_unescape_text($category));
        }
        break;
    case 'URL':
        $this->url = iCalendar::ical_unescape_text($value);
        break;
    case 'SEQUENCE':
        $this->sequence = $value;
        break;
    case 'STATUS':
        $this->status = $value;
        break;
    case 'CREATED':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }
        $this->created = $datetime->format('U');
        break;
    case 'LAST-MODIFIED':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }
        $this->updated = $datetime->format('U');
        break;
    case 'DTSTAMP':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }
      $this->dtstamp = $datetime->format('U');
        break;
    case 'DTSTART':
    case 'DTEND':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }

      $timestamp = $datetime->format('U');

      if (!$this->range) {
        if (strpos($value, 'T')!== FALSE) {
            $this->setRange(new TimeRange($timestamp));
        } else {
            $this->setRange(new DayRange($timestamp));
        }
        
        if (isset($this->properties['duration'])) {
              $this->range->set_end($this->get_start() + $this->properties['duration']);
              unset($this->properties['duration']);
        }
      } else {
        if ($attr=='DTEND' && ($timestamp > $this->get_start()) && (($timestamp - $this->get_start()) % 86400 == 0)) {
            // make all day events end at 11:59:59 so they don't overlap next day
            $timestamp -= 1;
         }
         
         switch ($attr)
         {
            case 'DTSTART':
                $this->range->set_start($timestamp);
                $this->starttime= $timestamp;
                break;
            case 'DTEND':
                $this->range->set_end($timestamp);
                break;
         }
      }
      break;
    case 'TRANSP':
        $this->transparency = $value;
        break;
    case 'DURATION':
      // todo:
      // if this tag comes before DTSTART we will break
      if (preg_match('/^P([0-9]{1,2}[W])?([0-9]{1,3}[D])?([T]{0,1})?([0-9]{1,2}[H])?([0-9]{1,2}[M])?([0-9]{1,2}[S])?/', $value, $bits)) {
            $value = 0;
            switch (count($bits)) {
                case 7:
                    $value += $bits[6]; //seconds
                case 6:
                    $value += (60*$bits[5]); //minutes
                case 5:
                    $value += (3600*$bits[4]); //hours
                case 4:
                case 3:
                    $value += (86400*$bits[2]); //days
                case 2:
                   $value += (604800*$bits[1]);  //weeks
            }
      }

      if ($this->range) {
          $this->range->set_end($this->get_start() + $value);
      } else {      
          $this->properties['duration'] = $value;
      }
      break;
    case 'RRULE':
      $this->add_rrule($value);
      break;
    case 'EXDATE':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }

        $this->exdates[] = $datetime->format('U'); // start time
      break;
    case 'TZID': // this only gets called by ICalendar::__construct
      $this->tzid = $value;
      break;
    default:
        $this->properties[$attr] = iCalendar::ical_unescape_text($value);
        break;
    }
  }
Beispiel #2
0
 public function set_attribute($attr, $value, $params = NULL)
 {
     switch ($attr) {
         case 'UID':
             $this->setUID($value);
             break;
         case 'RECURRENCE-ID':
             $this->recurid = $value;
             break;
         case 'DESCRIPTION':
             $this->setDescription(iCalendar::ical_unescape_text($value));
             break;
         case 'LOCATION':
             $this->setLocation(iCalendar::ical_unescape_text($value));
             break;
         case 'GEO':
             if (is_array($value)) {
                 $this->setLocationCoordinates($value);
             } else {
                 if (is_string($value)) {
                     $this->geo = $value;
                 }
             }
             break;
         case 'SUMMARY':
             $this->setSummary(iCalendar::ical_unescape_text($value));
             break;
         case 'CATEGORIES':
             $categories = explode(',', $value);
             $this->categories = array();
             foreach ($categories as $category) {
                 $this->categories[] = trim(iCalendar::ical_unescape_text($category));
             }
             break;
         case 'URL':
             $this->url = iCalendar::ical_unescape_text($value);
             break;
         case 'SEQUENCE':
             $this->sequence = $value;
             break;
         case 'STATUS':
             $this->status = $value;
             break;
         case 'CREATED':
             if (array_key_exists('TZID', $params)) {
                 $timezone = self::getTimezoneForID($params['TZID']);
                 $datetime = new DateTime($value, $timezone);
             } else {
                 $datetime = new DateTime($value);
             }
             $this->created = $datetime->format('U');
             break;
         case 'LAST-MODIFIED':
             if (array_key_exists('TZID', $params)) {
                 $timezone = self::getTimezoneForID($params['TZID']);
                 $datetime = new DateTime($value, $timezone);
             } else {
                 $datetime = new DateTime($value);
             }
             $this->updated = $datetime->format('U');
             break;
         case 'DTSTAMP':
             if (array_key_exists('TZID', $params)) {
                 $timezone = self::getTimezoneForID($params['TZID']);
                 $datetime = new DateTime($value, $timezone);
             } else {
                 $datetime = new DateTime($value);
             }
             $this->dtstamp = $datetime->format('U');
             break;
         case 'DTSTART':
         case 'DTEND':
             $dayOnly = false;
             if (array_key_exists('TZID', $params)) {
                 $timezone = self::getTimezoneForID($params['TZID']);
                 $datetime = new DateTime($value, $timezone);
             } else {
                 $datetime = new DateTime($value);
             }
             $t = strpos($value, 'T');
             // if there is no "T" or if the "T" is at the end
             if ($t === FALSE || $t == strlen($value) - 1) {
                 $dayOnly = true;
             }
             $timestamp = $datetime->format('U');
             if ($attr == 'DTEND') {
                 if ($dayOnly) {
                     // make all day events end at 11:59:59 so they don't overlap next day
                     $timestamp -= 1;
                 }
             }
             if (!$this->range) {
                 $range = $dayOnly ? new DayRange($timestamp) : new TimeRange($timestamp);
                 $this->setRange($range);
                 if (isset($this->properties['duration'])) {
                     $this->range->set_icalendar_duration($this->properties['duration']);
                     unset($this->properties['duration']);
                 }
             } else {
                 switch ($attr) {
                     case 'DTSTART':
                         $this->set_start($timestamp, $dayOnly);
                         break;
                     case 'DTEND':
                         $this->set_end($timestamp, $dayOnly);
                         break;
                 }
             }
             break;
         case 'TRANSP':
             $this->transparency = $value;
             break;
         case 'DURATION':
             if ($this->range) {
                 $this->range->set_icalendar_duration($value);
             } else {
                 $this->properties['duration'] = $value;
             }
             break;
         case 'RRULE':
             $this->add_rrule($value);
             break;
         case 'EXDATE':
             if (array_key_exists('TZID', $params)) {
                 $timezone = self::getTimezoneForID($params['TZID']);
                 $datetime = new DateTime($value, $timezone);
             } else {
                 $datetime = new DateTime($value);
             }
             $this->exdates[] = $datetime->format('U');
             // start time
             break;
         case 'TZID':
             // this only gets called by ICalendar::__construct
             $this->tzid = $value;
             break;
         default:
             $this->properties[$attr] = iCalendar::ical_unescape_text($value);
             break;
     }
 }
  public function set_attribute($attr, $value, $params=NULL) {
    switch ($attr) {
    case 'UID':
      if (strpos($value, '@') !== FALSE) {
        $this->setUID(substr($value, 0, strpos($value, '@')));
      } else {
        $this->setUID($value);
      }
      break;
    case 'RECURRENCE-ID':
      $this->recurid = $value;
      break;
    case 'DESCRIPTION':
      $this->setDescription(iCalendar::ical_unescape_text($value));
      break;
    case 'LOCATION':
      $this->setLocation(iCalendar::ical_unescape_text($value));
      break;
    case 'SUMMARY':
      $this->setSummary(iCalendar::ical_unescape_text($value));
      break;
    case 'CATEGORIES':
        $categories = explode(',', $value);
        $this->categories = array();
        foreach ($categories as $category) {
            $this->categories[] = trim(iCalendar::ical_unescape_text($category));
        }
        break;
    case 'URL':
        $this->url = iCalendar::ical_unescape_text($value);
        break;
    case 'SEQUENCE':
        $this->sequence = $value;
        break;
    case 'STATUS':
        $this->status = $value;
        break;
    case 'CREATED':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }
        $this->created = $datetime->format('U');
        break;
    case 'LAST-MODIFIED':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }
        $this->updated = $datetime->format('U');
        break;
    case 'DTSTAMP':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }
      $this->dtstamp = $datetime->format('U');
        break;
    case 'DTSTART':
    case 'DTEND':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }

      $timestamp = $datetime->format('U');

      if (!$this->range) {
        if (strpos($value, 'T')!== FALSE) {
            $this->range = new TimeRange($timestamp);
        } else {
            $this->range = new DayRange($timestamp);
        }
      } else {
        if ($attr=='DTEND' && ($timestamp > $this->get_start()) && (($timestamp - $this->get_start()) % 86400 == 0)) {
            // make all day events end at 11:59:59 so they don't overlap next day
            $timestamp -= 1;
         }
         
         switch ($attr)
         {
            case 'DTSTART':
                $this->range->set_start($timestamp);
                break;
            case 'DTEND':
                $this->range->set_end($timestamp);
                break;
         }
      }
      break;
    case 'TRANSP':
        $this->transparency = $value;
        break;
    case 'DURATION':
      // todo:
      // if this tag comes before DTSTART we will break
      $this->range->set_end($this->get_start() + $value);
      break;
    case 'RRULE':
      $this->add_rrule($value);
      break;
    case 'EXDATE':
        if (array_key_exists('TZID', $params)) {
            $datetime = new DateTime($value, new DateTimeZone($params['TZID']));
        } else {
            $datetime = new DateTime($value);
        }

        $this->exdates[] = $datetime->format('U'); // start time
      break;
    case 'TZID': // this only gets called by ICalendar::__construct
      $this->tzid = $value;
      break;
    default:
        $this->properties[$attr] = iCalendar::ical_unescape_text($value);
        break;
    }
  }