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

    Geburtstagsliste per API Aufruf

    ChurchTools Schnittstellen
    geburtstagslist
    5
    12
    2.9k
    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.
    • chsC
      chs @chs
      zuletzt editiert von chs

      Irgendwie hat sich der Code verabschiedet...

      0_1487019538973_Bildschirmfoto 2017-02-13 um 19.41.35.png

      1 Antwort Letzte Antwort Antworten Zitieren 0
      • F
        f.goethel
        zuletzt editiert von

        Hallo,

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

        Tschüß Franz

        chsC 1 Antwort Letzte Antwort Antworten Zitieren 0
        • chsC
          chs @f.goethel
          zuletzt editiert von

          @f.goethel Danke!

          F 1 Antwort Letzte Antwort Antworten Zitieren 0
          • F
            f.goethel @chs
            zuletzt editiert von

            @chs Bitte 😉

            1 Antwort Letzte Antwort Antworten Zitieren 0
            • artus70A
              artus70
              zuletzt editiert von 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;
              }
              

              CT hosted

              chsC 1 Antwort Letzte Antwort Antworten Zitieren 0
              • chsC
                chs @artus70
                zuletzt editiert von

                @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

                chsC 1 Antwort Letzte Antwort Antworten Zitieren 0
                • chsC
                  chs @chs
                  zuletzt editiert von

                  @artus70

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

                  1 Antwort Letzte Antwort Antworten Zitieren 0
                  • ?
                    Ein ehemaliger Benutzer
                    zuletzt editiert von

                    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?

                    MaxStroM 1 Antwort Letzte Antwort Antworten Zitieren 0
                    • ?
                      Ein ehemaliger Benutzer
                      zuletzt editiert von

                      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 Antwort Letzte Antwort Antworten Zitieren 0
                      • MaxStroM
                        MaxStro @Ein ehemaliger Benutzer
                        zuletzt editiert von

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

                        CT hosting

                        1 Antwort Letzte Antwort Antworten Zitieren 0
                        • ?
                          Ein ehemaliger Benutzer
                          zuletzt editiert von

                          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 Antwort Letzte Antwort Antworten Zitieren 0
                          • Erster Beitrag
                            Letzter Beitrag