@jnappert
hier mein Auszug aus der config.ini
Dann gehört natürlich noch der Pfad zum GoogleApi mit in die Config.ini.
Hier noch mein funktionierendes CalenderPlugin,ich hoffe es hilft
Also bei mir funktioniert es prima,allerdings lokal auf einen Wind7 Rechner unter Xampp.
Schau mal Deine php Version nach ,bei einer veralteteten Version geht es auch nicht.Ich musste mir auch Xampp neu installieren mit einer neueren php Version,dann lief es.(Jetzt php Version 5.6.3)
Viel Erfolg
Volker
hier mein Auszug aus der config.ini
Code:
[CalendarPlugin]
client_id = "***apps.googleusercontent.com"
account_name = "***@developer.gserviceaccount.com"
project_name = "****"
key_file= "***"
calendar_ID_1 = "de.german#[email protected]"
calendar_ID_color_1 = "#ffff00"
number_of_days = 3
Dann gehört natürlich noch der Pfad zum GoogleApi mit in die Config.ini.
Hier noch mein funktionierendes CalenderPlugin,ich hoffe es hilft
PHP:
<?php
/***************************************************************************
* InfoFrame (image generator for digital picture frames)
* Copyright (C) 2009 Tobias Kolb
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/
***************************************************************************/
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');
class CalendarPlugin implements IPlugin
{
private $dbconn = NULL;
private $config = NULL;
public function __construct($dbconn, $config) {
$this->dbconn = $dbconn;
$this->config = $config;
}
public function doUpdate()
{
require_once 'autoload.php';
// get calendar entries
session_start();
$client_id = $this->config['client_id'];
$service_account_name = $this->config['account_name'];
try
{
$client = new Google_Client();
$client->setApplicationName($this->config['project_name']);
$cal = new Google_Service_Calendar($client);
}
catch (Exception $e)
{
die ('Folgender Fehler trat auf: ' . $e->getMessage());
}
if (isset($_SESSION['service_token']))
$client->setAccessToken($_SESSION['service_token']);
$key = file_get_contents($this->config['key_file']);
$cred = new Google_Auth_AssertionCredentials($service_account_name, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired())
$client->getAuth()->refreshTokenWithAssertion($cred);
$_SESSION['service_token'] = $client->getAccessToken();
//set startDate, endDate, eventParams
$cal_date = new DateTime('NOW');
$startDate = date_format($cal_date, DateTime::W3C);
$cal_date = date_modify($cal_date, "+".$this->config['number_of_days']." day");
$endDate = date_format($cal_date, DateTime::W3C);
$eventParams = array('timeMin' => $startDate,
'timeMax' => $endDate,
'singleEvents' => 'true');
//get Calendar Id´s
$calendarList = $cal->calendarList->listCalendarList();
// delete all old calendar entries
mysql_query("START TRANSACTION", $this->dbconn);
$query = "Delete from if_calendar";
mysql_query($query, $this->dbconn) or die('Error, delete query failed');
// get all calendars
foreach ($calendarList->getItems() as $calendar)
{
$calendarID = $calendar->getID();
$color = $calendar->getBackgroundColor();
$entries = $cal->events->listEvents($calendarID, $eventParams);
foreach ($entries->getItems() as $entry)
{
if (!empty($entry['modelData']['start']['dateTime']))
{
$begin = strtotime($entry['modelData']['start']['dateTime']);
$end = strtotime($entry['modelData']['end']['dateTime']);
}
else
{
$begin = strtotime($entry['modelData']['start']['date']);
$end = strtotime($entry['modelData']['end']['date']);
}
$title = $entry->getSummary();
$location = $entry->getLocation();
$this->addCalendar($color, $begin, $end, $title, $location);
}
}
// get all public calendars
$calender_num = 0;
while ($calendarID = $this->config['calendar_ID_' . ++$calender_num])
{
$color = $this->config['calendar_ID_color_' . $calender_num];
$entries = $cal->events->listEvents($calendarID, $eventParams);
foreach ($entries->getItems() as $entry)
{
if (!empty($entry['modelData']['start']['dateTime']))
{
$begin = strtotime($entry['modelData']['start']['dateTime']);
$end = strtotime($entry['modelData']['end']['dateTime']);
}
else
{
$begin = strtotime($entry['modelData']['start']['date']);
$end = strtotime($entry['modelData']['end']['date']);
}
$title = $entry->getSummary();
$location = $entry->getLocation();
$this->addCalendar($color, $begin, $end, $title, $location);
}
}
mysql_query("COMMIT", $this->dbconn);
}
public function doOutput($image, $style, $updateData, &$yoffset) {
if ($updateData)
$this->doUpdate();
$query = "SELECT * FROM `if_calendar` WHERE (`end` > NOW()) ORDER BY `begin` ASC";
$result = mysql_query($query, $this->dbconn);
if (mysql_num_rows($result) > 0) {
// define styles
$opt_header = array(
'width' => imagesx($image)-290,
'line_height' => 8,
'align' => ALIGN_LEFT
);
$opt_day = array(
'width' => imagesx($image)-290,
'height' => 14,
'line_height' => 14,
'align' => ALIGN_LEFT
);
$opt_entry = array(
'width' => imagesx($image)-290,
'height' => 12,
'line_height' => 12,
'align' => ALIGN_LEFT,
'word_wrap_hyphen' => '...',
'aggressive_word_wrap' => true,
);
// print header
imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], "Nächste Termine", $opt_header);
$icon = ImageCreateFromPNG ( 'resources/icons/clock.png' );
ImageCopy($image, $icon, 20, $yoffset-12, 0, 0, imagesx($icon), imagesy($icon));
ImageDestroy($icon);
$yoffset += 10;
// print calendar
$counter = 0;
$formatDate = "%d.%m.%Y";
$formatTime = "%H:%M";
$today = strftime( $formatDate );
$tomorrow = strftime( $formatDate, strtotime("+1 day", time() ) );
$currently_displayed_day = 0;
while ($row = mysql_fetch_assoc($result)) {
$counter++;
// if end of screen is reached and more than one items left -> cut off and show hint "x more appointments..."
$rest = (mysql_num_rows($result) - $counter) + 1;
if (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) {
$text = "... $rest weitere Termine";
imagettftextboxopt($image, 14, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_entry);
$yoffset += 0;
break;
}
// print day name
$begin_date = strftime( $formatDate, strtotime($row['begin']));
// if begin day is before today set begin to today
if (strtotime($begin_date) < strtotime($today))
$begin_date = $today;
// now if begin is after $currently_displayed_day update $currently_displayed_day
if (strtotime($begin_date) > $currently_displayed_day) {
// update currently_displayed_day
$currently_displayed_day = strtotime($begin_date);
// print day name
if( $begin_date == $today )
$dayname = "Heute";
else if( $begin_date == $tomorrow )
$dayname = "Morgen";
else
//$dayname = strftime("%A, ".$formatDate, strtotime($begin_date));
$dayname = datumDeutsch(strftime("%A, ".$formatDate, strtotime($begin_date)));
imagettftextboxopt($image, 14, 0, 50, $yoffset +1, $style['textcolor'], $style['fontb'], $dayname, $opt_day);
$yoffset += 22;
}
// build appointment time text
$end_date = strftime( $formatDate, strtotime($row['end']));
$begin_time = strftime( $formatTime, strtotime($row['begin']));
$end_time = strftime( $formatTime, strtotime($row['end']));
$text = $row['title'];
if ($row['location'] != null)
$text = $text . ", " . $row['location'];
if (($begin_time == "00:00") && ($end_time == "00:00")) {
// all day event (substract 1 second to get the real end date at 23:59)
$end_date = strftime( $formatDate, strtotime($row['end'])-1);
// if all day event is longer than one day -> print end date
if (strtotime($end_date) != $currently_displayed_day)
$text = $text." (bis ".$end_date.")";
} else {
// normal event with start and end time
$text = $text." (".$begin_time." - ";
// if event ends not this day -> display end date additionally to time
if (strtotime($end_date) != $currently_displayed_day)
$text = $text.$end_date.", ";
$text = $text.$end_time.")";
}
// roundboxtrans_middel($image, $xleft, $xend, $yoffset+2, $yoffset_abstand, $yoffset_end, $inhalt_zeilen_hoehe);
// roundboxtrans_bottom($image, $xleft, $xend, $yoffset, $yoffset_diff, $yoffset_abstand, $yoffset_end, $radius, $bottom_zeilen_hoehe);
/*
if ($letzter_eintrag == $currently_displayed_day) {
if (strlen($text) >= 15) $xoffset = 150;
$xoffset += 130;
$yoffset -= 25;
}else{
$xoffset = 0;
roundboxtrans_middel($image, $xleft, $xend, $yoffset, $yoffset_abstand+1, $yoffset_end, $inhalt_zeilen_hoehe+1);
}
*/
// ------------------------------------------- Müllabfuhr----------------------------------------
if (($row['color']) == "#d06b64") {
if (strpos($row['title'], 'Blaue') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/tonne_blau.png' );
if (strpos($row['title'], 'Biotonne') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/tonne_gruen.png' );
if (strpos($row['title'], 'Gelber Sack') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/gelber_sack.png' );
if (strpos($row['title'], 'Restabfall') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/tonne_schwarz.png' );
ImageCopy($image, $icon, $xoffset+25, $yoffset-20, 0, 0, imagesx($icon), imagesy($icon));
ImageDestroy($icon);
}
// ------------------------------------------- Geburtstag ----------------------------------------
if (($row['color']) == "#d06b64") {
if (strpos($row['title'], 'Geburtstag') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/birth.png' );
ImageCopy($image, $icon, $xoffset+25, $yoffset-15, 0, 0, imagesx($icon), imagesy($icon));
ImageDestroy($icon);
}
// ------------------------------------------- Namenstag ----------------------------------------
if (($row['color']) == "#d06b64") {
$icon = ImageCreateFromPNG ( 'resources/icons/name.png' );
ImageCopy($image, $icon, $xoffset+27, $yoffset+1, 0, 0, imagesx($icon), imagesy($icon));
ImageDestroy($icon);
} else {
// ------------------------------------------- Standard - Button ----------------------------------------
// determine button color
$colorArray = htmlColorToRgb($row['color']);
$color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);
// print appointment text and button
drawGlassButton($image, $color, $xoffset+32, $yoffset-6);
}
imagettftextboxopt($image, 12, 0, $xoffset+50, $yoffset-6, $style['textcolor'], $style['font'], $text, $opt_entry);
$yoffset += 6;
$letzter_eintrag = $currently_displayed_day;
}
$yoffset += 2;
}
// roundboxtrans_bottom($image, $xleft, $xend, $yoffset, $yoffset_diff, $yoffset_abstand+16, $yoffset_end, $radius, $bottom_zeilen_hoehe);
mysql_free_result($result);
}
private function addCalendar($color, $begin, $end, $title, $location) {
$query = "INSERT INTO `if_calendar` (`id`, `color`, `begin`, `end`, `title`, `location`)
VALUES (NULL,
'".mysql_real_escape_string($color)."', FROM_UNIXTIME($begin), FROM_UNIXTIME($end),
'".mysql_real_escape_string($title)."',
'".mysql_real_escape_string($location)."'
)";
mysql_query($query, $this->dbconn) or die('CalendarPlugin: '.mysql_error());
}
}
Also bei mir funktioniert es prima,allerdings lokal auf einen Wind7 Rechner unter Xampp.
Schau mal Deine php Version nach ,bei einer veralteteten Version geht es auch nicht.Ich musste mir auch Xampp neu installieren mit einer neueren php Version,dann lief es.(Jetzt php Version 5.6.3)
Viel Erfolg
Volker