Habe mir ein Script, mit anregung aus verschiedensten Beispielen, geschrieben das mit hilfe des ZEND-Framework die Kalenderdaten von Google abholt, zwischenspeichert, parst und formatiert ausgibt. Mit hilfe des Plugin "runPHP" includiere ich mir das Script an der von mir gewünschten Stelle.
Würde aus dem Beispiel gerne ein vollwertiges Plugin schreiben bin aber blutiger Wordpressanfänger. Vielleicht hat ja der eine oder andere lust mit unter die Arme zu greifen.
Heiko
PHP
<?php
//header ('Content-Type: text/html; charset=utf-8');
require_once ('Zend/Loader.php');
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Date');
Zend_Loader::loadClass('Zend_Cache');
$conf_calenders = array();
$conf_cache = true;
// Kalender private XML-Feed 1
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 2
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 3
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 4
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 5
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 6
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 7
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 8
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 9
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
// Kalender private XML-Feed 10
$conf_calenders[] = 'http://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic';
foreach ($conf_calenders as $calender) {
if (preg_match('/[ical|feeds]\/(.*)?\/(.*)?\//', $calender, $cal)) {
$calenders[] = Array(
'user' => $cal[1],
'key' => $cal[2],
);
}
}
$frontendOptions = array(
'lifetime' => 7200, // in Sekunden
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => './gcal_cache/' //Cache Verzeichnis mit den entsprechenden Schreibrechten
);
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
$startDate=date("Y-m-d");
$endDate=date("Y-m-d", mktime(0, 0, 0, date("m")+12, date("d"), date("Y")));
foreach ($calenders as $calender) {
if (!$conf_cache) {
$cache->remove(md5($calender['user']));
}
if(!$eventFeed = $cache->load(md5($calender['user']))) {
$gdataCal = new Zend_Gdata_Calendar($client);
$query = $gdataCal->newEventQuery();
$query->setUser($calender['user']);
$query->setVisibility($calender['key']);
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setStartMin($startDate);
$query->setStartMax($endDate);
$eventFeed = @$gdataCal->getCalendarEventFeed($query);
if ($conf_cache) {
$cache->save($eventFeed, md5($calender['user']));
}
}
foreach ($eventFeed as $eintrag) {
if ($eintrag->eventStatus->value != 'http://schemas.google.com/g/2005#event.canceled') {
$titel = (string) $eintrag->title;
$ort = (string) $eintrag->where[0];
$beschreibung = (string) $eintrag->content;
foreach ($eintrag->when as $when) {
$event['titel'][] = $titel;
$event['ort'][] = $ort;
$event['beschreibung'][] = $beschreibung;
$event['start'][] = $when->startTime;
$event['start_de'][] = (string) new Zend_Date($when->startTime,Zend_Date::ISO_8601, 'de_DE');
$event['ende'][] = $when->endTime;
$event['ende_de'][] = (string) new Zend_Date($when->endTime,Zend_Date::ISO_8601, 'de_DE');
}
}
}
}
function time_format($start,$ende) {
list($start_datum, $start_zeit) = explode(" ", $start);
list($start_datum_tag, $start_datum_monat, $start_datum_jahr) = explode(".", $start_datum);
list($start_zeit_stunde, $start_zeit_minute, $start_zeit_sekunde) = explode(":", $start_zeit);
list($ende_datum, $ende_zeit) = explode(" ", $ende);
list($ende_datum_tag, $ende_datum_monat, $ende_datum_jahr) = explode(".", $ende_datum);
list($ende_zeit_stunde, $ende_zeit_minute, $ende_zeit_sekunde) = explode(":", $ende_zeit);
if (($start_datum_jahr==$ende_datum_jahr) && ($start_datum_monat==$ende_datum_monat) && ($start_datum_tag==($ende_datum_tag-1)) && ($start_zeit=="00:00:00") && ($ende_zeit=="00:00:00")) {
$out=$start_datum.", ganztägig.\r\n";
} else {
if (($start_datum_jahr==$ende_datum_jahr) && ($start_datum_monat==$ende_datum_monat) && ($start_datum_tag==$ende_datum_tag) && ($start_zeit!=$ende_zeit)) {
$out=$start_datum." ".$start_zeit_stunde.":".$start_zeit_minute." Uhr bis ".$ende_zeit_stunde.":".$ende_zeit_minute." Uhr\r\n";
} else {
$out=$start." Uhr bis .".$ende." Uhr\r\n";
}
}
return $out;
}
if (is_array($event['start'])) {
asort($event['start'],SORT_DESC);
foreach ($event['start'] as $key => $value) {
echo "<p>";
if ($event['titel'][$key]!='') { echo $event['titel'][$key]."<br />\r\n";}
if ($event['beschreibung'][$key]!='') { echo $event['beschreibung'][$key]."<br />\r\n";}
if ($event['ort'][$key]!='') { echo $event['ort'][$key]."<br />\r\n";}
echo time_format($event['start_de'][$key],$event['ende_de'][$key]);
echo "</p>\r\n";
}
}
?>
Alles anzeigen