• Aktuell
    • Tags
    • Beliebt
    • Benutzer
    • Gruppen
    • Suche
    • Registrieren
    • Anmelden

    API-Abfrage: "Wer hat in der nächsten Woche Geburtstag?"

    ChurchTools Schnittstellen
    2
    6
    2.6k
    Lade mehr Beiträge
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
    • artus70A
      artus70
      zuletzt editiert von

      Wir wollen möglichst automatisiert eine Liste generieren, welche Mitglieder in der kommenden Woche Geburtstag haben. Hat jemand ein Code-Beispiel, wie man mit den Geburtstagen über die API "jonglieren" kann?

      Habe wohl
      https://api.churchtools.de/function-getBirthdayList.html
      gefunden, aber wie kann ich nun getBirthdayList per API aufrufen und dabei $diff_from und $diff_to selbst übergeben?

      CT hosted

      1 Antwort Letzte Antwort Antworten Zitieren 1
      • jmrauenJ
        jmrauen ChurchToolsMitarbeiter
        zuletzt editiert von

        Habe ich Dir dann in 3.11 gebaut, siehe getBirthdayList()
        https://api.churchtools.de/class-CTChurchDBModule.html

        1 Antwort Letzte Antwort Antworten Zitieren 0
        • artus70A
          artus70
          zuletzt editiert von

          Klasse! Ab wann werden wir das nutzen können?
          (Bitte jetzt nicht antworten: "Wenn 3.11 veröffentlicht ist". Ich würde gern meinen Leuten gegenüber ein - halbwegs - konkretes Datum nennen können. Danke!)

          BTW: Müsste 3.11 nicht eigentlich 3.1.1 heißen?

          CT hosted

          1 Antwort Letzte Antwort Antworten Zitieren 0
          • jmrauenJ
            jmrauen ChurchToolsMitarbeiter
            zuletzt editiert von

            Die kommt morgen abend raus:)

            artus70A 1 Antwort Letzte Antwort Antworten Zitieren 0
            • artus70A
              artus70 @jmrauen
              zuletzt editiert von

              @jmrauen sagte:
              > Die kommt morgen abend raus:)

              Yippeh!

              CT hosted

              1 Antwort Letzte Antwort Antworten Zitieren 0
              • artus70A
                artus70
                zuletzt editiert von

                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
                

                CT hosted

                1 Antwort Letzte Antwort Antworten Zitieren 0
                • Erster Beitrag
                  Letzter Beitrag