Also hier noch mal das kompletter Script für den aktuellen und den nächsten Monat.
<?
/*=============================================
skrGoogleMonatskalender - Martin Heinzel - 29.11.2011
Version: 0.1
Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.
Änderungen
----------
tt.mm.yyyy von Version x.x -> x.x
Berschreibung:
================================================*/
// Variablen Deklaration --------------------------------------
// Variablen
//--------------
$user = 'schnucki@googlemail.com';
$pass = '12345';
$magicCookie = 'e4d7b12345678f6adf49fb151a38d5d31';
$arrEvent_Time_akt = array();
$arrEvent_Titel_akt = array();
$arrEvent_Time_naechste = array();
$arrEvent_Titel_naechste = array();
//-------------------------------------------------------------
//benötigte Funktionen/Klassen
//include("funkTTS_Play.php");
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');
//--------------------------- Main ----------------------------
// Die Verbindung zum Kalender aufbauen
try
{
$client = getClientLoginHttpClient($user, $pass);
}
catch(Exception $e)
{
// prevent Google username and password from being displayed
// if a problem occurs
echo "Could not connect to calendar.";
die();
}
// Event lesen
//==============
// Event ab dem aktuellem Datum
$start_date = date("Y-m")."-01";
$end_date = date("Y-m")."-".date('t');
// Eine neue Instanz der Kalender Klasse anlegen
$gdataCal = new Zend_Gdata_Calendar($client);
// Eine neue Suchanfrage
$query = $gdataCal->newEventQuery();
// Übergeben der Daten der Suchanfrage
$query->setUser($user);
$query->setVisibility('private-'.$magicCookie);
$query->setSingleEvents(true);
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setSortOrder('ascending');
$query->setMaxResults(30);
$query->setStartMin($start_date);
$query->setStartMax($end_date);
// Die Suchanfrage ausführen
$event_list = $gdataCal->getCalendarEventFeed($query);
foreach ($event_list as $event)
{
// title
$arrEvent_Titel_akt[] = $event->title;
// Auslesen der Startzeit
$Date_Time = $event->when[0]->startTime;
// Zerlegen der Startzeit
if(strpos($Date_Time, "T")>0)
{
$arrDate_Time = explode("T", $Date_Time);
$arrEvent_Time_akt[] = $arrDate_Time[0];
}
else
{
$arrEvent_Time_akt[] = $Date_Time;
}
}
$month = date('n');
$year = date('Y');
$browser = calender_month($month, $year, $arrEvent_Time_akt);
SetValue(CreateVariableByName($IPS_SELF, "Monatskalender", 3, "~HTMLBox"), $browser);
// Event lesen
//==============
// Event ab dem aktuellem Datum
$start_date = date("Y-m", mktime(0, 0, 0, date("m")+1, 1, date("Y")))."-01";
$end_date = date("Y-m", mktime(0, 0, 0, date("m")+1, 1, date("Y")))."-".date('t');
// Eine neue Suchanfrage
$query = $gdataCal->newEventQuery();
// Übergeben der Daten der Suchanfrage
$query->setUser($user);
$query->setVisibility('private-'.$magicCookie);
$query->setSingleEvents(true);
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setSortOrder('ascending');
$query->setMaxResults(30);
$query->setStartMin($start_date);
$query->setStartMax($end_date);
// Die Suchanfrage ausführen
$event_list = $gdataCal->getCalendarEventFeed($query);
foreach ($event_list as $event)
{
// title
$arrEvent_Titel_naechste[] = $event->title;
// Auslesen der Startzeit
$Date_Time = $event->when[0]->startTime;
// Zerlegen der Startzeit
if(strpos($Date_Time, "T")>0)
{
$arrDate_Time = explode("T", $Date_Time);
$arrEvent_Time_naechste[] = $arrDate_Time[0];
}
else
{
$arrEvent_Time_naechste[] = $Date_Time;
}
}
$month = date('n', mktime(0, 0, 0, date("m")+1, 1, date("Y")));
$year = date('Y', mktime(0, 0, 0, date("m")+1, 1, date("Y")));
$browser = calender_month($month, $year, $arrEvent_Time_naechste);
SetValue(CreateVariableByName($IPS_SELF, "Monatskal_naechster", 3, "~HTMLBox"), $browser);
//------------------------- Main ENDE --------------------------
//------------------------ Funktionen -------------------------
/**
* Returns a HTTP client object with the appropriate headers for communicating
* with Google using the ClientLogin credentials supplied.
*
* @param string $user The username, in e-mail address format, to authenticate
* @param string $pass The password for the user specified
* @return Zend_Http_Client
*/
function getClientLoginHttpClient($user, $pass)
{
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
return $client;
}
function calender_month($month, $year, $arrEvent_Time)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0
Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google
Kalender in Form eines Farbumschlag. Der aktuelle
Tag wird an hand eines gesonderten Farbumschlages
dargestellt.
Änderungen
----------
tt.mm.yyyy von Version x.x -> x.x
Berschreibung:
================================================*/
// Variablen Deklaration --------------------------------------
// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$key = $month -1;
$act_day = date('j');
$act_month = date('n');
//-------------------------------------------------------------
//--------------------------- Main ----------------------------
//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader = 'bgcolor="#C0C0C0"';
//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader = 'bgcolor="#808080"';
//Hintergrundfarbe des aktuellen Tages
$Style_Today = 'bgcolor="#FF00FF"';
//Hintergrundfarbe der Termine
$Style_Appointment = 'bgcolor="#800080"';
//Hintergrundfarbe gesamt
$Style_background = 'background-color:#F6F6F6';
//------------------------------------------
//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';
//Aussehen der Zellen
$Style_DayCell = 'width="20" height="20" align="center"';
//erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
$Monatskalender ='<table border="1" summary="Kalender '.$arr_Month[$key].'">
<tr>
<th colspan="7" '.$Style_MonthHeader.'>'.$arr_Month[$key].'</th>
</tr>
<tr>'.$DayHeader.'</tr>';
//wie viele Tage hat dieser Monat
$total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
//an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
$day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
//Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
if($day_offset < 0)
{
$day_offset = 6;
}
//initialisieren des Tageszählers
$Day_Count = 1;
//ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
for($week = 0; $week < 6; $week++)
{
$Monatskalender .='<tr>';
//eine Woche hat immer noch 7 Tage
for($day = 0; $day < 7; $day++)
{
//Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
if($day_offset > 0)
{
$Monatskalender .='<td '.$Style_DayCell.'>*</td>';
$day_offset -= 1;
}
else
{
//ausfüllen der Tage mit Tageszahlen
if($Day_Count <= $total_days)
{
//Der aktuelle Tag wird eingefärbt
if($month == $act_month and $Day_Count == $act_day)
{
$Monatskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
}
else
{
//Tage mit einem Termin werden eingefärbt
$StartDay = $Day_Count;
if(strlen($StartDay)< 2) $StartDay = "0".$StartDay;
$StartMonth = $month;
if(strlen($StartMonth)< 2) $StartMonth = "0".$StartMonth;
$Appointment = False;
$Appointment_Time = $year."-".$StartMonth."-".$StartDay;
foreach ($arrEvent_Time as $Event_Time)
{
If($Event_Time == $Appointment_Time) $Appointment = True;
}
if($Appointment)
{
$Monatskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
}
else
{
//alle anderen Tagen sind ohne färbung
$Monatskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
}
}
$Day_Count += 1;
}
else
{
//alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
$Monatskalender .='<td '.$Style_DayCell.'>*</td>';
}
}
}
//Ende der Wochenreihe
$Monatskalender .='</tr>';
}
//Ende des Monats
$Monatskalender .='</table>';
//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body { '.$Style_background.';
font-family: Arial;
}
</style>
</head>
<body scroll="no">'
.$Monatskalender.
'</body>
</html>';
//und ablegen
return $browser;
}
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
//--------------------- Funktionen ENDE ------------------------
?>