WP-Plugin ChurchTools Anmeldungen – Blick in den Code

Das WordPress Plugin für ChurchTools Anmeldungen wurde umgesetzt. Wenn du die Funktionsweise und den Aufbau des Plugins noch nicht kennst bietet es sich an, dass du dich damit zunächst vertraut machst. Eine Beschreibung wie das Plugin eingesetzt werden kann findest du hier.

In diesem Beitrag beschreibe ich wie die Parse-Logik des Plugins aufgebaut ist. Dafür gehen wir Schritt für Schritt den Code des Plugins aus dem GitHub Repo durch.

Parse Shortcode

Die Methode parse_shortcode() wird aufgerufen, wenn auf einer Seite der Plugin-Shortcode eingebunden wird. Die Methode gibt als Rückgabe-Wert den HTML-Code, der anstelle des Shortcodes angezeigt werden soll.

public function parse_shortcode()
{
    $twigLoader = new FilesystemLoader(Ct_Anmeldungen_Admin::$TEMPLATE_DIR);
    $twig = new Environment($twigLoader);
    $twig->addExtension(new DebugExtension());


    $Parsedown = new Parsedown();
    $markdownFilter = new TwigFilter('markdown', function ($string) use ($Parsedown) {
        return $Parsedown->text($string);
    }, ['is_safe' => ['html']]);
    $twig->addFilter($markdownFilter);

    try {
        $ctData = $this->provide_churchtools_data();
        $childHtml = "";
        foreach ($ctData as $groupData) {
            $childHtml .= $twig->render(Ct_Anmeldungen_Admin::$CHILD_TEMPLATE_NAME, $groupData);
        }

        return $twig->render(Ct_Anmeldungen_Admin::$PARENT_TEMPLATE_NAME, ['children' => $childHtml]);
    } catch (LoaderError | RuntimeError | SyntaxError  $e) {
        Ct_Anmeldungen::$LOG->error("Could not render Template:", [$e->getMessage()]);
        return "";
    }
}
  1. Twig initialisieren (Z.3 – 5): Zunächst wird die Template-Library Twig initalisiert. Dafür wird der Pfad angegeben in welchem sich die Templates befinden (Ct_Anmeldungen_Admin::$TEMPLATE_DIR).
  2. Markdown Funktionalität (Z. 8 – 12): Damit das Template und vor allem die Info-Texte der angezeigten Anmeldungen Markdownfähig werden, wird Twig um die Library Parsedown erweitert.
  3. ChurchTools Daten abfragen (Z. 15): Mit der Methode provide_churchtools_data() werden die Daten aus ChurchTools abgerufen. Die Methode wir im nächsten Abschnitt näher beschrieben.
  4. Tempalte zusammenstellen (Z. 17 – 21): Für jede Anmeldung wird ein eigenes Child-Template gerendert mit den jeweiligen Daten. In Zeile 21 werden die Child-Templates in dem Parent-Template gewrapped.
  5. Fehlerbehandlung (Z. 22 – 25): Damit Exceptions nicht dem Webseitenbesucher angezeigt werden, wird im Catch-Block die entsprechenden Exceptions abgefangen und gelogged.

Provide ChurchTools Data

Die Methode provide_churchtools_data() stellt die Daten für die Gruppenanmeldungen zusammen:

private function provide_churchtools_data()
{
    $ctUrl = get_option(Ct_Anmeldungen_Admin::$OPTION_URL);
    $groupHash = get_option(Ct_Anmeldungen_Admin::$OPTION_GROUP_HASH);

    if (is_null($ctUrl) || $ctUrl == "" || is_null($groupHash) || $groupHash == "") {
        Ct_Anmeldungen::$LOG->warning("Url or GroupHash is not configured in Settings.");
        return [];
    }

    try {
        CTConfig::setApiUrl($ctUrl);

        $publicGroup = PublicGroupRequest::get($groupHash);
        $publicGroups = $publicGroup?->getGroups() ?? [];

        if (empty($publicGroups)) {
            CT_Anmeldungen::$LOG->warning("Public-Groups Data is empty. Maybe GroupHash is wrong.");
        }

        $nrOfChildren = get_option(Ct_Anmeldungen_Admin::$OPTION_NR_OF_CHILDREN);
        if ($nrOfChildren != null) {
            $publicGroups = array_splice($publicGroups, 0, (int)$nrOfChildren);
        }

        return array_map(function ($groupObject) use ($groupHash) {
            return self::parsePublicGroupToData($groupObject, $groupHash);
        }, $publicGroups);

    } catch (Exception $exception) {
        Ct_Anmeldungen::$LOG->error("Could not retrieve data from ChurchTools:", [$exception->getMessage()]);
        return [];
    }
}
  1. Konfiguration abrufen (Z. 3 – 9): Die ChurchTools-URL und der Gruppenhash werden aus den WordPress-Einstellungen abgerufen.
  2. Public-Groups aus ChurchTools abrufen (Z. 12 – 15): Mit diesen einfachen drei Zeilen wird zunächst der ChurchTools-API Client konfiguriert und die entsprechenden Daten abgerufen.
  3. Ergebnisliste limitieren (Z. 21 – 24): Die Anzahl an Ergebnissen wird mit dieser Logik auf die in den Einstellungen gesetzten Zahl limitiert.
  4. Objekt in Array konvertieren (Z. 26 – 28): Damit im Template die Daten in Twig einfacher eingebunden werden kann, werden die Objekte zu Daten in Array-Form konvertiert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert