Beispielcode (an einigen Stellen noch nicht gut aufgeräumt ...):
(Wichtig: alle Dateien müssen am Anfang noch eine Zeile
< ? php
vorangestellt bekommen - Leerzeichen in der Zeile bitte entfernen. Außerdem Leerzeichen unmittelbar hinter "< " entfernen. Das musste ich etwas verbiegen, der Code wird hier sonst nicht richtig angezeigt.)
Datei geb.php:
require_once('lib.php');
if (!isset($_GET['w']))
exit;
$w = intval(@$_GET['w']);
$d = isset($_GET['d']) ? intval($_GET['d']) : 1;
if ($d < 1)
$d = 1;
if ($d > 8)
$d = 8;
$from = 7 - date("N") + (7 * $w);
$to = $from - 1 + $d * 7;
$ts = mktime(0, 0, 0, date("n"), date("j") + $from, date("Y"));
echo '< html>
< head>
< meta http-equiv="content-type" content="text/html; charset=utf-8">
< /head>
< body>
';
echo '< a href="?w=' . ($w - 1) . '">Eine Woche früher< /a> - < a href="?w=' . ($w + 1) . '">Eine Woche später< /a>< br>';
echo "< b>Sonntagsblatt " . date("d.m.Y", $ts) . '< /b>< br>< br>';
$domain = login();
if(is_array($domain)) $domain = $domain["domain"];
$url = $domain . '?q=churchdb/ajax';
$data = array('func' => 'getBirthdayList', "from" => $from, "to" => $to);
$oData = sendRequest($url, $data);
list($n, $aGeb) = erzeugeGeburtstagsarray($oData);
echo '< hr>' . erzeugeSatz($aGeb) . '< hr>';
echo '
< /body>
< /html>
';
/* * ************************************************************ */
/**
* Überführt die abgerufenen Daten in ein Array Datum->Person
* @param type $oData
* @return array (Anzahl, Datenarray)
*/
function erzeugeGeburtstagsarray($oData) {
/* Geburtstags-Array aus eingelesenen Daten erzeugen */
$aGeb = array();
$n = 0;
foreach ($oData as $nam => $dat) {
if ($dat->status == 'Mitglied') {
$n++;
if (!isset($aGeb[$dat->geburtsdatum_compact]))
$aGeb[$dat->geburtsdatum_compact] = array();
$aGeb[$dat->geburtsdatum_compact][] = $dat->vorname . ' ' . $dat->name;
echo $dat->vorname . ' ' . $dat->name . ' (' . $dat->geburtsdatum_compact . ')';
}
}
return array($n, $aGeb);
}
/**
*
* @global integer $n Anzahl der Personen
* @global integer $d Anzahl Wochen
* @param type $aGeb Array mit Datum und Namen
* @return string html
*/
function erzeugeSatz($aGeb) {
/**
Satz aus Geburtstags-Array erzeugen
*/
global $n, $d, $ts;
$satz = '';
$nHeute = 0;
$o = 0;
foreach ($aGeb as $datum => $aPersonen) {
$bHeute = $datum == date("d.m.", $ts);
if ($bHeute) {
$nHeute = count($aPersonen); // "Heute" haben $nHeute Personen Geburtstag
}
foreach ($aPersonen as $k => $sPerson) {
$o++;
$bErstes = ($o == 1) || ($o == ($nHeute + 1));
if ($bErstes) {
$satz .= $bHeute ? 'Heute ' . ($nHeute > 1 ? 'haben' : 'hat') . ' ' :
($satz ? ', und in' : 'In') . ($d == 1 ? ' dieser Woche ' : " diesen $d Wochen ") . ($o < $n ? 'haben' : 'hat') . ' ';
} else {
$satz .= ($o < ($bHeute ? $nHeute : $n)) ? ', ' : ' und ';
}
$satz .= $sPerson;
}
$satz .= " ($datum)";
if (($o == $n) || $bHeute) {
$satz .= ' Geburtstag';
}
}
return $satz;
}
Datei lib.php:
/* * *
* Funktionen für ChurchTools-API
*/
/**
* API-Login
*/
if (!function_exists("login")) {
function login($m = false, $p = false) {
require('conf.php');
if ($m)
$mail = $m;
if ($p)
$pw = $p;
$url = $domain . '?q=login';
$data = array('email' => $mail, 'password' => $pw, 'directtool' => 'yes');
$r = sendRequest($url, $data);
return array("domain"=>$domain, "result"=>$r, "mail"=>$mail);
}
}
function logout() {
require('conf.php');
$url = $domain . '?q=logout';
$data = array('func' => 'logout', 'directtool' => 'yes');
$r = sendRequest($url,$data);
if ($r) {
$x = deleteCookies();
return $r;
}
else
return false;
}
/**
* Get saved Cookies from filesystem and returns an array
* @return array of Cookies in string
*/
if (!function_exists("getCookies")) {
function getCookies() {
$sCombined = '';
$aCookies = glob("*.txt");
$n = count($aCookies);
if ($n !== 0) {
$counter = 0;
while ($counter < $n) {
$sCombined .= file_get_contents($aCookies["$counter"]) . ';';
++$counter;
}
return $sCombined;
} else {
return $n;
}
}
}
function deleteCookies() {
$aCookies = glob("*.txt");
$n = count($aCookies);
if ($n !== 0) {
$counter = 0;
while ($counter < $n) {
unlink($aCookies["$counter"]);
++$counter;
}
return true;
} else {
return $n;
}
}
/**
* Save cookies from $aRH (http response header) to the filesystem
* @param $aRH
*/
if (!function_exists("saveCookies")) {
function saveCookies($aRH) {
$n = count($aRH); // Number of Pieces
$counter = 0;
while ($counter < $n) {
if (preg_match('@Set-Cookie: (([^=]+)=[^;]+)@i', $aRH["$counter"], $matches)) {
$fp = fopen($matches["2"] . '.txt', 'w');
fwrite($fp, $matches["1"]);
fclose($fp);
}
++$counter;
}
}
}
/**
* Send request to $url with $data
* @param [type] $url [description]
* @param [type] $data [description]
* @param [string] $get liefert $aRes->data->$get statt $aRes->data zurück;
*/
function sendRequest($url, $data, $get = false) {
$options1 = array(
'http' => array(
'header' => "Cookie: " . getCookies() . "\r\nContent-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
),
);
$context = stream_context_create($options1);
$result = file_get_contents($url, false, $context);
saveCookies($http_response_header);
$aRes = json_decode($result);
if (isset($aRes->data)) {
if ($get == false) {
return $aRes->data;
} else {
return $aRes->data->$get;
}
return false;
}
return false;
}
//}
/**
* Gibt den Inhalt eines Objekts HTML-formatiert zurück
* @param type $obj
* @return string HTML
*/
function toHtml($obj) {
$html = '';
foreach ($obj as $k => $v) {
$html .= "$k: ";
if (is_object($v))
$html .= toHtml($v);
elseif (is_string($v))
$html .= $v;
elseif (is_array($v))
$html .= toHtml($v);
else
$html .= '(?)';
$html .= '';
}
$html .= '';
return $html;
}
Datei conf.php:
// Hier die Daten für den Zugriff zum eigenen ChurchTools eintragen:
$domain = 'https://xxx.church.tools/';
$mail = 'mail@adresse.de'; // Mailadresse eines Users, der die Daten auslesen darf
$pw = 'passwort'; // Das Passwort des Users