InfoFrame: Digitaler Bilderrahmen (Anzeige von Anrufen, E-Mails, Termine, Wetter...)

Bei mir steht das ,ausgewählte Benzinsorte Super

PHP:
 // table "if_tanken"
	if(mysql_num_rows( mysql_query("SHOW TABLES LIKE 'if_tanken'", self::$connection) ) != 1) {
		$query = "CREATE TABLE `if_tanken` (
					`preis` varchar(5) collate latin1_general_cs NOT NULL,
					`datum` datetime NOT NULL,
					`station` varchar(255) collate latin1_general_cs NOT NULL,
					PRIMARY KEY  (`datum`,`preis`,`station`)
				) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs; ";
		mysql_query($query, self::$connection) or die('Error, insert query failed: '.mysql_error());
	}
	
	  // table "if_tanken_super"
	if(mysql_num_rows( mysql_query("SHOW TABLES LIKE 'if_tanken_super'", self::$connection) ) != 1) {
		$query = "CREATE TABLE `if_tanken_super` (
					`preis` varchar(5) collate latin1_general_cs NOT NULL,
					`datum` datetime NOT NULL,
					`station` varchar(255) collate latin1_general_cs NOT NULL,
					PRIMARY KEY  (`datum`,`preis`,`station`)
				) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs; ";
		mysql_query($query, self::$connection) or die('Error, insert query failed: '.mysql_error());
	}

Volker
 
PHP:
<?php
/***************************************************************************
 * InfoFrame (image generator for digital picture frames)
 * Copyright (C) 2010
 *
 * 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/
 ***************************************************************************/

class BenzinPlugin implements IPlugin
{
    private $dbconn = NULL;
	private $config = NULL;

	public function __construct($dbconn, $config) {
		$this->dbconn = $dbconn;
		$this->config = $config;
	}


	public function doUpdate() {

		// Preise und Tankstellen lesen - fsockopen-Version
		$i=0;
		$ortnumber = 0;
		// jeden in config.ini eingetragenen Ort in file einlesen
		while ($ort = $this->config['ort_'.++$ortnumber]) {
			$uri = "/tankstelle_liste?spritsorte=3&r=3&ort=".$ort;   // spritsorte 3=Diesel, 5=Super E10
			header("Content-type: text/html");
			$sock = fsockopen("www.clever-tanken.de", 80, $errno, $errstr, 10); // 80 = Port, 10 = Timeout
			if (!$sock) {
				return;//$title = "keine Tankstellen in $orte_fehlen gefunden";
			} else {
				fputs($sock, "GET ".$uri." HTTP/1.1\r\n");
				fputs($sock, "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n");
				//------
				fputs($sock, "Host: www.clever-tanken.de\r\n");
				fputs($sock, "Connection: close\r\n\r\n");
				while(!feof($sock)) {
					$zeile[$i++] = utf8_encode(trim(fgets($sock,512)));
				}
				fclose($sock);
			}

		}
		// Datenbankeintr�ge l�schen
		mysql_query("START TRANSACTION", $this->dbconn);
		$query = "Delete from if_tanken";
		mysql_query($query, $this->dbconn) or die('Error, delete query failed');

		// file zeilenweise einlesen und gefiltert entsprechend den Eintr�gen in config.ini.
		$ortnumber = 0;
		$merken = 0;
		for ($j=0;$j<$i;$j++)
		{
			// Auswertung aller Orte, siehe config.ini
   		    if (stripos($zeile[$j],'"price_entry_table"')>0)    // neue Tankstelle
   		    {
  		      $merken = 26;
  	          $first = $j;
            }

     		if($merken>=1)  // 25 Zeilen merken
  	    	  $txt[$j-$first] = strip_tags(trim($zeile[$j]));	// sinnlose Zeichen und html-Tags entfernen

     		if($merken == 1) // Alle Daten vorhanden
     		{
      	      $tankstelle = htmlspecialchars_decode(utf8_decode($txt[21].'|'.$txt[23].'|'.$txt[22]));
      	      $tankstelle = str_replace('Herm GmbH &amp;Co.KG', 'Herm', $tankstelle);

      	      $adresse = explode('|',$tankstelle);
     		  $preis = $txt[4];
     		  if(strstr($txt[9],"gemeldet Heute"))
     		    $txt[9] = date('d.m.Y');
     		  $datum = $txt[9];
     		  $uhrzeit = $txt[10];

     		  $d_arr = date_parse($datum);
     		  $dat = mktime($d_arr['hour'],$d_arr['minute'],$d_arr['second'],$d_arr['month'],$d_arr['day'],$d_arr['year']);
     		  if($preis)
     		    $this->addStation($preis, $dat, $adresse[0].' - '.$adresse[1].' - '.$adresse[2]);
     		}

			// Zeilenz�hler f�r Datensuche in file
			if ($merken>0)
			  $merken--;
			else
			  $ortnumber = 0; // 10 Zeilen wurden erreicht, dann Orte neu bestimmen

		}	// Ende for-Schleife

		// in Datenbank schreiben
		mysql_query("COMMIT", $this->dbconn);
	}


	public function doOutput($image, $style, $updateData, &$yoffset) {

		if ($updateData) $this->doUpdate();

		$query = "SELECT * FROM `if_tanken` ORDER BY `datum` DESC, `preis` ASC";
		$result = mysql_query($query, $this->dbconn);
		if (mysql_num_rows($result) == 0) return;

		// define styles
		$opt_header = array(
			'width' => imagesx($image)-290,
			'line_height' => 18,
			'align' => ALIGN_LEFT
		);

		$opt_entry = array(
			'width' => imagesx($image)-290,
			'height' => 12,
			'line_height' => 12,
			'align' => ALIGN_LEFT,
			'word_wrap_hyphen' => '...',
			'aggressive_word_wrap' => false,
		);

		// print header
		$text = 'Kraftstoffpreise ('.$this->config['sorte'].')';
		imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_header);
		$icon = ImageCreateFromPNG ( 'resources/icons/tank.png' );
		ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
		ImageDestroy($icon);
		$yoffset += 26;

		while ($row = mysql_fetch_assoc($result)) {
			$counter++;
			$rest = (mysql_num_rows($result) - $counter) + 1;
			$entrylimit = $this->config['max_displayed_stations'];
			if ( (($entrylimit) && ($counter > $entrylimit)) || (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) ) {
				break;
			}

			// Preis
			$text = ' Eur'; // Euro-Zeichen geht nicht
			$text = $row['preis'].$text;
			// Datum
			$text = $text.'  '.strftime( "%d.%m.", strtotime($row['datum']));
			//$text = $text.'  '.strftime( "%d.%m.-%H:%M", strtotime($row['datum']));
			// Tankstelle
			$text = $text.'  '.$row['station'];

			// determine button color
			$colorArray = htmlColorToRgb('#424242');
			$color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);

			// print appointment text and button
			if (stripos($text,'aral')>0)			$png = 'resources/icons/aral.png';	// Aral-Tankstelle
			elseif (stripos($text,'agip')>0)		$png = 'resources/icons/agip.png';	// Agip-Tankstelle
			elseif (stripos($text,'bft')>0)			$png = 'resources/icons/bft.png';	// BFT-Tankstelle
			elseif (stripos($text,'esso')>0)		$png = 'resources/icons/esso.png';	// Esso-Tankstelle
			elseif (stripos($text,'heinlein')>0)	$png = 'resources/icons/h.png';		// Heinlein-Tankstelle
			elseif (stripos($text,'jet')>0)			$png = 'resources/icons/jet.png';	// Jet-Tankstelle
			elseif (stripos($text,'omv')>0)			$png = 'resources/icons/omv.png';	// OMV-Tankstelle
			elseif (stripos($text,'shell')>0)		$png = 'resources/icons/shell.png';	// Shell-Tankstelle
			else 	$png = 'resources/icons/t.png';
			$wicon = ImageCreateFromPNG ( $png );
			ImageCopy($image, $wicon, 25, $yoffset, 0, 0, imagesx($wicon), imagesy($wicon));
			ImageDestroy($wicon);

			imagettftextboxopt($image, 13, 0, 50, $yoffset, $style['textcolorgrau'], $style['fontb'], $text, $opt_entry);

			$yoffset += 22;
		}
		$yoffset += 15; // 26;
		mysql_free_result($result);
	}


	private function addStation($preis, $datum, $station) {
		$query = "REPLACE INTO `if_tanken` SET
					`preis`= '".mysql_real_escape_string($preis)."',
					`datum`= FROM_UNIXTIME($datum),
					`station`= '".mysql_real_escape_string($station)."'";

		mysql_query($query, $this->dbconn) or die('Error, insert query failed: '.mysql_error());
	}

}

Config.ini
PHP:
[BenzinPlugin]
; maximales Alter der Preisangaben in Stunden
max_age_in_hours = 1
; maximale Anzahl angezeigter Tankstellen
max_displayed_stations = 10
; Auswahl einer Karftstoffsorte - Normal/Super/Diesel (weitere siehe URL oben )
sorte = "Diesel"
; welche Tankstellen sollen ausgewertet werden, Angabe Ort oder PLZ
ort_1= "Schutterwald"
ort_2= "Offenburg"

dbconn

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/
 ***************************************************************************/

class DbConnection {
 
  private static $connection = NULL;
  
  public static function getConnection() {
	return self::$connection;
  }
  
  public static function connect($host, $database, $user, $pass) {
	self::$connection = mysql_connect(
      $host,
      $user,
      $pass,
      TRUE
    );
 
    mysql_select_db($database, self::$connection);
	self::createTablesIfNotExist();
	return (self::$connection);
  }
 
  public static function disconnect() {
    if (is_resource(self::$connection)) {
      mysql_close(self::$connection);
    }
  }
  
  private static function createTablesIfNotExist() {
	// table "if_system"
	if(mysql_num_rows( mysql_query("SHOW TABLES LIKE 'if_system'", self::$connection) ) != 1) {
		$query = "CREATE TABLE `if_system` (
					`name` varchar(100) character set latin1 collate latin1_general_cs NOT NULL,
					`value` varchar(255) character set latin1 collate latin1_general_cs NOT NULL,
					PRIMARY KEY  (`name`)
				) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs; ";
		mysql_query($query, self::$connection) or die('Error, insert query failed: '.mysql_error());
	}

	// table "if_calendar"
	if(mysql_num_rows( mysql_query("SHOW TABLES LIKE 'if_calendar'", self::$connection) ) != 1) {
		$query = "CREATE TABLE `if_calendar` (
					`id` int(11) NOT NULL auto_increment,
					`color` varchar(7) collate latin1_general_cs NOT NULL,
					`begin` datetime NOT NULL,
					`end` datetime NOT NULL,
					`title` varchar(255) collate latin1_general_cs NOT NULL,
					`location` varchar(255) collate latin1_general_cs default NULL,
					PRIMARY KEY  (`id`),
					KEY `account` (`begin`),
					KEY `begin` (`begin`),
					KEY `end` (`end`)
				) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs; ";
		mysql_query($query, self::$connection) or die('Error, insert query failed: '.mysql_error());
	}

	// table "if_calls"
	if(mysql_num_rows( mysql_query("SHOW TABLES LIKE 'if_calls'", self::$connection) ) != 1) {
		$query = "CREATE TABLE `if_calls` (
					`id` int(11) NOT NULL auto_increment,
					`type` int(11) NOT NULL,
					`timestamp` datetime NOT NULL,
					`name` varchar(100) collate latin1_general_cs default NULL,
					`address` varchar(100) collate latin1_general_cs default NULL,
					`duration` int(11) default NULL,
					PRIMARY KEY  (`id`),
					KEY `type` (`type`,`timestamp`)
				) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs; ";
		mysql_query($query, self::$connection) or die('Error, insert query failed: '.mysql_error());
	}
	
	// table "if_mail"
	if(mysql_num_rows( mysql_query("SHOW TABLES LIKE 'if_mail'", self::$connection) ) != 1) {
		$query = "CREATE TABLE `if_mail` (
					`id` int(11) NOT NULL auto_increment,
					`account` int(11) NOT NULL,
					`date` datetime NOT NULL,
					`from` varchar(100) collate latin1_general_cs NOT NULL,
					`subject` varchar(255) collate latin1_general_cs NOT NULL,
					PRIMARY KEY  (`id`)
				) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs; ";
		mysql_query($query, self::$connection) or die('Error, insert query failed: '.mysql_error());
	}
  
  

	// table "if_tanken"
	if(mysql_num_rows( mysql_query("SHOW TABLES LIKE 'if_tanken'", self::$connection) ) != 1) {
		$query = "CREATE TABLE `if_tanken` (
					`preis` varchar(5) collate latin1_general_cs NOT NULL,
					`datum` datetime NOT NULL,
					`station` varchar(255) collate latin1_general_cs NOT NULL,
					PRIMARY KEY  (`datum`,`preis`,`station`)
				) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs; ";
		mysql_query($query, self::$connection) or die('Error, insert query failed: '.mysql_error());
	}


  }
 
 
}

?>



also ich bekomme das Benzinplugin nicht mehr zum laufen.....
 
Zuletzt bearbeitet:
Volker, bist Du weiter gekommen? Habe heute den ganzen Tag versucht das Problem in den Griff zu bekommen. Leider ohne Erfolg.
Dieses IRC funktioniert leider auch nicht so gut. Spooner ist leider nicht Online und Orca hat vorhin nicht auf mein IRC reagiert. Irgendwie scheint das IRC nicht zuverlässig zu sein. Bin auch gestern immer wieder rausgefolgen :(
 
Hallo Thomas
ne leider nicht,ich habe heute das Googleprojekt nochmal gelöscht und alles nochmal neu angelegt,aber es hat nichts gebracht.
Tut mir leid,ich hätte Dir gern eine bessere Auskunft gegeben.
Wie sieht es bei dir aus?

Volker
 
Du wirst lachen. Genau das gleiche habe ich Heute auch gemacht. Gelöscht und alles nochmals frisch erstellt. Leide alles ohne Erfolg. Ich habe es hinbekommen das Google die Anfrage erfasst, jedoch genau nur 1 mal und dann nie mehr :( Keine Ahnung was da falsch läuft. Hoffe das Orca oder Spooner noch eine Zündende Idee haben.
 
Ja das hoffe ich auch,vielleicht gibt es ja noch ne Lösung.

Volker
 
Sorry Leute,
bin heute erst spät nach Hause. Ich hoffe morgen klappts früher bei mir...
Vielleicht können wir morgen mal über Teamviewer arbeiten...
Gruß Daniel
 
Hallo,
scheint so, als würde ich um oAuth2.0 nicht herumkommen, leider.

Nachdem hier alle von Problemen berichten, hatte ich schon Angst alles direkt auf den Infoframe zu schieben und habe mir erst nur mal die wichtigen Zeilen zum Testen genommen und Quick and Dirty eine KalenderAusgabe aus Spoon3ers Code gemacht, ohne Datenbank, etc..... Funktioniert (fast) prächtig. Einzig die öffentlichen Kalender und Geburtstage zu den Kontakten werden nicht angezeigt (muss ich vielleicht dem Projekt Zgriff auf meine Kontakte erlauben?).

PHP:
<?php

require_once 'C:/xampp/php/google-api-php-client-master/autoload.php';
session_start();
$client_id = "client bla";
$service_account_name = "noch mehr bla";

try
{
    $client = new Google_Client();
    $client->setApplicationName("InfoFrame");
    $service = 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("InfoFrame.p12");
$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
$now = new DateTime('NOW');
$clone = clone $now;
$clone = date_modify($clone, '+1 month');
$startDate = date_format($now, DateTime::W3C);
$endDate = date_format($clone, DateTime::W3C);
$eventParams = array('timeMin' => $startDate,
                     'timeMax' => $endDate,
                     'singleEvents' => 'true');

//get Calendar Id´s	
$calendarList = $service->calendarList->listCalendarList();


foreach ($calendarList->getItems() as $calendarListEntry)
{
    $calendarID = $calendarListEntry->getID();
    $color = $calendarListEntry->getBackgroundColor();
    $events = $service->events->listEvents($calendarID, $eventParams);	    
    foreach ($events->getItems() as $event)
    {
        if (!empty($event['modelData']['start']['dateTime']))
        {
            $begin = date_format(date_create($event['modelData']['start']['dateTime']), 'Y-m-d H:i:s');
            $end = date_format(date_create($event['modelData']['end']['dateTime']), 'Y-m-d H:i:s');
        }
        else
        {
            $begin = $event['modelData']['start']['date'];
            $end = $event['modelData']['end']['date'];
        }			  	
        $title = $event->getSummary();	
        echo $color . " " . $begin . " " . $end . " " . $title . "\n";	
    }
}
 
Hallo Spoon3er,

du hattest irgenwo mal erwähnt, dass Du bereits die MySQL API von mysql auf mysqli umgestellt hast. Ich habe das bisher vor mir hergeschoben, weil ich mich nicht entscheiden konnte ob mysqli oder PDO. Mysqli sieht mir sympathischer aus, PDO hätte den Vorteil unglaublich leicht auf SQLite3 portierbar zu sein. Vielleicht kannst Du mir den entscheidenen Ruck geben, warum hast Du mysqli gewählt?

Gruß...
 
PHP:
Warning: require_once(library/magpierss/rss_parse.inc): failed to open stream: No such file or directory in /xxx/xxxx/xxx/xxx/infoframe/plugins/FeedPlugin.php on line 22

Fatal error: require_once(): Failed opening required 'library/magpierss/rss_parse.inc' (include_path='.:/usr/local/lib/php') in /xxx/xxxx/xxx/xxx/infoframe/plugins/FeedPlugin.php on line 22

kann mir jemand diese Fehlermeldung erklären?
 
Er findet irgendwas nicht. Schau mal bitte in der FeedPlugin.php auf Zeile 22 nach was er will.

Edit: Er such nach "library/magpierss/rss_parse.inc" Schaue bitte ob der Pfad bei Dir existiert und das er nicht schreib / ausführ geschützt ist.
 
Zuletzt bearbeitet von einem Moderator:
Gibt es so etwas auch für ein Tablet?
 
Hallo Spoon3er, Vielleicht kannst Du mir den entscheidenen Ruck geben, warum hast Du mysqli gewählt?

Ich hab damals mysqli genommen, weil mit die sysntax bekannt war. Würde ich jetzt portieren würde ich auf jeden Fall PDO nehmen weil es um einiges leichter X-kompatibel ist. Hab in letzter Zeit viel mit BB und .NET rumgeiert und selbst da kommt man mit PDO schneller ans ziel :)

PHP:
Fatal error: require_once(): Failed opening required 'library/magpierss/rss_parse.inc' (include_path='.:/usr/local/lib/php') in /xxx/xxxx/xxx/xxx/infoframe/plugins/FeedPlugin.php on line 22

kann mir jemand diese Fehlermeldung erklären?

Das script sucht "/usr/local/lib/php/library/maggpierss/rss_parse.inc." Da wird es aber nicht liegen
Wahrscheinlicher liegt es unter Dein/pfad/zum/inforame/ordner/magpierss/rss_parse.inc"

Ob der ordner "Infoframe" bei dir im Server_root Verzeichnis liegt kann ichd ir nicht sagen, das weißt nur du. (Also kannst du aus dem Ordner "Infoframe" noch weiter nach oben auf deinem Webserver?)

Der php-befehel für den Server-root ist $_SERVER['DOCUMENT_ROOT'].
Ist "Infoframe" im Root-Verzeichnis könntest du mit:
PHP:
require_once($_SERVER['DOCUMENT_ROOT'].'infoframe/library/magpierss/rss_parse.inc');
ans Ziel kommen.

wenn Infoframe nicht im Root-verzeichnuis liegt musst du die Verzeichnisse vor Infoframe rannhängen. Sowas in der Art:
PHP:
require_once($_SERVER['DOCUMENT_ROOT'].'Ordner1/ordner2/infoframe/library/magpierss/rss_parse.inc');

achte auf Groß- und Kleinschreibung. So wie es auf deinem Server steht
 
@bolle: wenn ich Dich richtig verstanden habe dann ging es doch alles schon mal. Und auf einmal nicht? Oder hast Du vielleicht irgendwie etwas Verschoben? Oder in der config.ini unter Zent den Pfad geändert?
 
So Fehler gefunden!!! Ein falscher Pfad im CalendarPlugin...und alles hängt ich auf... ;-

require_once '../zendfw/googleapi/autoload.php'; das war der Weg zum ZIEL!!
 
Zuletzt bearbeitet:
Sorry bolle, aber was hat das Calender Plugin mit dem Benzin Plugin zu tun? Bzw. mir erschließt sich der Zusammenhang nicht so ganz
 
Keine Ahnung , auf alle Fälle, war ein Fehler in CalendarPlugin bzw. der Pfad falsch.dieser falsche Pfad wirkte sich auf alles andere aus! Pfad geändert und siehe da- Feeds und Benzinplugin funktionieren wieder einwandfrei. Kalender aktualisiert sich ebenso bei neuen Einträgen...
 
Hallo zusammen,

falls es noch von Interesse ist.

Ich habe das CalendarPlugin von Spooner ein wenig umgestaltet, um es vorweg zu nehmen, es ist jetzt etwas dümmer.
Genau wie das alte Plugin werden bei jedem Update stumpf ist Trumpf alle Kalendereinträge gelöscht und neu eingetragen. Dafür ist das einzige, was geändert werden muss die Funktion doUpdate, der Rest des Plugins und die Datenbank ist unverändert.
Zusätzlich habe ich noch den Eintrag calendar_ID_1 in die ini gepackt, da öffentliche Kalender nicht mehr "freiwillig" angezeigt werden. Für mehrere öffentl. Kalender müssen entsprechend mehrere calendar_ID_* eingetragen werden.

Ansonsten gilt alles, was Spoon3er bereits in seinem HOWTO beschrieben hat.
  1. google-api-php-client-master muss installiert werden
  2. bei https://console.developers.google.com/project registrieren
  3. die Kalender freigeben

An dieser Stelle noch ein Danke an Spoon3er für seine Arbeit.

Code:
[CalendarPlugin]
client_id = "blah"
account_name = "blah"
project_name = "InfoFrame"
key_file= "cache/InfoFrame.p12"
calendar_ID_1 = "de.german#[email protected]"
calendar_ID_color_1 = "#ffff00"
number_of_days = 7

die neue function doUpdate()
PHP:
	public function doUpdate()
	{
		require_once '/usr/share/google-api-php-client-master/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);
	}
 
So, habe mich eben noch mal hingesetzt und jetzt funktioniert's.

@Spoon3er
Vielen Dank dafür
 
hallo zusammen

Ich habe nochmal ein bißchen getestet ,aber ich ich bringe das neue Plugin nicht zum Laufen.Ich bekomme keinen Kontakt zu Google .
Habe schon Firewall und Antivirus ausgeschaltet,aber es will nicht funktionieren.Habe auch das neue Plugin von marvin424 getestet ,geht leider auch nicht.Hat denn jemand noch eine Tipp??

Volker
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.