Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Geburtstagsliste per API Aufruf

    ChurchTools Schnittstellen
    geburtstagslist
    5
    12
    2605
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      f.goethel last edited by

      Hallo,

      du hast hier Deine Anmeldedaten im Klartext reingeschrieben. Bitte umgehend ein neues Passwort vergeben.

      Tschüß Franz

      chs 1 Reply Last reply Reply Quote 0
      • chs
        chs @f.goethel last edited by

        @f.goethel Danke!

        F 1 Reply Last reply Reply Quote 0
        • F
          f.goethel @chs last edited by

          @chs Bitte 😉

          1 Reply Last reply Reply Quote 0
          • artus70
            artus70 last edited by artus70

            Vor etwa einem Jahr habe ich mal den u.g. php-Code geschrieben, um automatisch einen Satz zu generieren, wer nächste Woche Geburtstag hat. Dieser Satz wird bei uns immer auf dem Sonntagsblatt mit abgedruckt. Das Skript muss anfangs mit dem Parameter ?w=0 aufgerufen werden.

            Man kann dann wochenweise vor- oder zurückblättern und mit einem zusätzlichen Parameter d auch noch eine Wochenanzahl >1 wählen (wird z.B. für die gesamten Sommerferien benutzt, wenn das Sonntagsblatt nicht jede Woche aktuell produziert wird). Angenommen also, der Code steht in einer PHP-Datei geburtstage.php, dann könnte man diese Datei mit
            geburtstage.php?w=0&d=2
            aufrufen, um eine 2-Wochen-Vorschau zu bekommen.

            Als Filter ist eingebaut, dass nur tatsächliche Mitglieder der Gemeinde hier berücksichtigt werden.

            Ich denke, die Art, wie hier die Geburtstage ausgelesen werden, könnte Dir vielleicht als Anregung dienen.

            (Achtung: die Leerzeichen hinter < habe ich hier nur eingefügt, damit der Code richtig dargestellt wird.)

            < ?php
            if(!isset($_GET['w'])) exit;
            ?>
            < html>
            < head>
            < meta http-equiv="content-type" content="text/html; charset=utf-8">
            < /head>
            < body>
            < ?php
            
            $domain = 'https://xxxxx.churchtools.de/';
            $mail = 'xxxx@xxxxxxxx.de';
            $pw = 'xxxxxxx';
            
            $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); // Tagesdifferenz zu "heute" für den Sonntag (Startdatum) der gewünschten Woche
            $to = $from - 1 + $d * 7; // Tagesdifferenz zu "heute" für das Enddatum nach $d Wochen
            $ts = mktime(0,0,0,date("n"),date("j")+$from,date("Y")); // Lesbares Datum des Start-Sonntags
            
            
            echo '< a href="?w='.($w-1).'">Eine Woche früher< /a> - < a href="?w='.($w+1).'">Eine Woche später< /a>< br>< br>';
            
            echo "< b>Sonntagsblatt ".date("d.m.Y",$ts).'< /b>< br>< br>';
            
            
            
            // Login to churchtools
            $url = $domain.'?q=login';
            $data = array('email' => $mail, 'password' => $pw, 'directtool' => 'yes');
            sendRequest($url, $data);
            
            // Now get birthday data
            $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>
            ';
            /***************************************************************/
            
            
            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);
            }
            
            function erzeugeSatz($aGeb) {
            	/**
            	 Satz aus Geburtstags-Array erzeugen
            	*/
            	global $n, $d;
            	$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;
            }
            
            
            
            
            /**
             * Get saved Cookies from filesystem and returns an array
             * @return array of Cookies in string
             */ 
            function getCookies() {
              $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;
              }
            }
            
            /**
             * Save cookies from $aRH (http response header) to the filesystem
             * @param $aRH
             */
            function saveCookies($aRH) {
              $n = count($aRH); // Number of Pieces
              $counter = 0;
              while ($counter  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;
            }
            
            
            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 .= '-array-';
            		else $html .= '(?)';
            		$html .= '';
            	}
            	$html .= '';
            	return $html;
            }
            
            chs 1 Reply Last reply Reply Quote 0
            • chs
              chs @artus70 last edited by

              @artus70

              vielen Dank für deine Mühe.
              Auch wenn es mehr ist, als ich eigentlich brauche.
              Der Benutzer soll gar nicht interaktiv tätig werden.

              Jedenfalls, hab ich es ausprobiert (bzw. versucht).
              Leider läuft das script auf einen Fehler.
              Hast du einen Tipp für mich?

              0_1487973246086_Bildschirmfoto 2017-02-24 um 22.52.04.png

              chs 1 Reply Last reply Reply Quote 0
              • chs
                chs @chs last edited by

                @artus70

                ...waren nur die Cookies. Hab den Teil rausgenommen.

                1 Reply Last reply Reply Quote 0
                • ?
                  A Former User last edited by

                  Hallöchen,
                  ich bin ganz neu im Umgang mit ChurchTools und um noch ein paar zusätzliche Notwendigkeiten bereitstellen zu können, möchte ich noch ein paar Dinge mit Hilfe der API zusammenstellen. Um ein wenig zu üben, wollte ich diese Geburtstagsliste nachbauen und optisch etwas verändern. Soweit passt alles, jedoch kommen von dem Aufruf nur die Personen, die den Status 3 = "Mitglied" haben (auch ohne die Bedingung in der Funktion "erzeugeGeburtstagsarray"). Es gibt bei uns 3 verschiedene Arten von Status, die 2 zusätzlichen sind abgesehen von der Rechtevergabe und vom Namen identisch zur 3. Weiß jemand zufällig, was passieren würde, wenn ich den Status 3 lösche, was dann noch geladen wird, bzw. ob ich innerhalb von ChurchTools noch irgendwo eine Einstellung vornehmen muss, damit die anderen 2 Stati mit geladen werden?

                  MaxStro 1 Reply Last reply Reply Quote 0
                  • ?
                    A Former User last edited by

                    ok, habe es nun selbst herausgefunden, das kann man in den Admin-Einstellungen im Register "ChurchDB" einstellen, die Labelbeschriftung wäre dann "Status-Ids für die Geburtstagsliste (kommasepariert) *"

                    1 Reply Last reply Reply Quote 0
                    • MaxStro
                      MaxStro @Guest last edited by

                      @mtlmarko89 wie sieht dein Aufruf aus,? Ist evtl für andere auch interessant.

                      1 Reply Last reply Reply Quote 0
                      • ?
                        A Former User last edited by

                        Im Prinzip genauso wie das weiter oben, nur dass ich das in eine Tabelle einordne und auf die zusätzlichen Funktionen verzichte (Das Login vorher und die Grundstruktur meine Homepage lasse ich mal aus Platzgründen beiseite):

                        $host = 'instanz.churchtools.de';
                        $user = 'e-mail@domain.de';
                        $pw = 'MeinPasswortIstGeheim';
                        $w = 0;
                        $d = 5;
                        
                        
                        echo ''."\n";
                        echo ''."\n";
                        echo ''."\n";
                        echo 'Nachname'."\n";
                        echo 'Vorname'."\n";
                        echo 'Tage'."\n";
                        echo 'Alter'."\n";
                        echo 'Status'."\n";
                        echo ''."\n";
                        
                        if($d < 1) $d = 1;
                        if($d > 8) $d = 8;
                        
                        $from = 7-date("N") + (7 * ($w-1)); // Tagesdifferenz zu "heute" für den Sonntag (Startdatum) der gewünschten Woche
                        $to = $from - 1 + $d * 7; // Tagesdifferenz zu "heute" für das Enddatum nach $d Wochen
                        $ts = mktime(0,0,0,date("n"),date("j")+$from,date("Y")); // Lesbares Datum des Start-Sonntags
                        
                        //echo date("d.m.Y", $ts)."\n";
                                  
                        // Now get birthday data
                        $url = 'https://'.$host.'/index.php?q=churchdb/ajax';
                        $data = array('func' => 'getBirthdayList', "from" => $from, "to" => $to); 
                        $oData = sendRequest($url,$data);
                        
                        //print_r($oData->data);
                        
                        foreach ($oData->data as $dataset)
                        {
                        //  print_r($dataset);
                          echo ''."\n";
                          echo ''.$dataset->name.''."\n";
                          echo ''.$dataset->vorname.''."\n";
                          echo ''.$dataset->diffDays.''."\n";
                          echo ''.$dataset->age.''."\n";
                          echo ''.$dataset->status.''."\n";
                          echo ''."\n";
                        }
                        echo ''."\n";
                        echo '';
                        echo ''.date("d.m.Y", $ts)."\n";
                        

                        Wie schon gesagt, das ist zum Üben, sehr stark an den obigen Schnippseln angelehnt, nur dass hier w=0 die aktuelle Woche wäre, oben wäre die aktuelle Woche die 1 gewesen, also eigentlich nichts Neues.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post