예제 #1
0
 /**
  * @param $row - array with :
  * // minimum for invitation http://www.ietf.org/rfc/rfc5546.txt [Page 20]
  *  SUMMARY
  *  DTSTAMP
  *  DTSTART
  *  DTEND
  *  UID
  *
  * // extra params:
  *
  *
  * @param $organizer - array of organizer contain email as attendee and fullname as property column
  * @param $attendees - array of arrays with attendees (attendee, property)
  * @return string
  */
 private function renderRowToInvitation($row, $organizer, $attendees)
 {
     $status = 'TENTATIVE';
     $calendar = new vCalendar();
     $calendar->AddProperty("METHOD", "REQUEST");
     $event = new vComponent();
     $event->SetType("VEVENT");
     $event->AddProperty("SUMMARY", $row->summary);
     $event->AddProperty("DTSTAMP", $row->dtstamp);
     $event->AddProperty("DTSTART", $row->dtstart);
     $event->AddProperty("DTEND", $row->dtend);
     $event->AddProperty("UID", $row->uid);
     $event->AddProperty("EMAIL", $organizer->attendee);
     // url
     //$event->AddProperty("URL", "http://127.0.0.1/public.php?XDEBUG_SESSION_START=14830");
     $organizerproperty = null;
     if (isset($organizer->params) && $organizer->params != null) {
         $organizerproperty = array('CN' => $organizer->params);
     }
     $event->AddProperty("ORGANIZER", 'mailto:' . $organizer->attendee, $organizerproperty);
     $event->AddProperty("STATUS", $status);
     foreach ($attendees as $attendee) {
         $partstat = $attendee->partstat;
         $attendeePropertyArray = $this->extractParametersToArrayFromProperty($attendee->params);
         // add partstat from DB
         $attendeePropertyArray['PARTSTAT'] = $partstat;
         $event->AddProperty("ATTENDEE", $attendee->attendee, $attendeePropertyArray);
     }
     $calendar->AddComponent($event);
     $result = $calendar->render();
     return $result;
 }
예제 #2
0
function write_updated_zone($vtimezone, $tzid)
{
    global $new_zones, $modified_zones;
    if (empty($vtimezone)) {
        dbg_error_log('tz/updatecheck', 'Skipping zone "%s" - no data from server', $tzid);
        return;
    }
    $tzrow = fetch_db_zone($tzid);
    if (isset($tzrow) && $vtimezone == $tzrow->vtimezone) {
        dbg_error_log('tz/updatecheck', 'Skipping zone "%s" - no change', $tzid);
        return;
    }
    $vtz = new vCalendar($vtimezone);
    $last_modified = $vtz->GetPValue('LAST-MODIFIED');
    if (empty($last_modified)) {
        $last_modified = gmdate('Ymd\\THis\\Z');
        // Then it was probably that way when we last updated the data, too :-(
        if (!empty($tzrow)) {
            $old_vtz = new vCalendar($tzrow->vtimezone);
            $old_vtz->ClearProperties('LAST-MODIFIED');
            // We need to add & remove this property so the Render is equivalent.
            $vtz->AddProperty('LAST-MODIFIED', $last_modified);
            $vtz->ClearProperties('LAST-MODIFIED');
            if ($vtz->Render() == $old_vtz->Render()) {
                dbg_error_log('tz/updatecheck', 'Skipping zone "%s" - no change', $tzid);
                return;
            }
        }
        $vtz->AddProperty('LAST-MODIFIED', $last_modified);
    }
    dbg_error_log('tz/updatecheck', 'Writing %s zone for "%s"', empty($tzrow) ? "new" : "updated", $tzid);
    printf("Writing %s zone for '%s'\n", empty($tzrow) ? "new" : "updated", $tzid);
    $params = array(':tzid' => $tzid, ':olson_name' => $tzid, ':vtimezone' => $vtz->Render(), ':last_modified' => $last_modified, ':etag' => md5($vtz->Render()));
    if (empty($tzrow)) {
        $new_zones++;
        $sql = 'INSERT INTO timezones(tzid,active,olson_name,last_modified,etag,vtimezone) ';
        $sql .= 'VALUES(:tzid,TRUE,:olson_name,:last_modified,:etag,:vtimezone)';
    } else {
        $modified_zones++;
        $sql = 'UPDATE timezones SET active=TRUE, olson_name=:olson_name, last_modified=:last_modified, ';
        $sql .= 'etag=:etag, vtimezone=:vtimezone WHERE tzid=:tzid';
    }
    $qry = new AwlQuery($sql, $params);
    $qry->Exec('tz/update', __LINE__, __FILE__);
}
예제 #3
0
파일: get.php 프로젝트: derekyu1437/davical
$qry = new AwlQuery($sql, $params);
if (!$qry->Exec()) {
    exit(1);
}
if ($qry->rows() < 1) {
    $sql = 'SELECT our_tzno, tzid, active, olson_name, vtimezone, etag, ';
    $sql .= 'to_char(last_modified,\'Dy, DD Mon IYYY HH24:MI:SS "GMT"\') AS last_modified ';
    $sql .= 'FROM timezones JOIN tz_aliases USING(our_tzno) WHERE tzalias=:tzid';
    if (!$qry->Exec()) {
        exit(1);
    }
    if ($qry->rows() < 1) {
        $request->DoResponse(404);
    }
}
$tz = $qry->Fetch();
$vtz = new vCalendar($tz->vtimezone);
$vtz->AddProperty('TZ-URL', $c->protocol_server_port . $_SERVER['REQUEST_URI']);
$vtz->AddProperty('TZNAME', $tz->olson_name);
if ($qry->QDo('SELECT * FROM tz_localnames WHERE our_tzno = :our_tzno', array(':our_tzno' => $tz->our_tzno)) && $qry->rows()) {
    while ($name = $qry->Fetch()) {
        if (strpos($_SERVER['QUERY_STRING'], 'lang=' . $name->locale) !== false) {
            $vtz->AddProperty('TZNAME', $name->localised_name, array('LANGUAGE', str_replace('_', '-', $name->locale)));
        }
    }
}
header('ETag: "' . $tz->etag . '"');
header('Last-Modified: ' . $tz->last_modified);
header('Content-Disposition: Attachment; Filename="' . str_replace('/', '-', $tzid . '.ics"'));
$request->DoResponse(200, $vtz->Render(), 'text/calendar; charset=UTF-8');
exit(0);