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

    Geburtstagsliste per API Aufruf

    ChurchTools Schnittstellen
    geburtstagslist
    5
    12
    3.0k
    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.
    • chsC
      chs
      last edited by 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 Reply Last reply Reply Quote 0
      • chsC
        chs @chs
        last edited by chs

        Irgendwie hat sich der Code verabschiedet...

        0_1487019538973_Bildschirmfoto 2017-02-13 um 19.41.35.png

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

          Hallo,

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

          Tschüß Franz

          chsC 1 Reply Last reply Reply Quote 0
          • chsC
            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
              • artus70A
                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;
                }
                

                CT hosted

                chsC 1 Reply Last reply Reply Quote 0
                • chsC
                  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

                  chsC 1 Reply Last reply Reply Quote 0
                  • chsC
                    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?

                      MaxStroM 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
                        • MaxStroM
                          MaxStro @A Former User
                          last edited by

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

                          CT hosting

                          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