• 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
      zuletzt editiert von chs

      Hallo,

      möchte auf einer Website alle Geburtstage 7 Tage vor und 30 Tage nach dem aktuellen Datum anzeigen.
      Allerdings bekomme ich irgendwie gar keine Daten zurück außer: Login Erfolgreich.
      Egal welches Beispiel ich auch ausprobiere. Gibt aber auch keinerlei Fehlermeldung.
      Viele Beispiele gibt es ja leider nicht (oder habe ich da eine Resource übersehen?)

      Hat jemand einen Tipp oder gar ein funktionierendes Beispiel?

      Danke und Gruß
      Christian

      Mein Code:

      ''' <?
      include_once('helper.php');
      // Login with email and password
      $url = 'https://fcgn.churchtools.de/index.php?q=login/ajax';
      $data = array('func' => 'login',
      'email' => 'xxx',
      'password' => 'yyy');
      $result = sendRequest($url, $data);
      if ($result->status == "fail") {
      echo $result->data;
      return;
      }
      echo "Login erfolgreich!<br/>";
      // Now get all Birthdays
      $url = 'https://fcgn.churchtools.de/index.php?q=churchDB/ajax';
      $data = array('func' => 'getBirthdayList', 'from'=> '5', 'to' => '10');
      $result = sendRequest($url, $data);
      echo "Userlist:<br/>";
      if($result->status=="fail"){
      echo $result->data;
      echo "nix wars";
      return;
      }
      print_r($result->data);
      echo "Ende der Geburtstags-Liste<br/>";

      ?>'''

      chsC 1 Antwort Letzte Antwort Antworten Zitieren 0
      • 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