From 5f7e7d47edf98034dea66745dcb94692c2a95c25 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Wed, 15 Nov 2017 21:41:35 +0100 Subject: [PATCH 001/126] Mindestanforderung auf WordPress 4.6 angehoben --- .travis.yml | 2 -- README.md | 2 +- src/readme.txt | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 33f676b8..c1b2a42c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,6 @@ php: - '7.1' env: - - WP_VERSION=4.4.12 WP_MULTISITE=0 - - WP_VERSION=4.5.11 WP_MULTISITE=0 - WP_VERSION=4.6.8 WP_MULTISITE=0 - WP_VERSION=4.7.7 WP_MULTISITE=0 - WP_VERSION=4.8.3 WP_MULTISITE=0 diff --git a/README.md b/README.md index 03465271..b6049c68 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Der PHP-Code wird gemäß dem Coding Style Guide [PSR-2](http://www.php ### Mindestvoraussetzungen * PHP: 5.3.0 -* WordPress: 4.4 +* WordPress: 4.6 Auch wenn PHP 5.3 vorausgesetzt und derzeit noch als Minimum erhalten wird, werden die automatisierten Tests nur mit den [aktuellen PHP-Versionen](https://secure.php.net/supported-versions.php) durchgeführt. diff --git a/src/readme.txt b/src/readme.txt index 335d26f8..b369a55b 100644 --- a/src/readme.txt +++ b/src/readme.txt @@ -2,7 +2,7 @@ Contributors: abrain Donate link: https://einsatzverwaltung.abrain.de/unterstuetzen/ Tags: Feuerwehr, Hilfsorganisation, Öffentlichkeitsarbeit -Requires at least: 4.4.0 +Requires at least: 4.6.0 Tested up to: 4.9 Requires PHP: 5.3 Stable tag: 1.3.3 From ef348ca4450a440c49f3bee51aacdda697042680 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Wed, 15 Nov 2017 21:58:51 +0100 Subject: [PATCH 002/126] Alte Release Notes archiviert (siehe https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/#how-many-versions-should-i-keep-in-my-changelog) --- src/changelog.txt | 221 ++++++++++++++++++++++++++++++++ src/readme.txt | 314 ---------------------------------------------- 2 files changed, 221 insertions(+), 314 deletions(-) create mode 100644 src/changelog.txt diff --git a/src/changelog.txt b/src/changelog.txt new file mode 100644 index 00000000..72d66293 --- /dev/null +++ b/src/changelog.txt @@ -0,0 +1,221 @@ + += 1.2.3 = +Verbesserungen: + +* Kompatibilität von Einsatzberichten und Kategorien verbessert + +Sonstiges: + +* Getestet mit WordPress 4.6 + += 1.2.2 = +Verbesserungen: + +* Einsatzliste: Trennung zwischen den Kalenderjahren kann abgeschalten werden +* Einsatzliste: Jahresüberschrift kann ausgeblendet werden +* Widget Letzte Einsätze (eigenes Format): Neuer Tag für laufende Nummer +* Widgets unterstützen Selective Refresh (neues Feature in der Live-Vorschau) + +Fehlerbehebungen: + +* Einsatzberichte konnten im Frontend anderer Plugins auftauchen +* Alarmzeit wurde bei Entwürfen falsch gespeichert + +Sonstiges: + +* Getestet mit WordPress 4.5 + += 1.2.1 = +Verbesserungen: + +* Die Zebrastreifen der tabellarischen Übersicht können jetzt abgeschalten werden +* Farbe für Zebrastreifen ist einstellbar, ebenso die betroffenen Zeilen (gerade/ungerade) + +Fehlerbehebungen: + +* Widget zeigte bei bestimmten Einstellungen nur als besonders markierte Einsätze an +* Kategoriezuordnung von Einsatzberichten wurde nicht aufgehoben, wenn Markierung für besonderen Einsatz entfernt wurde + += 1.2.0 = +* Die tabellarische Übersicht passt sich nun Mobilgeräten an +* Einsatzberichte können als besonders markiert werden +* Neue Optionen für Shortcode einsatzliste: Nur besondere Einsätze anzeigen, Anzahl der Berichte limitieren, Link zum Bericht muss nicht mehr der Titel sein, kein Link bei fehlendem Beitragstext, Links generell abschaltbar +* Beim Anlegen neuer Einsatzberichte wird die Alarmzeit vorbelegt +* Anweisungen beim CSV-Import klarer formuliert +* Einsatzberichte werden nun tatsächlich der eingestellten Kategorie zugeordnet +* Anzeige der Einsatzberichte zwischen normalen Beiträgen ist an mehr Stellen möglich und kann auf besondere Einsätze beschränkt werden +* Beschriftungen (u.a. für die Barrierefreiheit) überarbeitet +* Der Inhalt der Kurzfassung kann auch wieder WordPress selbst überlassen werden +* Bei geschützten Beiträgen wurden die Einsatzdetails auch ohne Eingabe des Passworts angezeigt + += 1.1.5 = +* CSV-Import: Leerzeichen zu Beginn des Feldes verhinderte Auswertung des Datums +* CSV-Import: Zu kurze Zeilen verursachten Fehlermeldung + += 1.1.4 = +* Links zum Jahresarchiv wurden falsch generiert, wenn Permalinkstruktur nicht mit einem Schrägstrich endete +* Präfix der Permalinkstruktur (z.B. /archive/) wurde bei den Jahresarchiven nicht berücksichtigt + += 1.1.3 = +* Problem mit Benutzerrechten behoben +* Getestet mit WordPress 4.4 +* Mindestanforderung auf WordPress 3.7 angehoben + += 1.1.2 = +* CSV-Import: Ein Leerzeichen in der Spaltenbeschriftung verhinderte den Import dieser Spalte +* Anpassungen für WordPress 4.4: Hierarchie der Überschriften korrigiert und neue Labels für Screenreader angelegt + += 1.1.1 = +* Import: Einsatzende wurde nicht richtig formatiert abgespeichert +* Import: Mit Kommas getrennte Liste von Fahrzeugen wurde als ein einziges Fahrzeug angelegt + += 1.1.0 = +* Neues Widget kann per HTML komplett selbst gestaltet werden +* Anzeigereihenfolge der Fahrzeuge kann festgelegt werden +* Fahrzeuge können in Hierarchie (z.B. Standorte) organisiert werden (hat noch keine Auswirkung auf die Darstellung) +* Import von Einsatzberichten aus CSV-Dateien möglich +* Problem mit Benutzerrechten behoben +* Einsatzberichte bleiben erhalten, wenn der Autor gelöscht wird +* Als privat markierte Einsatzberichte wurden bei der Berechnung der Einsatznummern nicht berücksichtigt + += 1.0.0 = +* Basispfad der Einsatzberichte (bisher einsaetze) kann eingestellt werden +* Hinweis bei Überschneidung von Basispfad und dem Pfad einer Seite +* Einsatzberichte können Schlagworte der Beiträge nutzen +* Jeder in WordPress vorhandene öffentliche Beitragstyp kann nun als Fahrzeugseite verwendet werden +* Einsatzberichte können in einer bestimmten Beitragskategorie eingeblendet werden +* Neue Spalte für Einsatzliste: Datum + Zeit +* Kurze Spaltentitel der Einsatzliste (Nummer, Datum, Zeit, Dauer) werden auch bei wenig Platz nicht mehr umgebrochen + += 0.9.2 = +* Getestet mit WordPress 4.3 +* Gleiche Spaltenbreite über gesamte Einsatzliste +* Änderungen an den Einsatzberichten sind jetzt über Revisionen nachverfolgbar +* Font Awesome auf Version 4.4 aktualisiert + += 0.9.1 = +* Getestet mit WordPress 4.2 +* Fehlerbehebung: Administratoren hatten nicht sofort nach der Installation des Plugins Zugriff auf alle Funktionen +* Verbesserung: Übersichtsseite der Fahrzeuge bzw. externen Einsatzmittel im Adminbereich zeigt jetzt auch die verlinkte Fahrzeugseite bzw. die angegebene URL +* Kontaktinformationen und FAQs aktualisiert + += 0.9.0 = +* Komplettsanierung: Unter der Haube wurde kräftig umgebaut und zusammengefasst, klarere Strukturen beschleunigen die Entwicklung +* Neu: Spalten der Einsatzliste sind jetzt einstellbar +* Neu: Für die Einsatzliste stehen mehr Spalten zur Auswahl (Alarmierungsart, Dauer, Einsatzart, Einsatzleiter, Einsatzort, Fahrzeuge, Laufende Nummer, Mannschaftsstärke, Weitere Kräfte) +* Verbesserung: Die Mannschaftstärke muss keine einzelne Zahl mehr sein, Angaben wie 1:8 sind möglich +* Fehlerbehebung: Seitenweise Navigation im Jahresarchiv funktionierte nicht direkt nach der Aktivierung +* Font Awesome auf Version 4.3 aktualisiert +* Hinweis: Dieses Update entfernt alle Einträge zur Mannschaftsstärke, die 0 lauten. Ein Backup der Datenbank vor dem Update wird empfohlen. + += 0.8.4 = +* Fehlerbehebung: Erstellen von Standard-WordPress-Beiträgen war beeinträchtigt + += 0.8.3 = +* Fehlerbehebung: Einsatzdetails wurden nicht abgespeichert + += 0.8.2 = +* Verbesserung: Inhalt der Kurzfassung von Einsatzberichten ist nun für die Webseite und den Feed einstellbar +* Verbesserung: Autovervollständigung für das Feld Einsatzleiter +* Entfernt: Einstellung 'Auszug darf Links enthalten' + += 0.8.1 = +* Neu: Links zu externen Kräften lassen sich optional in neuem Fenster öffnen (neue Einstellung) +* Verbesserung: Tabelle der Einsatzübersicht enthält keine festen Breitenangaben mehr +* Verbesserung: Der Autor eines Einsatzberichtes kann eingestellt werden +* Fehlerbehebung: (Unsichtbare) Fehlermeldungen im Widget wurden abgestellt + += 0.8 = +* Neu: Import aus wp-einsatz +* Neu: Einsatzberichte können zusammen mit den Standardbeiträgen (z.B. auf der Startseite) angezeigt werden +* Neu: Hierarchie der Einsatzart kann im Widget angezeigt werden + += 0.7.1 = +* Neu: Einsatzberichte können mit der Jetpack-Funktion "Publizieren" veröffentlicht werden +* Hinweis: Einsatzverwaltung ist kompatibel mit WordPress 4.1 + += 0.7.0 = +* Neu: Berechtigung zur Verwaltung von Einsatzberichten kann nun allen Benutzerrollen von WordPress zugeordnet werden +* Verbesserung: Shortcode einsatzliste kann Tabelle nach Monaten getrennt darstellen +* Hinweis: Der neue Shortcode-Parameter kann in der [Anleitung](https://einsatzverwaltung.abrain.de/dokumentation/) nachgelesen werden +* Hinweis (subtil): Es gibt mittlerweile auch eine [Facebook-Seite](https://www.facebook.com/einsatzverwaltung) + += 0.6.0 = +* Neu: Fahrzeug kann mit Seite innerhalb Wordpress verknüpft werden +* Neu: Externe Kräfte können mit Link zu Webseite versehen werden +* Neu: Gefilterte Einsatzübersichten für einzelne Fahrzeuge, Einsatzarten oder ext. Kräfte +* Verbesserung: Einsatzarten können hierarchisch gegliedert werden +* Verbesserung: Shortcode einsatzliste kann alle Jahre anzeigen +* Verbesserung: Shortcode einsatzliste kann die letzten X Jahre anzeigen +* Verbesserung: Leere Einsatzdetails werden standardmäßig versteckt +* Verbesserung: Kurzfassung im Feed jetzt mit Zeilenumbrüchen +* Verbesserung: Icons werden mit Font Awesome dargestellt +* Fehlerbehebung: Shortcode einsatzjahre erzeugte falsche Links bei deaktivierten Permalinks +* Fehlerbehebung: Seitennavigation im Jahresarchiv war defekt +* Hinweis: Die neuen Shortcode-Parameter können in der [Anleitung](https://einsatzverwaltung.abrain.de/dokumentation/) nachgelesen werden + += 0.5.4 = +* Fehlerbehebung: Datum für Feed wurde falsch gespeichert +* Hinweis: Die Daten werden beim Update automatisch korrigiert, bitte fertigen Sie vorher ein Backup an + += 0.5.3 = +* Fehlerbehebung: Plugin funktionierte nicht auf Servern mit PHP-Einstellung short_open_tag = false + += 0.5.2 = +* Neu: Widget kann Link zu Feed anzeigen +* Neu: Widget kann Einsatzort anzeigen +* Neu: Widget kann Einsatzart anzeigen +* Neu: Einsatzberichte werden im Dashboard bei "Auf einen Blick" angezeigt +* Neu: Icon im Adminbereich (ab WP 3.9) +* Fehlerbehebung: Schreibrechte wurden beim Speichern falsch geprüft + += 0.5.1 = +* Neu: Hinweis bei veralteter PHP-Version + += 0.5.0 = +* Neu: Feld für Alarmierungsart +* Neu: Feld für Einsatzort +* Neu: Feld für Einsatzleiter +* Neu: Feld für Mannschaftsstärke +* Kontaktadressen aktualisiert +* Hinweis auf Verwendungsempfehlung erst ab Version 1.0 entfernt, da hinfällig + += 0.4.0 = +* Neu: Format der Einsatznummer einstellbar +* Neu: Werkzeug zur Reparatur/Aktualisierung von Einsatznummern + += 0.3.2 = +* Fehlerbehebung: Datums- und Zeitangaben wurden in englischer Schreibweise angezeigt + += 0.3.1 = +* Fehlerbehebung: Bearbeiten normaler Beiträge war beeinträchtigt + += 0.3.0 = +* Neu: Einstellungsseite +* Neu: Leere Angaben können im Kopf des Einsatzberichts versteckt werden +* Verbesserung: Shortcode _einsatzliste_ unterstützt Sortierung +* Verbesserung: Datum und Zeit werden gemäß WordPress-Einstellungen dargestellt +* Hinweis: Frühere Fehlalarm-Markierungen müssen neu gesetzt werden + += 0.2.1 = +* Fehlerbehebung: Einsatzende wurde falsch abgespeichert + += 0.2.0 = +* Neu: Einsatzberichte können als Fehlalarm markiert werden +* Neu: Pro Einsatzbericht ist nur noch eine Einsatzart auswählbar +* Neu: Externe Einsatzmittel können ab jetzt erfasst werden +* Neu: Validierung von Benutzereingaben +* Fehlerbehebung: Links beim Shortcode einsatzjahre wurden vereinzelt falsch generiert + += 0.1.2 = +* Kompatibilität mit PHP < 5.3.0 wiederhergestellt + += 0.1.1 = +* Hinweis auf Entwicklungszustand eingefügt + += 0.1.0 = +* Allererste Version +* Verwaltung von Einsätzen als eigener Beitragstyp +* Einsatzart und Fahrzeuge können zu Einsätzen vermerkt werden +* Einbinden einer Liste von Einsätzen eines Jahres per Shortcode +* Widget zeigt die aktuellsten X Einsätze \ No newline at end of file diff --git a/src/readme.txt b/src/readme.txt index b369a55b..dd195059 100644 --- a/src/readme.txt +++ b/src/readme.txt @@ -98,322 +98,8 @@ Nein, mehr gibt es [hier](https://einsatzverwaltung.abrain.de/faq/). * Mindestanforderung auf WordPress 4.4 angehoben * Getestet mit WordPress 4.7 -= 1.2.3 = -Verbesserungen: - -* Kompatibilität von Einsatzberichten und Kategorien verbessert - -Sonstiges: - -* Getestet mit WordPress 4.6 - -= 1.2.2 = -Verbesserungen: - -* Einsatzliste: Trennung zwischen den Kalenderjahren kann abgeschalten werden -* Einsatzliste: Jahresüberschrift kann ausgeblendet werden -* Widget Letzte Einsätze (eigenes Format): Neuer Tag für laufende Nummer -* Widgets unterstützen Selective Refresh (neues Feature in der Live-Vorschau) - -Fehlerbehebungen: - -* Einsatzberichte konnten im Frontend anderer Plugins auftauchen -* Alarmzeit wurde bei Entwürfen falsch gespeichert - -Sonstiges: - -* Getestet mit WordPress 4.5 - -= 1.2.1 = -Verbesserungen: - -* Die Zebrastreifen der tabellarischen Übersicht können jetzt abgeschalten werden -* Farbe für Zebrastreifen ist einstellbar, ebenso die betroffenen Zeilen (gerade/ungerade) - -Fehlerbehebungen: - -* Widget zeigte bei bestimmten Einstellungen nur als besonders markierte Einsätze an -* Kategoriezuordnung von Einsatzberichten wurde nicht aufgehoben, wenn Markierung für besonderen Einsatz entfernt wurde - -= 1.2.0 = -* Die tabellarische Übersicht passt sich nun Mobilgeräten an -* Einsatzberichte können als besonders markiert werden -* Neue Optionen für Shortcode einsatzliste: Nur besondere Einsätze anzeigen, Anzahl der Berichte limitieren, Link zum Bericht muss nicht mehr der Titel sein, kein Link bei fehlendem Beitragstext, Links generell abschaltbar -* Beim Anlegen neuer Einsatzberichte wird die Alarmzeit vorbelegt -* Anweisungen beim CSV-Import klarer formuliert -* Einsatzberichte werden nun tatsächlich der eingestellten Kategorie zugeordnet -* Anzeige der Einsatzberichte zwischen normalen Beiträgen ist an mehr Stellen möglich und kann auf besondere Einsätze beschränkt werden -* Beschriftungen (u.a. für die Barrierefreiheit) überarbeitet -* Der Inhalt der Kurzfassung kann auch wieder WordPress selbst überlassen werden -* Bei geschützten Beiträgen wurden die Einsatzdetails auch ohne Eingabe des Passworts angezeigt - -= 1.1.5 = -* CSV-Import: Leerzeichen zu Beginn des Feldes verhinderte Auswertung des Datums -* CSV-Import: Zu kurze Zeilen verursachten Fehlermeldung - -= 1.1.4 = -* Links zum Jahresarchiv wurden falsch generiert, wenn Permalinkstruktur nicht mit einem Schrägstrich endete -* Präfix der Permalinkstruktur (z.B. /archive/) wurde bei den Jahresarchiven nicht berücksichtigt - -= 1.1.3 = -* Problem mit Benutzerrechten behoben -* Getestet mit WordPress 4.4 -* Mindestanforderung auf WordPress 3.7 angehoben - -= 1.1.2 = -* CSV-Import: Ein Leerzeichen in der Spaltenbeschriftung verhinderte den Import dieser Spalte -* Anpassungen für WordPress 4.4: Hierarchie der Überschriften korrigiert und neue Labels für Screenreader angelegt - -= 1.1.1 = -* Import: Einsatzende wurde nicht richtig formatiert abgespeichert -* Import: Mit Kommas getrennte Liste von Fahrzeugen wurde als ein einziges Fahrzeug angelegt - -= 1.1.0 = -* Neues Widget kann per HTML komplett selbst gestaltet werden -* Anzeigereihenfolge der Fahrzeuge kann festgelegt werden -* Fahrzeuge können in Hierarchie (z.B. Standorte) organisiert werden (hat noch keine Auswirkung auf die Darstellung) -* Import von Einsatzberichten aus CSV-Dateien möglich -* Problem mit Benutzerrechten behoben -* Einsatzberichte bleiben erhalten, wenn der Autor gelöscht wird -* Als privat markierte Einsatzberichte wurden bei der Berechnung der Einsatznummern nicht berücksichtigt - -= 1.0.0 = -* Basispfad der Einsatzberichte (bisher einsaetze) kann eingestellt werden -* Hinweis bei Überschneidung von Basispfad und dem Pfad einer Seite -* Einsatzberichte können Schlagworte der Beiträge nutzen -* Jeder in WordPress vorhandene öffentliche Beitragstyp kann nun als Fahrzeugseite verwendet werden -* Einsatzberichte können in einer bestimmten Beitragskategorie eingeblendet werden -* Neue Spalte für Einsatzliste: Datum + Zeit -* Kurze Spaltentitel der Einsatzliste (Nummer, Datum, Zeit, Dauer) werden auch bei wenig Platz nicht mehr umgebrochen - -= 0.9.2 = -* Getestet mit WordPress 4.3 -* Gleiche Spaltenbreite über gesamte Einsatzliste -* Änderungen an den Einsatzberichten sind jetzt über Revisionen nachverfolgbar -* Font Awesome auf Version 4.4 aktualisiert - -= 0.9.1 = -* Getestet mit WordPress 4.2 -* Fehlerbehebung: Administratoren hatten nicht sofort nach der Installation des Plugins Zugriff auf alle Funktionen -* Verbesserung: Übersichtsseite der Fahrzeuge bzw. externen Einsatzmittel im Adminbereich zeigt jetzt auch die verlinkte Fahrzeugseite bzw. die angegebene URL -* Kontaktinformationen und FAQs aktualisiert - -= 0.9.0 = -* Komplettsanierung: Unter der Haube wurde kräftig umgebaut und zusammengefasst, klarere Strukturen beschleunigen die Entwicklung -* Neu: Spalten der Einsatzliste sind jetzt einstellbar -* Neu: Für die Einsatzliste stehen mehr Spalten zur Auswahl (Alarmierungsart, Dauer, Einsatzart, Einsatzleiter, Einsatzort, Fahrzeuge, Laufende Nummer, Mannschaftsstärke, Weitere Kräfte) -* Verbesserung: Die Mannschaftstärke muss keine einzelne Zahl mehr sein, Angaben wie 1:8 sind möglich -* Fehlerbehebung: Seitenweise Navigation im Jahresarchiv funktionierte nicht direkt nach der Aktivierung -* Font Awesome auf Version 4.3 aktualisiert -* Hinweis: Dieses Update entfernt alle Einträge zur Mannschaftsstärke, die 0 lauten. Ein Backup der Datenbank vor dem Update wird empfohlen. - -= 0.8.4 = -* Fehlerbehebung: Erstellen von Standard-WordPress-Beiträgen war beeinträchtigt - -= 0.8.3 = -* Fehlerbehebung: Einsatzdetails wurden nicht abgespeichert - -= 0.8.2 = -* Verbesserung: Inhalt der Kurzfassung von Einsatzberichten ist nun für die Webseite und den Feed einstellbar -* Verbesserung: Autovervollständigung für das Feld Einsatzleiter -* Entfernt: Einstellung 'Auszug darf Links enthalten' - -= 0.8.1 = -* Neu: Links zu externen Kräften lassen sich optional in neuem Fenster öffnen (neue Einstellung) -* Verbesserung: Tabelle der Einsatzübersicht enthält keine festen Breitenangaben mehr -* Verbesserung: Der Autor eines Einsatzberichtes kann eingestellt werden -* Fehlerbehebung: (Unsichtbare) Fehlermeldungen im Widget wurden abgestellt - -= 0.8 = -* Neu: Import aus wp-einsatz -* Neu: Einsatzberichte können zusammen mit den Standardbeiträgen (z.B. auf der Startseite) angezeigt werden -* Neu: Hierarchie der Einsatzart kann im Widget angezeigt werden - -= 0.7.1 = -* Neu: Einsatzberichte können mit der Jetpack-Funktion "Publizieren" veröffentlicht werden -* Hinweis: Einsatzverwaltung ist kompatibel mit WordPress 4.1 - -= 0.7.0 = -* Neu: Berechtigung zur Verwaltung von Einsatzberichten kann nun allen Benutzerrollen von WordPress zugeordnet werden -* Verbesserung: Shortcode einsatzliste kann Tabelle nach Monaten getrennt darstellen -* Hinweis: Der neue Shortcode-Parameter kann in der [Anleitung](https://einsatzverwaltung.abrain.de/dokumentation/) nachgelesen werden -* Hinweis (subtil): Es gibt mittlerweile auch eine [Facebook-Seite](https://www.facebook.com/einsatzverwaltung) - -= 0.6.0 = -* Neu: Fahrzeug kann mit Seite innerhalb Wordpress verknüpft werden -* Neu: Externe Kräfte können mit Link zu Webseite versehen werden -* Neu: Gefilterte Einsatzübersichten für einzelne Fahrzeuge, Einsatzarten oder ext. Kräfte -* Verbesserung: Einsatzarten können hierarchisch gegliedert werden -* Verbesserung: Shortcode einsatzliste kann alle Jahre anzeigen -* Verbesserung: Shortcode einsatzliste kann die letzten X Jahre anzeigen -* Verbesserung: Leere Einsatzdetails werden standardmäßig versteckt -* Verbesserung: Kurzfassung im Feed jetzt mit Zeilenumbrüchen -* Verbesserung: Icons werden mit Font Awesome dargestellt -* Fehlerbehebung: Shortcode einsatzjahre erzeugte falsche Links bei deaktivierten Permalinks -* Fehlerbehebung: Seitennavigation im Jahresarchiv war defekt -* Hinweis: Die neuen Shortcode-Parameter können in der [Anleitung](https://einsatzverwaltung.abrain.de/dokumentation/) nachgelesen werden - -= 0.5.4 = -* Fehlerbehebung: Datum für Feed wurde falsch gespeichert -* Hinweis: Die Daten werden beim Update automatisch korrigiert, bitte fertigen Sie vorher ein Backup an - -= 0.5.3 = -* Fehlerbehebung: Plugin funktionierte nicht auf Servern mit PHP-Einstellung short_open_tag = false - -= 0.5.2 = -* Neu: Widget kann Link zu Feed anzeigen -* Neu: Widget kann Einsatzort anzeigen -* Neu: Widget kann Einsatzart anzeigen -* Neu: Einsatzberichte werden im Dashboard bei "Auf einen Blick" angezeigt -* Neu: Icon im Adminbereich (ab WP 3.9) -* Fehlerbehebung: Schreibrechte wurden beim Speichern falsch geprüft - -= 0.5.1 = -* Neu: Hinweis bei veralteter PHP-Version - -= 0.5.0 = -* Neu: Feld für Alarmierungsart -* Neu: Feld für Einsatzort -* Neu: Feld für Einsatzleiter -* Neu: Feld für Mannschaftsstärke -* Kontaktadressen aktualisiert -* Hinweis auf Verwendungsempfehlung erst ab Version 1.0 entfernt, da hinfällig - -= 0.4.0 = -* Neu: Format der Einsatznummer einstellbar -* Neu: Werkzeug zur Reparatur/Aktualisierung von Einsatznummern - -= 0.3.2 = -* Fehlerbehebung: Datums- und Zeitangaben wurden in englischer Schreibweise angezeigt - -= 0.3.1 = -* Fehlerbehebung: Bearbeiten normaler Beiträge war beeinträchtigt - -= 0.3.0 = -* Neu: Einstellungsseite -* Neu: Leere Angaben können im Kopf des Einsatzberichts versteckt werden -* Verbesserung: Shortcode _einsatzliste_ unterstützt Sortierung -* Verbesserung: Datum und Zeit werden gemäß WordPress-Einstellungen dargestellt -* Hinweis: Frühere Fehlalarm-Markierungen müssen neu gesetzt werden - -= 0.2.1 = -* Fehlerbehebung: Einsatzende wurde falsch abgespeichert - -= 0.2.0 = -* Neu: Einsatzberichte können als Fehlalarm markiert werden -* Neu: Pro Einsatzbericht ist nur noch eine Einsatzart auswählbar -* Neu: Externe Einsatzmittel können ab jetzt erfasst werden -* Neu: Validierung von Benutzereingaben -* Fehlerbehebung: Links beim Shortcode einsatzjahre wurden vereinzelt falsch generiert - -= 0.1.2 = -* Kompatibilität mit PHP < 5.3.0 wiederhergestellt - -= 0.1.1 = -* Hinweis auf Entwicklungszustand eingefügt - -= 0.1.0 = -* Allererste Version -* Verwaltung von Einsätzen als eigener Beitragstyp -* Einsatzart und Fahrzeuge können zu Einsätzen vermerkt werden -* Einbinden einer Liste von Einsätzen eines Jahres per Shortcode -* Widget zeigt die aktuellsten X Einsätze - == Upgrade Notice == -= 1.1.5 = -Fehlerbehebungen bei der Importfunktion - -= 1.1.4 = -Fehler bei Links zum Jahresarchiv ausgebessert - -= 1.1.3 = -Problem mit Benutzerrechten behoben - -= 1.1.2 = -Fehlerbehebung bei der Importfunktion und Anpassungen für WordPress 4.4 - -= 1.1.1 = -Fehlerbehebungen bei der Importfunktion - -= 1.0.0 = -Veränderbarer Basispfad, Kategorie für Einsatzberichte, Schlagwörter und einiges mehr - -= 0.9.2 = -Kleine Verbesserungen, siehe Changelog für Details - -= 0.9.1 = -Update für WordPress 4.2, sowie Fehlerbehebung und Verbesserung - -= 0.9.0 = -Siehe Changelog für Details und wichtigen Hinweis - -= 0.8.4 = -Wichtige Fehlerbehebung - -= 0.8.3 = -Kritische Fehlerbehebung - -= 0.8.2 = -Kleine Verbesserungen, siehe Changelog für Details - -= 0.8.1 = -Kleine Verbesserungen, siehe Changelog für Details - -= 0.8 = -Import aus wp-einsatz, Anzeige von Einsatzberichten als normale Beiträge und Hierarchie der Einsatzart im Widget - -= 0.7.1 = -Publizieren mit Jetpack aktiviert - -= 0.7.0 = -Neue Rechteverwaltung, neue Darstellungsoption für Einsatzliste - -= 0.6.0 = -Neuerungen, Verbesserungen, Fehlerbehebungen. Da ist für alle was dabei. - -= 0.5.4 = -Korrektur des Datums im Feed, bitte Update erst nach Backup durchführen - -= 0.5.3 = -Erhöhte Kompatibilität für zukünftige Installationen - -= 0.5.2 = -Mehr Einstellungen im Widget - -= 0.5.1 = -Prüfung auf veraltete PHP-Version - -= 0.5.0 = -Neue Eingabefelder, Plugin kann jetzt produktiv eingesetzt werden - -= 0.4.0 = -Neue Features rund um die Einsatznummer - -= 0.3.2 = -Behebt einen Darstellungsfehler der Datums- und Zeitangaben - -= 0.3.1 = -Behebt einen Fehler, der das Erstellen normaler Beiträge störte - -= 0.3.0 = -Dieses Update bietet mehr Einstellmöglichkeiten - -= 0.2.1 = -Fehlerbehebung - -= 0.2.0 = -Umfangreichere Einsatzberichte und Validierung von Benutzereingaben, kleine Fehlerbehebung - -= 0.1.2 = -Kompatibilität mit PHP < 5.3.0 wiederhergestellt - -= 0.1.1 = -Hinweis auf Entwicklungszustand eingefügt - -= 0.1.0 = -Kein Upgrade, sondern die erste Version - == Social Media == * Twitter: [@einsatzvw](https://twitter.com/einsatzvw) From c04835490c17026d55626afd9bdce8e8acc9c8ee Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Thu, 16 Nov 2017 23:42:25 +0100 Subject: [PATCH 003/126] Settings auf mehrere Tabs aufgespalten --- src/css/style-admin.css | 10 -- src/einsatzverwaltung-settings.php | 159 ++++++++++++++++++----------- 2 files changed, 97 insertions(+), 72 deletions(-) diff --git a/src/css/style-admin.css b/src/css/style-admin.css index 3b03019f..2310a398 100644 --- a/src/css/style-admin.css +++ b/src/css/style-admin.css @@ -1,13 +1,3 @@ -#einsatzverwaltung_contactinfo { - background-color: #ddd; - padding: 0 20px; - margin: 10px; - width: 210px; - position: absolute; - top: 30px; - right: 30px; -} - #dashboard_right_now .einsatz-count a:before, #dashboard_right_now .einsatz-count span:before { display: inline-block; -webkit-font-smoothing: antialiased; diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 2e09ec7e..bd717052 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -103,112 +103,112 @@ public function registerSettings() // Registration // NEEDS_WP4.7 Standardwerte in register_setting() mitgeben register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_general', 'einsatzvw_rewrite_slug', 'sanitize_title' ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_general', 'einsatzverwaltung_incidentnumbers_auto', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_numbers', 'einsatzvw_einsatznummer_stellen', array($this->utilities, 'sanitizeEinsatznummerStellen') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_numbers', 'einsatzvw_einsatznummer_lfdvorne', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_general', 'einsatzvw_show_einsatzberichte_mainloop', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_general', 'einsatzvw_category', 'intval' ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_general', 'einsatzvw_loop_only_special', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_report', 'einsatzvw_einsatz_hideemptydetails', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_report', 'einsatzvw_show_exteinsatzmittel_archive', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_report', 'einsatzvw_show_einsatzart_archive', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_report', 'einsatzvw_show_fahrzeug_archive', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_report', 'einsatzvw_open_ext_in_new', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_general', 'einsatzvw_excerpt_type', array($this->utilities, 'sanitizeExcerptType') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_general', 'einsatzvw_excerpt_type_feed', array($this->utilities, 'sanitizeExcerptType') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_list', 'einsatzvw_list_columns', array($this->utilities, 'sanitizeColumns') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_list', 'einsatzvw_list_art_hierarchy', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_list', 'einsatzvw_list_fahrzeuge_link', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_list', 'einsatzvw_list_ext_link', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_list', 'einsatzvw_list_annotations_color_off', array($this, 'sanitizeAnnotationOffColor') // NEEDS_WP4.6 das globale sanitize_hex_color() verwenden ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_list', 'einsatzvw_list_zebra', array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_list', 'einsatzvw_list_zebracolor', array($this, 'sanitizeZebraColor') // NEEDS_WP4.6 das globale sanitize_hex_color() verwenden ); register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_list', 'einsatzvw_list_zebra_nth', array($this->reportListSettings, 'sanitizeZebraNthChildArg') ); @@ -222,7 +222,7 @@ public function registerSettings() } register_setting( - 'einsatzvw_settings', + 'einsatzvw_settings_capabilities', 'einsatzvw_cap_roles_' . $roleSlug, array($this->utilities, 'sanitizeCheckbox') ); @@ -240,7 +240,7 @@ private function addSettingsSections() 'einsatzvw_settings_general', 'Allgemein', null, - self::EVW_SETTINGS_SLUG + self::EVW_SETTINGS_SLUG . '-general' ); add_settings_section( 'einsatzvw_settings_numbers', @@ -248,7 +248,7 @@ private function addSettingsSections() function () { echo '

Die Einsatznummern können wahlweise manuell oder automatisch verwaltet werden.

'; }, - self::EVW_SETTINGS_SLUG + self::EVW_SETTINGS_SLUG . '-numbers' ); add_settings_section( 'einsatzvw_settings_einsatzberichte', @@ -256,7 +256,7 @@ function () { function () { echo '

Mit diesen Einstellungen kann das Aussehen der Einsatzberichte beeinflusst werden.

'; }, - self::EVW_SETTINGS_SLUG + self::EVW_SETTINGS_SLUG . '-report' ); add_settings_section( 'einsatzvw_settings_einsatzliste', @@ -264,7 +264,7 @@ function () { function () { echo '

Mit diesen Einstellungen kann das Aussehen der Einsatzlisten beeinflusst werden. Einsatzlisten können über den Shortcode [einsatzliste] in Seiten und Beiträge eingebunden werden.

'; }, - self::EVW_SETTINGS_SLUG + self::EVW_SETTINGS_SLUG . '-list' ); add_settings_section( 'einsatzvw_settings_caps', @@ -272,7 +272,7 @@ function () { function () { echo '

Hier kann festgelegt werden, welche Benutzer die Einsatzberichte verwalten können.

'; }, - self::EVW_SETTINGS_SLUG + self::EVW_SETTINGS_SLUG . '-capabilities' ); } @@ -286,91 +286,91 @@ private function addSettingsFields() 'einsatzvw_permalinks', 'Permalinks', array($this, 'echoSettingsPermalinks'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-general', 'einsatzvw_settings_general' ); add_settings_field( 'einsatzvw_einsatznummer_mainloop', 'Einsatzbericht als Beitrag', array($this, 'echoEinsatzberichteMainloop'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-general', 'einsatzvw_settings_general' ); add_settings_field( 'einsatzvw_einsatznummer_auto', 'Einsatznummern automatisch verwalten', array($this, 'echoSettingsEinsatznummerAuto'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-numbers', 'einsatzvw_settings_numbers' ); add_settings_field( 'einsatzvw_einsatznummer_stellen', 'Format der Einsatznummer', array($this, 'echoSettingsEinsatznummerFormat'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-numbers', 'einsatzvw_settings_numbers' ); add_settings_field( 'einsatzvw_einsatz_hideemptydetails', 'Einsatzdetails', array($this, 'echoSettingsEmptyDetails'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-report', 'einsatzvw_settings_einsatzberichte' ); add_settings_field( 'einsatzvw_settings_archivelinks', 'Gefilterte Einsatzübersicht verlinken', array($this, 'echoSettingsArchive'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-report', 'einsatzvw_settings_einsatzberichte' ); add_settings_field( 'einsatzvw_settings_ext_newwindow', 'Links zu externen Einsatzmitteln', array($this, 'echoSettingsExtNew'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-report', 'einsatzvw_settings_einsatzberichte' ); add_settings_field( 'einsatzvw_settings_excerpt', 'Kurzfassung', array($this, 'echoSettingsExcerpt'), - self::EVW_SETTINGS_SLUG, - 'einsatzvw_settings_einsatzberichte' + self::EVW_SETTINGS_SLUG . '-general', + 'einsatzvw_settings_general' ); add_settings_field( 'einsatzvw_settings_columns', 'Spalten der Einsatzliste', array($this, 'echoEinsatzlisteColumns'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-list', 'einsatzvw_settings_einsatzliste' ); add_settings_field( 'einsatzvw_settings_column_settings', 'Einstellungen zu einzelnen Spalten', array($this, 'echoEinsatzlisteColumnSettings'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-list', 'einsatzvw_settings_einsatzliste' ); add_settings_field( 'einsatzvw_settings_listannotations', 'Vermerke', array($this, 'echoEinsatzlisteAnnotationsSettings'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-list', 'einsatzvw_settings_einsatzliste' ); add_settings_field( 'einsatzvw_settings_zebralist', 'Zebrastreifen', array($this, 'echoEinsatzlisteZebraSettings'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-list', 'einsatzvw_settings_einsatzliste' ); add_settings_field( 'einsatzvw_settings_caps_roles', 'Rollen', array($this, 'echoSettingsCapsRoles'), - self::EVW_SETTINGS_SLUG, + self::EVW_SETTINGS_SLUG . '-capabilities', 'einsatzvw_settings_caps' ); } @@ -693,28 +693,12 @@ public function echoSettingsPage() } ?> -
-

Entwicklerkontakt & Social Media

-

- eMail: kontakt@abrain.de -  PGP -

-

- -    - -    - -    - - -

-
-

Einstellungen › Einsatzverwaltung

options->getRewriteSlug(); $conflictingPage = get_page_by_path($rewriteSlug); @@ -724,10 +708,61 @@ public function echoSettingsPage() echo '

' . $message . '

'; } + $tabs = array( + 'general' => __('Allgemein', 'einsatzverwaltung'), + 'numbers' => __('Einsatznummern', 'einsatzverwaltung'), + 'report' => __('Einsatzberichte', 'einsatzverwaltung'), + 'list' => __('Einsatzliste', 'einsatzverwaltung'), + 'capabilities' => __('Berechtigungen', 'einsatzverwaltung'), + 'about' => __('Kontakt', 'einsatzverwaltung'), + ); + + $flags = FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH; + $currentTab = filter_input(INPUT_GET, 'tab', FILTER_SANITIZE_STRING, $flags); + + if (empty($currentTab) || !array_key_exists($currentTab, $tabs)) { + $tabIds = array_keys($tabs); + $currentTab = $tabIds[0]; // NEEDS_PHP5.4 array_keys($tabs)[0] + } + + echo "

"; + foreach ($tabs as $identifier => $label) { + $class = $currentTab === $identifier ? "nav-tab nav-tab-active" : "nav-tab"; + printf( + '%s', + self::EVW_SETTINGS_SLUG, + $identifier, + $class, + $label + ); + } + echo "

"; + + if ('about' === $currentTab) { + ?> +

Entwicklerkontakt & Social Media

+

+ eMail: kontakt@abrain.de +  PGP +

+

+ +    + +    + +    + + +

+ '; - settings_fields('einsatzvw_settings'); - do_settings_sections(self::EVW_SETTINGS_SLUG); + settings_fields('einsatzvw_settings_' . $currentTab); + do_settings_sections(self::EVW_SETTINGS_SLUG . '-' . $currentTab); submit_button(); echo ''; } From 708e9ab79c6fe22102e2e6d910f3e8c99290c0a8 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Wed, 31 May 2017 00:36:48 +0200 Subject: [PATCH 004/126] Geht los --- src/Export/Tool.php | 335 +++++++++++++++++++++++++++++++++ src/einsatzverwaltung-core.php | 16 ++ 2 files changed, 351 insertions(+) create mode 100644 src/Export/Tool.php diff --git a/src/Export/Tool.php b/src/Export/Tool.php new file mode 100644 index 00000000..c7597d94 --- /dev/null +++ b/src/Export/Tool.php @@ -0,0 +1,335 @@ +core = $core; + $this->utilities = $utilities; + $this->options = $options; + $this->addHooks(); + $this->loadSources(); + } + + private function addHooks() + { + add_action('admin_menu', array($this, 'addToolToMenu')); + } + + /** + * Fügt das Werkzeug zum Menü hinzu + */ + public function addToolToMenu() + { + add_management_page( + 'Einsatzberichte exportieren', + 'Einsatzberichte exportieren', + 'manage_options', + self::EVW_TOOL_EXPORT_SLUG, + array($this, 'renderToolPage') + ); + } + + // /** + // * @param AbstractSource $source + // * @param string $action + // */ + // private function checkNonce($source, $action) + // { + // check_admin_referer($this->getNonceAction($source, $action)); + // } + + // /** + // * @param AbstractSource $source + // * @param string $action + // * @return string + // */ + // private function getNonceAction($source, $action) + // { + // return $source->getIdentifier() . '_' . $action; + // } + + private function loadSources() + { + // require_once dirname(__FILE__) . '/Sources/AbstractSource.php'; + // require_once dirname(__FILE__) . '/Sources/WpEinsatz.php'; + // $wpEinsatz = new WpEinsatz($this->utilities); + // $this->sources[$wpEinsatz->getIdentifier()] = $wpEinsatz; + + // require_once dirname(__FILE__) . '/Sources/Csv.php'; + // $csv = new Csv($this->utilities); + // $this->sources[$csv->getIdentifier()] = $csv; + } + + /** + * Generiert den Inhalt der Werkzeugseite + */ + public function renderToolPage() + { + echo '
'; + echo '

' . 'Einsatzberichte exportieren' . '

'; + echo '

Dieses Werkzeug exportiert Einsatzberichte in verschiedenen Formaten.

'; +?> +
+

Wähle, welche Einsatzberichte du exportieren möchtest

+
+ Wähle, welche Einsatzberichte du exportieren möchtest +
    +
  • +
    + Zeitraum: + + + + +
    +
  • +
+
+ + +

Wähle, in welches Format du exportieren möchtest

+
+ Wähle, in welches Format du exportieren möchtest + +

+ +

+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + + +
  • +
+ +

+ +

+
    +
  • + + +
  • +
+ +

+ +

+
    +
  • + + +
  • +
+
+ +

+ +

+
+ +'; + } + + // private function analysisPage() + // { + // if (!$this->currentSource->checkPreconditions()) { + // return; + // } + + // $felder = $this->currentSource->getFields(); + // if (empty($felder)) { + // $this->utilities->printError('Es wurden keine Felder gefunden'); + // return; + // } + // $this->utilities->printSuccess('Es wurden folgende Felder gefunden: ' . implode($felder, ', ')); + + // // Auf Pflichtfelder prüfen + // $mandatoryFieldsOk = true; + // foreach (array_keys($this->currentSource->getAutoMatchFields()) as $autoMatchField) { + // if (!in_array($autoMatchField, $felder)) { + // $this->utilities->printError( + // sprintf('Das automatisch zu importierende Feld %s konnte nicht gefunden werden!', $autoMatchField) + // ); + // $mandatoryFieldsOk = false; + // } + // } + // if (!$mandatoryFieldsOk) { + // return; + // } + + // // Einsätze zählen + // $entries = $this->currentSource->getEntries(null); + // if (false === $entries) { + // return; + // } + // if (empty($entries)) { + // $this->utilities->printWarning('Es wurden keine Einsätze gefunden.'); + // return; + // } + // $this->utilities->printSuccess(sprintf("Es wurden %s Einsätze gefunden", count($entries))); + + // if ('evw_wpe' == $this->currentSource->getIdentifier()) { + // $this->printDataNotice(); + // } + + // // Felder matchen + // echo "

Felder zuordnen

"; + // if (false === $this->nextAction) { + // $this->utilities->printError('Keine Nachfolgeaktion gefunden!'); + // return; + // } + + // $this->helper->renderMatchForm($this->currentSource, array( + // 'nonce_action' => $this->getNonceAction($this->currentSource, $this->nextAction['slug']), + // 'action_value' => $this->currentSource->getActionAttribute($this->nextAction['slug']), + // 'next_action' => $this->nextAction + // )); + // } + + // private function importPage() + // { + // if (!$this->currentSource->checkPreconditions()) { + // return; + // } + + // $sourceFields = $this->currentSource->getFields(); + // if (empty($sourceFields)) { + // $this->utilities->printError('Es wurden keine Felder gefunden'); + // return; + // } + + // // Mapping einlesen + // $mapping = $this->currentSource->getMapping($sourceFields, IncidentReport::getFields()); + + // // Prüfen, ob mehrere Felder das gleiche Zielfeld haben + // if (!$this->helper->validateMapping($mapping, $this->currentSource)) { + // // Und gleich nochmal... + // $this->nextAction = $this->currentAction; + + // $this->helper->renderMatchForm($this->currentSource, array( + // 'mapping' => $mapping, + // 'nonce_action' => $this->getNonceAction($this->currentSource, $this->nextAction['slug']), + // 'action_value' => $this->currentSource->getActionAttribute($this->nextAction['slug']), + // 'next_action' => $this->nextAction + // )); + // return; + // } + + // // Import starten + // echo '

Die Daten werden eingelesen, das kann einen Moment dauern.

'; + // $this->helper->import($this->currentSource, $mapping); + // } + + // private function printDataNotice() + // { + // // Hinweise ausgeben + // echo '

Hinweise zu den erwarteten Daten

'; + // echo '

Die Felder Berichtstext, Berichtstitel, Einsatzleiter, Einsatzort und Mannschaftsstärke sind Freitextfelder.

'; + // echo '

Für die Felder Alarmierungsart, Einsatzart, Externe Einsatzmittel und Fahrzeuge wird eine kommagetrennte Liste erwartet.
Bisher unbekannte Einträge werden automatisch angelegt, die Einsatzart sollte nur ein einzelner Wert sein.

'; + // if ('evw_wpe' == $this->currentSource->getIdentifier()) { + // echo '

Das Feld Einsatzende erwartet eine Datums- und Zeitangabe im Format JJJJ-MM-TT hh:mm:ss (z.B. 2014-04-21 21:48:06). Die Sekundenangabe ist optional.

'; + // } + // if ('evw_csv' == $this->currentSource->getIdentifier()) { + // echo '

Die Felder Alarmzeit und Einsatzende erwarten eine Datums- und Zeitangabe, das Format kann bei der Zuordnung der Felder angegeben werden.

'; + // } + // echo '

Die Felder Besonderer Einsatz und Fehlalarm erwarten den Wert 1 (= ja) oder 0 (= nein). Sie dürfen auch leer bleiben, was als 0 (= nein) zählt.

'; + // } +} diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 8a556a34..baa7d5d4 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -15,6 +15,7 @@ require_once dirname(__FILE__) . '/einsatzverwaltung-shortcodes.php'; require_once dirname(__FILE__) . '/einsatzverwaltung-settings.php'; require_once dirname(__FILE__) . '/Import/Tool.php'; +require_once dirname(__FILE__) . '/Export/Tool.php'; require_once dirname(__FILE__) . '/einsatzverwaltung-taxonomies.php'; require_once dirname(__FILE__) . '/Frontend/ReportList.php'; require_once dirname(__FILE__) . '/Frontend/ReportListSettings.php'; @@ -22,6 +23,7 @@ require_once dirname(__FILE__) . '/TasksPage.php'; use abrain\Einsatzverwaltung\Import\Tool as ImportTool; +use abrain\Einsatzverwaltung\Export\Tool as ExportTool; use abrain\Einsatzverwaltung\Model\ReportAnnotation; use abrain\Einsatzverwaltung\Util\Formatter; use abrain\Einsatzverwaltung\Widgets\RecentIncidents; @@ -271,6 +273,11 @@ class Core */ private $importTool; + /** + * @var ExportTool + */ + private $exportTool; + /** * @var TasksPage */ @@ -308,6 +315,7 @@ private function __construct() // Tools $this->importTool = new ImportTool($this, $this->utilities, $this->options, $this->data); + $this->exportTool = new ExportTool($this, $this->utilities, $this->options); $this->tasksPage = new TasksPage($this->utilities, $this->data); // Widgets @@ -635,6 +643,14 @@ public function getImportTool() return $this->importTool; } + /** + * @return ImportTool + */ + public function getExportTool() + { + return $this->exportTool; + } + /** * @return TasksPage */ From 837d00b5836cda0f68c2a4fab8999412983c41d1 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Wed, 14 Jun 2017 23:18:43 +0200 Subject: [PATCH 005/126] Implementiert --- src/Export/Formats/AbstractFormat.php | 60 +++++ src/Export/Formats/Csv.php | 170 +++++++++++++ src/Export/Formats/Excel.php | 42 ++++ src/Export/Formats/Format.php | 57 +++++ src/Export/Formats/Json.php | 136 +++++++++++ src/Export/Tool.php | 327 +++++++------------------- 6 files changed, 556 insertions(+), 236 deletions(-) create mode 100644 src/Export/Formats/AbstractFormat.php create mode 100644 src/Export/Formats/Csv.php create mode 100644 src/Export/Formats/Excel.php create mode 100644 src/Export/Formats/Format.php create mode 100644 src/Export/Formats/Json.php diff --git a/src/Export/Formats/AbstractFormat.php b/src/Export/Formats/AbstractFormat.php new file mode 100644 index 00000000..175dede7 --- /dev/null +++ b/src/Export/Formats/AbstractFormat.php @@ -0,0 +1,60 @@ +startDate = $startDate; + $this->endDate = $endDate; + } + + /** + * Gibt das WP_Query-Objekt für den Abruf der zu exportierenden Einsatzberichte + * zurück. + * + * @return \WP_Query + */ + protected function getQuery() + { + // Wähle nur veröffentlichte Einsatzberichte aus + $args = array( + 'post_type' => 'einsatz', + 'post_status' => 'publish', + 'nopaging' => true + ); + + // Exportiere nur die Einsatzberichte, welche nicht vor $startDate und/oder + // nach $endDate liegen + if ($this->startDate || $this->endDate) { + $args['date_query'] = array('inclusive' => true); + + if ($this->startDate) { + $args['date_query']['after'] = date('Y-m-d', strtotime($this->startDate)); + } + if ($this->endDate) { + $args['date_query']['before'] = date('Y-m-d ', strtotime('+1 month', strtotime($this->endDate))); + } + } + + return new \WP_Query($args); + } +} diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php new file mode 100644 index 00000000..2eb07b3b --- /dev/null +++ b/src/Export/Formats/Csv.php @@ -0,0 +1,170 @@ + +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + + +
  • +delimiter = @$options['delimiter']; + if (empty($this->delimiter)) { + $this->delimiter = ','; + } + $this->enclosure = @$options['enclosure']; + if (empty($this->enclosure)) { + $this->enclosure = '"'; + } + $this->escapeChar = @$options['escapeChar']; + if (empty($this->escapeChar)) { + $this->escapeChar = '\\'; + } + $this->headers = (boolean)@$options['headers']; + } + + /** + * @inheritDoc + */ + public function getFilename() + { + return 'Einsatzberichte.csv'; + } + + /** + * @inheritDoc + */ + public function export() + { + $fh = fopen('php://output', 'w'); + // füge BOM hinzu, damit UTF-8-formatierte Inhalte in Excel funktionieren. + // siehe: http://php.net/manual/de/function.fputcsv.php#118252 + fputs($fh, chr(0xEF) . chr(0xBB) . chr(0xBF)); + + // füge ggf. Spaltennamen als die erste Zeile ein + if ($this->headers) { + $data = array( + 'Einsatznummer', + 'Alarmierungsart', + 'Alarmzeit', + 'Einsatzende', + 'Dauer (Minuten)', + 'Einsatzort', + 'Einsatzart', + 'Fahrzeuge', + 'Externe Einsatzmittel', + 'Mannschaftsstärke', + 'Einsatzleiter', + 'Berichtstitel', + 'Berichtstext', + 'Besonderer Einsatz', + 'Fehlalarm' + ); + fputcsv($fh, $data, $this->delimiter, $this->enclosure, $this->escapeChar); + } + + $query = $this->getQuery(); + while ($query->have_posts()) { + $post = $query->next_post(); + $report = new IncidentReport($post); + + $duration = Data::getDauer($report); + if (!$duration) { + $duration = 0; + } + + $typeOfIncident = $report->getTypeOfIncident(); + if (!$typeOfIncident) { + $typeOfIncident = ''; + } + + $data = array( + $report->getSequentialNumber(), + implode(',', $report->getTypesOfAlerting()), + $report->getTimeOfAlerting()->format('Y-m-d H:i'), + $report->getTimeOfEnding(), + $duration, + $report->getLocation(), + $typeOfIncident, + implode(',', $report->getVehicles()), + implode(',', $report->getAdditionalForces()), + $report->getWorkforce(), + $report->getIncidentCommander(), + $post->post_title, + $post->post_content, + ($report->isSpecial() ? 'Ja' : 'Nein'), + ($report->isFalseAlarm() ? 'Ja' : 'Nein'), + ); + fputcsv($fh, $data, $this->delimiter, $this->enclosure, $this->escapeChar); + } + + fclose($fh); + } +} diff --git a/src/Export/Formats/Excel.php b/src/Export/Formats/Excel.php new file mode 100644 index 00000000..b139ebba --- /dev/null +++ b/src/Export/Formats/Excel.php @@ -0,0 +1,42 @@ + +
  • + + +
  • +delimiter = ';'; + $this->enclosure = '"'; + $this->escape_char = '\\'; + $this->header = (boolean)@$options['columns']; + } +} diff --git a/src/Export/Formats/Format.php b/src/Export/Formats/Format.php new file mode 100644 index 00000000..9a1d25e6 --- /dev/null +++ b/src/Export/Formats/Format.php @@ -0,0 +1,57 @@ + +
  • + + +
  • +prettyPrint = (boolean)@$options['prettyPrint']; + } + + /** + * Gibt den die gewünschten Einsatzberichte im JSON-Format aus. + * Um den Speicherverbrauch dieser Methode so gering wie möglich zu halten, + * wurde davon abgesehen, erst alle Einsatzberichte aus der Datenbank in ein + * Array zwischenzuspeichern um dann in einen Rutsch der Methode json_encode() + * übergeben zu können. + * Stattdessen wird nur ein Einsatzbericht zur Zeit abgerufen und dann einzleln + * via json_encode entsprechend formatiert und dann ausgegeben. + */ + public function export() + { + // verwende ggf. menschenlesbares Format für die Ausgabe + if ($this->prettyPrint) { + $options = JSON_PRETTY_PRINT; + } else { + $options = 0; + } + + $fh = fopen('php://output', 'w'); + echo '['; + if ($this->prettyPrint) { + echo "\n"; + } + + $query = $this->getQuery(); + while ($query->have_posts()) { + $post = $query->next_post(); + + $report = new IncidentReport($post); + + $duration = Data::getDauer($report); + // $duration soll stets eine Zahl sein + if (!$duration) { + $duration = 0; + } + + $typeOfIncident = $report->getTypeOfIncident(); + // $typeOfIncident soll stets ein String sein + if (!$typeOfIncident) { + $typeOfIncident = ''; + } + + $data = array( + 'Einsatznummer' => $report->getSequentialNumber(), + 'Alarmierungsart' => implode(',', $report->getTypesOfAlerting()), + 'Alarmzeit' => $report->getTimeOfAlerting()->format('Y-m-d H:i'), + 'Einsatzende' => $report->getTimeOfEnding(), + 'Dauer (Minuten)' => $duration, + 'Einsatzort' => $report->getLocation(), + 'Einsatzart' => $typeOfIncident, + 'Fahrzeuge' => implode(',', $report->getVehicles()), + 'Externe Einsatzmittel' => implode(',', $report->getAdditionalForces()), + 'Mannschaftsstärke' => $report->getWorkforce(), + 'Einsatzleiter' => $report->getIncidentCommander(), + 'Berichtstitel' => $post->post_title, + 'Berichtstext' => $post->post_content, + 'Besonderer Einsatz' => $report->isSpecial(), + 'Fehlalarm' => $report->isFalseAlarm(), + ); + + $output = json_encode($data, $options); + + // solange es sich nicht um den letzten Einsatzbericht handelt, müssen + // wir die Einsatzberichte in JSON über ein Komma (,) voneinander + // trennen + if (($query->current_post + 1) != $query->post_count) { + $output .= ','; + } + + // rücke die JSON-Ausgabe des Einsatzberichtes ein, falls die Ausgabe + // menschenlesbar formatiert werden soll + if ($this->prettyPrint) { + $output = preg_replace("/^(.*)$/m", " $1", $output) . "\n"; + } + + echo $output; + } + + echo ']'; + } +} diff --git a/src/Export/Tool.php b/src/Export/Tool.php index c7597d94..4d398c3e 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -1,13 +1,12 @@ core = $core; - $this->utilities = $utilities; - $this->options = $options; $this->addHooks(); - $this->loadSources(); + $this->loadFormats(); } private function addHooks() { add_action('admin_menu', array($this, 'addToolToMenu')); + add_action('plugins_loaded', array($this, 'startExport')); } /** @@ -88,35 +53,41 @@ public function addToolToMenu() ); } - // /** - // * @param AbstractSource $source - // * @param string $action - // */ - // private function checkNonce($source, $action) - // { - // check_admin_referer($this->getNonceAction($source, $action)); - // } - - // /** - // * @param AbstractSource $source - // * @param string $action - // * @return string - // */ - // private function getNonceAction($source, $action) - // { - // return $source->getIdentifier() . '_' . $action; - // } + /** + * Bietet die zu exportierenden Einsatzberichte als Download an. + */ + public function startExport() + { + // stelle sicher, dass wir uns im Adminbereich befindet und der Benutzer über ausreichend Berechtigungen verfügt + if (current_user_can('manage_options') && is_admin() && @$_GET['page'] == self::EVW_TOOL_EXPORT_SLUG && @$_GET['download'] == true) { + $format = @$this->formats[$_GET['format']]; + + if ($format) { + $start_date = @$_GET['export_filters']['start_date']; + $end_date = @$_GET['export_filters']['end_date']; + $export_options = (array)@$_GET['export_options'][$_GET['format']]; + + $format->setFilters($start_date, $end_date); + $format->setOptions($export_options); + + header('Content-Description: File Transfer'); + header('Content-Disposition: attachment; filename=' . $format->getFilename()); + $format->export(); + die(); + } + } + } - private function loadSources() + private function loadFormats() { - // require_once dirname(__FILE__) . '/Sources/AbstractSource.php'; - // require_once dirname(__FILE__) . '/Sources/WpEinsatz.php'; - // $wpEinsatz = new WpEinsatz($this->utilities); - // $this->sources[$wpEinsatz->getIdentifier()] = $wpEinsatz; + require_once dirname(__FILE__) . '/Formats/Csv.php'; + $this->formats['csv'] = new Csv(); + + require_once dirname(__FILE__) . '/Formats/Excel.php'; + $this->formats['excel'] = new Excel(); - // require_once dirname(__FILE__) . '/Sources/Csv.php'; - // $csv = new Csv($this->utilities); - // $this->sources[$csv->getIdentifier()] = $csv; + require_once dirname(__FILE__) . '/Formats/Json.php'; + $this->formats['json'] = new Json(); } /** @@ -126,9 +97,10 @@ public function renderToolPage() { echo '
    '; echo '

    ' . 'Einsatzberichte exportieren' . '

    '; - echo '

    Dieses Werkzeug exportiert Einsatzberichte in verschiedenen Formaten.

    '; -?> + echo '

    Dieses Werkzeug exportiert Einsatzberichte in verschiedenen Formaten.

    '; ?>
    + +

    Wähle, welche Einsatzberichte du exportieren möchtest

    Wähle, welche Einsatzberichte du exportieren möchtest @@ -137,14 +109,14 @@ public function renderToolPage()
    Zeitraum: - - + renderDateOptions(); ?> - - + renderDateOptions(); ?>
    @@ -159,9 +131,11 @@ public function renderToolPage() form.find('input[name="format"]').change(function() { options.slideUp('fast'); switch ( $(this).val() ) { - case 'csv': $('#csv-options').slideDown(); break; - case 'excel': $('#excel-options').slideDown(); break; - case 'json': $('#json-options').slideDown(); break; + formats) as $format_key) { + ?> + case '': $('#-options').slideDown(); break; + } }); }); @@ -169,167 +143,48 @@ public function renderToolPage()

    Wähle, in welches Format du exportieren möchtest

    Wähle, in welches Format du exportieren möchtest - -

    - -

    -
      -
    • - -
    • -
    • - -
    • -
    • - -
    • -
    • - - -
    • -
    - -

    - -

    -
      -
    • - - -
    • -
    - -

    - -

    -
      -
    • - - -
    • -
    + formats as $format_key => $format) { + ?> +

    + +

    +
      + renderOptions(); ?> +
    +
    -

    - -

    + '; } - // private function analysisPage() - // { - // if (!$this->currentSource->checkPreconditions()) { - // return; - // } - - // $felder = $this->currentSource->getFields(); - // if (empty($felder)) { - // $this->utilities->printError('Es wurden keine Felder gefunden'); - // return; - // } - // $this->utilities->printSuccess('Es wurden folgende Felder gefunden: ' . implode($felder, ', ')); - - // // Auf Pflichtfelder prüfen - // $mandatoryFieldsOk = true; - // foreach (array_keys($this->currentSource->getAutoMatchFields()) as $autoMatchField) { - // if (!in_array($autoMatchField, $felder)) { - // $this->utilities->printError( - // sprintf('Das automatisch zu importierende Feld %s konnte nicht gefunden werden!', $autoMatchField) - // ); - // $mandatoryFieldsOk = false; - // } - // } - // if (!$mandatoryFieldsOk) { - // return; - // } - - // // Einsätze zählen - // $entries = $this->currentSource->getEntries(null); - // if (false === $entries) { - // return; - // } - // if (empty($entries)) { - // $this->utilities->printWarning('Es wurden keine Einsätze gefunden.'); - // return; - // } - // $this->utilities->printSuccess(sprintf("Es wurden %s Einsätze gefunden", count($entries))); - - // if ('evw_wpe' == $this->currentSource->getIdentifier()) { - // $this->printDataNotice(); - // } - - // // Felder matchen - // echo "

    Felder zuordnen

    "; - // if (false === $this->nextAction) { - // $this->utilities->printError('Keine Nachfolgeaktion gefunden!'); - // return; - // } - - // $this->helper->renderMatchForm($this->currentSource, array( - // 'nonce_action' => $this->getNonceAction($this->currentSource, $this->nextAction['slug']), - // 'action_value' => $this->currentSource->getActionAttribute($this->nextAction['slug']), - // 'next_action' => $this->nextAction - // )); - // } - - // private function importPage() - // { - // if (!$this->currentSource->checkPreconditions()) { - // return; - // } - - // $sourceFields = $this->currentSource->getFields(); - // if (empty($sourceFields)) { - // $this->utilities->printError('Es wurden keine Felder gefunden'); - // return; - // } - - // // Mapping einlesen - // $mapping = $this->currentSource->getMapping($sourceFields, IncidentReport::getFields()); - - // // Prüfen, ob mehrere Felder das gleiche Zielfeld haben - // if (!$this->helper->validateMapping($mapping, $this->currentSource)) { - // // Und gleich nochmal... - // $this->nextAction = $this->currentAction; - - // $this->helper->renderMatchForm($this->currentSource, array( - // 'mapping' => $mapping, - // 'nonce_action' => $this->getNonceAction($this->currentSource, $this->nextAction['slug']), - // 'action_value' => $this->currentSource->getActionAttribute($this->nextAction['slug']), - // 'next_action' => $this->nextAction - // )); - // return; - // } - - // // Import starten - // echo '

    Die Daten werden eingelesen, das kann einen Moment dauern.

    '; - // $this->helper->import($this->currentSource, $mapping); - // } - - // private function printDataNotice() - // { - // // Hinweise ausgeben - // echo '

    Hinweise zu den erwarteten Daten

    '; - // echo '

    Die Felder Berichtstext, Berichtstitel, Einsatzleiter, Einsatzort und Mannschaftsstärke sind Freitextfelder.

    '; - // echo '

    Für die Felder Alarmierungsart, Einsatzart, Externe Einsatzmittel und Fahrzeuge wird eine kommagetrennte Liste erwartet.
    Bisher unbekannte Einträge werden automatisch angelegt, die Einsatzart sollte nur ein einzelner Wert sein.

    '; - // if ('evw_wpe' == $this->currentSource->getIdentifier()) { - // echo '

    Das Feld Einsatzende erwartet eine Datums- und Zeitangabe im Format JJJJ-MM-TT hh:mm:ss (z.B. 2014-04-21 21:48:06). Die Sekundenangabe ist optional.

    '; - // } - // if ('evw_csv' == $this->currentSource->getIdentifier()) { - // echo '

    Die Felder Alarmzeit und Einsatzende erwarten eine Datums- und Zeitangabe, das Format kann bei der Zuordnung der Felder angegeben werden.

    '; - // } - // echo '

    Die Felder Besonderer Einsatz und Fehlalarm erwarten den Wert 1 (= ja) oder 0 (= nein). Sie dürfen auch leer bleiben, was als 0 (= nein) zählt.

    '; - // } + private function renderDateOptions() + { + global $wpdb, $wp_locale; + + $months = $wpdb->get_results($wpdb->prepare(" + SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month + FROM $wpdb->posts + WHERE post_type = %s AND post_status = 'publish' + ORDER BY post_date DESC + ", 'einsatz')); + + $month_count = count($months); + if (!$month_count || (1 == $month_count && 0 == $months[0]->month)) { + return; + } + + foreach ($months as $date) { + if (0 == $date->year) { + continue; + } + + $month = zeroise($date->month, 2); + echo ''; + } + } } From e4c1f32f499060f1b54e9a2ba14183a9396d1278 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Fri, 16 Jun 2017 23:18:47 +0200 Subject: [PATCH 006/126] benutze Spaces --- src/Export/Formats/Format.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Export/Formats/Format.php b/src/Export/Formats/Format.php index 9a1d25e6..4a5e3f5b 100644 --- a/src/Export/Formats/Format.php +++ b/src/Export/Formats/Format.php @@ -9,14 +9,14 @@ interface Format /** * Gibt den Namen von diesem Exportformat zurück. * - * @return string + * @return string */ public function getTitle(); /** * Gibt die Optionen im HTML-Format für dieses Exportformat aus. * - * @return void + * @return void */ public function renderOptions(); @@ -25,9 +25,9 @@ public function renderOptions(); * Die Inhalte im Array müssen überprüft werden, da es sich um Eingaben vom * Benutzer handelt. * - * @param string $startDate Jahr und Monat im Format YYYY-MM oder 0 - * @param string $endDate Jahr und Monat im Format YYYY-MM oder 0 - * @return void + * @param string $startDate Jahr und Monat im Format YYYY-MM oder 0 + * @param string $endDate Jahr und Monat im Format YYYY-MM oder 0 + * @return void */ public function setFilters($startDate, $endDate); @@ -36,22 +36,22 @@ public function setFilters($startDate, $endDate); * Die Inhalte im Array müssen überprüft werden, da es sich um Eingaben vom * Benutzer handelt. * - * @param array $options - * @return void + * @param array $options + * @return void */ public function setOptions(array $options); /** * Gibt den Namen der Datei zurück, die beim Export erstellt wird. * - * @return string + * @return string */ public function getFilename(); /** * Gibt den Inhalt der Datei, die beim Export erstellt wird, aus. * - * @return void + * @return void */ public function export(); } From 34b428679c4cf4629d18ac9996bbe5ba8bd71f88 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Sat, 17 Jun 2017 12:20:30 +0200 Subject: [PATCH 007/126] =?UTF-8?q?Code=20Climate=20gl=C3=BCcklicher=20gem?= =?UTF-8?q?acht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Formats/AbstractFormat.php | 2 -- src/Export/Formats/Csv.php | 44 +++++++++++++-------------- src/Export/Formats/Excel.php | 2 -- src/Export/Formats/Json.php | 10 +++--- src/Export/Tool.php | 44 ++++++++++++++++----------- 5 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/Export/Formats/AbstractFormat.php b/src/Export/Formats/AbstractFormat.php index 175dede7..49103ee9 100644 --- a/src/Export/Formats/AbstractFormat.php +++ b/src/Export/Formats/AbstractFormat.php @@ -1,8 +1,6 @@ headers) { $data = array( - 'Einsatznummer', - 'Alarmierungsart', - 'Alarmzeit', - 'Einsatzende', - 'Dauer (Minuten)', - 'Einsatzort', - 'Einsatzart', - 'Fahrzeuge', - 'Externe Einsatzmittel', - 'Mannschaftsstärke', - 'Einsatzleiter', - 'Berichtstitel', - 'Berichtstext', - 'Besonderer Einsatz', - 'Fehlalarm' - ); - fputcsv($fh, $data, $this->delimiter, $this->enclosure, $this->escapeChar); + 'Einsatznummer', + 'Alarmierungsart', + 'Alarmzeit', + 'Einsatzende', + 'Dauer (Minuten)', + 'Einsatzort', + 'Einsatzart', + 'Fahrzeuge', + 'Externe Einsatzmittel', + 'Mannschaftsstärke', + 'Einsatzleiter', + 'Berichtstitel', + 'Berichtstext', + 'Besonderer Einsatz', + 'Fehlalarm' + ); + fputcsv($handle, $data, $this->delimiter, $this->enclosure, $this->escapeChar); } $query = $this->getQuery(); @@ -162,9 +160,9 @@ public function export() ($report->isSpecial() ? 'Ja' : 'Nein'), ($report->isFalseAlarm() ? 'Ja' : 'Nein'), ); - fputcsv($fh, $data, $this->delimiter, $this->enclosure, $this->escapeChar); + fputcsv($handle, $data, $this->delimiter, $this->enclosure, $this->escapeChar); } - fclose($fh); + fclose($handle); } } diff --git a/src/Export/Formats/Excel.php b/src/Export/Formats/Excel.php index b139ebba..4ae8685c 100644 --- a/src/Export/Formats/Excel.php +++ b/src/Export/Formats/Excel.php @@ -1,8 +1,6 @@
  • - +
  • prettyPrint) { $options = JSON_PRETTY_PRINT; - } else { - $options = 0; } - $fh = fopen('php://output', 'w'); echo '['; if ($this->prettyPrint) { echo "\n"; diff --git a/src/Export/Tool.php b/src/Export/Tool.php index 4d398c3e..d1ed0743 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -58,17 +58,19 @@ public function addToolToMenu() */ public function startExport() { - // stelle sicher, dass wir uns im Adminbereich befindet und der Benutzer über ausreichend Berechtigungen verfügt - if (current_user_can('manage_options') && is_admin() && @$_GET['page'] == self::EVW_TOOL_EXPORT_SLUG && @$_GET['download'] == true) { + // stelle sicher, dass wir uns im Adminbereich befindet und der Benutzer über ausreichend Berechtigungen + // verfügt + if (current_user_can('manage_options') && is_admin() && @$_GET['page'] == self::EVW_TOOL_EXPORT_SLUG && + @$_GET['download'] == true) { $format = @$this->formats[$_GET['format']]; if ($format) { - $start_date = @$_GET['export_filters']['start_date']; - $end_date = @$_GET['export_filters']['end_date']; - $export_options = (array)@$_GET['export_options'][$_GET['format']]; + $startDate = @$_GET['export_filters']['start_date']; + $endDate = @$_GET['export_filters']['end_date']; + $exportOptions = (array)@$_GET['export_options'][$_GET['format']]; - $format->setFilters($start_date, $end_date); - $format->setOptions($export_options); + $format->setFilters($startDate, $endDate); + $format->setOptions($exportOptions); header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename=' . $format->getFilename()); @@ -80,6 +82,9 @@ public function startExport() private function loadFormats() { + require_once dirname(__FILE__) . '/Format.php'; + require_once dirname(__FILE__) . '/AbstractFormat.php'; + require_once dirname(__FILE__) . '/Formats/Csv.php'; $this->formats['csv'] = new Csv(); @@ -131,11 +136,9 @@ public function renderToolPage() form.find('input[name="format"]').change(function() { options.slideUp('fast'); switch ( $(this).val() ) { - formats) as $format_key) { - ?> - case '': $('#-options').slideDown(); break; - + formats) as $formatKey) { ?> + case '': $('#-options').slideDown(); break; + } }); }); @@ -143,12 +146,15 @@ public function renderToolPage()

    Wähle, in welches Format du exportieren möchtest

    Wähle, in welches Format du exportieren möchtest - formats as $format_key => $format) { + formats as $formatKey => $format) { ?>

    - +

    -
      +
        renderOptions(); ?>
      month)) { + $monthCount = count($months); + if (!$monthCount || (1 == $monthCount && 0 == $months[0]->month)) { return; } @@ -184,7 +190,9 @@ private function renderDateOptions() } $month = zeroise($date->month, 2); - echo ''; + $value = $date->year . '-' . $month; + $text = $wp_locale->get_month($month) . ' ' . $date->year; + echo ''; } } } From 1a9cc82d528db4ab65cd9269d9222babd18e75e7 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Sat, 17 Jun 2017 13:07:06 +0200 Subject: [PATCH 008/126] =?UTF-8?q?Code=20Climate=20gl=C3=BCcklicher=20gem?= =?UTF-8?q?acht=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Tool.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index d1ed0743..7147d182 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -82,8 +82,8 @@ public function startExport() private function loadFormats() { - require_once dirname(__FILE__) . '/Format.php'; - require_once dirname(__FILE__) . '/AbstractFormat.php'; + require_once dirname(__FILE__) . '/Formats/Format.php'; + require_once dirname(__FILE__) . '/Formats/AbstractFormat.php'; require_once dirname(__FILE__) . '/Formats/Csv.php'; $this->formats['csv'] = new Csv(); @@ -157,8 +157,7 @@ public function renderToolPage()
        renderOptions(); ?>
      - +
    From 3ff8c9561f8b118658d17089804bbb8084ce0680 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Sat, 25 Nov 2017 21:10:41 +0100 Subject: [PATCH 009/126] @return korrigiert --- src/einsatzverwaltung-core.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index baa7d5d4..6fa0e442 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -644,7 +644,7 @@ public function getImportTool() } /** - * @return ImportTool + * @return ExportTool */ public function getExportTool() { From 53162f81c091b6f1ad9f192b4b228843932b27ab Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Sat, 25 Nov 2017 21:26:00 +0100 Subject: [PATCH 010/126] =?UTF-8?q?F=C3=BChre=20Abfrage=20der=20Berechtigu?= =?UTF-8?q?ng=20fr=C3=BCher=20aus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Tool.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index 7147d182..50a01010 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -36,7 +36,11 @@ public function __construct() private function addHooks() { add_action('admin_menu', array($this, 'addToolToMenu')); - add_action('plugins_loaded', array($this, 'startExport')); + + // stelle sicher, dass der Benutzer über ausreichend Berechtigungen verfügt + if (is_admin()) { + add_action('plugins_loaded', array($this, 'startExport')); + } } /** @@ -58,9 +62,7 @@ public function addToolToMenu() */ public function startExport() { - // stelle sicher, dass wir uns im Adminbereich befindet und der Benutzer über ausreichend Berechtigungen - // verfügt - if (current_user_can('manage_options') && is_admin() && @$_GET['page'] == self::EVW_TOOL_EXPORT_SLUG && + if (@$_GET['page'] == self::EVW_TOOL_EXPORT_SLUG && @$_GET['download'] == true) { $format = @$this->formats[$_GET['format']]; From ddd85132e739aebb0c9d5cb38320c2542ee62158 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Sat, 25 Nov 2017 21:26:21 +0100 Subject: [PATCH 011/126] Verwende init-Action --- src/Export/Tool.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index 50a01010..b5500d75 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -39,7 +39,7 @@ private function addHooks() // stelle sicher, dass der Benutzer über ausreichend Berechtigungen verfügt if (is_admin()) { - add_action('plugins_loaded', array($this, 'startExport')); + add_action('init', array($this, 'startExport')); } } From 4444f829f5fe6123858caa1804fc3ca69bcac058 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Sat, 25 Nov 2017 21:27:44 +0100 Subject: [PATCH 012/126] Ignoriere Metadaten-Datei von Finder (macOS X) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f80ed1af..ccd744b3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ build setupLocalTest.sh vendor composer.lock +.DS_Store From 87994d8e729644d2f7e678a04002d90c49e475aa Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 18 Dec 2017 18:56:09 +0100 Subject: [PATCH 013/126] =?UTF-8?q?=C3=9Cberschriften=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-settings.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index bd717052..f31574af 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -238,29 +238,27 @@ private function addSettingsSections() { add_settings_section( 'einsatzvw_settings_general', - 'Allgemein', + '', null, self::EVW_SETTINGS_SLUG . '-general' ); add_settings_section( 'einsatzvw_settings_numbers', - 'Einsatznummern', - function () { - echo '

    Die Einsatznummern können wahlweise manuell oder automatisch verwaltet werden.

    '; - }, + '', + null, self::EVW_SETTINGS_SLUG . '-numbers' ); add_settings_section( 'einsatzvw_settings_einsatzberichte', - 'Einsatzberichte', + '', function () { - echo '

    Mit diesen Einstellungen kann das Aussehen der Einsatzberichte beeinflusst werden.

    '; + echo '

    Mit diesen Einstellungen kann das Aussehen der einzelnen Einsatzberichte beeinflusst werden.

    '; }, self::EVW_SETTINGS_SLUG . '-report' ); add_settings_section( 'einsatzvw_settings_einsatzliste', - 'Einsatzliste', + '', function () { echo '

    Mit diesen Einstellungen kann das Aussehen der Einsatzlisten beeinflusst werden. Einsatzlisten können über den Shortcode [einsatzliste] in Seiten und Beiträge eingebunden werden.

    '; }, @@ -268,7 +266,7 @@ function () { ); add_settings_section( 'einsatzvw_settings_caps', - 'Berechtigungen', + '', function () { echo '

    Hier kann festgelegt werden, welche Benutzer die Einsatzberichte verwalten können.

    '; }, From 563bce4c7c7abe123c2a0df5569c90218fc80e06 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 18 Dec 2017 23:16:14 +0100 Subject: [PATCH 014/126] =?UTF-8?q?Neue=20Seite=20About=20bzw.=20Kontakt?= =?UTF-8?q?=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/css/style-admin.css | 23 +++++++++++++------- src/einsatzverwaltung-settings.php | 34 +++++++++++++++++------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/css/style-admin.css b/src/css/style-admin.css index 2310a398..655b6b55 100644 --- a/src/css/style-admin.css +++ b/src/css/style-admin.css @@ -82,13 +82,6 @@ li.dropzone { margin-bottom: 15px; } -.pgpbadge { - background-color: darkgray; - padding: 0 5px; - border-radius: 6px; - font-weight: bold; -} - .import-date-formats { display: inline-block; vertical-align: top; @@ -98,4 +91,18 @@ li.dropzone { display: inline-block; vertical-align: top; margin-left: 20px; -} \ No newline at end of file +} + +.aboutpage-icons { + text-align: center; + margin: 25px 0; +} + +.aboutpage-icon { + width: 24%; + display: inline-block; +} + +.aboutpage-icon a { + text-decoration: none; +} diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index f31574af..1770ebae 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -738,21 +738,25 @@ public function echoSettingsPage() if ('about' === $currentTab) { ?> -

    Entwicklerkontakt & Social Media

    -

    - eMail: kontakt@abrain.de -  PGP -

    -

    - -    - -    - -    - - -

    + + +

    Support

    +

    Solltest Du ein Problem bei der Benutzung des Plugin haben, schaue bitte erst auf GitHub und im Forum auf wordpress.org nach, ob andere das Problem auch haben bzw. hatten. Wenn es noch keinen passenden Eintrag gibt, lege bitte einen entsprechenden Issue bzw. Thread an. Du kannst aber auch einfach eine E-Mail schreiben.

    +

    Gib bitte immer die folgenden Versionen mit an:  + +

    + +

    Social Media

    + +

    Du kannst die Neuigkeiten auch mit deinem Feedreader abonnieren: RSS / Atom

    Date: Mon, 18 Dec 2017 23:26:55 +0100 Subject: [PATCH 015/126] Typo --- src/einsatzverwaltung-settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 1770ebae..8a3fb74b 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -746,7 +746,7 @@ public function echoSettingsPage()

    Support

    -

    Solltest Du ein Problem bei der Benutzung des Plugin haben, schaue bitte erst auf GitHub und im Forum auf wordpress.org nach, ob andere das Problem auch haben bzw. hatten. Wenn es noch keinen passenden Eintrag gibt, lege bitte einen entsprechenden Issue bzw. Thread an. Du kannst aber auch einfach eine E-Mail schreiben.

    +

    Solltest Du ein Problem bei der Benutzung des Plugins haben, schaue bitte erst auf GitHub und im Forum auf wordpress.org nach, ob andere das Problem auch haben bzw. hatten. Wenn es noch keinen passenden Eintrag gibt, lege bitte einen entsprechenden Issue bzw. Thread an. Du kannst aber auch einfach eine E-Mail schreiben.

    Gib bitte immer die folgenden Versionen mit an: 

    From e54901565aa9ea571e16621b47ca304587745c45 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 18 Dec 2017 23:31:24 +0100 Subject: [PATCH 016/126] =?UTF-8?q?Die=20=C3=9Cbersetzung=20sollte=20mal?= =?UTF-8?q?=20gesondert=20im=20gro=C3=9Fen=20Stil=20erfolgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-settings.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 8a3fb74b..3bbb099f 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -707,12 +707,12 @@ public function echoSettingsPage() } $tabs = array( - 'general' => __('Allgemein', 'einsatzverwaltung'), - 'numbers' => __('Einsatznummern', 'einsatzverwaltung'), - 'report' => __('Einsatzberichte', 'einsatzverwaltung'), - 'list' => __('Einsatzliste', 'einsatzverwaltung'), - 'capabilities' => __('Berechtigungen', 'einsatzverwaltung'), - 'about' => __('Kontakt', 'einsatzverwaltung'), + 'general' => 'Allgemein', + 'numbers' => 'Einsatznummern', + 'report' => 'Einsatzberichte', + 'list' => 'Einsatzliste', + 'capabilities' => 'Berechtigungen', + 'about' => 'Über', ); $flags = FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH; From 5e2f1fc4947763d8ba9717e4ea11b296a8ef734b Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 18 Dec 2017 23:45:35 +0100 Subject: [PATCH 017/126] Teste gegen die neuesten Patches --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index c1b2a42c..6494e54f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,9 +11,10 @@ php: - '7.1' env: - - WP_VERSION=4.6.8 WP_MULTISITE=0 - - WP_VERSION=4.7.7 WP_MULTISITE=0 - - WP_VERSION=4.8.3 WP_MULTISITE=0 + - WP_VERSION=4.6.9 WP_MULTISITE=0 + - WP_VERSION=4.7.8 WP_MULTISITE=0 + - WP_VERSION=4.8.4 WP_MULTISITE=0 + - WP_VERSION=4.9.1 WP_MULTISITE=0 - WP_VERSION=nightly WP_MULTISITE=0 matrix: From 376db6246dea5c1c1269c6b3ec1402d2f130db62 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 18 Dec 2017 23:47:38 +0100 Subject: [PATCH 018/126] Neue Badges von Code Climate --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b6049c68..10d65263 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Einsatzverwaltung ## Plugin zur Verwaltung von Feuerwehreinsätzen -[![Build Status](https://travis-ci.org/abrain/einsatzverwaltung.svg)](https://travis-ci.org/abrain/einsatzverwaltung) [![Code Climate](https://codeclimate.com/github/abrain/einsatzverwaltung/badges/gpa.svg)](https://codeclimate.com/github/abrain/einsatzverwaltung) [![Test Coverage](https://codeclimate.com/github/abrain/einsatzverwaltung/badges/coverage.svg)](https://codeclimate.com/github/abrain/einsatzverwaltung/coverage) +[![Build Status](https://travis-ci.org/abrain/einsatzverwaltung.svg)](https://travis-ci.org/abrain/einsatzverwaltung) [![Maintainability](https://api.codeclimate.com/v1/badges/e977859ca4c209053b79/maintainability)](https://codeclimate.com/github/abrain/einsatzverwaltung/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/e977859ca4c209053b79/test_coverage)](https://codeclimate.com/github/abrain/einsatzverwaltung/test_coverage) Dieses Plugin fügt WordPress eine neue Beitragsart "Einsatzbericht" hinzu. Diese Einsatzberichte werden wie gewöhnliche WordPress-Beiträge erstellt, es können aber zusätzliche Informationen wie Alarmzeit, Art des Einsatzes, eingesetzte Fahrzeuge und vieles mehr angegeben werden. Zudem stellt das Plugin verschiedene Möglichkeiten zur Darstellung der Einsatzberichte zur Verfügung. From f69efe03fead350d972f86658a8c652c1a551c24 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 18 Dec 2017 23:53:16 +0100 Subject: [PATCH 019/126] =?UTF-8?q?=C3=9Cberfl=C3=BCssigen=20Aufruf=20entf?= =?UTF-8?q?ernt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-settings.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 3bbb099f..0a3e600e 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -695,8 +695,6 @@ public function echoSettingsPage()

    Einstellungen › Einsatzverwaltung

    options->getRewriteSlug(); $conflictingPage = get_page_by_path($rewriteSlug); From 07e14d554110535a36e953181977f5da35f779fe Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Tue, 19 Dec 2017 21:52:23 +0100 Subject: [PATCH 020/126] =?UTF-8?q?Hinweis=20auf=20erwartetes=20Feldbegren?= =?UTF-8?q?zerzeichen=20eingef=C3=BCgt=20#146?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Import/Tool.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Import/Tool.php b/src/Import/Tool.php index cf599dc5..3ba2fd32 100644 --- a/src/Import/Tool.php +++ b/src/Import/Tool.php @@ -249,6 +249,7 @@ public function renderToolPage()  

    Meist werden die Spalten mit einem Semikolon voneinander getrennt. Wenn du unsicher bist, solltest du die CSV-Datei mit einem Texteditor öffnen und nachsehen.

    +

    Als Feldbegrenzerzeichen (umschließt ggf. den Inhalt einer Spalte) wird das Anführungszeichen " erwartet.

    currentSource->getActionAttribute($this->nextAction['slug']) . '" />'; submit_button($this->nextAction['button_text']); From 6bd96f31a8fcaab7a1ecc84a2b32a22312442c0b Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 23 Dec 2017 22:42:41 +0100 Subject: [PATCH 021/126] =?UTF-8?q?Neues=20Konfigurationsformat=20f=C3=BCr?= =?UTF-8?q?=20Code=20Climate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .codeclimate.yml | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index 1d7bc626..a298d9eb 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -1,21 +1,24 @@ -engines: +version: "2" +plugins: phpcodesniffer: enabled: true + config: + file_extensions: "php" + standard: "PSR1,PSR2" phpmd: enabled: true config: - standard: "PSR1,PSR2" + file_extensions: + - php + rulesets: "phpmd.xml" + csslint: + enabled: true eslint: enabled: true - csslint: + duplication: enabled: true fixme: enabled: true -ratings: - paths: - - src/**/*.php - - src/**/*.js - - src/**/*.css - - tests/**/*.php -exclude_paths: -- src/font-awesome/**/* +exclude_patterns: +- src/font-awesome/ +- vendor/ \ No newline at end of file From 2cff045b12c7c6d7d3873b93953d7450d4d845ea Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 14 Jan 2018 14:45:46 +0100 Subject: [PATCH 022/126] Refactor import (#148) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Import: Logik für Taxonomie in Methoden ausgelagert, Tests angelegt * Unnötige Referenz auf Core entfernt * Klassen und Namespaces korrigiert * Kommentar für das bessere Verständnis Musste selbst erst wieder nachdenken, warum die Abfrage so gebaut ist * Import: Die Metadaten werden sofort mit an wp_insert_post übergeben * Import: Überführung eines Eintrags aus der Quelle in das Argument für wp_insert_post() extrahiert und getestet * Import: Abschließende Prüfungen der Argumente für wp_insert_post() extrahiert und getestet * Import: Sichergestellt, dass der Vermerk für einen besonderen Einsatz nie leer bleibt, fixes #147 * Import: Vorbereitung und tatsächlichen Import getrennt * Import: Fehlerfälle werden nun über Exceptions abgefangen * Import: Dropdown für eigene Felder wird jetzt mit formatierten Strings erzeugt * Import: Unnötige Setter entfernt * Anpassungen für Code Climate * Import: Fortschritt wird an einen Tracker gemeldet und nicht direkt ausgegeben, verhindert Ausgaben während der Tests --- src/Exceptions/ImportException.php | 13 + src/Exceptions/ImportPreparationException.php | 13 + src/Import/Helper.php | 431 +++++++++++------- src/Import/ImportStatus.php | 39 ++ src/Import/Tool.php | 56 +-- src/Util/ProgressTracker.php | 92 ++++ src/einsatzverwaltung-core.php | 6 +- src/einsatzverwaltung-frontend.php | 1 + tests/Import/HelperTest.php | 279 ++++++++++++ tests/Util/ProgressTrackerTest.php | 88 ++++ tests/bootstrap.php | 3 + 11 files changed, 824 insertions(+), 197 deletions(-) create mode 100644 src/Exceptions/ImportException.php create mode 100644 src/Exceptions/ImportPreparationException.php create mode 100644 src/Import/ImportStatus.php create mode 100644 src/Util/ProgressTracker.php create mode 100644 tests/Import/HelperTest.php create mode 100644 tests/Util/ProgressTrackerTest.php diff --git a/src/Exceptions/ImportException.php b/src/Exceptions/ImportException.php new file mode 100644 index 00000000..fbe7e7cb --- /dev/null +++ b/src/Exceptions/ImportException.php @@ -0,0 +1,13 @@ +utilities = $utilities; - $this->core = $core; $this->options = $options; $this->data = $data; } - /** * Gibt ein Auswahlfeld zur Zuordnung der Felder in Einsatzverwaltung aus * @@ -84,42 +92,228 @@ private function dropdownEigeneFelder($args) return strcmp($field1['label'], $field2['label']); }); $string = ''; echo $string; } + /** + * @param array $mapping + * @param array $sourceEntry + * @param array $insertArgs + * @throws ImportPreparationException + */ + public function mapEntryToInsertArgs($mapping, $sourceEntry, &$insertArgs) + { + foreach ($mapping as $sourceField => $ownField) { + if (empty($ownField) || !is_string($ownField)) { + $this->utilities->printError("Feld '$ownField' ungültig"); + continue; + } + + $sourceValue = trim($sourceEntry[$sourceField]); + if (array_key_exists($ownField, $this->metaFields)) { + // Wert gehört in ein Metafeld + $insertArgs['meta_input'][$ownField] = $sourceValue; + } elseif (array_key_exists($ownField, $this->taxonomies)) { + // Wert gehört zu einer Taxonomie + if (empty($sourceValue)) { + // Leere Terms überspringen + continue; + } + + $insertArgs['tax_input'][$ownField] = $this->getTaxInputString($ownField, $sourceValue); + } elseif (array_key_exists($ownField, $this->postFields)) { + // Wert gehört direkt zum Post + $insertArgs[$ownField] = $sourceValue; + } elseif ($ownField == '-') { + $this->utilities->printWarning("Feld '$sourceField' nicht zugeordnet"); + } else { + $this->utilities->printError("Feld '$ownField' unbekannt"); + } + } + } + + /** + * Bereitet eine kommaseparierte Auflistung von Terms einer bestimmten Taxonomie so, dass sie beim Anlegen eines + * Einsatzberichts für die gegebene Taxonomie als tax_input verwendet werden kann. + * + * @param string $taxonomy + * @param string $terms + * @return string + * @throws ImportPreparationException + */ + public function getTaxInputString($taxonomy, $terms) + { + if (is_taxonomy_hierarchical($taxonomy) === false) { + // Termnamen können direkt verwendet werden + return $terms; + } + + // Bei hierarchischen Taxonomien muss die ID statt des Namens verwendet werden + $termIds = array(); + + $termNames = explode(',', $terms); + foreach ($termNames as $termName) { + $termIds[] = $this->getTermId($termName, $taxonomy); + } + + return implode(',', $termIds); + } + + /** + * Bestimmt die ID eines Terms einer hierarchischen Taxonomie. Existiert dieser noch nicht, wird er angelegt. + * + * @param string $termName + * @param string $taxonomy + * @return int + * @throws ImportPreparationException + */ + public function getTermId($termName, $taxonomy) + { + if (is_taxonomy_hierarchical($taxonomy) === false) { + throw new ImportPreparationException("Die Taxonomie $taxonomy ist nicht hierarchisch!"); + } + + $termName = trim($termName); + $term = get_term_by('name', $termName, $taxonomy); + + if ($term !== false) { + // Term existiert bereits, ID verwenden + return $term->term_id; + } + + // Term existiert in dieser Taxonomie noch nicht, neu anlegen + $newterm = wp_insert_term($termName, $taxonomy); + + if (is_wp_error($newterm)) { + throw new ImportPreparationException(sprintf( + "Konnte %s '%s' nicht anlegen: %s", + $this->taxonomies[$taxonomy]['label'], + $termName, + $newterm->get_error_message() + )); + } + + // Anlegen erfolgreich, zurückgegebene ID verwenden + return $newterm['term_id']; + } + /** * Importiert Einsätze aus der wp-einsatz-Tabelle * * @param AbstractSource $source * @param array $mapping Zuordnung zwischen zu importieren Feldern und denen der Einsatzverwaltung + * @param ImportStatus $importStatus + * @throws ImportException + * @throws ImportPreparationException */ - public function import($source, $mapping) + public function import($source, $mapping, $importStatus) { set_time_limit(0); // Zeitlimit deaktivieren - - $sourceEntries = $source->getEntries(array_keys($mapping)); - if (empty($sourceEntries)) { - $this->utilities->printError('Die Importquelle lieferte keine Ergebnisse. Entweder sind dort keine Einsätze gespeichert oder es gab ein Problem bei der Abfrage.'); - return; + + $preparedInsertArgs = array(); + $yearsAffected = array(); + + // Den Import vorbereiten, um möglichst alle Fehler vorher abzufangen + $this->prepareImport($source, $mapping, $preparedInsertArgs, $yearsAffected); + + $importStatus->totalSteps = count($preparedInsertArgs); + $importStatus->displayMessage('Daten eingelesen, starte den Import...'); + + // Den tatsächlichen Import starten + $this->runImport($preparedInsertArgs, $source, $yearsAffected, $importStatus); + } + + /** + * @param array $insertArgs + * @param string $dateTimeFormat + * @param string $postStatus + * @param DateTime $alarmzeit + * @throws ImportPreparationException + */ + public function prepareArgsForInsertPost(&$insertArgs, $dateTimeFormat, $postStatus, $alarmzeit) + { + // Datum des Einsatzes prüfen + if (false === $alarmzeit) { + throw new ImportPreparationException(sprintf( + 'Die Alarmzeit %s konnte mit dem angegebenen Format %s nicht eingelesen werden', + esc_html($insertArgs['post_date']), + esc_html($dateTimeFormat) + )); } - // Der Veröffentlichungsstatus der importierten Berichte - $postStatus = $source->isPublishReports() ? 'publish' : 'draft'; + $insertArgs['post_date'] = $alarmzeit->format('Y-m-d H:i'); + $insertArgs['post_date_gmt'] = get_gmt_from_date($insertArgs['post_date']); + + // Einsatzende korrekt formatieren + if (array_key_exists('einsatz_einsatzende', $insertArgs['meta_input']) && + !empty($insertArgs['meta_input']['einsatz_einsatzende']) + ) { + $endDate = DateTime::createFromFormat($dateTimeFormat, $insertArgs['meta_input']['einsatz_einsatzende']); + if (false === $endDate) { + throw new ImportPreparationException(sprintf( + 'Das Einsatzende %s konnte mit dem angegebenen Format %s nicht eingelesen werden', + esc_html($insertArgs['meta_input']['einsatz_einsatzende']), + esc_html($dateTimeFormat) + )); + } - // Für die Dauer des Imports sollen die laufenden Nummern nicht aktuell gehalten werden, da dies die Performance - // stark beeinträchtigt - if ('publish' === $postStatus) { - $this->data->pauseAutoSequenceNumbers(); + $insertArgs['meta_input']['einsatz_einsatzende'] = $endDate->format('Y-m-d H:i'); + } + + $insertArgs['post_type'] = 'einsatz'; + $insertArgs['post_status'] = $postStatus; + + // Titel sicherstellen + if (!array_key_exists('post_title', $insertArgs)) { + $insertArgs['post_title'] = 'Einsatz'; + } + $insertArgs['post_title'] = wp_strip_all_tags($insertArgs['post_title']); + if (empty($insertArgs['post_title'])) { + $insertArgs['post_title'] = 'Einsatz'; + } + + // Mannschaftsstärke validieren + // NEEDS_WP4.6 wird durch den Einsatz von register_meta hinfällig + if (array_key_exists('einsatz_mannschaft', $insertArgs['meta_input'])) { + $insertArgs['meta_input']['einsatz_mannschaft'] = sanitize_text_field($insertArgs['meta_input']['einsatz_mannschaft']); + } + + // Berichte müssen explizit als 'nicht besonders' markiert werden + if (!array_key_exists('einsatz_special', $insertArgs['meta_input'])) { + $insertArgs['meta_input']['einsatz_special'] = '0'; + } + } + + /** + * @param AbstractSource $source + * @param array $mapping + * @param array $preparedInsertArgs + * @param array $yearsAffected + * @throws ImportPreparationException + */ + public function prepareImport($source, $mapping, &$preparedInsertArgs, &$yearsAffected) + { + $sourceEntries = $source->getEntries(array_keys($mapping)); + if (empty($sourceEntries)) { + throw new ImportPreparationException('Die Importquelle lieferte keine Ergebnisse. Entweder sind dort keine Einsätze gespeichert oder es gab ein Problem bei der Abfrage.'); } - $yearsImported = array(); $dateFormat = $source->getDateFormat(); $timeFormat = $source->getTimeFormat(); @@ -130,156 +324,22 @@ public function import($source, $mapping) $dateTimeFormat = 'Y-m-d H:i'; } - $metaFields = IncidentReport::getMetaFields(); - $ownTerms = IncidentReport::getTerms(); - $postFields = IncidentReport::getPostFields(); + // Der Veröffentlichungsstatus der importierten Berichte + $postStatus = $source->isPublishReports() ? 'publish' : 'draft'; foreach ($sourceEntries as $sourceEntry) { - $metaValues = array(); $insertArgs = array(); $insertArgs['post_content'] = ''; $insertArgs['tax_input'] = array(); + $insertArgs['meta_input'] = array(); - foreach ($mapping as $sourceField => $ownField) { - if (empty($ownField) || !is_string($ownField)) { - $this->utilities->printError("Feld '$ownField' ungültig"); - continue; - } - - $sourceValue = trim($sourceEntry[$sourceField]); - if (array_key_exists($ownField, $metaFields)) { - // Wert gehört in ein Metafeld - $metaValues[$ownField] = $sourceValue; - } elseif (array_key_exists($ownField, $ownTerms)) { - // Wert gehört zu einer Taxonomie - if (empty($sourceValue)) { - // Leere Terms überspringen - continue; - } - if (is_taxonomy_hierarchical($ownField)) { - // Bei hierarchischen Taxonomien muss die ID statt des Namens verwendet werden - $termIds = array(); - - $termNames = explode(',', $sourceValue); - foreach ($termNames as $termName) { - $termName = trim($termName); - $term = get_term_by('name', $termName, $ownField); - - if ($term !== false) { - // Term existiert bereits, ID verwenden - $termIds[] = $term->term_id; - continue; - } - - // Term existiert in dieser Taxonomie noch nicht, neu anlegen - $newterm = wp_insert_term($termName, $ownField); - if (is_wp_error($newterm)) { - $this->utilities->printError( - sprintf( - "Konnte %s '%s' nicht anlegen: %s", - $ownTerms[$ownField]['label'], - $termName, - $newterm->get_error_message() - ) - ); - continue; - } - - // Anlegen erfolgreich, zurückgegebene ID verwenden - $termIds[] = $newterm['term_id']; - } - - $insertArgs['tax_input'][$ownField] = implode(',', $termIds); - } else { - // Name kann direkt verwendet werden - $insertArgs['tax_input'][$ownField] = $sourceValue; - } - } elseif (array_key_exists($ownField, $postFields)) { - // Wert gehört direkt zum Post - $insertArgs[$ownField] = $sourceValue; - } elseif ($ownField == '-') { - $this->utilities->printWarning("Feld '$sourceField' nicht zugeordnet"); - } else { - $this->utilities->printError("Feld '$ownField' unbekannt"); - } - } - - // Datum des Einsatzes prüfen + $this->mapEntryToInsertArgs($mapping, $sourceEntry, $insertArgs); $alarmzeit = DateTime::createFromFormat($dateTimeFormat, $insertArgs['post_date']); - if (false === $alarmzeit) { - $this->utilities->printError( - sprintf( - 'Die Alarmzeit %s konnte mit dem angegebenen Format %s nicht eingelesen werden', - esc_html($insertArgs['post_date']), - esc_html($dateTimeFormat) - ) - ); - continue; - } - $yearsImported[$alarmzeit->format('Y')] = 1; - - $insertArgs['post_date'] = $alarmzeit->format('Y-m-d H:i'); - $insertArgs['post_date_gmt'] = get_gmt_from_date($insertArgs['post_date']); - - // Einsatzende korrekt formatieren - if (array_key_exists('einsatz_einsatzende', $metaValues) && !empty($metaValues['einsatz_einsatzende'])) { - $einsatzende = DateTime::createFromFormat($dateTimeFormat, $metaValues['einsatz_einsatzende']); - if (false === $einsatzende) { - $this->utilities->printError( - sprintf( - 'Das Einsatzende %s konnte mit dem angegebenen Format %s nicht eingelesen werden', - esc_html($metaValues['einsatz_einsatzende']), - esc_html($dateTimeFormat) - ) - ); - continue; - } - - $metaValues['einsatz_einsatzende'] = $einsatzende->format('Y-m-d H:i'); - } - - $insertArgs['post_type'] = 'einsatz'; - $insertArgs['post_status'] = $postStatus; - - // Titel sicherstellen - if (!array_key_exists('post_title', $insertArgs)) { - $insertArgs['post_title'] = 'Einsatz'; - } - $insertArgs['post_title'] = wp_strip_all_tags($insertArgs['post_title']); - if (empty($insertArgs['post_title'])) { - $insertArgs['post_title'] = 'Einsatz'; - } - - // Mannschaftsstärke validieren - if (array_key_exists('einsatz_mannschaft', $metaValues)) { - $metaValues['einsatz_mannschaft'] = sanitize_text_field($metaValues['einsatz_mannschaft']); - } + $this->prepareArgsForInsertPost($insertArgs, $dateTimeFormat, $postStatus, $alarmzeit); - // Neuen Beitrag anlegen - $postId = wp_insert_post($insertArgs, true); - if (is_wp_error($postId)) { - $this->utilities->printError('Konnte Einsatz nicht importieren: ' . $postId->get_error_message()); - } else { - $this->utilities->printInfo('Einsatz importiert, ID ' . $postId); - foreach ($metaValues as $mkey => $mval) { - update_post_meta($postId, $mkey, $mval); - } - } - } - - if ('publish' === $postStatus) { - // Die automatische Aktualisierung der laufenden Nummern wird wieder aufgenommen - $this->utilities->printSuccess('Die Berichte wurden importiert'); - $this->utilities->printInfo('Metadaten werden aktualisiert ...'); - flush(); - $this->data->resumeAutoSequenceNumbers(); - foreach (array_keys($yearsImported) as $year) { - $this->data->updateSequenceNumbers(strval($year)); - } + $preparedInsertArgs[] = $insertArgs; + $yearsAffected[$alarmzeit->format('Y')] = 1; } - - $this->utilities->printSuccess('Der Import ist abgeschlossen'); - echo 'Zu den Einsatzberichten'; } /** @@ -351,6 +411,41 @@ public function renderMatchForm($source, $args) echo ''; } + /** + * @param array $preparedInsertArgs + * @param AbstractSource $source + * @param array $yearsAffected + * @param ImportStatus $importStatus + * @throws ImportException + */ + public function runImport($preparedInsertArgs, $source, $yearsAffected, $importStatus) + { + // Für die Dauer des Imports sollen die laufenden Nummern nicht aktuell gehalten werden, da dies die Performance + // stark beeinträchtigt + if ($source->isPublishReports()) { + $this->data->pauseAutoSequenceNumbers(); + } + + foreach ($preparedInsertArgs as $insertArgs) { + // Neuen Beitrag anlegen + $postId = wp_insert_post($insertArgs, true); + if (is_wp_error($postId)) { + throw new ImportException('Konnte Einsatz nicht importieren: ' . $postId->get_error_message()); + } + + $importStatus->importSuccesss($postId); + } + + if ($source->isPublishReports()) { + // Die automatische Aktualisierung der laufenden Nummern wird wieder aufgenommen + $this->data->resumeAutoSequenceNumbers(); + foreach (array_keys($yearsAffected) as $year) { + $importStatus->displayMessage(sprintf('Aktualisiere laufende Nummern für das Jahr %d...', $year)); + $this->data->updateSequenceNumbers(strval($year)); + } + } + } + /** * Prüft, ob das Mapping stimmig ist und gibt Warnungen oder Fehlermeldungen aus * diff --git a/src/Import/ImportStatus.php b/src/Import/ImportStatus.php new file mode 100644 index 00000000..91109417 --- /dev/null +++ b/src/Import/ImportStatus.php @@ -0,0 +1,39 @@ +postIds = array(); + } + + /** + * @param int $postId + */ + public function importSuccesss($postId) + { + $this->postIds[] = $postId; + $this->addStep(); + $this->displayMessage(sprintf( + 'Importiert: %s', + get_permalink($postId), + get_the_title($postId) + )); + } +} diff --git a/src/Import/Tool.php b/src/Import/Tool.php index 3ba2fd32..9734e020 100644 --- a/src/Import/Tool.php +++ b/src/Import/Tool.php @@ -1,8 +1,9 @@ core = $core; $this->utilities = $utilities; $this->options = $options; - $this->addHooks(); - $this->loadSources(); $this->data = $data; - } - private function addHooks() - { add_action('admin_menu', array($this, 'addToolToMenu')); + + $this->loadSources(); } /** @@ -133,7 +124,10 @@ private function loadSources() public function renderToolPage() { require_once dirname(__FILE__) . '/Helper.php'; - $this->helper = new Helper($this->utilities, $this->core, $this->options, $this->data); + $this->helper = new Helper($this->utilities, $this->options, $this->data); + $this->helper->metaFields = IncidentReport::getMetaFields(); + $this->helper->taxonomies = IncidentReport::getTerms(); + $this->helper->postFields = IncidentReport::getPostFields(); echo '
    '; echo '

    ' . 'Einsatzberichte importieren' . '

    '; @@ -196,10 +190,10 @@ public function renderToolPage() } } - // Datums- und Zeitformat für CSV-Import übernehmen + // 'Sofort veröffentlichen'-Option übernehmen $this->currentSource->putArg( - 'import_publish_reports', - $this->utilities->sanitizeCheckbox(array($_POST, 'import_publish_reports')) + 'import_publish_reports', + $this->utilities->sanitizeCheckbox(array($_POST, 'import_publish_reports')) ); echo "

    {$this->currentAction['name']}

    "; @@ -288,9 +282,6 @@ private function analysisPage() // Einsätze zählen $entries = $this->currentSource->getEntries(null); - if (false === $entries) { - return; - } if (empty($entries)) { $this->utilities->printWarning('Es wurden keine Einsätze gefunden.'); return; @@ -303,10 +294,6 @@ private function analysisPage() // Felder matchen echo "

    Felder zuordnen

    "; - if (false === $this->nextAction) { - $this->utilities->printError('Keine Nachfolgeaktion gefunden!'); - return; - } $this->helper->renderMatchForm($this->currentSource, array( 'nonce_action' => $this->getNonceAction($this->currentSource, $this->nextAction['slug']), @@ -344,9 +331,26 @@ private function importPage() return; } + require_once dirname(dirname(__FILE__)) . '/Exceptions/ImportException.php'; + require_once dirname(dirname(__FILE__)) . '/Exceptions/ImportPreparationException.php'; + require_once dirname(__FILE__) . '/ImportStatus.php'; + // Import starten echo '

    Die Daten werden eingelesen, das kann einen Moment dauern.

    '; - $this->helper->import($this->currentSource, $mapping); + try { + $importStatus = new ImportStatus(0); + $this->helper->import($this->currentSource, $mapping, $importStatus); + } catch (ImportException $e) { + $importStatus->abort('Import abgebrochen, Ursache: ' . $e->getMessage()); + return; + } catch (ImportPreparationException $e) { + $importStatus->abort('Importvorbereitung abgebrochen, Ursache: ' . $e->getMessage()); + return; + } + + $this->utilities->printSuccess('Der Import ist abgeschlossen'); + $url = admin_url('edit.php?post_type=einsatz'); + printf('Zu den Einsatzberichten', $url); } private function printDataNotice() diff --git a/src/Util/ProgressTracker.php b/src/Util/ProgressTracker.php new file mode 100644 index 00000000..f2c1e85b --- /dev/null +++ b/src/Util/ProgressTracker.php @@ -0,0 +1,92 @@ +utilities = Core::getInstance()->utilities; + + $this->currentStep = 0; + + if ($totalSteps < 0) { + $totalSteps = 0; + } + $this->totalSteps = $totalSteps; + } + + /** + * @param string $message + */ + public function abort($message) + { + $this->utilities->printError($message); + } + + public function addStep() + { + $this->currentStep += 1; + } + + /** + * @param string $message + */ + public function displayMessage($message) + { + printf('

    %s

    ', $message); + } + + /** + * @param string $message + */ + public function finish($message = '') + { + if ($this->totalSteps === 0) { + $this->totalSteps = 1; + } + + $this->currentStep = $this->totalSteps; + + if (!empty($message)) { + $this->utilities->printSuccess($message); + } + } + + /** + * @return int + */ + public function getPercentage() + { + if ($this->totalSteps === 0) { + return 0; + } + + return intval($this->currentStep * 100 / $this->totalSteps); + } +} diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 8a556a34..6bad7484 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -264,7 +264,7 @@ class Core /** * @var Options */ - private $options; + public $options; /** * @var ImportTool @@ -279,7 +279,7 @@ class Core /** * @var Utilities */ - private $utilities; + public $utilities; /** * Constructor @@ -307,7 +307,7 @@ private function __construct() $this->taxonomies = new Taxonomies($this->utilities); // Tools - $this->importTool = new ImportTool($this, $this->utilities, $this->options, $this->data); + $this->importTool = new ImportTool($this->utilities, $this->options, $this->data); $this->tasksPage = new TasksPage($this->utilities, $this->data); // Widgets diff --git a/src/einsatzverwaltung-frontend.php b/src/einsatzverwaltung-frontend.php index 1b5b126b..7277b74e 100644 --- a/src/einsatzverwaltung-frontend.php +++ b/src/einsatzverwaltung-frontend.php @@ -345,6 +345,7 @@ public function addReportsToQuery($query) 'key' => 'einsatz_special', 'value' => '1' ); + // normale Beiträge haben diesen Metaeintrag nicht, sollen aber trotzdem angezeigt werden $metaQuery[] = array( 'key' => 'einsatz_special', 'value' => '1', diff --git a/tests/Import/HelperTest.php b/tests/Import/HelperTest.php new file mode 100644 index 00000000..8a58d16d --- /dev/null +++ b/tests/Import/HelperTest.php @@ -0,0 +1,279 @@ +utilities, self::$core->options, self::$core->getData()); + + register_taxonomy('hierarchy', array(), array('hierarchical' => true)); + register_taxonomy('nohierarchy', array(), array('hierarchical' => false)); + register_taxonomy('someTax', array(), array('hierarchical' => false)); + + self::$helper->metaFields = array('someMetaField' => array('label' => 'Some meta field')); + self::$helper->postFields = array( + 'somePostField' => array('label' => 'Some post field'), + 'anotherPostField' => array('label' => 'Another post field') + ); + self::$helper->taxonomies = array( + 'hierarchy' => array('label' => 'Hierarchical taxonomy'), + 'nohierarchy' => array('label' => 'Non-hierarchical taxonomy'), + 'someTax' => array('label' => 'Another non-hierarchical taxonomy') + ); + + parent::setUpBeforeClass(); + } + + /** + * Checks the generated string for tax_input for a non-hierarchical taxonomy. + */ + public function testGetTaxInputStringForNT() + { + $input = 'term1, term78, term99'; + try { + $result = self::$helper->getTaxInputString('nohierarchy', $input); + } catch (ImportPreparationException $e) { + $this->fail($e->getMessage()); + return; + } + $this->assertEquals($input, $result); + } + + /** + * Checks the generated string for tax_input for a hierarchical taxonomy. + */ + public function testGetTaxInputStringForHT() + { + $terms = array('hterm6', 'hterm123', 'hterm777'); + + // Check that the terms do not exist yet + foreach ($terms as $term) { + $this->assertFalse(get_term_by('name', $term, 'hierarchy')); + } + + // Create one upfront + $term = wp_insert_term($terms[0], 'hierarchy'); + $this->assertInternalType('array', $term); + $exitingId = $term['term_id']; + + $input = implode(',', $terms); + try { + $result = self::$helper->getTaxInputString('hierarchy', $input); + } catch (ImportPreparationException $e) { + $this->fail($e->getMessage()); + return; + } + $returnedIds = explode(',', $result); + $this->assertCount(count($terms), $returnedIds); + + // Check that the existing term was reused + $this->assertContains($exitingId, $returnedIds); + + // Check that the terms have been created + $names = array(); + foreach ($returnedIds as $id) { + $wpterm = get_term_by('id', $id, 'hierarchy'); + $this->assertNotFalse($wpterm); + $names[] = $wpterm->name; + } + + $this->assertEquals($names, $terms); + } + + public function testGetExistingTermId() + { + // Make sure term exists + $termName = 'existingTerm'; + $term = wp_insert_term($termName, 'hierarchy'); + $this->assertInternalType('array', $term); + + try { + $returnedTermId = self::$helper->getTermId($termName, 'hierarchy'); + } catch (ImportPreparationException $e) { + $this->fail($e->getMessage()); + return; + } + + $this->assertEquals($term['term_id'], $returnedTermId); + } + + public function testGetUnknownTermId() + { + $termName = 'unknownTerm'; + + // Make sure term does not exist + $wpterm = get_term_by('name', $termName, 'hierarchy'); + $this->assertFalse($wpterm); + + try { + $returnedTermId = self::$helper->getTermId($termName, 'hierarchy'); + } catch (ImportPreparationException $e) { + $this->fail($e->getMessage()); + return; + } + + // Term should have been created + $wpterm = get_term_by('name', $termName, 'hierarchy'); + $this->assertNotFalse($wpterm); + + $termId = $wpterm->term_id; + $this->assertEquals($termId, $returnedTermId); + $this->assertNotEquals($termId, $termName); + } + + public function testMapEntryToInsertArgs() + { + $insertArgs = array(); + $valuesTaxonomy1 = array('aValue', 'another value'); + $valuesTaxonomy2 = array('some string', 'even another value'); + + $mapping = array( + 'f1' => 'hierarchy', + 'f2' => 'somePostField', + 'f3' => 'anotherPostField', + 'f4' => 'someMetaField', + 'f5' => 'nohierarchy', + 'f6' => 'someTax' + ); + + $entry = array( + 'f1' => implode(',', $valuesTaxonomy1), + 'f2' => 'post field content', + 'f3' => 'lorem ipsum', + 'f4' => 'so meta!', + 'f5' => implode(',', $valuesTaxonomy2), + 'f6' => '' + ); + + try { + self::$helper->mapEntryToInsertArgs($mapping, $entry, $insertArgs); + } catch (ImportPreparationException $e) { + $this->fail($e->getMessage()); + } + + // Check post fields + $this->assertArrayHasKey('somePostField', $insertArgs); + $this->assertEquals('post field content', $insertArgs['somePostField']); + $this->assertArrayHasKey('anotherPostField', $insertArgs); + $this->assertEquals('lorem ipsum', $insertArgs['anotherPostField']); + + // Check taxonomies + $this->assertArrayHasKey('tax_input', $insertArgs); + $this->assertArrayHasKey('hierarchy', $insertArgs['tax_input']); + $inputTaxonomy1 = explode(',', $insertArgs['tax_input']['hierarchy']); + $this->assertCount(count($valuesTaxonomy1), $inputTaxonomy1); + foreach ($inputTaxonomy1 as $value) { + $this->assertTrue(is_numeric($value)); + } + $this->assertArrayHasKey('nohierarchy', $insertArgs['tax_input']); + $inputTaxonomy2 = explode(',', $insertArgs['tax_input']['nohierarchy']); + $this->assertEquals($valuesTaxonomy2, $inputTaxonomy2); + $this->assertArrayNotHasKey('someTax', $insertArgs['tax_input']); // empty value should have been ignored + + // Check meta data + $this->assertArrayHasKey('meta_input', $insertArgs); + $this->assertArrayHasKey('someMetaField', $insertArgs['meta_input']); + $this->assertEquals('so meta!', $insertArgs['meta_input']['someMetaField']); + } + + public function testPrepareArgsForInsertPost() + { + $insertArgs = array( + 'post_date' => '29.12.2017 18:24', + 'meta_input' => array( + 'einsatz_einsatzende' => '2017/12-29 23 42', + 'einsatz_special' => '1' + ), + 'post_title' => 'Nr. 112 - Technische Hilfeleistung' + ); + try { + $postStatus = 'draft'; + $alarmzeit = DateTime::createFromFormat('d.m.Y H:i', $insertArgs['post_date']); + self::$helper->prepareArgsForInsertPost($insertArgs, 'Y/m-d H i', $postStatus, $alarmzeit); + } catch (ImportPreparationException $e) { + $this->fail($e->getMessage()); + } + + // It's not an update, a new post shall be created + $this->assertArrayNotHasKey('ID', $insertArgs); + + // Date should be correctly formatted for the database + $this->assertArrayHasKey('post_date', $insertArgs); + $this->assertEquals('2017-12-29 18:24', $insertArgs['post_date']); + + // Same goes for the GMT date + $this->assertArrayHasKey('post_date_gmt', $insertArgs); + $this->assertEquals('2017-12-29 17:24:00', $insertArgs['post_date_gmt']); + + // Check if the post title has not been modified + $this->assertArrayHasKey('post_title', $insertArgs); + $this->assertEquals('Nr. 112 - Technische Hilfeleistung', $insertArgs['post_title']); + + // The given post status should have been preserved + $this->assertArrayHasKey('post_status', $insertArgs); + $this->assertEquals($postStatus, $insertArgs['post_status']); + + // The correct post_type must have been set + $this->assertArrayHasKey('post_type', $insertArgs); + $this->assertEquals('einsatz', $insertArgs['post_type']); + + // The date and time of ending should be formatted according to the given format + $this->assertArrayHasKey('meta_input', $insertArgs); + $this->assertArrayHasKey('einsatz_einsatzende', $insertArgs['meta_input']); + $this->assertEquals('2017-12-29 23:42', $insertArgs['meta_input']['einsatz_einsatzende']); + + // Check that the special flag is still present + $this->assertArrayHasKey('einsatz_special', $insertArgs['meta_input']); + $this->assertEquals('1', $insertArgs['meta_input']['einsatz_special']); + } + + public function testDefaults() + { + $insertArgs = array( + 'post_date' => '29.12.2017 18:24', + 'meta_input' => array( + 'einsatz_einsatzende' => '2017/12-29 23 42' + ) + ); + try { + $postStatus = 'publish'; + $alarmzeit = DateTime::createFromFormat('d.m.Y H:i', $insertArgs['post_date']); + self::$helper->prepareArgsForInsertPost($insertArgs, 'Y/m-d H i', $postStatus, $alarmzeit); + } catch (ImportPreparationException $e) { + $this->fail($e->getMessage()); + } + + // Check if the default post title has been set + $this->assertArrayHasKey('post_title', $insertArgs); + $this->assertEquals('Einsatz', $insertArgs['post_title']); + + // The given post status should have been preserved + $this->assertArrayHasKey('post_status', $insertArgs); + $this->assertEquals($postStatus, $insertArgs['post_status']); + + // Check that the special flag defaults to 0 + $this->assertArrayHasKey('einsatz_special', $insertArgs['meta_input']); + $this->assertEquals('0', $insertArgs['meta_input']['einsatz_special']); + } +} diff --git a/tests/Util/ProgressTrackerTest.php b/tests/Util/ProgressTrackerTest.php new file mode 100644 index 00000000..9e9e2b2e --- /dev/null +++ b/tests/Util/ProgressTrackerTest.php @@ -0,0 +1,88 @@ +assertEquals(0, $progressTracker->currentStep); + $progressTracker->addStep(); + $this->assertEquals(1, $progressTracker->currentStep); + $progressTracker->addStep(); + $progressTracker->addStep(); + $this->assertEquals(3, $progressTracker->currentStep); + } + + public function testGetPercentage() + { + $progressTracker = new ProgressTracker(6); + $this->assertEquals(0, $progressTracker->getPercentage()); + $progressTracker->addStep(); + $this->assertEquals(16, $progressTracker->getPercentage()); + $progressTracker->addStep(); + $progressTracker->addStep(); + $this->assertEquals(50, $progressTracker->getPercentage()); + } + + public function testGetPercentageUnspecifiedTotal() + { + $progressTracker = new ProgressTracker(); + $this->assertEquals(0, $progressTracker->getPercentage()); + $progressTracker->addStep(); + $this->assertEquals(0, $progressTracker->getPercentage()); + $progressTracker->addStep(); + $progressTracker->addStep(); + $this->assertEquals(0, $progressTracker->getPercentage()); + } + + public function testPercentageNegativeTotalSteps() + { + $progressTracker = new ProgressTracker(-5); + $this->assertEquals(0, $progressTracker->getPercentage()); + $progressTracker->addStep(); + $this->assertEquals(0, $progressTracker->getPercentage()); + $progressTracker->addStep(); + $progressTracker->addStep(); + $this->assertEquals(0, $progressTracker->getPercentage()); + } + + public function testFinish() + { + $progressTracker = new ProgressTracker(4); + $this->assertEquals(0, $progressTracker->getPercentage()); + $this->expectOutputRegex('/Test message for finish method/'); + $progressTracker->finish('Test message for finish method'); + $this->assertEquals(100, $progressTracker->getPercentage()); + } + + public function testFinishUnspecifiedTotal() + { + $progressTracker = new ProgressTracker(); + $this->assertEquals(0, $progressTracker->getPercentage()); + $progressTracker->finish(); + $this->assertEquals(100, $progressTracker->getPercentage()); + } + + public function testDisplayMessage() + { + $progressTracker = new ProgressTracker(); + $this->expectOutputRegex('/Some test message/'); + $progressTracker->displayMessage('Some test message'); + } + + public function testAbort() + { + $progressTracker = new ProgressTracker(9); + $progressTracker->addStep(); + $progressTracker->addStep(); + $this->assertEquals(22, $progressTracker->getPercentage()); + $this->expectOutputRegex('/Some message about a failure/'); + $progressTracker->abort('Some message about a failure'); + $this->assertEquals(22, $progressTracker->getPercentage()); + } +} diff --git a/tests/bootstrap.php b/tests/bootstrap.php index db9130e5..16a33b90 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -13,6 +13,9 @@ // DB-Version setzen, damit der Upgrade-Prozess nicht unnötig anläuft // Wird normal bei der Aktivierung des Plugins gemacht, aber diese Action wird bei den Tests nicht aufgerufen add_option('einsatzvw_db_version', \abrain\Einsatzverwaltung\Core::DB_VERSION); + + // Zeitzone setzen + update_option('timezone_string', 'Europe/Berlin'); }); require $_tests_dir . '/includes/bootstrap.php'; From 05ec14c56d61f01a2af15e1fb7fabfcd1c576120 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 15 Jan 2018 00:31:00 +0100 Subject: [PATCH 023/126] Metadaten werden mit register_meta registriert --- src/Import/Helper.php | 6 --- src/einsatzverwaltung-admin.php | 14 +++--- src/einsatzverwaltung-core.php | 64 ++++++++++++++++++++++++ src/einsatzverwaltung-data.php | 85 ++++++++++++++------------------ src/js/einsatzverwaltung-edit.js | 6 +-- tests/Admin/ReportEditTest.php | 30 ++++++----- 6 files changed, 128 insertions(+), 77 deletions(-) diff --git a/src/Import/Helper.php b/src/Import/Helper.php index 002f6391..41805b5d 100644 --- a/src/Import/Helper.php +++ b/src/Import/Helper.php @@ -289,12 +289,6 @@ public function prepareArgsForInsertPost(&$insertArgs, $dateTimeFormat, $postSta $insertArgs['post_title'] = 'Einsatz'; } - // Mannschaftsstärke validieren - // NEEDS_WP4.6 wird durch den Einsatz von register_meta hinfällig - if (array_key_exists('einsatz_mannschaft', $insertArgs['meta_input'])) { - $insertArgs['meta_input']['einsatz_mannschaft'] = sanitize_text_field($insertArgs['meta_input']['einsatz_mannschaft']); - } - // Berichte müssen explizit als 'nicht besonders' markiert werden if (!array_key_exists('einsatz_special', $insertArgs['meta_input'])) { $insertArgs['meta_input']['einsatz_special'] = '0'; diff --git a/src/einsatzverwaltung-admin.php b/src/einsatzverwaltung-admin.php index 7ae3c8ac..6b62bb52 100644 --- a/src/einsatzverwaltung-admin.php +++ b/src/einsatzverwaltung-admin.php @@ -151,21 +151,21 @@ public function displayMetaBoxAnnotations($post) $this->echoInputCheckbox( 'Fehlalarm', - 'einsatzverwaltung_fehlalarm', + 'meta_input[einsatz_fehlalarm]', $report->isFalseAlarm() ); echo '
    '; $this->echoInputCheckbox( 'Besonderer Einsatz', - 'einsatzverwaltung_special', + 'meta_input[einsatz_special]', $report->isSpecial() ); echo '
    '; $this->echoInputCheckbox( 'Bilder im Bericht', - 'einsatzverwaltung_hasimages', + 'meta_input[einsatz_hasimages]', $report->hasImages() ); } @@ -214,7 +214,7 @@ public function displayMetaBoxEinsatzdetails($post) $this->echoInputText( 'Einsatzende', - 'einsatzverwaltung_einsatzende', + 'meta_input[einsatz_einsatzende]', esc_attr($einsatzende), 'JJJJ-MM-TT hh:mm' ); @@ -223,19 +223,19 @@ public function displayMetaBoxEinsatzdetails($post) $this->echoInputText( 'Einsatzort', - 'einsatzverwaltung_einsatzort', + 'meta_input[einsatz_einsatzort]', esc_attr($einsatzort) ); $this->echoInputText( 'Einsatzleiter', - 'einsatzverwaltung_einsatzleiter', + 'meta_input[einsatz_einsatzleiter]', esc_attr($einsatzleiter) ); $this->echoInputText( 'Mannschaftsstärke', - 'einsatzverwaltung_mannschaft', + 'meta_input[einsatz_mannschaft]', esc_attr($mannschaftsstaerke) ); diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 6bad7484..aeb1f090 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -388,6 +388,70 @@ private function registerTypes() register_taxonomy('exteinsatzmittel', 'einsatz', $this->argsExteinsatzmittel); register_taxonomy('alarmierungsart', 'einsatz', $this->argsAlarmierungsart); + register_meta('post', 'einsatz_einsatzende', array( + 'type' => 'string', + 'description' => 'Datum und Uhrzeit, zu der der Einsatz endete.', + 'single' => true, + 'sanitize_callback' => array($this->data, 'sanitizeTimeOfEnding'), + 'show_in_rest' => false + )); + + register_meta('post', 'einsatz_einsatzleiter', array( + 'type' => 'string', + 'description' => 'Name der Person, die die Einsatzleitung innehatte.', + 'single' => true, + 'sanitize_callback' => 'sanitize_text_field', + 'show_in_rest' => false + )); + + register_meta('post', 'einsatz_einsatzort', array( + 'type' => 'string', + 'description' => 'Die Örtlichkeit, an der der Einsatz stattgefunden hat.', + 'single' => true, + 'sanitize_callback' => 'sanitize_text_field', + 'show_in_rest' => false + )); + + register_meta('post', 'einsatz_fehlalarm', array( + 'type' => 'boolean', + 'description' => 'Vermerk, ob es sich um einen Fehlalarm handelte.', + 'single' => true, + 'sanitize_callback' => array($this->utilities, 'sanitizeCheckbox'), + 'show_in_rest' => false + )); + + register_meta('post', 'einsatz_hasimages', array( + 'type' => 'boolean', + 'description' => 'Vermerk, ob der Einsatzbericht Bilder enthält.', + 'single' => true, + 'sanitize_callback' => array($this->utilities, 'sanitizeCheckbox'), + 'show_in_rest' => false + )); + + register_meta('post', 'einsatz_incidentNumber', array( + 'type' => 'string', + 'description' => 'Einsatznummer.', + 'single' => true, + 'sanitize_callback' => 'sanitize_text_field', + 'show_in_rest' => false + )); + + register_meta('post', 'einsatz_mannschaft', array( + 'type' => 'string', + 'description' => 'Angaben über die Personalstärke für diesen Einsatz.', + 'single' => true, + 'sanitize_callback' => 'sanitize_text_field', + 'show_in_rest' => false + )); + + register_meta('post', 'einsatz_special', array( + 'type' => 'boolean', + 'description' => 'Vermerk, ob es sich um einen besonderen Einsatzbericht handelt.', + 'single' => true, + 'sanitize_callback' => array($this->utilities, 'sanitizeCheckbox'), + 'show_in_rest' => false + )); + // Vermerke registrieren $annotationRepository = ReportAnnotationRepository::getInstance(); $annotationRepository->addAnnotation(new ReportAnnotation( diff --git a/src/einsatzverwaltung-data.php b/src/einsatzverwaltung-data.php index fff9eda9..db1eed30 100644 --- a/src/einsatzverwaltung-data.php +++ b/src/einsatzverwaltung-data.php @@ -55,8 +55,6 @@ private function addHooks() add_action('private_einsatz', array($this, 'onPublish'), 10, 2); add_action('publish_einsatz', array($this, 'onPublish'), 10, 2); add_action('trash_einsatz', array($this, 'onTrash'), 10, 2); - add_filter('sanitize_post_meta_einsatz_fehlalarm', array($this->utilities, 'sanitizeCheckbox')); - add_filter('sanitize_post_meta_einsatz_special', array($this->utilities, 'sanitizeCheckbox')); if ($this->options->isAutoIncidentNumbers()) { add_action('updated_postmeta', array($this, 'adjustIncidentNumber'), 10, 4); add_action('added_post_meta', array($this, 'adjustIncidentNumber'), 10, 4); @@ -195,8 +193,6 @@ public function savePostdata($postId, $post) return; } - $updateArgs = array(); - // Alarmzeit validieren $inputAlarmzeit = sanitize_text_field($_POST['einsatzverwaltung_alarmzeit']); if (!empty($inputAlarmzeit)) { @@ -211,59 +207,30 @@ public function savePostdata($postId, $post) // Wird bis zur Veröffentlichung in Postmeta zwischengespeichert. update_post_meta($postId, '_einsatz_timeofalerting', date_format($alarmzeit, 'Y-m-d H:i:s')); } else { + $updateArgs = array('ID' => $postId); $updateArgs['post_date'] = date_format($alarmzeit, 'Y-m-d H:i:s'); $updateArgs['post_date_gmt'] = get_gmt_from_date($updateArgs['post_date']); + + // save_post Filter kurzzeitig deaktivieren, damit keine Dauerschleife entsteht + remove_action('save_post_einsatz', array($this, 'savePostdata')); + wp_update_post($updateArgs); + add_action('save_post_einsatz', array($this, 'savePostdata'), 10, 2); } // Einsatznummer setzen, sofern sie nicht automatisch verwaltet wird if (!$this->options->isAutoIncidentNumbers()) { - $inputIncidentNumber = sanitize_text_field($_POST['einsatzverwaltung_nummer']); - if (!empty($inputIncidentNumber)) { - $this->setEinsatznummer($postId, $inputIncidentNumber); - } - } - - // Einsatzende validieren - $inputEinsatzende = sanitize_text_field($_POST['einsatzverwaltung_einsatzende']); - if (!empty($inputEinsatzende)) { - $einsatzende = date_create($inputEinsatzende); - } - if (empty($einsatzende)) { - $einsatzende = ""; - } else { - $einsatzende = date_format($einsatzende, 'Y-m-d H:i'); + $this->setEinsatznummer( + $postId, + filter_input(INPUT_POST, 'einsatzverwaltung_nummer', FILTER_SANITIZE_STRING) + ); } - // Einsatzort validieren - $einsatzort = sanitize_text_field($_POST['einsatzverwaltung_einsatzort']); - - // Einsatzleiter validieren - $einsatzleiter = sanitize_text_field($_POST['einsatzverwaltung_einsatzleiter']); - - // Mannschaftsstärke validieren - $mannschaftsstaerke = sanitize_text_field($_POST['einsatzverwaltung_mannschaft']); - - // Vermerke validieren - $fehlalarm = $this->utilities->sanitizeCheckbox(array($_POST, 'einsatzverwaltung_fehlalarm')); - $hasImages = $this->utilities->sanitizeCheckbox(array($_POST, 'einsatzverwaltung_hasimages')); - $isSpecial = $this->utilities->sanitizeCheckbox(array($_POST, 'einsatzverwaltung_special')); - - // Metadaten schreiben - update_post_meta($postId, 'einsatz_einsatzende', $einsatzende); - update_post_meta($postId, 'einsatz_einsatzort', $einsatzort); - update_post_meta($postId, 'einsatz_einsatzleiter', $einsatzleiter); - update_post_meta($postId, 'einsatz_mannschaft', $mannschaftsstaerke); - update_post_meta($postId, 'einsatz_fehlalarm', $fehlalarm); - update_post_meta($postId, 'einsatz_hasimages', $hasImages); - update_post_meta($postId, 'einsatz_special', $isSpecial); - - if (!empty($updateArgs)) { - $updateArgs['ID'] = $postId; - - // save_post Filter kurzzeitig deaktivieren, damit keine Dauerschleife entsteht - remove_action('save_post_einsatz', array($this, 'savePostdata')); - wp_update_post($updateArgs); - add_action('save_post_einsatz', array($this, 'savePostdata'), 10, 2); + // Vermerke explizit deaktivieren, wenn sie nicht gesetzt wurden + $annotations = array('einsatz_fehlalarm', 'einsatz_hasimages', 'einsatz_special'); + foreach ($annotations as $annotation) { + if (!array_key_exists($annotation, $_POST['meta_input'])) { + update_post_meta($postId, $annotation, '0'); + } } } @@ -435,4 +402,24 @@ public function updateAllIncidentNumbers() } } } + + /** + * @param string $value + * @return string + */ + public function sanitizeTimeOfEnding($value) + { + $sanitizedValue = sanitize_text_field($value); + if (!empty($sanitizedValue)) { + $dateTime = date_create($sanitizedValue); + } + + if (empty($dateTime)) { + return ""; + } + + $formattedDateTime = date_format($dateTime, 'Y-m-d H:i'); + + return ($formattedDateTime === false ? '' : $formattedDateTime); + } } diff --git a/src/js/einsatzverwaltung-edit.js b/src/js/einsatzverwaltung-edit.js index eba2cc62..aa4c1fe7 100644 --- a/src/js/einsatzverwaltung-edit.js +++ b/src/js/einsatzverwaltung-edit.js @@ -3,15 +3,15 @@ jQuery(document).ready(function() { var hinweistext = 'Bitte das folgende Format einhalten: JJJJ-MM-TT hh:mm, z.B. 2014-01-31 13:37'; jQuery('#einsatzverwaltung_alarmzeit').after(' '); - jQuery('#einsatzverwaltung_einsatzende').after(' '); + jQuery('#meta_input\\[einsatz_einsatzende\\]').after(' '); einsatzverwaltung_register_and_execute('keyup', 'einsatzverwaltung_alarmzeit', datumsregex, hinweistext, false); - einsatzverwaltung_register_and_execute('keyup', 'einsatzverwaltung_einsatzende', datumsregex, hinweistext, true); + einsatzverwaltung_register_and_execute('keyup', 'meta_input\\[einsatz_einsatzende\\]', datumsregex, hinweistext, true); var used_values = jQuery("#einsatzleiter_used_values"); if (used_values.val() != undefined) { var einsatzleiter_namen = used_values.val().split(','); - jQuery("#einsatzverwaltung_einsatzleiter").autocomplete({ + jQuery("#meta_input\\[einsatz_einsatzleiter\\]").autocomplete({ source: einsatzleiter_namen }); } diff --git a/tests/Admin/ReportEditTest.php b/tests/Admin/ReportEditTest.php index c08f90b4..92b68d30 100644 --- a/tests/Admin/ReportEditTest.php +++ b/tests/Admin/ReportEditTest.php @@ -48,10 +48,12 @@ public function testTimeOfAlertingSurvivesDraftState() 'einsatzverwaltung_nonce' => wp_create_nonce('save_einsatz_details'), 'einsatzverwaltung_nummer' => '', 'einsatzverwaltung_alarmzeit' => $timeOfAlerting, - 'einsatzverwaltung_einsatzende' => '', - 'einsatzverwaltung_einsatzort' => '', - 'einsatzverwaltung_einsatzleiter' => '', - 'einsatzverwaltung_mannschaft' => '', + 'meta_input' => array( + 'einsatz_einsatzende' => '', + 'einsatz_einsatzort' => '', + 'einsatz_einsatzleiter' => '', + 'einsatz_mannschaft' => '' + ) ); wp_update_post(array( 'ID' => $post->ID, @@ -97,10 +99,12 @@ public function testTimeOfAlertingSurvivesReviewAndPublish() 'einsatzverwaltung_nonce' => wp_create_nonce('save_einsatz_details'), 'einsatzverwaltung_nummer' => '', 'einsatzverwaltung_alarmzeit' => $timeOfAlerting, - 'einsatzverwaltung_einsatzende' => '', - 'einsatzverwaltung_einsatzort' => '', - 'einsatzverwaltung_einsatzleiter' => '', - 'einsatzverwaltung_mannschaft' => '', + 'meta_input' => array( + 'einsatz_einsatzende' => '', + 'einsatz_einsatzort' => '', + 'einsatz_einsatzleiter' => '', + 'einsatz_mannschaft' => '' + ) ); wp_update_post(array( 'ID' => $post->ID, @@ -121,10 +125,12 @@ public function testTimeOfAlertingSurvivesReviewAndPublish() 'einsatzverwaltung_nonce' => wp_create_nonce('save_einsatz_details'), 'einsatzverwaltung_nummer' => '', 'einsatzverwaltung_alarmzeit' => $pendingReport->getTimeOfAlerting()->format('Y-m-d H:i:s'), - 'einsatzverwaltung_einsatzende' => '', - 'einsatzverwaltung_einsatzort' => '', - 'einsatzverwaltung_einsatzleiter' => '', - 'einsatzverwaltung_mannschaft' => '', + 'meta_input' => array( + 'einsatz_einsatzende' => '', + 'einsatz_einsatzort' => '', + 'einsatz_einsatzleiter' => '', + 'einsatz_mannschaft' => '' + ) ); wp_update_post(array( 'ID' => $post->ID, From 6ecf4495c36be35ec007e7d2ec08cfce3ef63ab2 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 15 Jan 2018 00:31:53 +0100 Subject: [PATCH 024/126] Einstellung "Einsatznummern automatisch verwalten" konnte nicht gespeichert werden --- src/einsatzverwaltung-settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 0a3e600e..6a06627b 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -108,7 +108,7 @@ public function registerSettings() 'sanitize_title' ); register_setting( - 'einsatzvw_settings_general', + 'einsatzvw_settings_numbers', 'einsatzverwaltung_incidentnumbers_auto', array($this->utilities, 'sanitizeCheckbox') ); From c6079c9c3423418c7e1ce2213e6657c680cdc5e5 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 15 Jan 2018 00:40:08 +0100 Subject: [PATCH 025/126] Cleanup --- src/js/einsatzverwaltung-edit.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/js/einsatzverwaltung-edit.js b/src/js/einsatzverwaltung-edit.js index aa4c1fe7..01d80c25 100644 --- a/src/js/einsatzverwaltung-edit.js +++ b/src/js/einsatzverwaltung-edit.js @@ -9,7 +9,7 @@ jQuery(document).ready(function() { einsatzverwaltung_register_and_execute('keyup', 'meta_input\\[einsatz_einsatzende\\]', datumsregex, hinweistext, true); var used_values = jQuery("#einsatzleiter_used_values"); - if (used_values.val() != undefined) { + if (used_values.val() !== undefined) { var einsatzleiter_namen = used_values.val().split(','); jQuery("#meta_input\\[einsatz_einsatzleiter\\]").autocomplete({ source: einsatzleiter_namen @@ -20,13 +20,9 @@ jQuery(document).ready(function() { function einsatzverwaltung_checkField(id, regex, msg, allowEmpty) { var field = jQuery('#' + id); - if(field.length != 0) { + if(field.length !== 0) { var val = field.val(); - if((allowEmpty && val == "") || val.match(regex)) { - jQuery('#' + id + '_hint').html(""); - } else { - jQuery('#' + id + '_hint').html(msg); - } + jQuery('#' + id + '_hint').html(((allowEmpty && val === "") || val.match(regex)) ? '' : msg); } } From f611753a445fdf89dc1ade6c12b8a49abc044517 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 20 Jan 2018 23:50:10 +0100 Subject: [PATCH 026/126] =?UTF-8?q?Die=20ben=C3=B6tigte=20PHP-Version=20wi?= =?UTF-8?q?rd=20nun=20automatisch=20abgepr=C3=BCft?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 3 ++- src/readme.txt | 2 +- tests/SmokeTest.php | 28 ++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 tests/SmokeTest.php diff --git a/composer.json b/composer.json index da47d709..2063c915 100644 --- a/composer.json +++ b/composer.json @@ -21,6 +21,7 @@ }, "require-dev": { "codeclimate/php-test-reporter": "dev-master", - "phpunit/phpunit": "5.7.*" + "phpunit/phpunit": "5.7.*", + "bartlett/php-compatinfo": "^5.0" } } \ No newline at end of file diff --git a/src/readme.txt b/src/readme.txt index dd195059..966dbe27 100644 --- a/src/readme.txt +++ b/src/readme.txt @@ -4,7 +4,7 @@ Donate link: https://einsatzverwaltung.abrain.de/unterstuetzen/ Tags: Feuerwehr, Hilfsorganisation, Öffentlichkeitsarbeit Requires at least: 4.6.0 Tested up to: 4.9 -Requires PHP: 5.3 +Requires PHP: 5.3.0 Stable tag: 1.3.3 License: GPLv2 License URI: http://www.gnu.org/licenses/gpl-2.0.html diff --git a/tests/SmokeTest.php b/tests/SmokeTest.php new file mode 100644 index 00000000..a3d26934 --- /dev/null +++ b/tests/SmokeTest.php @@ -0,0 +1,28 @@ + 'Requires PHP')); + $phpHeader = $fileData['PHPmin']; + + $lastLine = exec('phpcompatinfo --no-ansi analyser:run src/'); + $this->assertEquals(1, preg_match('/Requires PHP (\d\.\d\.\d) \(min\)/', $lastLine, $matches)); + $actualRequirement = $matches[1]; + + $this->assertTrue( + version_compare($actualRequirement, $phpHeader, '='), + "Der Header 'Requires PHP' ($phpHeader) spiegelt nicht die tatsächliche Mindestanforderung ($actualRequirement) wider." + ); + } +} From ac434e011da9436e0e38f4d0b77f733ddaa5688a Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 21 Jan 2018 00:19:26 +0100 Subject: [PATCH 027/126] Teste gegen die neuesten Patches --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6494e54f..7dc497f2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,10 @@ php: - '7.1' env: - - WP_VERSION=4.6.9 WP_MULTISITE=0 - - WP_VERSION=4.7.8 WP_MULTISITE=0 - - WP_VERSION=4.8.4 WP_MULTISITE=0 - - WP_VERSION=4.9.1 WP_MULTISITE=0 + - WP_VERSION=4.6.10 WP_MULTISITE=0 + - WP_VERSION=4.7.9 WP_MULTISITE=0 + - WP_VERSION=4.8.5 WP_MULTISITE=0 + - WP_VERSION=4.9.2 WP_MULTISITE=0 - WP_VERSION=nightly WP_MULTISITE=0 matrix: From f74defce8dd26ab069f3e2fd2d4ed01d55ec88d4 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 21 Jan 2018 00:19:44 +0100 Subject: [PATCH 028/126] =?UTF-8?q?Erkennung=20f=C3=BCr=20Travis=20CI=20ei?= =?UTF-8?q?ngebaut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/SmokeTest.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/SmokeTest.php b/tests/SmokeTest.php index a3d26934..e3d91868 100644 --- a/tests/SmokeTest.php +++ b/tests/SmokeTest.php @@ -16,7 +16,10 @@ public function testPhpCompatibility() $fileData = get_file_data($file, array('PHPmin' => 'Requires PHP')); $phpHeader = $fileData['PHPmin']; - $lastLine = exec('phpcompatinfo --no-ansi analyser:run src/'); + $buildDir = getenv('TRAVIS_BUILD_DIR'); + $prefix = $buildDir === false ? '' : '$TRAVIS_BUILD_DIR/vendor/bin/'; + + $lastLine = exec($prefix . 'phpcompatinfo --no-ansi analyser:run src/'); $this->assertEquals(1, preg_match('/Requires PHP (\d\.\d\.\d) \(min\)/', $lastLine, $matches)); $actualRequirement = $matches[1]; From ebc2f740db142f9619732fd43d0e64d6bc8489b0 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 19:49:24 +0100 Subject: [PATCH 029/126] =?UTF-8?q?inclusive=20darf=20nicht=20true=20sein,?= =?UTF-8?q?=20da=20sonst=20Eins=C3=A4tze=20vom=201.=20des=20Folgemonats=20?= =?UTF-8?q?um=2000:00=20Uhr=20dann=20auch=20im=20Export=20w=C3=A4ren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Formats/AbstractFormat.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Export/Formats/AbstractFormat.php b/src/Export/Formats/AbstractFormat.php index 49103ee9..db1d8416 100644 --- a/src/Export/Formats/AbstractFormat.php +++ b/src/Export/Formats/AbstractFormat.php @@ -43,7 +43,7 @@ protected function getQuery() // Exportiere nur die Einsatzberichte, welche nicht vor $startDate und/oder // nach $endDate liegen if ($this->startDate || $this->endDate) { - $args['date_query'] = array('inclusive' => true); + $args['date_query'] = array(); if ($this->startDate) { $args['date_query']['after'] = date('Y-m-d', strtotime($this->startDate)); From eece3ff16d84c9cda727ea1ce0e987f57f560411 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 20:17:57 +0100 Subject: [PATCH 030/126] Nehme empty() anstelle von ! --- src/Export/Formats/Csv.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index 2a184597..fbe7296b 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -134,7 +134,7 @@ public function export() $report = new IncidentReport($post); $duration = Data::getDauer($report); - if (!$duration) { + if (empty($duration)) { $duration = 0; } From 006ce7e051c7ac6d6949eb0c1715845b3a8bda18 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 20:20:53 +0100 Subject: [PATCH 031/126] Nehme auch bei JSON empty() anstelle von ! --- src/Export/Formats/Json.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index eb452d16..43b6f560 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -83,7 +83,7 @@ public function export() $duration = Data::getDauer($report); // $duration soll stets eine Zahl sein - if (!$duration) { + if (empty($duration)) { $duration = 0; } From 9e55c8a6396da94433cc39a1875ba906cf7a2ed5 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 20:22:17 +0100 Subject: [PATCH 032/126] Nehme auch hier empty() anstelle von ! --- src/Export/Formats/Csv.php | 2 +- src/Export/Formats/Json.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index fbe7296b..a9ae7975 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -139,7 +139,7 @@ public function export() } $typeOfIncident = $report->getTypeOfIncident(); - if (!$typeOfIncident) { + if (empty($typeOfIncident)) { $typeOfIncident = ''; } diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index 43b6f560..2b395c8b 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -89,7 +89,7 @@ public function export() $typeOfIncident = $report->getTypeOfIncident(); // $typeOfIncident soll stets ein String sein - if (!$typeOfIncident) { + if (empty($typeOfIncident)) { $typeOfIncident = ''; } From 2f9c47346aad59dc2a6ab75152eb3d51b2e91e1d Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 20:32:00 +0100 Subject: [PATCH 033/126] =?UTF-8?q?Code=20f=C3=BCr=20prettyPrint=20entfern?= =?UTF-8?q?t,=20da=20dieser=20PHP=205.4=20voraussetzt=20aber=20das=20Plugi?= =?UTF-8?q?n=20aktuell=20auch=20unter=20<5.4=20laufen=20soll.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Formats/Json.php | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index 2b395c8b..78dc54e2 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -12,7 +12,7 @@ class Json extends AbstractFormat /** * @var boolean */ - protected $prettyPrint; + // protected $prettyPrint; /** * @inheritDoc @@ -27,14 +27,14 @@ public function getTitle() */ public function renderOptions() { - ?> + /* ?>
  • -prettyPrint = (boolean)@$options['prettyPrint']; + // $this->prettyPrint = (boolean)@$options['prettyPrint']; } /** @@ -65,15 +65,15 @@ public function setOptions(array $options) public function export() { $options = 0; - // verwende ggf. menschenlesbares Format für die Ausgabe - if ($this->prettyPrint) { - $options = JSON_PRETTY_PRINT; - } + // // verwende ggf. menschenlesbares Format für die Ausgabe + // if ($this->prettyPrint) { + // $options = JSON_PRETTY_PRINT; + // } echo '['; - if ($this->prettyPrint) { - echo "\n"; - } + // if ($this->prettyPrint) { + // echo "\n"; + // } $query = $this->getQuery(); while ($query->have_posts()) { @@ -120,11 +120,11 @@ public function export() $output .= ','; } - // rücke die JSON-Ausgabe des Einsatzberichtes ein, falls die Ausgabe - // menschenlesbar formatiert werden soll - if ($this->prettyPrint) { - $output = preg_replace("/^(.*)$/m", " $1", $output) . "\n"; - } + // // rücke die JSON-Ausgabe des Einsatzberichtes ein, falls die Ausgabe + // // menschenlesbar formatiert werden soll + // if ($this->prettyPrint) { + // $output = preg_replace("/^(.*)$/m", " $1", $output) . "\n"; + // } echo $output; } From 19932a94c996a452080cc83a9723b868b82dc845 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 20:34:48 +0100 Subject: [PATCH 034/126] =?UTF-8?q?Erkl=C3=A4rung=20f=C3=BCr=20die=20Deakt?= =?UTF-8?q?ivierung=20von=20prettyPrint=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Formats/Json.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index 78dc54e2..90324d01 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -6,6 +6,9 @@ /** * Exportiert Einsatzberichte in eine JSON-Datei. + * + * Die prettyPrint-Funktion wurde erst einmal auskommentiert, da diese PHP >=5.4 + * voraussetzt, das Plugin jedoch auch unter PHP <5.4 laufen soll. */ class Json extends AbstractFormat { From 9ccd78931fe461bcdccfdd02a83eae22b3a31362 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 20:37:31 +0100 Subject: [PATCH 035/126] =?UTF-8?q?Konstruktor-Aufruf=20korrigiert=20und?= =?UTF-8?q?=20=C3=BCberfl=C3=BCssige=20PHPDoc=20entfernt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Tool.php | 4 ---- src/einsatzverwaltung-core.php | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index b5500d75..182472f3 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -22,10 +22,6 @@ class Tool /** * Konstruktor - * - * @param Core $core - * @param Utilities $utilities - * @param Options $options */ public function __construct() { diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 5addeb95..f1c9028b 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -315,7 +315,7 @@ private function __construct() // Tools $this->importTool = new ImportTool($this->utilities, $this->options, $this->data); - $this->exportTool = new ExportTool($this, $this->utilities, $this->options); + $this->exportTool = new ExportTool(); $this->tasksPage = new TasksPage($this->utilities, $this->data); // Widgets From c283825b516997f696e0344655c935470340dcbd Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 20:58:56 +0100 Subject: [PATCH 036/126] =?UTF-8?q?Benutzer=20muss=20f=C3=BCr=20den=20Expo?= =?UTF-8?q?rt=20die=20=E2=80=9Cexport=E2=80=9D-Capability=20haben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Tool.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index 182472f3..9fb19c07 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -33,10 +33,7 @@ private function addHooks() { add_action('admin_menu', array($this, 'addToolToMenu')); - // stelle sicher, dass der Benutzer über ausreichend Berechtigungen verfügt - if (is_admin()) { - add_action('init', array($this, 'startExport')); - } + add_action('init', array($this, 'startExport')); } /** @@ -47,7 +44,7 @@ public function addToolToMenu() add_management_page( 'Einsatzberichte exportieren', 'Einsatzberichte exportieren', - 'manage_options', + 'export', self::EVW_TOOL_EXPORT_SLUG, array($this, 'renderToolPage') ); @@ -58,7 +55,7 @@ public function addToolToMenu() */ public function startExport() { - if (@$_GET['page'] == self::EVW_TOOL_EXPORT_SLUG && + if (current_user_can('export') && @$_GET['page'] == self::EVW_TOOL_EXPORT_SLUG && @$_GET['download'] == true) { $format = @$this->formats[$_GET['format']]; From a355072cf78de7ed792803a4a07854f9901e420f Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 21:13:45 +0100 Subject: [PATCH 037/126] Die escapeChar-Funktion wurde erst einmal auskommentiert, da diese PHP >=5.5.4 voraussetzt, das Plugin jedoch auch unter PHP <5.4 laufen soll. --- src/Export/Formats/Csv.php | 21 ++++++++++++--------- src/Export/Formats/Excel.php | 5 ++++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index a9ae7975..c6ccb84d 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -6,6 +6,9 @@ /** * Exportiert Einsatzberichte in eine CSV-Datei. + * + * Die escapeChar-Funktion wurde erst einmal auskommentiert, da diese PHP >=5.5.4 + * voraussetzt, das Plugin jedoch auch unter PHP <5.4 laufen soll. */ class Csv extends AbstractFormat { @@ -22,7 +25,7 @@ class Csv extends AbstractFormat /** * @var string */ - protected $escapeChar; + // protected $escapeChar; /** * @var boolean @@ -55,12 +58,12 @@ public function renderOptions() -
  • +
  • @@ -81,10 +84,10 @@ public function setOptions(array $options) if (empty($this->enclosure)) { $this->enclosure = '"'; } - $this->escapeChar = @$options['escapeChar']; - if (empty($this->escapeChar)) { - $this->escapeChar = '\\'; - } + // $this->escapeChar = @$options['escapeChar']; + // if (empty($this->escapeChar)) { + // $this->escapeChar = '\\'; + // } $this->headers = (boolean)@$options['headers']; } @@ -125,7 +128,7 @@ public function export() 'Besonderer Einsatz', 'Fehlalarm' ); - fputcsv($handle, $data, $this->delimiter, $this->enclosure, $this->escapeChar); + fputcsv($handle, $data, $this->delimiter, $this->enclosure/*, $this->escapeChar*/); } $query = $this->getQuery(); @@ -160,7 +163,7 @@ public function export() ($report->isSpecial() ? 'Ja' : 'Nein'), ($report->isFalseAlarm() ? 'Ja' : 'Nein'), ); - fputcsv($handle, $data, $this->delimiter, $this->enclosure, $this->escapeChar); + fputcsv($handle, $data, $this->delimiter, $this->enclosure/*, $this->escapeChar*/); } fclose($handle); diff --git a/src/Export/Formats/Excel.php b/src/Export/Formats/Excel.php index 4ae8685c..1b8d4081 100644 --- a/src/Export/Formats/Excel.php +++ b/src/Export/Formats/Excel.php @@ -3,6 +3,9 @@ /** * Exportiert Einsatzberichte in eine für Excel formatierte CSV-Datei. + * + * Die escapeChar-Funktion wurde erst einmal auskommentiert, da diese PHP >=5.5.4 + * voraussetzt, das Plugin jedoch auch unter PHP <5.4 laufen soll. */ class Excel extends Csv { @@ -34,7 +37,7 @@ public function setOptions(array $options) { $this->delimiter = ';'; $this->enclosure = '"'; - $this->escape_char = '\\'; + // $this->escapeChar = '\\'; $this->header = (boolean)@$options['columns']; } } From 62d102058a4751cc82c89235b8f4da9052ae60a0 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Mon, 5 Mar 2018 21:27:50 +0100 Subject: [PATCH 038/126] =?UTF-8?q?Problem=20mit=20dem=20automatischen=20e?= =?UTF-8?q?scapen=20von=20=E2=80=9C=20gel=C3=B6st?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Tool.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index 9fb19c07..d198e3fb 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -62,7 +62,7 @@ public function startExport() if ($format) { $startDate = @$_GET['export_filters']['start_date']; $endDate = @$_GET['export_filters']['end_date']; - $exportOptions = (array)@$_GET['export_options'][$_GET['format']]; + $exportOptions = stripslashes_deep((array)@$_GET['export_options'][$_GET['format']]); $format->setFilters($startDate, $endDate); $format->setOptions($exportOptions); From dc4d74cdb988600a39fd70cd8f465d271cc206ae Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 8 Apr 2018 15:31:45 +0200 Subject: [PATCH 039/126] =?UTF-8?q?Links=20f=C3=BCr=20Social=20Media=20akt?= =?UTF-8?q?ualisiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/readme.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 10d65263..26e8f015 100644 --- a/README.md +++ b/README.md @@ -30,5 +30,5 @@ Auch wenn PHP 5.3 vorausgesetzt und derzeit noch als Minimum erhalten wird, werd ### Social Media * Twitter: [@einsatzvw](https://twitter.com/einsatzvw) +* Mastodon: [@einsatzverwaltung](https://chaos.social/@einsatzverwaltung) * Facebook: [Einsatzverwaltung](https://www.facebook.com/einsatzverwaltung/) -* GNU social: [@einsatzverwaltung](https://gnusocial.abrain.de/einsatzverwaltung) diff --git a/src/readme.txt b/src/readme.txt index 36cf1f87..748c3414 100644 --- a/src/readme.txt +++ b/src/readme.txt @@ -106,5 +106,5 @@ Nein, mehr gibt es [hier](https://einsatzverwaltung.abrain.de/faq/). == Social Media == * Twitter: [@einsatzvw](https://twitter.com/einsatzvw) +* Mastodon: [@einsatzverwaltung](https://chaos.social/@einsatzverwaltung) * Facebook: [Einsatzverwaltung](https://www.facebook.com/einsatzverwaltung/) -* GNU social: [@einsatzverwaltung](https://gnusocial.abrain.de/einsatzverwaltung) From 8571b09068dc0ce21e70ed388bdb16ef50061240 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 8 Apr 2018 17:42:10 +0200 Subject: [PATCH 040/126] =?UTF-8?q?Links=20f=C3=BCr=20Social=20Media=20akt?= =?UTF-8?q?ualisiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-settings.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 6a06627b..275f7c2a 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -751,8 +751,9 @@ public function echoSettingsPage()

    Social Media

    Du kannst die Neuigkeiten auch mit deinem Feedreader abonnieren: RSS / Atom

    Date: Sun, 8 Apr 2018 17:42:28 +0200 Subject: [PATCH 041/126] Kleine Style-Anpassung --- src/css/style-admin.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/css/style-admin.css b/src/css/style-admin.css index 655b6b55..4dcf71b4 100644 --- a/src/css/style-admin.css +++ b/src/css/style-admin.css @@ -99,8 +99,8 @@ li.dropzone { } .aboutpage-icon { - width: 24%; display: inline-block; + padding: 10px; } .aboutpage-icon a { From 2e65c7ae6467e84a2de9632878d342c4801584e4 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 8 Apr 2018 18:35:42 +0200 Subject: [PATCH 042/126] Font Awesome auf Version 4.7 aktualisiert --- src/einsatzverwaltung-admin.php | 2 +- src/einsatzverwaltung-frontend.php | 2 +- src/font-awesome | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/einsatzverwaltung-admin.php b/src/einsatzverwaltung-admin.php index 6b62bb52..d4de107c 100644 --- a/src/einsatzverwaltung-admin.php +++ b/src/einsatzverwaltung-admin.php @@ -130,7 +130,7 @@ public function enqueueEditScripts($hook) 'font-awesome', $this->core->pluginUrl . 'font-awesome/css/font-awesome.min.css', false, - '4.4.0' + '4.7.0' ); wp_enqueue_style( 'einsatzverwaltung-admin', diff --git a/src/einsatzverwaltung-frontend.php b/src/einsatzverwaltung-frontend.php index 7277b74e..d84dd363 100644 --- a/src/einsatzverwaltung-frontend.php +++ b/src/einsatzverwaltung-frontend.php @@ -67,7 +67,7 @@ public function enqueueStyleAndScripts() 'font-awesome', $this->core->pluginUrl . 'font-awesome/css/font-awesome.min.css', false, - '4.4.0' + '4.7.0' ); wp_enqueue_style( 'einsatzverwaltung-frontend', diff --git a/src/font-awesome b/src/font-awesome index e554555d..a8386aae 160000 --- a/src/font-awesome +++ b/src/font-awesome @@ -1 +1 @@ -Subproject commit e554555d73a44e0a7d11b0361ad7a5325a5f551c +Subproject commit a8386aae19e200ddb0f6845b5feeee5eb7013687 From ba19e692de98528e571d4fc5c2b7c2d9ae1a7d4e Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 8 Apr 2018 19:58:30 +0200 Subject: [PATCH 043/126] =?UTF-8?q?In=20den=20Einstellungen=20werden=20jet?= =?UTF-8?q?zt=20sch=C3=B6nere=20Colorpicker=20verwendet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-admin.php | 3 ++- src/einsatzverwaltung-settings.php | 21 +++++++++++++++++++-- src/js/einsatzverwaltung-settings.js | 5 +++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/einsatzverwaltung-admin.php b/src/einsatzverwaltung-admin.php index d4de107c..131e11bb 100644 --- a/src/einsatzverwaltung-admin.php +++ b/src/einsatzverwaltung-admin.php @@ -121,9 +121,10 @@ public function enqueueEditScripts($hook) wp_enqueue_script( 'einsatzverwaltung-settings-script', $this->core->scriptUrl . 'einsatzverwaltung-settings.js', - array('jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'iris'), + array('jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'wp-color-picker'), Core::VERSION ); + wp_enqueue_style('wp-color-picker'); } wp_enqueue_style( diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 275f7c2a..59e51886 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -373,6 +373,21 @@ private function addSettingsFields() ); } + /** + * Gibt den von WordPress mitgelieferten Colorpicker aus + * + * @param string $optionName Name der Einstellung + * @param string $defaultValue Der Standardwert, der im Colorpicker angeboten werden soll + */ + private function echoColorPicker($optionName, $defaultValue) + { + printf( + '', + esc_attr($optionName), + esc_attr(get_option($optionName, $defaultValue)), + esc_attr($defaultValue) + ); + } /** * Gibt eine Checkbox auf der Einstellungsseite aus @@ -631,7 +646,8 @@ public function echoEinsatzlisteColumnSettings() public function echoEinsatzlisteAnnotationsSettings() { - echo '

    Farbe für inaktive Vermerke:

    '; + echo '

    Farbe für inaktive Vermerke:

    '; + $this->echoColorPicker('einsatzvw_list_annotations_color_off', AnnotationIconBar::DEFAULT_COLOR_OFF); echo '

    Diese Farbe wird für die Symbole von inaktiven Vermerken verwendet, die von aktiven werden in der Textfarbe Deines Themes dargestellt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; } @@ -644,7 +660,8 @@ public function echoEinsatzlisteZebraSettings() ); echo '

    Die Zeilen der Tabelle werden abwechselnd eingefärbt, um die Lesbarkeit zu verbessern. Wenn das Theme das ebenfalls tut, sollte diese Option deaktiviert werden, um Probleme bei der Darstellung zu vermeiden.

    '; - echo '

    Farbe für Zebrastreifen:

    '; + echo '

    Farbe für Zebrastreifen:

    '; + $this->echoColorPicker('einsatzvw_list_zebracolor', ReportListSettings::DEFAULT_ZEBRACOLOR); echo '

    Diese Farbe wird für jede zweite Zeile verwendet, die jeweils andere Zeile wird vom Theme eingefärbt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; echo '

  • ', + $this->key, + $this->label, + $this->description + ); + } + + /** + * @inheritdoc + */ + public function getEditTermMarkup($tag) + { + $value = $this->getValue($tag->term_id); + + return sprintf( + '

    %3$s

    ', + esc_attr($this->key), + esc_html($this->label), + esc_html($this->description), + esc_attr($value) + ); + } + +} \ No newline at end of file diff --git a/src/CustomFields/CustomField.php b/src/CustomFields/CustomField.php new file mode 100644 index 00000000..373309de --- /dev/null +++ b/src/CustomFields/CustomField.php @@ -0,0 +1,52 @@ +key = $key; + $this->label = $label; + $this->description = $description; + $this->defaultValue = $defaultValue; + } + + /** + * @return string + */ + public function getAddTermMarkup() + { + return 'NOT IMPLEMENTED'; + } + + /** + * @param object $tag + * @return string + */ + public function getEditTermMarkup($tag) + { + return 'NOT IMPLEMENTED'; + } + + /** + * @param int $termId + * @return mixed + */ + public function getValue($termId) + { + $termMeta = get_term_meta($termId, $this->key, true); + return (false === $termMeta ? $this->defaultValue : $termMeta); + } +} \ No newline at end of file diff --git a/src/CustomFields/TextInput.php b/src/CustomFields/TextInput.php new file mode 100644 index 00000000..877a43c9 --- /dev/null +++ b/src/CustomFields/TextInput.php @@ -0,0 +1,35 @@ +

    %3$s

    ', + $this->key, + $this->label, + $this->description + ); + } + + /** + * @inheritdoc + */ + public function getEditTermMarkup($tag) + { + $value = $this->getValue($tag->term_id); + + return sprintf( + '

    %3$s

    ', + esc_attr($this->key), + esc_html($this->label), + esc_html($this->description), + esc_attr($value) + ); + } + +} \ No newline at end of file diff --git a/src/TaxonomyCustomFields.php b/src/TaxonomyCustomFields.php new file mode 100644 index 00000000..04437468 --- /dev/null +++ b/src/TaxonomyCustomFields.php @@ -0,0 +1,120 @@ +fields = array(); + + add_action('edited_term', array($this, 'saveTerm'), 10, 3); + add_action('created_term', array($this, 'saveTerm'), 10, 3); + } + + /** + * @param string $taxonomy The slug of the taxonomy. + * @param TextInput $textInput + */ + public function addTextInput($taxonomy, TextInput $textInput) + { + $this->add($taxonomy, $textInput); + } + + /** + * @param string $taxonomy The slug of the taxonomy. + * @param ColorPicker $colorPicker + */ + public function addColorpicker($taxonomy, ColorPicker $colorPicker) + { + $this->add($taxonomy, $colorPicker); + } + + /** + * @param string $taxonomy + * @param CustomField $customField + */ + private function add($taxonomy, CustomField $customField) + { + if (!array_key_exists($taxonomy, $this->fields)) { + $this->fields[$taxonomy] = array(); + add_action("{$taxonomy}_add_form_fields", array($this, 'onAddFormFields')); + add_action("{$taxonomy}_edit_form_fields", array($this, 'onEditFormFields'), 10, 2); + } + + $this->fields[$taxonomy][] = $customField; + } + + /** + * @param string $taxonomy The taxonomy slug. + */ + public function onAddFormFields($taxonomy) + { + if (!array_key_exists($taxonomy, $this->fields) || !is_array($this->fields[$taxonomy])) { + return; + } + + /** @var CustomField $field */ + foreach ($this->fields[$taxonomy] as $field) { + echo $field->getAddTermMarkup(); + } + } + + /** + * @param object $tag Current taxonomy term object. + * @param string $taxonomy Current taxonomy slug. + */ + public function onEditFormFields($tag, $taxonomy) + { + if (!array_key_exists($taxonomy, $this->fields) || !is_array($this->fields[$taxonomy])) { + return; + } + + /** @var CustomField $field */ + foreach ($this->fields[$taxonomy] as $field) { + echo $field->getEditTermMarkup($tag); + } + } + + /** + * Speichert zusätzliche Infos zu Terms als options ab + * + * @param int $termId Term ID + * @param int $ttId Term taxonomy ID + * @param string $taxonomy Taxonomy slug + */ + public function saveTerm($termId, $ttId, $taxonomy) + { + if (!array_key_exists($taxonomy, $this->fields) || !is_array($this->fields[$taxonomy])) { + return; + } + + /** @var CustomField $field */ + foreach ($this->fields[$taxonomy] as $field) { + $value = filter_input(INPUT_POST, $field->key, FILTER_SANITIZE_STRING); + + if (!empty($value)) { + update_term_meta($termId, $field->key, $value); + } + } + } +} diff --git a/src/einsatzverwaltung-admin.php b/src/einsatzverwaltung-admin.php index 131e11bb..61e01527 100644 --- a/src/einsatzverwaltung-admin.php +++ b/src/einsatzverwaltung-admin.php @@ -121,10 +121,9 @@ public function enqueueEditScripts($hook) wp_enqueue_script( 'einsatzverwaltung-settings-script', $this->core->scriptUrl . 'einsatzverwaltung-settings.js', - array('jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'wp-color-picker'), + array('jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable'), Core::VERSION ); - wp_enqueue_style('wp-color-picker'); } wp_enqueue_style( @@ -139,6 +138,13 @@ public function enqueueEditScripts($hook) array(), Core::VERSION ); + wp_enqueue_script( + 'einsatzverwaltung-admin-script', + $this->core->scriptUrl . 'einsatzverwaltung-admin.js', + array('wp-color-picker'), + Core::VERSION + ); + wp_enqueue_style('wp-color-picker'); } /** diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 54852772..1c5438df 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -15,12 +15,14 @@ require_once dirname(__FILE__) . '/einsatzverwaltung-shortcodes.php'; require_once dirname(__FILE__) . '/einsatzverwaltung-settings.php'; require_once dirname(__FILE__) . '/Import/Tool.php'; -require_once dirname(__FILE__) . '/einsatzverwaltung-taxonomies.php'; require_once dirname(__FILE__) . '/Frontend/ReportList.php'; require_once dirname(__FILE__) . '/Frontend/ReportListSettings.php'; require_once dirname(__FILE__) . '/ReportQuery.php'; require_once dirname(__FILE__) . '/TasksPage.php'; +require_once dirname(__FILE__) . '/TaxonomyCustomFields.php'; +use abrain\Einsatzverwaltung\CustomFields\ColorPicker; +use abrain\Einsatzverwaltung\CustomFields\TextInput; use abrain\Einsatzverwaltung\Import\Tool as ImportTool; use abrain\Einsatzverwaltung\Model\ReportAnnotation; use abrain\Einsatzverwaltung\Util\Formatter; @@ -304,7 +306,6 @@ private function __construct() $this->frontend = new Frontend($this, $this->options, $this->utilities, $formatter); $this->settings = new Settings($this, $this->options, $this->utilities, $this->data); $this->shortcodes = new Shortcodes($this->utilities, $this, $this->options, $formatter); - $this->taxonomies = new Taxonomies($this->utilities); // Tools $this->importTool = new ImportTool($this->utilities, $this->options, $this->data); @@ -478,6 +479,18 @@ private function registerTypes() 'Fehlalarm', 'Kein Fehlalarm' )); + + $taxonomyCustomFields = new TaxonomyCustomFields(); + $taxonomyCustomFields->addTextInput('exteinsatzmittel', new TextInput( + 'url', + 'URL', + 'URL zu mehr Informationen über ein externes Einsatzmittel, beispielsweise dessen Webseite.' + )); + $taxonomyCustomFields->addColorpicker('einsatzart', new ColorPicker( + 'color', + 'Farbe', + 'Beschreibung' + )); } private function addRewriteRules() @@ -683,14 +696,6 @@ public function getShortcodes() return $this->shortcodes; } - /** - * @return Taxonomies - */ - public function getTaxonomies() - { - return $this->taxonomies; - } - /** * @return ImportTool */ diff --git a/src/js/einsatzverwaltung-admin.js b/src/js/einsatzverwaltung-admin.js new file mode 100644 index 00000000..6da04869 --- /dev/null +++ b/src/js/einsatzverwaltung-admin.js @@ -0,0 +1,6 @@ +jQuery(document).ready(function() { + // Color picker initialisieren + if ( jQuery.isFunction( jQuery.fn.wpColorPicker ) ) { + jQuery( 'input.einsatzverwaltung-color-picker' ).wpColorPicker(); + } +}); diff --git a/src/js/einsatzverwaltung-settings.js b/src/js/einsatzverwaltung-settings.js index 60995c7d..825c220a 100644 --- a/src/js/einsatzverwaltung-settings.js +++ b/src/js/einsatzverwaltung-settings.js @@ -20,9 +20,4 @@ jQuery(document).ready(function() { jQuery("#einsatzvw_list_columns").val($columnsEnabled.sortable('toArray')); } }); - - // Color picker initialisieren - if ( jQuery.isFunction( jQuery.fn.wpColorPicker ) ) { - jQuery( 'input.einsatzverwaltung-color-picker' ).wpColorPicker(); - } }); From 13ec9e5109cda7781c8b81d7374451fae5e1e705 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Tue, 10 Apr 2018 23:32:20 +0200 Subject: [PATCH 047/126] Teste gegen die neuesten Patches --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7dc497f2..d9cc540c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,10 @@ php: - '7.1' env: - - WP_VERSION=4.6.10 WP_MULTISITE=0 - - WP_VERSION=4.7.9 WP_MULTISITE=0 - - WP_VERSION=4.8.5 WP_MULTISITE=0 - - WP_VERSION=4.9.2 WP_MULTISITE=0 + - WP_VERSION=4.6.11 WP_MULTISITE=0 + - WP_VERSION=4.7.10 WP_MULTISITE=0 + - WP_VERSION=4.8.6 WP_MULTISITE=0 + - WP_VERSION=4.9.5 WP_MULTISITE=0 - WP_VERSION=nightly WP_MULTISITE=0 matrix: From be6af9cc626d0f46bdea769a37f577c73c2fcfa4 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Tue, 10 Apr 2018 23:32:47 +0200 Subject: [PATCH 048/126] Teste auch gegen PHP 7.2 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d9cc540c..930a1a67 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ php: - '5.6' - '7.0' - '7.1' + - '7.2' env: - WP_VERSION=4.6.11 WP_MULTISITE=0 From 5a947b22692e7e394da89e9e7a4f5bb699f085bd Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Tue, 10 Apr 2018 23:43:25 +0200 Subject: [PATCH 049/126] Font Awesome auf Version 4.7 aktualisiert --- src/font-awesome/HELP-US-OUT.txt | 2 +- src/font-awesome/css/font-awesome.css | 329 +- src/font-awesome/css/font-awesome.css.map | 7 - src/font-awesome/css/font-awesome.min.css | 4 +- src/font-awesome/fonts/FontAwesome.otf | Bin 106260 -> 134808 bytes .../fonts/fontawesome-webfont.eot | Bin 68875 -> 165742 bytes .../fonts/fontawesome-webfont.svg | 3305 +++++++++++++---- .../fonts/fontawesome-webfont.ttf | Bin 138204 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 81284 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 64464 -> 77160 bytes src/font-awesome/less/font-awesome.less | 3 +- src/font-awesome/less/icons.less | 114 +- src/font-awesome/less/mixins.less | 38 +- src/font-awesome/less/path.less | 2 +- src/font-awesome/less/screen-reader.less | 5 + src/font-awesome/less/variables.less | 118 +- src/font-awesome/scss/_icons.scss | 114 +- src/font-awesome/scss/_mixins.scss | 38 +- src/font-awesome/scss/_screen-reader.scss | 5 + src/font-awesome/scss/_variables.scss | 118 +- src/font-awesome/scss/font-awesome.scss | 3 +- 21 files changed, 3534 insertions(+), 671 deletions(-) delete mode 100644 src/font-awesome/css/font-awesome.css.map create mode 100644 src/font-awesome/less/screen-reader.less create mode 100644 src/font-awesome/scss/_screen-reader.scss diff --git a/src/font-awesome/HELP-US-OUT.txt b/src/font-awesome/HELP-US-OUT.txt index cfd9d9f3..83d083dd 100644 --- a/src/font-awesome/HELP-US-OUT.txt +++ b/src/font-awesome/HELP-US-OUT.txt @@ -1,5 +1,5 @@ I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, -Fonticons (https://fonticons.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, +Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, comprehensive icon sets or copy and paste your own. Please. Check it out. diff --git a/src/font-awesome/css/font-awesome.css b/src/font-awesome/css/font-awesome.css index 880eb825..ee906a81 100644 --- a/src/font-awesome/css/font-awesome.css +++ b/src/font-awesome/css/font-awesome.css @@ -1,13 +1,13 @@ /*! - * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.4.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg'); + src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } @@ -118,31 +118,31 @@ } } .fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } .fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } .fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); @@ -1383,7 +1383,7 @@ .fa-digg:before { content: "\f1a6"; } -.fa-pied-piper:before { +.fa-pied-piper-pp:before { content: "\f1a7"; } .fa-pied-piper-alt:before { @@ -1509,6 +1509,7 @@ content: "\f1ce"; } .fa-ra:before, +.fa-resistance:before, .fa-rebel:before { content: "\f1d0"; } @@ -1831,6 +1832,7 @@ content: "\f23e"; } .fa-battery-4:before, +.fa-battery:before, .fa-battery-full:before { content: "\f240"; } @@ -2024,3 +2026,312 @@ .fa-fonticons:before { content: "\f280"; } +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/src/font-awesome/css/font-awesome.css.map b/src/font-awesome/css/font-awesome.css.map deleted file mode 100644 index 60763a86..00000000 --- a/src/font-awesome/css/font-awesome.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": "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", -"sources": ["../scss/_path.scss","../scss/_core.scss","../scss/_larger.scss","../scss/_fixed-width.scss","../scss/_list.scss","../scss/_variables.scss","../scss/_bordered-pulled.scss","../scss/_animated.scss","../scss/_rotated-flipped.scss","../scss/_mixins.scss","../scss/_stacked.scss","../scss/_icons.scss"], -"names": [], -"file": "font-awesome.css" -} diff --git a/src/font-awesome/css/font-awesome.min.css b/src/font-awesome/css/font-awesome.min.css index ee4e9782..540440ce 100644 --- a/src/font-awesome/css/font-awesome.min.css +++ b/src/font-awesome/css/font-awesome.min.css @@ -1,4 +1,4 @@ /*! - * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/src/font-awesome/fonts/FontAwesome.otf b/src/font-awesome/fonts/FontAwesome.otf index 681bdd4d4c8dddbaeb4d4f2a1f58c38cad92afe0..401ec0f36e4f73b8efa40bd6f604fe80d286db70 100644 GIT binary patch delta 76545 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
    Nc0{MvUBD?5EaO{HPBjF>`j>LUJx`tYb{};>V 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

    >fgd}qNJ3O)4 zna92jz5oC^ze%}j;g+N%qngkKbb-Qbt{4%cBMsu1&nvDNo4LQ~<(j|UT=_ixVkA*iSj}=rS{yB8E;!pVJee|f&mACTD&O{u`6Y0(1AL_#R||a3ig|57 zE6if5BZzpGx(q(T=k;t*&(Y$vdcwTm@3|%dAA=w-Tte&v@)?-{=&?UF;3)?ejw$#c z_)44*u1$k{C)mj0eggYEfCIy~cz}?-WC12IBZ*ckoc=$?-UP0Rz{ zO+dx7UX^-Ot!O=})Yb!AuX@!3#RC-q&qM?Tf(UG6Q4#S5QSrc|-d9^&Y-=sG)~dzU zqt&)*i_RvK(Eob^_T%UK{r!KhpONhD?9A-!WR7Q^=l#4V5#>~(lUdJMj*uvCQCR>W zK6SU9l{`ug!!v}Gj#BETH@S1tC!5|0cXlE9vK`#kCk)2_)LGW2&RP-|XMuG|x>jgoHjPo6n{|Pp z6c@K-)>L?9dw~M~xK;m}(w`HR*OKn7y~zw1KM)W$C3>JJ?cV%)AOOyotOlZ1D1u0( zJK9LT6D8N?wq2Oe=VCrGE>xy%7f+tM!^uJSO6VdPvmQN2pKoSnZZ>B@RK9}&6%(j5 zw5W%AgJ?M+tu1Q8+e9eLsROS5(%zzZR@67zUNjTcph_^rErFE*plPPyU^HGN`cWTD zSD5H1COTT#lYc~`8M_yaZmX-Ry@R-r^P<~o|MxX(A|aYk_^o5uBs^?7ql~!;32PUc z7ACAtNwB!3&0BaM(puWHrK|NI@5qI2)qL)ga|dpl9^N8b#eCCx@|k$^(}$*qH*vY% zl#k0>xV(LC>c~$lskyl@U%ttE9L`wqiioXsMVVVNi;A{n6xDBzkr6ii6KGkiI`EdY zo*GYiCxlWXj5M|Lbp#fP@RrdOy|NK{bQ@m*9m)8u?fSy+rINH0A!9HIEn1@srtk=6 zM`;EPL=q9+V3!8rzTk4kGYye1ZG5u*0P!Gy_IccZgZuzqs@U3{yDw?BHRD`T>uoJ? zK6G235a=-AE5x?J`3TLN~p1=V+i|03?x>u>)HO-;>>Of z0m3p!M`rKDYy$y27{g&_F?Cf&#wzo{g_CxUHKp#YK6$?$jpjGho@fKdG?#1u)<3r5^PYH6xuD|@6H6;}KjU|1OBy&5U{KbaWxWJqF|mFr&MA&z>{@1a z`JXF~LHEX)zTd~0J)6l{-nm)#{mwI$H-i~QA6Np1mW<>ro^l2)$LhfQ62x##gbdl8 z$vrQ7@6g0Y5};Zy+(R4{ z@AA@$UCp>bl5N*p)-EDg9$_+fRgv*9N3UY`X-tODtTGG&n+=_q4bw3jdUIz(KssyZ z%nS;mK|DwxBT>sQ<=;gV^!?t%J9^5IC!5$}A~HrjJk6I?;jwIFt0cW1OfxpSP)+zw%D2K8HGi6Rq%Y_x$QqiKqyLqAk1m; zOa+0lSBJnFLtrdAP^lIb%6bqKKKNois8UC&y*(%vSEaR(4|^$wCPys(L+4u>U=OkC zY{DM4@U1l3?WMH5!c416X?%qy3fMbRt+}E!06iOx&_=~pVEriE#3_v?@tU^U*jNpX zE{!FIl{y-|K!f5C99B|8Y%EGz8mkfZJksKE@fx^RL?AuDGulVUZ-ADttZ^M*VIx3Ex1e$IySF9qgyqJxyF#a=)uN!*b?R)=6^)`c*8JTz|G5` zj^h1l{_#Fkxq*ke;*H>>jphG+3La7yAs-RE`G3!k9t{#B>uTU}K#7@?YG!PE;FN;38+?Ki{E$;QJ(NMju)h=*Tf^}i|9VxMKnO> zgur0H3|(1@=B5}*p{&9f!T}&$djsP49^7$8@4=*m&fpl08d-$_;(lU41vGmg6?Cyx z7Yo8&Azr0yB~6W2bN3ppeNiLMXk%aKS`NBb8Ltkz*gr<>e{tAVpuuWJxsr^(y!CD8 zINr;!3*Fa8P(j{G69A z?2Uk>=OLuNc#KjIxFQ&hEL)nB2@sS5@hutm?Hy}}NDcEe6e`|kg7qpo2D4b1p;7TN zx4NRqc-B-Npqa4N7ybVOOhZoIOdPejfn%008>$-*l@O9jlgfg$WEl_4nq(_$`U*7= zFz!ZQ7p3iG1L}3-XN#!x89c84EE`~j_pgCm6|Z9&Qlh8x5K&iP{)QJ2ewuDx0WUg= zl%pL-V>ug*c^$vkG4zsX#ypC3gH}j_P=ym+1P|MTVJt)m$e38S;J}dOaOkUy!i?cS zPY{xZiV%*>h}Zy4%|Q(f5e6?7gwzsQ-~ru?6s4rcS5Zx zg(6Z>8yzXR$>u?98m|TcCXLskbK>sDPX$MqxbT!(Kja$K(SGnR{tJUbxM?OGz+KF7m>7vRD*u zCt0lt3xhq2b;5Eu?#j$@mlTM&*&DHo^44$J#w1ejvm2eyS2_|yE-}9R^fLVXdyLe7 z1#SKz)k}c~*P#qT03F6kL28T%{7VI3j~51`0Ky6s0R{N?@h={ZyLkLzJihMX7)%U6 zaBCO%Dz}tVAM>sX_lLv98VGdgA8jDHQlAjbIPO@8u7$7S0eQmHP&WRHL5$WMVE@sl z7`&g6odeUa;P6b842Qb3`S>MFd3=awF#0=GwPTF#FeQw1M$|B+spiUMhv+lADxd_c=|5pGO?$FlKGIfs^wiRppH{Xpk29P^&*lyjbl z;nJbv$xdd5n0Ul!MHcRI$cq2wtF$G(eiSjw+u7h5&AfP=1~!0V zJc5=+3uJVAtoz)Cs9KUT0p7lcGMfZUCq2m{SO7ybBS>eU=L3X` z!uBdrxJc&1+4wr`NkrW#Njw^Ajpg@lI$%0`Jmv$7a8c3mNo$swv*I*L9uTz-p!5T= zVjKXq&Pvh~xs9yLtx`~sTP1R1S!qx4PGPi>2K1mywd-MEs@hCe29qW&s%UtZcW2EY zvHYG*2WuaKM=Z)*YF=CW2-1L!jJ1nyNCwh@qXYd55_TlOIu#Y5EF@7v+##vv=&Rg* zsqL{yAGp%S9-9fm2F|`8N*AceFfIAAVREnVe*A47;CF`+fQyfLsHH}F zwSG8ZrmTJ>MKojige7zkOc>-I)4*+0elaGOr5-p4oTWFD-W%T9ImrCviN^J(@+UlS zy59;yPYj{$L)5f=(0ysx$AN=xW3={09?SRXUs(FC`Ozbdb?^R^113BI0976F5Rb;~ zPlAlZZ#?DiQnQJz1fhX+a!yVI$P*g_qdBSM;}$+}mjCACmMs{cLk2n{-wf(9CV63j z6hO)!Vby@nCG1xmQ1H!>0*<%ws}&z&*Ui~5-z@wpy?s1_>nSZe-a2Hzl(W{c4l*{- zGTMn8G`ACBrz(QxvVfOP9v=oUs^oW~RU^1l3?V;aWuX0$-XJ%GDk<_rsPzg)1}(vN zFKtEKpRqyg=~FTtL)jSj z7;jSU7*fK)&6^Ss%r(dgPi3)@1czySlklhB(GLZ9IVstKhrE;)PM#}XF7Q)4d^#TP zEoc}Xj>kR?XAdP?MzP}lqu72yKNv*bf|C89G~wj?0Zw12>PL`MoE)P4)tBrdZKTsD z-)xCd6e0-|Fj^@#$kA{zhhoA;S_zk25IIz^URTy&G&P-S+B!lc*C2S1uG;U9p1Ji9 z*2l^Gt7p1@Kfz49>V#`F8cR>C`!2mEO+D4jSlJQ^E8TL*Dz7pFG?@X*1RPE_oeHxS z^TIP4P9p0^XNEWdW88A_s+ODE-({8kz*2 z+~8pacN(U$iQI~YSLc%ZvKK7^C-Gz?>uRl8tvDdYA7mySEJ7wQDLnc=2QV|OgRxcd z5>~L=pv9^Cf(Mgp0XfWci|ptNX&X}2-|dW<$*Yr7$=7^-L55{1nMAvj?sU=y{o>5! zx$8R#eIcb zp;r`qH12I4ta8l2a{vXx=G_{lX4|&I_H7HAcnN&^OIc^auyANZ8jU{H-9Bb?6Cp-A zb*95av}1=0awMZnvhhq{yo_arwr=eT^;5jpZpH=xLls84c=)JSLJd?&uEJ7fTn-&y zEzr1bY1fALR6=j&b(3bR7pd3TK_Oi+L4((0`~sqpNGfhffs zD1+wsI{Vc22NVdJ2!s{rm}sm z#a_dP_lP%xP&sc&eEbS?+DgC%8Bcn?)q)|}z1zL}rQW(5=E;xwq)n@Kt=raQ>$F~Ha*5ZH8WN}2qsm@a520aT=(cqGDm4hK2VHgNdOGsYn9hXg0R$;tuzBubr-F0 z5uu0YpmJgB$Uc0S=mY`LB+>nc7S zfo6d+H>tJyl5ha$?oEw6U~zY9#fLW+mEKy)&7nR+X+IO>B)rV2Px`mP!DsMkU#ycqX7U7}+!7G%@*I$;D& z*L^fOBV)3K*x7Xy&DLeioN1qB0tt6arbZYdO}NzA97V=y_m^dqnW&@_?8q`(n{l|@ ze$YhMB8{}?QV@4o`s5PSWsVS?>aOIv)Xo$wy2{-Q%8zYK{7@E5+=XJ zyAR!{C*GI`Nl{(*g*n?nw90-s8atlhr}rTTfM9AXy4)mKtSM+MLe&ngBj&YNt>Xtz=;7TZftIV zrU09X1G^kxoCTFN16ai3cl3sI72TMOT7w_}ZxNv&liDP#Suif}+MNEqs`Ngf4H7GQ zri#`oGZM)>9_%SIc`A5|;!M6$D9(0Hx(0U=L~u1_G3Vi-KOs&CT~Qlp3QfMomxO3` z6fzahZm|{fCjl0A`kc8j)93Cg+qbK@3{XfjG#)5wIV=JO$lT=}dFkdCVLqg>RP)8W z_AbT}26hiuw6Sc?E~J|~J!aROvIlU8b32$H5G}ul^$jV94P*l^ZK#;b9gz6T&5ans zd`ajfqCa2t+39bH;VUKeVSv>Bve~z+a=-NMor_MjjHHA zM0c$3LbM5xRLZYx_9Y#7Df*idYtgz8_3!ZR9IL!)RO~t>iRQSIXqJWyasCDGA9n+q zwa9LXS^cJc;9Gio^vEUD-<(9lGikUzn1<-=88p0*hMPCihUcU0!C&{gw+2f|J88B| zna2D&lm;ZL&~Dkc_PYJ+t9twS^BduRSV+P%2-1@fT}yi=2~Q&7<|V{G`kXy@;J0tu zW7g{JG;5Q)0r)vsk$JA-khJrv&3c)1=FpHkLu`Getx@`&{mn}fj<3_ zCWMakTs1mjwDpvGod>fRd^JlH9!D}6$OisPdvmVL{1EZ!Nn zGp=CX`WXG87RgMh5=_+&n(|Q#^Rk%5^WyMto^^4|GW|y_Xo`cXF>ce8C0?VB*c8kppJ@UH8O?y(SmIcV)_?$D*m zS2)&Z29Z_wiS|d*^+z(8gxw^AxI^E3r{*-yCnTGbzPmO;hsKQ|)mLiseYA;z3D1%k z=yP)*&B&{4xyzyL3{h8UqosAdaS$j_7VvN3x9CRQL4T=yY|Nuk%xK7e5NzAhS=(gQcKfI16|!&zrz zBW}#PZsvMR_UmE3WFIf>z5b~tl{x21i9fV49un0x7TQST>EyC7G@XklJviyW4+Lhp zlM~917bQL-cM6nKUme{{beq>~UbZ2nnSRFQq9i$6B^?Wm5F9{w1rPSbOHqy{&;t9?|V z{?eeElYISE+0veyZ~I27)1>D&+tt$xdT_lXSG|wa=2oIsFZknH+J38*&rr4W<*mkQ z8}>|=9^Beno0)vOOADJSvT{G^^#yJCJ$&g6M6LYtbP0y_O+<|z2#VKGq84sSKi?kM z8e6tCBl;*zw>^V}R=M`v%v^IGxxVrVxo;_)wrSeNY5GtSV?^v>KgDv*rBgozaigSb zKQ#>s<)cW7s~3~g0C@um%w^{Rat7;LT~($}3WUU}uz>47gSAv?jm=e#dzW=loOGe; z)8QymxvP@g7oi|B;4i|^&4~paRK)IhNRW=Pq7pxxhed%+UUi{PsES#r2TT44r{gaO zB#@1PCh$_CN>}c*^7(+5Tz7(lr!)QXcI}YUqc35m(P9%C3pf>{b?`@T|8wwrLwI+D zvwSJjq}66Xpwf!>{*Pvhvr6oG2DLWZ^(;bZ083Cs4HO!pGNr;j1xHu&3R;bDTJEey zCQ~KH&t0*61z0ge`w!cAEr29FSj9g8py#`vANj|@@dqm;JzRDn#Th`X`-{kpl^*=k zQ_Z$}lEUwXS-%y@Y3RG&f)ce625FQk8e_ER>#Br_f=zf1FTo6!vW^W*XAeCW0E@3f z-0lD*Wk(+5ARzjIojD8C05f=I^>h3HvmH}PM5513R4QTYjR(-l{`gBkB=7;>4>(Es z&^|$)swP^BAUO6v5eW+!WN%3g!HB;?`uc8%VNe<|!{D31(ABqF$QU|W0|H6p0IcxT zphH)8{ze)FlX#c_;$h4q{S^aG`{UCL8{9EZ3aI9{B)IIwD{})vbaOWdSERS@ErGV_ z%)POZAaINTH|7HDNs%@vLmIB?|phic!j?{W`Wm zKG}MeNR{mWR!;im*H_hsEv?8^dYqt5rK%Ix`BOI4jaQnlsn5cM^kA9)>8iV+?S z)xgS->K9NM0MWp7`8v;7V5?#IC|J4y=$Z+?8G|6LM`IrzaK3suLsz0BKnCh8N}0bk zeU1J2G~zv&)@tAFpH3XP*+8XO@?KmImC&D2*?$A=x6 zRi_;4@N!O?_)x~GY$2VPz@+zh2$JzaoUosf9z!UL(1KSY7xwolG;6U%Swddnf5jge zgw;v}RvB5OK2Ku5)U?MDur{2z2{uX7g4+%&b|nayOYgcGYionMc1?}ftR_QH540MT zsQA|QTIqG`^{!9;FAHr99F;$Ag!y^I=Omn|(DXJTU$`!1Kk8`8=ciAw2*(y>End6K z{AT*Fe6sv{x*7Msf7IPa$d~+opQ*;|a7bGE`>kLlp3xB0ssk4Ar8VWX+HtVV zN^|}&`H~;t=<`R|7?Ztm_Nt9L7<=i z4sZ!)YqdKTY-LKU5(~T>I{?0AaL3}~Jt7}yXrTN&M7I07u9D4?@$po6uCh_byPb@e zp8-G3X7p#bK{H#jKMv;(Ne3Rk-VitfY)v++c&gb?DH$V5e?RWzQ^-p#o~-vJhhb)T zG9ShOxXS)S3Y2=J3@>;Lc2;MykrpU#>!@ZC2$$y2izd1O>+0F02p@LbKw3YJioR$8 z-19?hp$fQa-|y*1CU-CTh(2=na`z%QD!r8VFlt{`2A^JaAmyONGeZkAPw`P~LpczJ z@Tr{g3@6glr}qQb@*Sb=B{%oOc^?D>2*v`DlWzU>t_~YG-VY>M(rbS&^T7-3|2yrK zP*@4uhiHy-QqSrQ^{AmDo-st=Te?x*!McNVy+yhy8q&>v3v<;ZEX*e2iXA820@@V^ z;qh5vyo%fmQQtQLSa{PjL@9Q~>V#P;I??kP`37`3q??gU@(iJqw60h+nFMkI+@q6p z_Z zOCgPgZ&Xsd=iPk#ZPGLx+SsJc&v*F1>!LsD%mNpY4n7){RDuJpejwvp(B#|aNWkE) ziH0#xkF#Ne&8UrF~viL_dm`~fbU!ahA}+mba;{i7T6VX zsP62n@22fH(^tu>Y@6xb@0&ak6>OH8E;_3jt*6tW`|X3Ij5J5)^f`+}KAH`V>W- zhWc0iJ}-1S`<7UH0bHOr5celku~P$eNSi(8fbJMfVUslWz~rg!4$_W}(ne3ydfgdW z9Zd<*4&|ito*p8E0RzlS5C)u=b>tX1rlHqKHwXivV?gN;RCCmqX`Q~V>8GhhvkLzt z1?47i7^qEHzyaoIXiI{4XQW3*f~3NK77onkvohCYu36J$P5PRQtPJ35(uQ^(@ z^VkVE)Rd%?p|l(N?qKp-E*YLqhCL^-XcZ;O`(!Jas!MLcX>XruT|aJS^Y?A!F*&b8 zizj~9M`53Bp~FX1W1%ONy+-use4P+!TlY2Bq0`<-u#>)biO#~{5=3Uxx32z4{4&Wq zYp)|`1LoX)bRYSW^f|431rzeDvkPRA<0kv$s$?6-wdlS=wLa6dKwfzO~k#)s?RBV3o$eYj?A&;%l`o>!KhQUZ^| z>mC5!Z$2e`Pb!Vs6{C%~0ru?`pfzD~9gx;);OYt=A4 z;Q)sCQHcQ?L$p;woNV{yKDTD~CB`Y2u#4i<&-$mD-L0XdinGHo=L2;8w`SV*b){<} ziBnzy>rn~n3QjL<9$mzj!Ph8~Ckm~^1)Ii+f6K>M;*%Y`$Dt*DXlmN?AUELgWdQLP zDX}AQh%OY80^;D+;<3r0+X|y5E_6r`h4>XNN0bf+@;=XeoollUafQ0$KNHC)C7wNU z6uV&CACv-fffapK1>-+!p|sSHMcBZ&_G~oHFjoOR3ZhFkJvn$XTI+7%Zi$mcbtlSX ztvpG?1=j;}wGHOUMnuQS%QV~%^%+Ab(;(P@jF-n~xqdq3;SZa>F654G(sEZh4JJ{d zmy`6|S8V8j2L*E$!hGZ~=HT_!IVe58V4rp~mkS*Yv)~

    %%#AOa`crne)Q1eX`Eo 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 diff --git a/src/font-awesome/fonts/fontawesome-webfont.eot b/src/font-awesome/fonts/fontawesome-webfont.eot index a30335d748c65c0bab5880b4e6dba53f5c79206c..e9f60ca953f93e35eab4108bd414bc02ddcf3928 100644 GIT binary patch literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

    5q!RY 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

    7r8$?kb-D3z%-c} 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 F002TuuHFCu diff --git a/src/font-awesome/fonts/fontawesome-webfont.svg b/src/font-awesome/fonts/fontawesome-webfont.svg index 6fd19abc..855c845e 100644 --- a/src/font-awesome/fonts/fontawesome-webfont.svg +++ b/src/font-awesome/fonts/fontawesome-webfont.svg @@ -1,640 +1,2671 @@ - - + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/font-awesome/fonts/fontawesome-webfont.ttf b/src/font-awesome/fonts/fontawesome-webfont.ttf index d7994e13086b1ac1a216bd754c93e1bccd65f237..35acda2fa1196aad98c2adf4378a7611dd713aa3 100644 GIT binary patch delta 37888 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 81284 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äY>7uxS6S37IVP_>DW-kg%dn+sFHLnFhvXTU%&ox z!`Cnp!L-6VIqHv|Od;nPhH8CKAv&aFGjqp4uF71eUc7uJ8BAG;BS5Ka2iZZ^rH8j- z(7S740&)(K41!|vV+LR(W*o%TLI|D>2%}d<3ou;cCm|k+48#&x^$7fq{iWHj|9Xb0 zud`3?@O%PXQlpT5qnI83(!$iEEbOfLP#KbLUr#*AEk|r64I9oeORCFa@wFT44a~7m z{F~4j1;W8V3jg`?6eZ`p;inVXTs}SiXfc&lTi)ufZX+a+Ml9)RFC(s~LH8B{lJB~W ze|ZyfIK;(TOj+`G8A}*kjQy}oZ?HcI8)2uUp&W!tmJ@ni6k4qIQy-`n?(DRQXV*qp*NXqIM zVp9$lGzv$D|COE*8ctnU6K*>?CbnQ^Xiog#RQ!!lCT0#EL8!Z2ubA>Zrtq4S!&bvC zJu8Pe99U=hS`9R2*5A(v=GXNrI=pIgvy$ImdF2)n6t;36hT$Fm6G z&_XKeCNZGE&h2-EF?qc$a<26K*CFKvY{RCSEzclYKY;W z#!tNA6Cm;G|G_vY=&bx+N`%Rp54zBbX~ds8whAe&qGo z*XfgHX$4}(Le1LXg9Nil4c=v?Vv-jUHcA_&BEnL5ah~aO z&U!a!6GX|v9eA-_44y(}Bov-wDVgA(XQSW^95SR|a9aN|JYV=zCfaLJAHvZkh(Sp| z?GSsXxIvLHlLLhF6eol^dktMX&2khrwkhn;zrS{8CHgk{8~D8CSy59e?REBRm*-it zirPEt)5Jy01vz|vlb!e7MZeWbRn!Y@zaMrw9WKf;S2 zZxJU5eNwVEU|#dPe>d#h(fY|BFf&xoJM{*?$G()xl@?!Z+xe9`>gb{UhPP5D$N+rL zLdG5^YPajie-}Jb3vhTt*>N=4_SUNTX>*uqflXP6eulY+UH1Rd0Fz22DF9vo`N4DMH_w54} zXjr$4KsiW6BWx8v*_b9^NVmwZ1q}Bcj$?AI8Om3$dIEW=e3oMOu#hiG(eC0tU3U|2 zfXHIJ&PVgXs6Pg3WDtvVGKy!i-XAPyPpF;aG5UUC>nbXqT{R-10`5(^hT1V!|AMS8 zxm)&}BM8SeX8c2bMLRm>EkFjS1UdHq(?q23rp|D5s^k(j2lp0yAr>ni5qyJi(iJPT z%h{YG<|Kv89A%k{8=*w}{zLGGUJ@`vxO?IlNPYC`nI%^4_C(j`1MJNbYR9t9Ak;4Z zn=o?FEip)uj~UD$DF$MmaQF&h+_XRSGt_>vuxldcR>*lzKDRJ z5+&n-5cmq-JKO!TsFEp7Viel^tdkE6e9^u9M*x&6cSO z%D+VWdB_6V!nQfna+w(+zqbJ1*rA{}!d!I9Y5#s&?+1;*p~HD$!d$Q47$@Z+(tokP zyjdz)(<3?{Ii`7Mj?gy-H`sjDawKRHuKW)(WO~;kP1+eXhveVzu6-$IX=~{c??}Lw0`+BBd2HNd4xqlrM!gJ{}V@< z4sk0?6z7VdrIV*fM;B)}5|(HF(%VHzeoMaTxDO$$V#R^a$~@R@i$IWxwR?Er?ilrl zoM7!h#Tyi~v*IENv`yjjd1>1yqYXE8zN5v^t~7I6z{%6h3vQWOAqsA0JJAGl{BvUy zeJ13d*R*e4iSp0;yl?j$Fj2c^alGU)TCGi7-tFI15)`J`KJE3FauYp2P;(!I zfh{GgHwXg5PUjwSV@i((L&;)I=#0l%r$zamds9fq*2b3OF*+DfPv@JZq6%56I}@O* zyET5F*Mynsdvtx!B4*93@0qQKjaKjQ&$v?GEcfnK3uN4VC@<#(DT> z1pPiHxE(Gvv3wes2Lf>j(o@{?c7s!uBlUN+R)@Ju##DY7UO%O+djDZk4^1o>k?bnv z!jvgG3#dHEBm%SeAS%+KaM%=tz>6C+(zi%+jBM{N1~PE@Z9M6r!rUK5(!FdiwwL@< zNvFk|=i2sWT5Q(N03I)Md^a-Jn%TCxDShQ9P0@w?qqjx=;g|Io&Etjipey4)mrphi zlc7(jf!ts9!kENTBhiaC1ehV!+~Q0)32MAsfpQw8tTk$%2jKAE?S^He8WdvaTT|;a zC7cJSJ8*0%PEEtzqIMx~vXSLm2n!n0wk{_$WL#;P+OjLV^am}W)YvhKwHP^_q$e4| z4=|9@>6SORrYwn8W8dR-IGBE|{+$&%MS5m``N#xVrG*-mL#?k}RcoGX_5s|TvuB4JKK-r!83tgLG2((d z{9c0fCm2Qv4plaX2c%rnchw4Y>#w$|aO-lDN#U(j^`1?l_&qH-u=h@oX{lV2M^qV_ zDMkZe#jr_2_r4Pla->RdK`Yv@T*FXu3^|sB%m`2TE&wa~-s3&+he5wT`VfG*J;h}8 zB`4&uOhu}|g#qfGtY$777bm{iye&o&jmH6mrqcBN89~?3`JpH5T(oWETfK(FDyoX& zRwkrrXr&0_m}D4`522V~!XKwK0yuAr+tY#Sq<3z~9%#t=Sy+T{S5A~)InASS(XQDy zeY%0iV^#W5grz~PqJJ20k=M8y3a0wx)N^%tAWt8_NCxhu>d(V-LrF$2&3v;cml)E0*Hzjf~_Gn0Ca^K*PTa?cwfimRkg+ z#ZPl;1S`bNA+cEm@Vd0#(PV6{OCZVO}(d^8Gu95X0 z!4>64+LdtETTg@rE}`1WA(sqdg6O^{rRZ$uNYw05qsj{?{^XDh;SySTP8UU1?yx(X zICd8=oF`%DSQq6FENiE#9V_sCKOU_V? z2=N1h6Ga;B?t``XgBwwX!+@Q>D8rMO&LyKLc?kJ<8p@NIS%-;Qe7W3!Fd|j6-xB%Y zG#S~Jxg-+i@zNlF%2@pUDhy182j!nRlGvtf@i*F>W47I?q8$RTYW^Xr@r!Vwgp`pH zx#7yRG^+h|1W!T(*SlHqy^SHWORKGY6_U_FwtH$0q|Jar(}Bm_ZP8;R=Zu$40D;2? zc1K`=joF;x!v?>R;Yt>y`cm#@KFFX~gE5zzX|3*++2oaro*s=-#X8Q=^QVPtgvBig}xEK5_MYTVDHIm-Sx_@X@Ovd7r zMj*Gyo9~peUTEf$tWAj)BQiLs!kgH1opf>u6A$N42m9)P*@|4hr@df<)STpD`s`*M zc8||Gt@54Y{;`Iy_)l|q9S&mop(y46Zc@#2@ynDQu`g*?S&w3vxKZt@*q{o%1KzVW zx%xLm{czEI{_-Nv1*S~U`cvt2OXP}`d5e>t+&DgGXCJt6afi785J2{?=Y51^IE$1NHvJSt4sE~8na4SdP|YB zTB4W!6n>D^I0KjAid8IArAuVomO%H5bg@PxwL-1*a)RqtD(pETjhoyYgp|!K9KV9L zT@3Kg%}i<%%vwU(LZ@o60`){u-ptzHrf*HpNj%)tt5a-+c0-1h{Naz$rh%o?e5vYY zZ;qy!<34P-cYQxKS_cAiOWy{Tn~>#cAfaOk%)YW;OWXqgJP_8D>U-b@<)Wetu;_S= zX4P?o#sDMQe2T-Eo6EmEHo%qS@PhEG{mG8GTfIMH26S zoO%a4`geQDaBq^Y#vGjap3OW@Z3!x@@{wG*lFGvDZkIb8TwDS#C4#z}DU6l|R+>ZX zc?urRoracps>qqwvGXpSil7;0pbigI`gM@)!kShJ$cDj>%$?-tnAFg8Z(|B`p zDoU?84s(k7HHNdEC^kBT7fTla-V zoA=9%)lXB6;S?@O;csc!Wnuf<;4ZU0oP?0k2j!r~M@6QOy3Q_v;2@ZhS(c|a#f{OZ zG|KH-?QuobMm z?OF3C*NzcmfK^zV@de{6?i|TH9yQ#}|yTA-DS|yO9!m_r1ZJLIeH!GB?FM-1H%;6`sXe-!O2-4;Oy*$9Hgy>L?INCpt zhHPBuKI<*?@&l~+_(EEa16}x{OID955lCr;T&dU zS@%%Tf^^1o@%w^q5Iy3v@CGn>New@aHr6H_^c#yODJ`1hqj?7{;2{qtS~8td3>hZq zkG%&?Vuau;rNTs^$&~c2|C?nAf10HDZ6~B}}7m@E)Ko*U=nn zpO09a^+dka5WPa2`$cNAAXJJlL4-BSdoauZ-!JbbGuMh-s9ehDkEWR>>&7qMJDP=5 z`g8AO$ohp!m@8!*&60#CCU`ll-)91|UrKz7(RofEZ@*fA?AK3R6$s>XN%Ov7hT6Kb zr$o`-2yhpT>HoUY&pIe2t^MjDKB7F$YTm&L?ph0wXqB!mP4LHAySbsL-kQNj0b8|T zmLR8I&GZKGv4tw3nLy4NQ<4M_Pbp<{y1efUU05*|G;=oHOmM>T{(SgbE*ESGP_h_gSqXXrkp)aQ6>$RmTH3w2fGa%wbG{^Uds}lJp?K zE`x?R@W1&?(y*QKFb{v@3vhb;Op@x=UH6CES;&hK)C3DwNOEf(OD=o)xkyZ!%79_WUqz zZ`A{E?C1{z0($S-2K8d_lWf)W{tV&66@S0wiQ1>=vT&n0L3j0$o;l@}x{l~ICS5n> zXmd_YwEAl3{HZ17#CIB-LfJ|-VxK@zsX*0-;bVLvi~lLZFYxlByYw-?NM z)FIofae{&#OQ#R!vqC;qj#_l-r$DMc7xlX^1A5ZJ12?@W^eyRQ1`L? zT@WZWV}D%g=@x@M`fo^YdHH2G?*K&4)G?QFEESAi+?2RS{xlG-W7FVkBwaggMtM11 zoX_t{m}1sz(9|m`y=yQ09Z=~MGma0rpmu9(apBu<5A=zmIYW=Qv$4L;uKf*PM)whU z&Tj4Vp4k13FBkpZ{zi;_+*ReAwyfa7%Nhpz=*M_dOf{_j14cU_&Au|`ct-7eqB%@J-p05x2eKU&@| z)6IA&2MKg&IT3p9m$G(^mBfjm<;bJCDkE|&%3srF9D}SAF(kx&qnVD}gdvdNw`>u3k z^w;7s0V~`&lF3U9y-`?DMTgI5L>LDhrrQCkvhPxid4D$n+g_E=TYVBS2)pnX&CrsL zAU(q^gZ^y13wkKfQlant!PhWj0g-`-;KjXWqj6sX+>mG~w)#^cUP%)F4X*Ub6n5BX z_^0C&3AVgV`HbI?+DX2AA?-=~8)Uz)Mq1d*o>WuV3qM<^v;kULMj1nY{%ydjtRmYT z$_wBNfl?M@EcD*m@CmgIC2|NOZ2mFQ6D2kqC@lQ0VwQohNXpIG?^G!5+D$&kbQF69JQ zVX6;Rl0xIcx_BI~@j}HIbcYYX1j#EBjWDkB=EGiCfQsov!4Av^N~$T;=<^G!GHxG~ zwD|aY{41G1^&*{VKuJ>$I!}jo=KZ4Q=!v!TOT@M;A0YM{deN7z{B4$$L~DI-id-(I zu*zO#x$NF$YH17$Q*CN+x!MC@0q{1&H)Mp<^lU&=(}hAF-Lo+}4a@vi#*lMHTC|PB zKLq=l%1XMTc3-~Gs$;@7N*xX~8)f~FQeM^O5S0NY_CqIwsRG$T=WHQ7mneqt+APe|9%TYPXgo~Lac_1|U!W<-v{T-G{ntdJF zK63)^RT_6r>`K6KRA^=x%4}7qfGsoFL+efi0?d&9(qJEI)3MTfl+>iw>WPH#)}^_$ zBf|>0DGJ)+P39pe-A3Q}7x8ZjUbdUfVR)X(utJdeZ6T{hJTkIGOX67K?`=w-`KwNvBt0_?(8|bst0)r4%AwMx!ZBp%S-q!8fr{ z4PCLaEyvi@R(TjbR@Z$sZ zpmN!pqoNewO=GdpNq0GFi+Fq_ynj!es~A`e$o0D{k?KzZU-I$rU5*$dLBDigx{7x8&@jhBNHAW1^I*^~Yb?y+4BG<(@7)Uq!ALoi~BtQCn|O?T56R zXGvByCu40gCOvkUPE-DMMSkcB@eZpY_Y5F6s4YGYKoMynRC4mKnff^`vd8+v+~6!f z^TpQGicc-@4%Hj%IRWm*K!}Smf7x@=AJ8L#h0cmN5O)$EL|>f*Y6qB1t-`e4CstXR zkDV$todfK~ZKq2$*VDRO1vAGloNZD&FZrsEzvyi~r~D%4ec5cdnhaA$Sz~`PYzMPA zUY_y`8y@{-T%v0L{k+dKI;DX3CQT>LX{LtYitOh7T|?@Nw^FF+BQCZhIu>bXMag7$ z2PWJ+O;I*{W6!4;X7#4J*n<$WFHD`M?o}=i)#*kTo>#(edCznR##k^)Jo@kX&&$gb z@weW9?03amSPgBQe~cE0A$!V7?G-`ibn@=XY92*2*67lZoSG~|Yg)i(>m(|!2vc1J`}1Q@)OU6a`vZPT@6rjAI8~U zUi7@<`O%G|=g^z-X;wc|Fp(eiiK{%n}VZA@cdj%?1jW*V{KTqVM7 zvNfNE_9{r6tx3eQv8YlkrkW`z7B5-{7I1v~j%FRW=xcWm?%JunIlE$JH>4A|_Rvtc zb+vb*#af}gW_l{H@!#0bCr@BSGLYf{rN|}Yopo+AP>!HlSfv{?q>z3im`574bu1dP zdd}_e$jy1>so2)g0A&8T$5>U6vYyFseLK(Lv>)CjF-ll}Ry9GeCxr_`S}m=mm0P+p z*><8D9>2K-LfTd?LLfWa;Q00X-4k2rkYq{iZ#b*mU3JHm)3Dd2@Ae@NvDf{B!!;@L z)vHtVg?71*5EZx<)YF&rrGF8HF;_C@Bo7908Vm-e(!W$d6{Ihj{(c{0W#>baMauUF zHXjB-jzwx(O}4kzEuG0(g6E?>k21@#$wv<`Q|9GeWezNI9|> zPd6Mz_c(6itv?MlsfIX?59jh`Fzk1~cFr~fOk<${LCsEnfP3v?mmH1t?eE#l4viP zJSoGc9XjFyjfxmzh^6so(*sey?YC)*7N1v&P9z9D)Q*yfRJhkjoQL!czS4`UXUa?5 zwLnnAH}@E!w^B>&zAP3>Z*QbCKmfC<9lA+Kqs(?@730ytl4FTc%iym&O>O#Xb{%F^ zL2UCtY0b^i?S%U&-y8u2wN%apgNf$qPGi@zU^^U2d=iH zPF9=J93p%wAe3@x^EKeS^@wZokz**oH%Ee*>9cvk$xPAPj^BK3{D%I6DQ+l0cUe^3;TDdNkCv)p>6Ovfryu4Kn z5(kqX!B~>rg#A< zi61cE&O;h&uG8QI&$&l<>(*mRas)?go;s0zj?p?1P^gW4NyT^hZtDUB`b@-X0iM5h zbmq!hBv4|GSxnq%Ot^14e&5tBv z5?3U~S_G45>CazCxz6OR7@gRUTQ}Mh<}6ubUd=)tvtBH0v76gmlU25jF+PKDdm=90 z`FkxXtT`#=BLvL#W=bayse5dfXNZKZVzUEix4s&bu)B4E#=u%8p|LdiAdxhL?Z5@E zC&~vU*1y?<<|Xw0>Ygf6!KlefC=#Pt^`YG^_-lQL5QSFpHU&`CFsF!CP@MgRHj&cz zJ>+L$q|7s7R0VHs$q}rQ1wDtUlsnv-+yHT3j)54PMwfuZN6CZVn6rGn* z?RHqcd*Xl*7^h5UMzS4t;l17W8Hqx!C~&>T))apj&8R67zfDcmgiOL?P_HZE^R5%jc$U!hhT*(ygsH#q4XkCyKO4l zzBvRAI8jMhYYEy(wB-cV%^Ga-@a7rF_cY|gE5JsCYZky9*>Lf}FJwtlSJ?39jWB)u zLCi~jv?7kgQC+KMPJQHx|DC&he&Oz=F@p`oh~=3lNZ)IVX&a>2zhoY7?Er~z!-ng2 zx)Md4e!)~wRNZN3vdhVQm(bIQ`Lq-2leJ&%0|1n1{@c^SxP6`z#5GXdPhbGc#-!5^W-J!>9P>+ln zFeS|Jijq(4Ec;rGDT~gV>S)9L{N}is!Y-w!+H{h1n ztOnLQa|ICBoD4nAZ$?Q@R|?&zvknB=r>}kd+I@OWA)b^@LdXV$REf%m8@nx>6G{mcGorO0nHoKavPx8Hdt$v|ZG_M9gUMosZgnsqs;ymzI7wihq9@X$>MvCeO&d|ebae^`ls z_1yHcd;7fEt`l4JimA%D3VI*zg>*HR-$&z1b{n1wfgZW>Hm%-DDPC1Pz8AS~T52P6 z&o#I5R!ua3f4?qk?gd0%DJ!07J?@tBi$`&1D`fL$W-6$6ZyFBeeNL6laWt}*wou$2`ojNAA{t~=hQ)d15RA9vZCQ)*UM|zBDJwsnQO=h`V zxqZUI6$*7)w0tAuj3I8Cw^>!)$g<4wkys* zxoJHvOAlftwCOiWNM;M!I#a->UD+*p{1->(xhTW$4C6b&5I!xiZ)elpGjW$Ws?cww z!$td|1>qsyE~6k#=P=8wZiP`eWF83tNlai{xvpm=)jWX#R&O+%Y4%q9vu4UrW`*rD z26g7uA_20J38u|N7vCPsRc;0$9P0S6GbqO^BiNp%2K*LBRPwsKQ5Dmnbrruk+$Gt{OrFnB zOpEaxWa0b9@=T7e`fC|C_lP~K^}@_+W_hFGapq#MGrU+Uda0{`yX(292OTta{AVC; zonm;qS%&d_*Im^Ty&Y}a_LrfpyCE|=?zaoQ?&fokD%|YN)_yWavF^H|o^`t(soWR7 z9qG{V&$37&X!&%eIzX}5*Jo^ECMAmEA}YzoNVzTtX-Dyw8L!NhHrCt#@jjn;?hU?aYFNx+*$RwP$GwqMyEyWPVM)D zF26G!F(A4IYSZOyIBjHlrQLr7t9(kHD`m8{$%ay_ADqZ}0rvg-XNd%)82kgM$@s-$ zjF7rY_FDb#hT(D=2=9Qj`qCBr<)^T;ICy%S4DHN<_(^hO%n|8qUmNmOmPSDgr!ZkB zpP2-u$*>gF36n!mR|F!u=$wtm&U}kfBpwzc6}}H6G9?v)^u4ugft-#^v72$952wTOy8H99oVZnc8gI z-jj=G=W+{Nc)4lW`Rji-lP4(^91)RlkCwB1WZ{z@SX$>cm3Wu`)I!>9d?t8&xTyOZ z&kvdjNmX}LHa0glVm8(-8!p0h7o&a@6YTOP?RKm4@O+b57g%p6E*t+NYnT11g4bRt zH_rFD&Xc!PJi&j^tfxs2XHOoP(2@bEmV16G3YQ~Y*>cCvAJl9?3xJSR?~M*u)3dE5 z;`pKo%}P$S8dPxg1%Z#{6g(Q_ITU>;UVvS=#P9T6AYLnO6g$s)^9*NEE+vC-!z_1% z@&fOSJDV2dw0fupKC<8~(x@chB^TmEH7M6ZS^-!q~ zm3UHAD{8?J$9K!eB%pFbCTg-8C z=Sa!-_z=te{j@54ev(G`dORX4|1&}7AriM|Z7fTPRL6j69EDjAK|;psSdld)YeF=C1e_)H1rW%}=Ln zxOv&U%o-&VaKB%tk2z^#g*Ul$fUD`0->c+voavpfFP%2V-gUwy=a@cpPm=nVK$$;Q zvKcg?AL3nymA`Jn5LF6pG>+Wr73>;=@@vSlnYa&vliNZ-gT@o8#*gn~cqmWiSA(eY`Z?g&;z$Hb!kDTgVH?C9d0U zF)Ud}B%MXFh`thG^5r4C{n{HMmk#A1TKj1yR_26jIi6kALj!m3Xh!;?c7co61{9{? z{f^^Wf(0BJ`F1V?w&qH2VUxAo&CR{dP@ZW~S6|K@eBx+ZzF`rUGX#sCZ!k~h)84?m_bH`a#VjA< ziaLCJJn+?6G*B+O-BH;v#h|mo7u({a0p@8$h|ssDD}1P(g2{lMM$tGhdMr|Y;K?cO@U6;Xub-QJnbRrG~Y3cUVgN&b!wu(F;m_3^K$^0MVr?m^Z2H1 z%&^v%8si;pD5O>=)pabjE2il=BCRPssG^z5K5h^mtMhn9&nuN7%lKAZ!dh#eq%Xy@ zwX2m4S4F^5Q^s_-5o^{MJ0esUbAq1R*{Gb^u8T)!c>);VMm|iJ%!q!0J>zr-EJ#Xd zrUv1Rk5U#z4-%s>hm?wnu`;nsDc>lpW=IT_l9Y+Yk}OIBy2$CGCj^ZWVYjnjE6oo7 zCHkYOyHT26<%L{Kb{>vhS0?6SDMWYFf@lp5w8#uCkYRu>YLHHJNtEuS#8;HDDybNY zq!r@My4+EEu@3ZFj2`Qhr;>F^8HSkBvzY2)DuZSRtM3g;4LAuk0)LtND@Y(z!RgwOM15` zglmGLD47T*dSsGF$SRn5y+IKyL~qgy#AMYOkZjW-y`a+(pFydWYDEDV4Q6Z+vDpAM z3WAPE0R!)m1)fKQw~&@LQ50;rK_^&52|6TU-fGd=#DnKa0*{G7FQR4z6Em_QB1zCX zOk}e;2rajpc;2MLZiEOTH3VT^#9k}KO0W)c5rf5nMVn6V5(N=sv&lh(TAjfp3s#>L zRw+jSgUXMkD99VD(#0=wvkzT|`lOiE{ZQdZ66?!3W;xTPJ3?q`7 zMXMxW!9!{U0zDH9*r=0qi2k!m1_QFlyi=5T1jDVD1VPZ7BvGg*5+=M0%Y@j?1{*Qy ziHxl-`S^+Zh(hcllJqu$4ZKm5=u~0kv7T%0u?y!P+A}O_)x7pAc zNR64xPY)Qdt$6n%Qw%xE6$XsY1_Cr_X@$!T+8vDRVGg+<9M z8ZZnx4}ERm6&*6$jYPDIyrA=7QfCb!J;04*=XD;U#{k6u0e~ym%qD1oLaaJMFt2N} z8G^D6TM42zKmi(wUNoAKEY#WwPXK(0U@^qOB^xE3Uauo|MUMm>uh{fZlabi4$)M9o zl89kc1syW-*bF^@m4>iE6ozjNe-i2eWWhvRtAlB#kVc>aSXNjR0E%lwSh+^5C%g?h zLktOXy!ZMbxFKM+>8BjlfITJhJY#jTRgF_OWZtZgp z8ft|g{JOjKt-CaZnvUI5Y&P}R-xTh@L2s2ycMZRX*ay;F|bfHrA<1(aVg(af%oH0lib#7#p=E$!3nqF1E7oeN>G>&{?+I z6mkZc9sluHl$cuJ=lIgMN$6EJ{kZtR2$cN+x4st*Xly(*(7RsX@D_Z1t6X)~C z#^s_$v}i7xg4NAZ(7FXhlTGB9op70(#!csDa?823j8jet6r09P$Wp`96MqG|#GxyH z4Vsx>U@|{U2p96=QVP8EiA(n`+j^tew{ymswY9;iQ2}v?~t!J z(|5ubkJTOW`ChGU9G{BpKKIb_o!2ivv3&LFmAiJXcy+}%Kgz|S^Z=M@Q?O6n@{IA z&uK^h$d%1gMZG!oZS`IJAL_e~{Oa>|?>>*zpnFP!U02Umm!mJ#N6Gq;o5%N-cCnJ*y5V`O_AL(VOwrOt5nBol6Ba*hq`8!YU)mtosf(6%(` zl);!`rmPt`kxY@~j^JbfD zDK5TJ#{*8hVfmi>?pV3TC~a7_=iu_$dh@PbX8r8t2lp)7APJ4l=kB|2&+-itq|{xB zzig3h=Dc4ZzSHYk5=+-zyfCJ{T9zhSVhb-`r@fG6AZR(qODqE5Nk1RJL$G5G>H+7o z@Ln>IFaGmO*od`5(yLzM2#0JrK>2R#<??t!iq?|1jcIgLbx%&R{`%|-V74(e2yc0cCg?m8N(5zpS zgxpJ-4~Q|FQdNHExb(t}k8Z#H;^BW>{rY2%UW?B+blJ>?;uGgwviV>?(e*6Lt>`H} z?`^1y)}V(B-8Pd!y`<-wWvjdJoQoga{^-R-ckQPh`_0wGCk!TAmjPd}=w2hZ_D>jJgvB@owbKo51TUUm%>wqcBn9MyB4qkSWT$;GknuZ-%(%gHj!YrG!k zc)c|@#nR{pbvTmGI}GX{4Q*EKRxS_2O<=gye3f=>zVdBPHvAr6oPFFUZ<%I5H3mmn zIsP=KSzEwd)eVm_%wh%h)lc~2f58T_%WV~@3!H<`Q2 z0`?y!aTe+8tYr%TkP{tOaH--yDvsotq^5Ov}vd?oj&^-mSiEJC&axu-g49 z%ZBdNjPwpxj1iOHjSoS8ud-B3ht*2gz3>mt4=cVOcJ0f#8(}+Ot01eb4k^}+v*`vg z#6AQC=aJ$JGN!9`XA4O0jHGKInuWP={ ztD6>9Y%^_}(V`2Iomf3Aw)Xb6*44Cx&h=c-vEbs_%jTfn!k@Kquv@f&QopnXVO`U_ zJ2ne%SI1P3)`}(TdRI@a^W}8yhFOhvgwsb>Uu#;3bB~4X$rY*QDejuujv2}6%jYGQ zw`6NN)o*HJX0a>ex{EGqd?Id=BmKM8%hj7I5#z>{ROt|a@WWkafu336ux>ZN%#!IYzs}P#n z+&yDKu5Z!Q)};+NKl<&uTxjZrYoE>UR!rgOk{dehwLnuo(7tv?$La;MW_3GSe4Y_5 zmcD9Zc3P;V&F*x^Z6=+?e0iHc8kvF{7Djc`BVnhj*4x=Nd&PpfD!%AN^wvpy*Q9=B*iW<>y6ZdcY_87!LKrMN~%E~b6=O@=`lZyT^Jq9f+o z&eWcUmCLsI+x-Z4<~kKKLKbmqsB86kn^v_qx5;7IDOrK$RvMZww%`@7^zQ^(e`;)j zXeBy}=(KvH3;VWQaqu(ScXW2SY;ujT(ry|347m`*cs1fB0yMrQr`Ok5t~1BPH`PDg zxOhge)n^ZeeeE3!K6TE9Ln~*@a)uBlD-Fbqqh`rtLPpW*mEuN4z5Ux)^ta6Hm>vkW zwD$GySn>#3^g>Pe)UD;Yv2&cEBF8b_F8@8;W17{4>b}e4{OEt!Kfb>4-`J$z`L6oJ zdzE`^jLJ~4&)19IRp-JBSQ54yt{u(#gPo1)7>@V5vf=J(|ez0MK z-w!`@<9EK(*$F@Ln^H*e(UOBa&+`5(L-Rt`49#nQ={^?e-=Ge&e4XDZt}lgPf62jk z58C%XDgJNcJlvwHTXt$snUZ)F)fU-d;iDl8TxzdU>E^G?{t~$Rgx7 z7r)57d|{Zgx-EKw5S5ppKZJqYfs>2!DMI!khqt0ea(3s+e- zSZyxzy+VY zCRu?-%Qh!Z?$4Hvm&mm;g(HLSDGTQt6N8&BU1U*|nKm^%{G7{bk|p=eF1OoPTl4hTGh% zQd?%Q2u(|mym{9}_kFgc!MkgTt8(hL1v4wfHS2E41@p3bSZx7n0T~OaOw23x(8LQ& zjwbs+(mJ3X>Z2XLL_@UG*SA#sX3FX}d%G(`_}Rn!I==FJT@oZHt@R99Ez zDl2o9SAnyW$prcjl4Be@o946&!M3t+n@rgY{VyjH2bQcl zpDwhORjDI|OCzPz%A9IfWAD_;&g#B34ku0uqjqL{tsTQh|CT2)Trg60iQng_|0MdY*5JXH^ zl=MX-(FlA$v0`~*%1rUoqX+(08(21LKQOpmrm*??7iKok{e3^U>(KsLb1J7zuRI*= zut&YkeTkAzTZOT-aapWx^NP4u7c$oBTWP&J+Pif@Z2Go6^yW9;-1Np9o8X83X{{Z} zdCM1^w_`z1!;H>D;V!-;QS7f|etCV@EwPrw(&j6c&)hMiKGEcH)NZJ|WKUPfQ@=jE zabs8Y@QwEB?k3w5e}yHio&urPU$d%y`sVsVddrqS{b|cP89gh;f>2WhR2f+<6M9t6 z62k#aek2Z~CWcxVYEi%-jdD0d$mFS>Fzewc{p9xR=ay)&?zLp@-XnYGmPi{|(syJi ziN_`;dF0ce{X3$S;V^J zc`2Xo1k11~M#8vrjIULGTs@7gl)0CtGI>1Bx1-0u zHya;GQFe@aGCJ6qEsVtp>ml(E2*fZ%8O3RtQb+8u5F+0@k4blvbrBnrS@8T|L! zl8Va8ijwpH90H5yUlS3B5?n>0pXdFB6mv0`1UP zGGk-&1FzCo4}0kMK~?*jHSM#`IAi#|^mCBkw0l~_8A-ndt_ELCnR1PLN{#EUV{!be ziQIrkQhz9jVFn^tGl?gb%!oP86oP>S8MBN!?`84B+a463Ka&IUgG!yAYky;R@6(4m zI}bhGyXLX!2lK2K`!)mNy4yg(%XESGocQ6(=Usb1X_FsPK;`OQbos03t{E+d@~j&d zt>1dy%P5aUBPQA3*|#yam1hh%E)Ils%5Y#Yn>p6Rkg#jkl4(L=8Ad2zGx{|xLqc2F z5XRWeV$S|Ou$gfC-ViJuq4sKvw9v%p897}*J5+Ywt|=-IdkYi_v&u<3gG#+YX^ZXZC0ecTV6HVqt)z<%v%W<}3D( zyCUl~2=ts}8#83tdW97awh!(*}%+omtQIP zPF&&>uEeNWU<;V@)m4C;nGG`(%tygqd%4zO7x%Gq8|EG=>X_TGT`OJj0@>`6u1kqS ze=aP156FIsA9B@K;$zuyLE^bG=kc+?dp9?9MZ}vMz`g>vfses$O!D&24)(t=tEy*3 zXY-bzOn&)ifdA~bqX1zh!zB1%KL()(GWcK;CW8@;ZR_$&kt;)W5PyYJpf!L~<1`=< znO-KoEdKlUzMeCD-h#5|yxBJcCqg{Kj$?Hj0}%Z^rdJF^GLR8$w(6ySjm8s2^v771RcNu zH@kRM`a?}2qcj+pXT?57&TDw~cZ^jJW(s!p0dR$!5$NZQ)}ixlkS);DMeBh|XQgYk zyv-n2ij`~NDBg3DL|Ki+9`u+Z;|Z82Jw}Y%zOf`7rNHFLpcQgdO_3DV*dtOzYdz`S zoN6fTli_P7J%cFANWVIagPJZoUH888LC9C;j_yy?}Og4Mx!>*jfyXpf*# zsVkS(wVhMSnHZIUS1~58boXVu$u4goyXUmkEv;0mGy*86M!=%~x&mkh@9}^%RZ>=h z-J_pLAMd^Crd}+00Xji3yNXEiAOGJ`?pS2oPbPlv-wLBql)fZ?)^>;8HO z!q?Y8xCRTQOwRTsr>sbVilb$lN3u70CMc9Vxp?u$vE(bn!a*a+7TYGoBxZq36OAuS zp)ydQRD2UsqXwy(A_k>QIy@I7vAF{b0Cx_PHhm_#eo>ly^8v|}fz3}E9hwh%a&jf% zmeW&3)Jn3ZBq8jQeH904W}-ig5*v3UCJ{Cpu@_(tg9ERgNe~(Na@jxZa~~y32M7lR zyRfAi=c{V%?15=pFFkbW)@g0ZVr5eEp(cs8ZOM)0^$kpg%~q~y4jVhVJB;CGO}Wih z!8FvDZ(Mfm6aV$ZwaaLtoeo!_r@7};&%9uMdHMVcX0D&FDpTEj?X@?f&HVMZZmXQL zqpBbla5w_hg%)eLs;s)YtSW4^6jtM7v4W}{b1Jvpy7qx>Q>SiwfQJU}_ zsQpaht0XQZ`aJy0;Al|11e>NgF(7EvYVnr}1xOG|${tL*NYE@#3=lNo9to`y^q^9p z|4MWnW_CB_hBMJ_7t{vmg2R86OWC(R>%4XTAZm3f&xMIHyVxFqO$wOY%I zq>e$4Abx(5Oj7wg>>Ra}>KV0qu{nPhI*xiNQJhEs2sjGV9Y+lS_uedOT8IosWA=lg zYV4=#WOB|gk~y3SO0F%cKwWQ}xo&#@K>v(d+W|2BfUWO{yQZVYJ*RgL*-onmfKkfZ zdg}rzF_m$3`6Ds&?>YC-p>x~z9@()%SKao4ab06ae}6~gI^zpXuHIf(Q{qV9vceMF zxl0O{VQh}ky|&$6FeQeWs`J!YKN8_GZIZ}OyaJiAAE51fbs2X2z-arkEA$WJd0>J5A$fp?}V6# z?3%ZY2gt$8O>3G^)nqtDCEGJz%?2d@F?JM&9j%=rId`!PR(mAtH6{)a^hjo4m`X}+ zVvstpGJy^+1^XOG$}0bNR1vf*wS&luCio*M4{Es`|A%z=WQqM;;yii~(Fw27A$szIkX@d z95_MIJz2w=c3{*3Izo-6am0BJCx4>7?IG$H)GO5c)R#zt(g7DJ2aOZ?v7_Vm*>U@U zN%*i&bw2R_v-?kX{rK`?$3>af@L&H2FBJcE%AB3J4uhKxN&;M-%QV(No}$k@ zLH&vP`u~0}`QNnCobO6rd$oZquYoT*)+4JCL`)NL^dp|!3g-Vv>;As2Zv?M|(Kv|H zQY$2<^750+JTKceK?04Em~SWX|5+P7O^X`7j!C-lfbAYil6FO>q>T3Tbopra z0pt#GFo=YXM2;^V+ov0-wPP*R1S&Qw&I#o6eotT-7J9$Mi- z?$>H%`WV@#-4mXJlQ4|UKUwQG_In+$C(zS~Pk%6r!6D(}hp0-_7u%&s)6*9Hdr5_4 z^)yKl(~`89B+?I)8cGd}N{eoE5DZLSnlDZ%L}qbJ2>v{_RLC@d^GPCjDIJX%e4H)ye(Rjpyjz;UDhBpyBnDDFZg(=3O1j-W zDZEdFp=ltHzzi3x9l(Se{X^?8t-=ik2Hh#Q+?uq?(RL6FxD|LMm~hwmXe{R?GCn#o z)C!4p0*kpOPc%;IGZgp4JxEN#xZbm)44N2{$)g`6++fg6r`!n~lQKd@XN!qcD)qrp zfDO4R_we8tZdS~&GD^!j&NozoQ6X516HthVucJtf^5eoRLu-m2xEmYIA8QJNV4S{ zow*fxbrXo@jUiao_#F`uWC>#1PY=4?5*fSOohDFHG92*crin~3O#G+kVmG}&XQKv> zA=-wH;Hb-9o)3tQMD^pbZLFoi2lBA*a9*(pn2{MHY*jTH0gVwbkaGlV85$5Y40-)f z3M)bfBzUUcM!b1n?>W zj-p18R7a6AqTdv*f&nmPPPIr$+K1{nt0jCXQU#K}pPuV>yNAgI4F1iZe^e+x6qRAb zZ32>UGRG!;eUAM0@Zkycx6D8uIquVw;bCOvbPr(}8ZA!~tOr>_$0mLn`a3`p=ldilm{dA3KF5IM_$0?Ef@hl;Nf3RZf-(^FINbm0Gw~Rb zV_H=%sxljaVU*ObqcItiUm*(FyV_;ufGe4+T?lC&-v($iPr2hN^N{{!FJo&JGzQVQD;w@Y^(80#~l zl6+0GtyDH1xh3QOnb#P{@ZE8Bzz@a0a$dW_VALsmvbOm8fnAGYE;Wv8CYRwKj3g_b zc}Wh>mLmPGl3I#q0xj@{K{a9X%S&4%^et~l@*#E7m==u|jGUJ7dBaR7YZ;UD=2)#x zl)o@(Yh2i9!$0umT=Jm7aYlvF7k4UH5fea(GQ*urYY)b-z5aa$fS@ zLzne=nl5uhw%on>y1TAFu<7p25yxeqw_{;j+rqIw7o2mSNu@H~ch1uNv&*&G^4a@= z{FMvl_BZ$xGNHI>-PH46{rqUx(w!UTFZ8*)=55%yq;p_wzp~)3kQw)IuQ}!DE3q=6 zrFc3qYJSG#v=fM$1|d0@$U!f{kH<4NNqm{RSj?9h!ckQK)BhECS%C2E+!{R%ohg*kI zxqPFQT`IQRtb?n3r7rOXtKL`U0-Mc`4U87$0Z<>E_JgK6@rLNM(ZZ}8s0_QQG5)+p zs(|uS)r8H6m{5ZRlEsO}q<9l>g7M&ols*jITBvtIH1hNLWawuFo)@1F$gOr;h1_=O zeV5wgQ>v_@Qu3vlE&0;S-tfTZ;_&AWY(QJUeEz^k;|bkgI`{hP&qWVFkLg&uw!?1K zSAbXgq`OJi7x8TyMjwNQ>v8>d^0Ju;+@WOe#~v5ByZi@blUu8%WJ*l3tYZ8> zD_g`?q0bgejvj-G3Kjp`vZ+XXLn*fMXZ;Xy6Z`%}N(Sv|vfhMAyBPe>N+KBr!Q=l? z<}-30+DNlZ>-W=;Fys8Y{Cdjg4f$jeOope5PVm|kuT5%sDJmqJgo#XHG8^%YH&Tb+ zJ)C+&d;^rdK_}k;sR{SscG_OCP9wkIjD@pwU5 z?Kwkd`U;7?tI&tq7Mt=Zxj){xbb3KzdVk#p@$1z(Uaxn%d`qspyS@Kc{lUn2$IS|t z%LV=pdsnzC;}@py-=+)L99lEI%~xj_(h~dIKMi%*sJ$!AhIp3Q>C<|g1xxD`av=ae z@)=E~jlrh4(646oyb;GoWy{W@7F@HTp;CdW!$b;YF`;sy zlc=mF^Z%=Ap%ah4@Y16XzVR0Q$=`1<3T%z0N(kG_d}U^fUD)vWX2DoedCsx>50-nb zAA0bARaelO(yxE22R!_&{OqT0?p`{j17YgU|8)*vk5m%rfpNgY2xLKMct&)FkqLIfLBgh zfP<53q8QJKuhGp0#-d?WQX<_udErKV<6opq79V5_WWN+*U zK26+?BLU{t-MD8@joJX@c5ux-Gv;fC#$6|#DEQ?uBCC#kH*!pNDLY6hsUlQ{a#Z)U z!NSrZ1rP|%ZGiAAVRoe$CRaidxWGCAa~A;OZ7t5D^`NOi4Zap{Sj?I&28-A%HlvN1 zT`XSj=F7pqKQI;+m_7jiF6UwEiE3p7Xc=yF-3QjTfT(zfsP+WZpM9ndcrY)MJI-NR zred+Sor@EU;`B(8-A{assZmgWj~9dD0SO<3JvW^+6tPOPBb_q)l)RCpGok}bG0Z{wb1;|?m~Zm&;uj7eK@b7qOA~t4 zV%W_CJ_Ac6e({wFWohx*6_xkMd&ay>TEBLqjxtPin+=k0=NRiZ9?`V< zM~Sn0211+6ry$OIumfw#iX<8<`2h{C(2TNBaUAXGO#9~5SFLKCTI!pr;nkYEHLQF9 zOzF65Ul*`uZ?M9dvF`c?huN~wW^e_B@&(uV9CZ~Xi9*|Qy?l?-sR7ES-W#*)ZHW7{ z6Z3ZEBZNqlz}d;ng!?T$euhg*df=cvk;u|+qeN2T#E}5oa_}G^nK6!~Q$c0}F)m2~ z!jL)x{kU@6C*xis(9)VZLz}DFSa1Y{>_=l0D$%Qllj>DrC z#ft1^%8T_~0h14-Aowt}k|!DwXkXMrfFUBWX6P~bXaSf!#G#nUexZ=Wq(fqLB2oIH zZ;x8#G_6qTZWYDkvrioa#>=4z9iip6D*)K@6|$I@xAvBmnhUGqxHnSzz6jAeaHkAYK6Mw!~4Xq#kb+TFFOkOL|uPbfvbV%)u#r|XTK2)aZ-=|FM$;(84&oX_M78!bMnL4(db=kDF z>t->hDbhPHJIcYt618k3WAV}setSwD~jx;4c zEc;rgvJEGLb!jTttVd}YrD>EV_=8N;JG)?*Dl7J)ErYg_j_+MEe)i_#nSIz@k~4WZ zEtF8Pb1~VNOehm8PyxIlZ`6RXL$Gj*Lv^!(+=Pw^lhc^6#t>tWNTfq(QLt=&aeH}N z;4C*VtGpNXh8q|9ihWx;7oP15IKzRC)khQog$6(fT><*Y>W)Ad9Y1?f#};(e!p6kM z6@X=d)mK(-uC44S?OFkT+KEqH5V|SEB2hybtqru5w-?V}wxX-Fqq5dqUgonx20{QB zYTT`voYY30&ZO}y;3l(x+sq`zcitiJ zj2RsRpxzPR!72j+K8X?|)N%3KF*-)^o;|r$~M$lxNRbA{yztluG7xvK7xuUw8b#hI`=r^&7WJ1&BhYcw_RwaiJ%Y zDTsYcQ8jI%65VOXkHA~>1YE+ibH33MHDrWW77|AMY|J13KI_V%s|_TRr)8VEBo z5|zWv@Zs^$;xTvv<2)WF?vINS$_RJ46sl1)nVdk~Z`9e7&U5_4WFRL9n`5%O1vB(X z8*~IoY$@O-;37n(%S+E2B4#NTM-LHZKIwN3883#2Px&B{_2!KFlm{|!mpI_wV;bvB z8;|0E`b@XRv1mD`Xb(CWATT;m@+PN$sFtf4T1=?4Bh=PwrO9s3T6cZ_j7B44DAH>z z1~n_xOx;vt>psw}1!1iUq-X}+#Y*42M@;Dz9O!|(YJ=tB9m8a5qTPM>JGWNU&+^E9 zoVv=YbkCkTjV~#~rSiB`JnR9S0=Eh4h+8JvBFppGZH-uBrDYr|AseCPMJ|Q&ACLL5 z!D)a9r@(sSBc0ogP%9=mg<6%+u#3e17C)n9T1CR39#rbV`8^%S!9u`ljf^Cvg5-DN z4Ucy8h!^XXgNy=yG$XJr0*ZuS1W7G4Ztwj0RYH#Y=p$*30cej93!%n>wjT6HdkF5g z?6teaM;_4>IBM>HQGDb@@h|xIW@dQ(PwE>=;82>S6E$wn@C^DX{0C-qwzvOctnUjR zaHv2$R*hCwSqy&}i9pFW@6cCn5Crih5D|n8cokPC2;etDHN0e;Ci6;s7DUi>)dIew zPP!PrbyD1U>HX-{p$t&JMUer;&woFB3B68w9C|E>h%b?h(9_4iALj~ZP0Hp==sJAI z>D~|Gv228kL=B)A_kQNeywV7xg#_a(07x}3KC|GhiTL)D)B&k}MYbZwe}nP~<&r+a zcy;pUq!Pw|Ft~e?I!KUs5d&#qan!OfRF6+!Bhi512>}ny2ADqm@D&wso%z{kG!L0U z9|Ja4r7zHlHEc4O{;%|}=m#E3fBIoGdWHDuIgs#%y?T`bN+*qie%*>aMtCWa)_>sLH643EPT%GI0XdL9*SKfJI=x`z zrT$Ok2Hyn!G3>*M8ck-Q6P4J28TTmRnL8sHWT?TzZCKK} zo=7XB2*5$NOmB8mdMfjGGCPO_?F-DAcqed%NR<9W<^SMm3?cAS3Ci~j(DVVmA1=(@ zT9)2>T5Ar`p&*exNoR4!Cae(I)A>&)Yl=ucrLfoMxY=d|W12NlJZ)||f!Cif(^A;KL2i0l!BVc^H?7UZ~@;iVH3IU%9s zCJcV05uf~6YcyzXc~=E^O;Te77qT0E@`?DtEn0<=*SrW;zQ&OgN)>SBdqYZ5{N9hj zObsxi^E^$v`}bBKO;T^Ho-nLAY)FJ^bs^}_wh0M^5I>9&4Il&{R1_7 z0s;DRw6h2A>fxOMbkjgTx^8oTJ`_MVp`AT}&133C zTI-JwQ=Y_sRdSN0laqR^N-Bl19;);hF4c-jGzzEj<-$tIVWQ=sC4{?CC$3~Z*D4&$ z>FC8OLd7awN$<<2U8TUt5Nhmd_Cl%v`&O5NQ4n|R0qz^69i~t4MJXI;Ws=L)0}4Gz zq>6Zh9VGZB^vNCcJprsG<&C7h-nrL z9wH&e+}PzSRpfVwDfCb=WjCN#iYcvXK%-Ewl%O5HbCz2~&jm?WFaVRPl-4MWl?D8H zvH%E;$^sL*;W4-&GrO1nJ|hlbnP@})SNt4q$jAcd8tLL&1p1Qv?>Rc|%h1Sf%6wA` zhaJ%gqyniw1#JKsk|*6nzqspfs;=n)uWJqBdj^fx0DJ~<2)f0=^dOyFSx|6OK}W$# zI4}kZ$D}u=(jvrHX*&Yj}rR6B^g-djMKQgo+FCb)@FdbpmUECHXlS%|`&oM=P>} zP9gAWSxH3^kA)z{Ad~hcK(T!edeBE1aE6L@|7!mkH6G=?N*yON(`9|(`>rTbtL-p2 zrn(+Q*Q1f32b)L+Ld~mt&RgH``1@*FVFhb;S62*_7+9DZQ(2?qKSW=ar<}xw0t~=_ zCU21OHXK9Gg@ZS6pp8h;?mV}`2~LL~l}v*9>A#FnXhr@WaZHr1hO5U-$)g-j80D%w zgV7;%8dMGAM~d;a#GK1p#FWq?h$#ziD1ynNn=-zg8k)c-}M zj3el{@oQY3q~RhnNSr=ThN5(`$iQ3BEYTu>gk{&s^8|k2^Z8sL<#31zm-xr;pC{s* zEZKZx7I4};CGhio(!2hYZ~q+ExbMuXN&~Lj^k*~~iOC)G%lUaC@+bXol&2mvB3aBb z9nf+7xI2rfl1G>8jbpIN7W`wUn65#mVtnMPta`B2(?pq?RG8yI-o4* z{hFiLBnxPUreU&Qt=4Y02inwXUB61V>mbdb8v$fFF0&q|hf#erk9yLM)#OXaF4*{o zL$)vvnZ){>4HY(IH97P!s`551FKEtKjZ3=vn_oP21T7IZDl{4;Thdd$s25a{;IUW0 z9lZ7~^dYYnufL4{IcD_ne4{Jr|oX*pp?71YL~vt#l|X$Huvwt_kykXNr+w*~D-{^y|Mp%4;vx z2rcJ#wAomLZX>7HDd4t!fk5Z^&Ok?XEL1+PqNO-&Gdy#U<2tXFn|SdP?*%-gsCCXeG`23N4G<>}4T`PvDJ~ieS^!rI~Mr zd6b*7GPo9S<_wE+hzjK#hT}N_CYY7Ov*F*Rz-+h#oxX~+T5RkSK6YYfLXkD zqefW7YkM^UY|-oWytpK|#Jbb~?iTb~L;7h!)2rnd37U;sUi_&>kZfM8wC<=OYjxc4 zF^5ck&T@@$wCm(j(x}D=`}%MsS0C7#eolN4d`A?PoS?ZkYnIO1s-fdKdgF5!hzW3~ zxc7g~9`C${4%~q9zDvvJ@iNINHIjC0XtX^GwG6>0n2na|m=O0^JduzOA3%#B>43CG zq)CgReYC`~P3LkuIv@8S{0Y|R{s~9j2AsKy zwI9?gmF$YG_>ybAkD@VS5hz8=X9hE$J(x@;(`YFzzKM3wp<~IU8@1B(O;#)HMZa1l z>?N|cq*(?_bsDu*yb1JLrC+s1C*GI20IzRrMkwZMRF4sACczmpV?r1$!Nl-baj~V65!FQCK=vAQv=#*k}+5FH|*M};Ue>P zUf6X@N69VxOyN1#)+)JPrqs;Y`bNTYOIOh?^Uv#Te9c)lqhV>)e7U?X*j70;TTj3XWVpW6SgkGcz&-hN%(oL))VnqlrjLsm(cVe*IHa*2@8YZNn~Oqv0dN7N^ydD zQ!+!DwcsYLHho`B5p?HZA>3#=__kIn_G-=UqMD(>EXsq#bCP>*5$ZQHah+N`1`M`8 zHZI#}7ES|SK7OA)j^0^h*0$wmrRKTG;3vkX8Nb$yvz&frG`AS1D(%j#&46~YB$hwz zs7!lg82#N(wNPECL=jAxtkmN0Xz`c}CsctF$zQus`?Y7V((t;hmTJeiae-5O;;|Y7`aj%< zgOeATap!9m@KQfX8gi2Ch!O!sitLO~WC#8BOjhbVNc?}ECMivK+4Ac~%Rj!9fm3|? zaT=7<>@#BuAi5{74LC5a%wuX}w4U6#qHLe6D!}&BR{&}A?8})p--^9}1H{NrEcYjG z^8urlCM+0nNe+$sFkfRP(g}9}3|fF>1nh8ud0N<(rS;WK?QK=l(|4St&|lbVI(AKK z3S0S*P9F#^T(5_w&a%Est~vAkyPaa`y#R7@zNss9{`<{+v$oHPEuO5*@uuBpc2(-- z+%}HU>{?89nUE>{pi@Hpc7ySd1)a=FEg+O~zq7 zWD9a#+1Y1?`SNz+n##1nnZR@dCF!$PC1Fbl70fg%ov( zi~Vy9Ew?S1d%n*e^xLexm2Dp0u268Q0;6CLw^w*{3LpqPt(7ytG;cex+Ms7bM=ods z{Vr}UbI)l2H$ce0tZA$b^iP`uT@HIG00BF^$QFQbdt!-)ZwQox${LJ<$yHU<;Iszk zlzC-Vqjo!$j8+paZQWr3o(L94T&sLEv$j16U>l0XCRS(4ZeVZa72 zvIhVtwL4sJ&b0nOEvmRVZj3yi)nzD%9jTORM76Pwx{$hpx`TRz`W4}O!QSv#OBTU! zY5^oLqJL2q{bh`Jk&OD@z-D}e&?Q)W#99WEG0UEV21MfcS_ph5Bf7deR*kuya9~Ci zs3vrM9ydWG%>Z7yNjpR0Js0v308CQ^6TlK*EhH{UiaQLxVaVjem&wNj1>TK?2EE=; z_+(2<`q_?I^T1D9LjjLM)&hXmXa>!ky4dGwZFT#L)!Y!I)sAR&p~+ad!C|`CYn1`< zqC^6k1Z7L&>5(w*7nF>7}e3P%>`Q-L0{hA1{hp zN0fZLK-5PXOe2U)_^@%z{NqKtRfHLsletL~!7$;dRk%qD0TCKK9RnsuglyZB+8J(p zfk|2@{X)oMHd{iVYx(lwy3OKqo7MsMvSm&OPlIK0b$Ch)98(x#Ri(?8l~0Ko6rgJb z8rH&(Izp{&p@PEDw3%q30@DMF7sFTV+NE_*rtMGGEz{Uhy8a3H5lIi*H=MgpTM;Pe zn*n}W5SZ2)EGP)JP74%(`75GTVU2tRpm~QA_&$V{j1lfO?!QMdda6d z>pNs7ldPk@{|lVvj7AQn8LhZY{0Gp@I<#@2_}%n}I?>(1j)yw%L%KvwyeVLffJ5T7 z9%wEFd$K-6m$3h)1RU`XWYP*cE>wlG3udepHf5DEAO`S3xJdbpBlxAss7wQJr&^`3 zd|70tpI52UUx5ylQfdCO#3~-+A+Ux1VW!vf;;gV2a}}UZsMD2$b$ZkAa*)2+Xwa3z zv)uGm<)gd{cx(~~PaZ}##rhs>K`_xW3--c_19AkI0ojX%020G36O1o=O|B<-IVa!q zj6xyTKjjkWIA{2|QxMmq<+joNB+tne;xM>b{--fYY8t%fRjCbc1M!Dit;SDxs(tAY z6g@t)zy|LE_B#xxE+%vU(o!n-VuWO%r z&z7;fl!RX;ORM!UHCl9kA^u1-vt^u|+u~ov zSAkair}z)?m!Oc|EB;daCzwKT?IQ#_oQoLy&=mjsOpI8KEev+PHhfn3%VoVuqISP#= z*tr$clcVv+myrvooa8tf#wqy*#>Y!jU6&e@@9uk6{MdM<&(4(F{Njg?Cog>b@e7mS zwW7iw7Z#D9AMflOI@GyyXD4%Z=gza>WzB7S-@E|mQf7Jc=X$c9{Tnnc-=h( z#l;2ppqoA)y?ke0f6)=ljPZUbkz5pMHu8f|D@iRF+;YLg7hLc#e3)$5F?>P8_u*ri z|M~qAqFDj+jtd?(q5zS&XN(IJ^*iw_80!|JVzj##D#6fr)Pcj|%Y*RI^xOeZIa#dl zeD)&tIV7j!NX1raBi6CVLO5n8hB`|a_aoG0Q1=m#B<5$4^obpkkrXD7xB?`b(P&<1 z21tx>0+}Eq7zP1!n89Z-|3uu+VxJ1SLcS{+Dl7>4+v8iczgg2fn`W+Cx#GMJjWf$C z#rMR|OT!7?xia4H;k(Vzm5b#%O__i3E6;8W&*(}RZEhL=K8z2VWctVLi`cSK&#-vQ zw}*8m4a-4=&tzB7h29#!bI);bJ}ADmK@Z?P&2!v_t}X+wt~YGnURH4Kv=vFY{3dvw z!>5o}RB}qMy}+m73Jc_N-!N}q-`Z}RQb8N!MsL*D^Ne0`{q-_$4gKW3qSaYlVAvaU z^s5Vt9o34e=gxm{roG(h)TzRJU`cq6v58=+O5aLOM$tO7)+KD(K|*~Ti<8iB680|O z`oU5y7V43tD^$mVAv93w0O3r;6&u6c1gwmc>e@-8;|yK{@Dl{CjxK*GC=D%~C0}}= zkB0H`=~w^M*cvLk_5QM8t4R~~I)C%J$6r;WVs&?ly?3cuyRPE)?;iC!b(bm(rTuS< z|2WVcER8U7vtI_}GG4RkQ9wU#b-9=+plFPh?3U87*|>?f#2Q=9Qm<^STxxW6fjX02 z#u|+>&Sn&>91_@B&X%URkd5i2!qG3RC;wZ=>e8r`e(Q>WovIZC5<+XRD1~ zRfn-)g~k{(0TrkkH@*X^ZDcQltJRC`YZAj*mg<;g-iDE|y4z+S5XyJD?feALo{-&~ef3-~szzB6*4p>`secQg$ zCAY4fb}6_kzy4-FVFs3>VhgzHS75rbY;o^m+dX1;?ascb5KLhz#@HB=Q?RCbJj zW1f7e48PWE#JiLltx~*QBUczR*n4O(q!*J)B}nQ8fg!elA<0)`XoR9!Hie&=@dwF4 z5XUp|Rxq7=j!CZp-T3KXt%ebVA>tU#3+WFcu&QZ!TI}P*hcn z%uh^a%SyAD)VL*BND`dbh?kLM(HWt=8`L-wxH`g$~v0x`{=kO4GK>nJbafD!mXC71!eB-kWAOpjD$kp($a zC=kTs4kyFocN5(Jf=DoKqJz~~DFH%Q{eVtl`I5|Z!B|F3fd_ds>c`Qt8y%KejJ_~x z#^`KNhWUi>ii;zGMV2bFj0A#`DVD}#KaHmZAn}EuSt2OS2x$7mK^a=C3Bh765?aZS zXvUY|@1O%RNwOt3JE19tCKxncp_@reJboCli^lL26lp?oJkF2FY^ma8Xi14n#7Hw$ zs2WZAG7`XLYzEbMDd^LpWe9qu89$&Z2AmLQ1`v=Fn!o^|K{6y&1b#lQ0wQonNe0o= zoHS>|&%_zT+AN~u3gVMQyM;;}muANZfra5R*P8K5X!2N8L%32i56;xHlZ7{`6bvh{ zD;b^ADyPL;8HS~4j*~G420#cPy(rEgF&2rl3ZR_jvwD_zR3VoRs1zn%qXAm4&CD=H zRY+GalgrGuK!H-lBbmZrGwV0=Kv8U?fw#a>2!X=DDP@d`GXP+;8jJv#74i_!uu832 z=`dHsVTr@dDpV}3P#fD7Wp-N(O$vHji6Q9qILsOdWil0~p$q26%%&1E4V;A<-ZEbf zflO|4Gf>8`j6cj4F~<88dfMfbmuSNwMk52XQ5inx;xda$4bdxQCfWj_0h)Dw&^j-D zC#{kxAg!cn6%Bp>6$TlrU}ccjmhcMIV@frxl6x>hCm4!My{0uy%xre zX2@AB0ees$TwP$;5acaNud{5iFvnOn!yhRqygMNz{H0b_=>-4{-%9ObgVSn?x+7kN zhKFjF0bZK+8ZYu$*G;vQmeRaYdG3_9autIHKHka61LmOdEUlV>)g7U!(LR6eG#1GS zYvapwNYqd%9gdinckl`=GzWRTQBc+_FRE{Bk4{mA+#V0D1zMe5?_kyg0mx8MfR0va zWMUVP8(3DZgg~#P<@j?$@fO~yvpMvIN-tN+PC3hHY`$w}5oF5G3x^t9yc#rhIsInS zRIi+N0#H>A=oXuxG-Tp<>xos#!DCu87m2(q-e!u^gtQ z+(?EFQ&m(GwHSNq1cI~=8`3dX7aa^S9y~)^BA>^;+L0#wlcxzpPkqNPsd zdE?e#etf6QG;?(%YX zL;1@6f$6)hIr>3|e(TeKy}EsF?>=cq9Kt(9msK{hhxvfShcr`dB#J3(V~7)+?tj`2iO8ry2j#?0iVU``O@s9ts2H<690%bykI%+ z{YW>riIK_7jw+A%4~;@DcAMMP@i|@eIja-qJD8@q%)DP&yk6tbqv!=ac3q)vU!w`# zTT&Qse9Z2$Li=Z{^fxQ-jAoj3dOcw zA}@o%j1@GuHxRU+AZ890{iYaVLmj3F2|6U!QDP&dwWAjWbDV-K#SRi4Mai-gqJ1X8 zOnigJkepPY4*@KF2%KuszDXP%} zs(m9!ZfpmXUhLWbv;F&j1_q02O2MK7;(8r#4~k!fTUx?EAGGs2aO(l_fzq0yLMupa z-Yh1qbPv8^zm!)7=QTjQTQh>L?<8BP&T=?sR82=sqGe?Z`9tac4w&rd7Y9jh=!7Wo z&GiiTlbpONPQhFH8j)b-fq{zkjxdFu*k1GX}H@m-BhE57@f(ye?ShEmJD>psI(}8Pwl?tI?ygph`NcR!e8am(f|h z=G$-8nRVYU*^4M1wNNU6$2B~x$;b#8sqzO1yDQyBpue{-3E_bgs<_{8;RpH=MAa-X2m#D1E(r$PMj zTl+qLV8i*pe&Ju|y$lL&yBSzs+#`d<#jbg;?705K;Rx^27D*UkvQ)-ST$=F;B#KVY z1mE}x@gj*lL<+bezXzi;C&(EY=9BuN1fxd{6SNFs*#tiv#j+q+819h)Sr40{TCj%| zMR*c8i`ht;0U8%kxA2BxMV7*_8Dz*4>VYAI`-h7l?PP#4)lm~mv=DyvQD+tPbwgN$Z$C4g6(SynGMR_pYIvC^Uf4V3W; zB@4Bj%+{dc4W{VNx}ru0lJAjBFEeQ6ytkw&&``l3sT|6TO5hGv$>?trAGxFJT*XDE zMwE&D%UNB}X=7NUT5Vc9twIi1t8ZGV&L(38nkk;zYPBkht{MQcEA?hpCLno}p;e}; z%>{)GODhXlAothxwimT%)LsQN3o1JVYS!TL)KxDFs+znNE(K)lr7N0x&sFMZ8leA> z)hQ(2-5+s!c0Hveqh1BIh}uM5hB|7{8HmS}tnfbQP zopOanTgVxlTIb{Cf7!aZv!dd)zOAd#Dsey@IsCr(C#_-tfWz;D00_>y=9gkx{7C$t zH}_qhydNx^HMN|PX>~H$<$nm5mqS*oRM)O-+quvt$V)9KW5%V;))I!bTN}WlC6SP# zDrT1#_?wy@Tv9Ma?J79`pTpkiI<4K~o#uAjs&TNaO5@V9s_qRve(zJOSFLmuKHkuC z{dBG6^TX2SsGYI~;bt%F*>$+q5VzbJbMH?6dRbi|v$x5-|5V;fh6TZ70@wLJkug z`+=TAgQdaD@XVPHJp0T8hkot#{aU;={o>>I0zVUd{KfR6z<;l|yL-vE*Ie^0+bBAQ z#WU8v1*|^@)Bcby5kG!wEjT(1{^tCH`11^IGR2;UWVOv$_d;WFRYq|HJp+x$T8PaD z0ClezPO~`8xOaiM_(1}cHtN( z-Qb_uy>!ju1)lBCUAn#57PWKc8Evb(7AMMO(=S}JxG~}}vy58qm{C)$4My6}Z1A%( zBQNLB8cACbTe|w9HW+H0w`k#A@RN?6jc!`&v?-Mzir)cy&<5T- zuI1&LvRQi}X-zRJ=)fs6JDABLXvQp~61%B5a?0FJkl`hr>1Z~==^~n_ zpxtPY!nq7a9GiNIz^@ecSyE@hvDCrg-+YfaD-QL2*Jyk@e-iZlOgMYVsWA96QR~2c zN+|w}@AxVtmz$^2HaD7-`oWqbt9BUUu5`FEV2gZ9w^r?j>C$)r!LorEJN z77Ehn^Ksa0EvYrJa?~QlJYlEnM3IWJ-O~BA>A;mpXx0mXGgbjd<_eRoR4S(*Wat zVGr8Tm}*}J$=Q?%-;oNF8;o*RvF{mYElLcL;s99y_eilFJ*SPjo^U;R(y5}bGx4T! zjH@3a9u6In^(`tbgu_6h2*$qasI_>A1e0-HiKEHQf+J`>GR}(xRGYa3cbfAh|l zwf&9)anQc3yk}M6?Y9@M>IpBk12?0ssA~6v=Y|zK!9XHW;j!AF!D@gutEVE7;LNlx zQsys<=x8%H?C#FBy%;X6i^}`Ul47=pufNsj)L&cH5@g?B<59c-iey=|l{~V)8}!;^HzB9Xfd%f-Ts_UmN z-RbVsbt*_8)DT@X(R=S0!_nNq2GeX~Bik7FhH=5hj$GroJ2=Jpxsb$8;uiM;=!W0S z?nwwtzIOiK|4(qc)3(g)l=tSn_jz&Y2y&O$L5sO^bUeRjZVxGv$h$QmX|Kp1rir5$ zN~P%ZTu?Fp!u^_T!B5)-IwC-qaSC4sGH&5RnI7BUfipN1l1Me12vmc?N+k42x5xWp zY+7C2w1VFhDs$weVLBNuO=S1=hD)mgg^z}4huXngj0U5H#~~Uhd^P9mnw&Waj`|Fy z4gMiRvesrvgHqH&923mUE-wuS+O1j3Y>=1fFvr2l@rj2InA@p-S)!oR&*I+PM2(=P zQcEd{$17M63P_W*Ap8kx#C;9IJ@Erc-k>i|9NwEn(@9M2v%JYHtbzF3LXMBeN~kOb zFV&EM*97r$6Q{ELaU2g4e;PP$+E@=3zwmEX%4(!`rUiXkki)Ba{`KJ-l{yKnQFg4k z3;ipT#%0Opf{`y>4-|9diDrgTO7yrl*C5FkfZ4EV$z1x9DQ`XaSw-J%U;$|PYR8VR z&{4D-9VHajGiYUn7Vy$A3p`G08&0w>F83OrRZ{+g&rr60~t{2 zc{PxtCyhD81{N9}n5?3!c1o|36%82dY8qmW^z5-sf50 zue&Yya8go1s)$(h8-1BB?27@9pffh`JBP`}_6MVMFWsBUcAS13%$_ghDA1S>r5~#t%OC6Jb7yceqr)-{q7{v&bk_n|+cL+Fq9F?v{SDlst~rZYW^l1Z<~EtS-imqWQs z)2ormVR?D2Vk~;ZWMaB;Hq#A{qZfv(8iN0W%11d4Y73+Y^M-GDZ<^^JHYAAJ)e8Kl z1`h{^3=6(_$sB2c6m$cCdT{+0o=vgWi#jcUCqfE7NI@dgz-*S@TumoPu$TbF(GyhF zx!Flo7@d7+Qh6k|p=SHDIf0#BYYOAB(sD=A*CyWu>(f;V1$=%8coBrJ)@T-gf#0m^ zlj~m}t5%1mmtUs)iG0JwXH(2h3Bl+nBABOvk^%`4*{W&cx`k}|(Ij28}{J~LWAe?nrV zw|ZVOXN0Z5kXtprBrw7nTLNyqa_jJx;>IDx$*u{>;wJQ2&(@F2{o|Xr09}^bSYX=y z>d=~&cV4s>`3ubj$|4BW{?bVmr4uW%b+(ep^!|!%mv)9c6*CKF&+aVo*h}HiaW&U; z4PD+;k@Wh9)OV!XCUmY_KC-)F=!mNdI`!GL+2MTV+1;Ht#_N*(cuwN{MeJO?RGT0v zF%d=4prABQ_WmON3@CGi%}~Oo1Oc)MhIlja;w_+xm5q4 z*$dBFCZiOlmtJ9#thM4Bnk z-%KWUAe0aqCm2eY$v*0TXe!aVKJ;^aD*9fPD)xCyrDC;g&Ko(b7NLUbg8XDY=oHU? zs?5!CFTF8-FUWTjnNX4OX&qB}<6>7{Ze^B@{p#*}zLHqoAbK9Emed{2oaCr7f^ zT~HugnK?J*RJz-kZ$nvm`0lwmtR8(QY0aw4aYa;C^Sb-*UuU(bior)0=a*b~OcBK8 zL0gWYaev#xX5(hh(Zc?Tc=aNP!j-N9dCb6nD~Y#F%!LT-!9 zowsu-c9QVk0uGY+(xOTIfP;GBr8(BqpJPslSxm5URAt}8N6vtuIFNqup}yzAwP5I( zBM}j%XHGo?lvU;Eo1BV@ zoWXn)!S|p7#Fe<{0`($vJKLL1qO3_32htmd!hrX8n91Oh#-0=GA zuXjRY`ZF*TJwXy~ga(|`gpPrxOPGK3Wy51QZz;MKmuZ5>fa|r_(BJwxZ|^)LCJqD# zjW3yig<3@X2T{Uy0I~5H6w+pZx;b5f*m6K2?h_+F+aNHt#B%M9oEZ8(6M!2Yy41j% z6Jyt(h}KJ92W>hIJ)sZXdcD56mnchQ)oF{>e0!1{=W ztBZ336OIN&gOQR%HN?{cVVwn?ASSb};AspmhXSW>?x*~rB!kL9gg7BGfe1En=7gFy zCknVw0n8!pRWP~if;GTs#;cRGM%1MuinMq^qsa~N8wnI=!ps2?f;vTR>!F&a!$r@8k@dQym7O7R9&rzLG!TmS@vz z0VMyX(1newrw%Qhm#A_jYP5j^_aEOg6*8=h4RB7S%Nj6wY&F>}xKGHn?q-v!tjY*& zu}K?lFfg_yCauOy&r_RJa)yOKm8A=qbQ%*K*4iHLDfWA5gGH<7^M={7w6t2~cPAaz za2P5ye`JkPjRZ3mkY+%x%VR6BkCe&s9RRODQ>GaGA#=X2jBnA%Vq@-jDVLVXWqh1d z^o_FRy5j|FHL~z5p}W!T{J^x zt&f%9ekXL?;w-kQWjZshk*H-_ zHLtMy6jC`WH-j#@Ip5_;ZT8!TwU1kpSbhk?7H559+1^#_vTSX&O$J|Kmctoa{}%cT zy@meqhg7Jdb9iSVuWt5Lx%_$3O=WraqjO+5ngTb7GuuGAkT8pG~=;z%B_WJ zja->$F-SQBR55Z!LPL#OqmwX7P-x1}cZ?hb!sX>*0B)MOq{N`BZA}7DH4Kw_-h%8k zZyZAZ{LO;pzXgt-@prCYIy~u=O9O_m#W8-wO+jayU1b?Ebk&A?slixVF1$*1QETvg zpn+-->bKub1TnX7<|GD8PSnt}850U#iNQ^Cg|Gl53Pju>JpN6h(P)Tl^C!%N04t;u zZX)S%0oowpOoF8_(PGump&D3Clzs4pOhL~+SMB|ywM&MLUNe4(si0Q5PZ0~$cS3{n?v1`rfmgUM(_tLZ1jBZ}09`jU#VxLgPwZ8}db0!Oo zEi>V)7F$8R5@$5e5i)Mw@2r1fjAD7)=r!QYp8c+5fw8e`?dYLPv|}EqRqj^=<^%(z zAk>p5HqRwb#Q$9N$Hr>#i>;m3Y$!alXY|_1O^&<y=GGO8(T~?> z-Zzs~pKlvJYptj=C1PX@p~g`Ys43KJY94hZbvxN-3Kk0P=t82BX(*#RnFx~UP+|}j zOz}U#$e1XF;;}&FRf6uRs7p!Bfq;$$W;%qYT{B>H_!E*x2naCZ zevNP~VI}b30y;s=9x4gx1kIa-j*aBuOrs9&0A_gz{X7&k3xF>X@p8lZHR zG~|L1ur{+rFK2)xpeQe#0p)cHnU!H6ZFSJrlBDudmQlS)bIPF0WizW8Kzj^DeqINk zsk!>hPw=sHGxP4OM`!$bR{jZ80ISgHTjJr(yUIPI+P|)m%B76M!wkE>Y07n@HST~M z?CCqLP8V=0mMCg#=HXrk{>4Z? zNypuAr#t;G_o7<5;t8<+v`*DiH`1zXE8t{!>d?bLvD44#FoT~u^Sd7;->Lv);xZs1 z3u@}6Me~hlvS44_kF`K-_?oD(xF@WpE~oZUcT$g2y#qT?0}f!>^C8L!{XqOT885W4 z()~jG|8;p@1QPS;Ko;3&O_2k8vb=HcyuO~g$)#b~6Yh5GcZAbf0hbml2Ae0DPjLj zf{$nr#Oyb}6g=_^kVh8}o>30~rNIB6<~rpdEfrkCv&xIapEp#mTntjFZ< z*ZVt!-pgqHq4yl69gdH{l8+o6rKm?#{Cf|**Y~oZ@|Qv>LFKO$_;J4DqmOXuk425Y z{=F0t8`vpGvPKY@oXGQFx{>fCK=ca(GRr3$Vf4hx1J8UuFU}wiVgiFo6C2q;Bx5Q| z+{XY~85~#Dvc3`@TQ8|Z_l#<7+0rN+z*Vb&{t0hQU2emdHFfFc$Cups78qJJE?9X< zD><$QGg?PAZfPM0CR{ncZTW#=+WAhrP?DkFYZizd-KiTp2H96w}o=!#soSxln+$o1B$4r z8C(!yV;55_DVR#9lJLoNW4e(&?RTe>jygv=>Gl@{VXrCA1bc%8lfWdn{*$E$A(*Co zl{%EtYC%d@>7%J|of=S5=~+r$Cz_b!=SxMOC88}Bv7g3SY(RJq7G%z${y2Frmh3`f zdQ}W$UN9gW@LLKCFFruQVNeq6Mhnma_MJhIJTZI>HK8WiuP+xI@#l2+g7QO4?!W*3^!EPHnmd5}(2}R0emY%+y8YGKlWO%zi2ul0 zTkQuu!KC&{a2-DO%H_SIT(aSlrT^}Aj~0!cw7l8Jp{Ctk`!F~%C*?| zwbt$4-(u`EWUXqNL%;RNhK-LrvT?&Bd(rpD(QxH+Th~5m{Ri0AK3QcVSOkivjspeb zCf8qk=9#y4Npjr#T3VBCsYhBljQ()LBl!9wM>alk`98GE;=-*ow+k`NNe_7VE zbZHOLuIMbCY%M9MTw}FFt2#}FPP$M0689OdpEBo0IT*k9#EHGTe-HmE9Y2YrRe3u%gc)l27HgoH5LyG7m6SAh9MKzTr<1x#Gbt;-rkL# z0fE)v9h{DOW^CX7@{a8US^Vr6$#)W(QsI7?k9p+b0zwka1q6XGW}ZxT%q`OzKohOo zcp?Od6%@eS8O@Ux01`S7;)$jtOC({On&pBxB|!%gM466_V~XBHH)tT5h{wKy)5yHA zE$`^{HB*b+H1muOa#COWHImeEWihXB+AaOZ3GSZ1m8C<4e?iale>HT3EycbfOA*}n zj$UC>h5c2YMuqpEpltn)_t2z$-p(PFIvv>Kjw=-*uozuua?)i1dug+OBBzAqXxqf0 zJLirv8o^9krA}XS>6rAV=mw{cW;pf`SPbUfuQi$IBQ@xnr<7oZ+rdDCDbE^5FQPqx zHlM+3GRgJyP_W?nFGixP4P(aNIH_Kx0<>MDsS^80QY!X&vZq^r&i@JT!L3CINNyly zuraHr->9|UX$WpV(ml*Xtpc2!ymj*At()ne#zTuNP01{frG+GU;`;M8Jq+&r93Z9Tg51aFu9&0t~FEQ5z}%hT>AFO8#hiy zleUPqzEU#XMyU$S!?zCN)BcAS7BQ7Q8ShtSzTcJ?oU3~#h0B_><)W{i5)trHqync- zi?2IlP`w$CkOos*CXq@c$?GS@c?ntF#2E*}zfs7fciz#Upz%XhRVo_ghh~)h`DqVhi$M*T=%~MRH6L2>28q zw7m#+;p4|(S64|;w>@a}`K-b1x**QIe&CSed4w+rqJ_fYJPeXtszK1t$p9pYvwX%h zJf6U*ohu`TNnTBUS7>Rx_w`u-`%jc z$Yox)N+ZMIew;;R$9eL=r97@? z5Dq2ygomNf+ZJF(Y~BtRIspnT=o4@The1B`cKS&-n(9JdxR!x`o*@K^Zy~WbPMC>uP%M-v!LvPW<_ta|J&FnTa~bZ8G7*m892wv_gWv^;xIi`~ zE{us0(N?{fCb?t@x@eDqI0M#rIbtHijuf6&UfA3l}HkO?kCTYumb`X9i0y`mlEeJ54$-+^~{MHZ5L zV>EsPPRmrPv<`lX;FofZTJa@73bopW44*5sTE*w!bEQ^`r2kau^{Qnn;d)vl<5;Oa zy?f;yP_Lr5nB`t{s@HV*oNqzWr&X9{AZVi$mE}+1sfO&%R{_)i9Ag9^YB5?8hdlTT zII#K+bPMW6x4f|$9QcL!G0+31z0n_kgQmuex<}Lzxo1@0J%b`3XHbO6!KaiM!>2)e zxjbc~eAHw-c2-g;>Iyt3{d}*^%;`MDU9zA6PQ6lwa@Csv(fn7F|~J{=GMh*QhLjl{2!*qt!B4l4$T- zR4Rqr2+T^ojM(Ta6UbgNIyww&(x~wJ2(TGSu>SHr(8RVx?WHcb+OndhNX;-?h5faD z%;m770bSu#f->c4Jwp*oyVDdLVRLcCCd^#{5Da@P73egl1dQAko}Dk#Ksb8I6&pHl zii9=BLJ6c<*Cj&^A-mh89x~6095XU9(x@Ffv7BCEE7N>XpiWZ|&^V9Re#|E2LYN5R{WQTj^&qvJ$o6*Q- z$)G3wq0B8Y8f^yf*!-W>f8?*LKQT-25#UZD0fuhiBXL@61Wu?q?xcl4i1YL>)*s{p z>+spEoW)<6fhw2K_4_c{oJo;f=}noyOramjD+E2 z%&qh00UfZ-pMQ|!85-Y5c@Ve9SLovb{h>kiFBSBXe{Bn3PEz!}jVTO*-Uxg;GGd8_ z)i2jM3p7o-vL&a!y}72S6J0kEu&dXUxJ#?uzpjFJYRsw55o_%H{PZ7y1t|5N&hc)| z#p;wpMSkUsqw~ZPX26IlQiflw0+Z^adda3oN6!*Wi~frD2EC}amt2xsLM|cbnEmhC zzaK;1H$gQENa``4k&XGBnX~bi>);~*;yNH$EDIXhaXuC$ju2sne1<8autgW`+Vun4|Yn8(^Ksx?{UGO8sT7{U-bT0Ets@sM9BH-JfYwyXhHQcl z#sU4?LEoy3Y7sQpe%1P5?Dq^g;G7{5Ct!}+kcjeT(h3kTp$PH(SpZ0iK}h-K&WWiT zDWg;z-a;6HEr+$>sGHxkNgFp9S>22oI@YLv+HM#-Rv!;SzNCbQyy4f(Oa)R?`Xq4| zd8e>fe5WSeWH|`-A2dpIx|s12^xP%Jm{zmfFsW}65B)Ji+3qq!Os~60pN{_8aeCpN z5Zm8s0^(&f^2;lr;At2MM|uHi7PSoh2xPKfwS3X3{%Zj~LR|k|Qhy-t0&>|!zJG!m zPOzMQRn4l2B`YAB_{82-Fs1RBI9l*c1c=%_F{Q-hEhZ3nu`J09{qo1}mf93i1ucE- zF)57$HtFBgxUy>X-!4o?t5h0z6*Q@8GUs2_BKQtLe5Y@}#diqeJAr&2|Dh8Xrl%$N zjx@Qo90&TI#R1IggwD=m-^J}kw1qKQB!Qyy9y#WAOg2I@C4vK9)$t%8YDj~(`Pg@7 zPObgjZG|13j@r31mUoY}1G{b9+I8)BuiA0jTSt#PQ_flID{A%b@<=TC``fDFi!Yh4 zK;PVI%P-Q!mRn~n`&%0y?#I1VGch{!ts8BRb)(4)^j zOGk0&TXduqXz}9p)zzRaeFyXUv*=NvO5Z_8y?w76^NfA3d%biN2XF#dj23~}ANn_K z>U$6DI{M*dk3II-qz}Ptvp7=7CjjcW2)Alr%cvG%Z7+)+t0U&5b;2XrB6ce zzj>Y^gFlNi6SOpt2$m#55-pX5kKPcc&x#9vWLYzwh&hu1zVdT(1lWtV-uqnVJ)O^; z`T9ABUz#0p)R5&tnMNg;Y-N{_oA)oXM_Y0{Hu7e^tpS* z+le;09L4@f&?&$<=*|a>`xM$J;t8to-1aqY$LYA&$MuOwF&>eO zpiCl|)&pXIPc}9a#H=JPXaf=Akz@)1wP3F=n&B5PnDdF6id|B(9*Q^*y!6j6vOpS6 zmU`G>LnCuqtF_vYLt|H|<=Oc;YSo-jn}G)*qv6&bPl#qr?GDH6yiT5Xdkux2@gtf{ z#>!z9CM%~nTdh)a@^F58aYJsAg9r2nXwlhY=;&wL;NEw^Iy_pW(OIka?>XEQ32EIr zZFI}B87`-_*khAOmg^dA_M*jE?#CZ3SnBlznsmD5>Y+|&=}pIy`EG+pr;V*&y?)8; zkySdKigtSIA|1`M=4@_4X*A;>yMF?mA`K+;HznqE!&C<~iCRFdrLLrIApSLie&Q(s z|Hq6ShmS#R!Ytv4+BLDRu>8F#}(FhsPrN!KK~_!z-Az_-DZ zW~Nvu?x(c)DC%C~3liiK;i^!~#888bbQsZS=R7rddfr>;mU-pQyxQIG>1xw|8)>qa zO`BHc;yZn;w0s`A<*m|M-Fv%h^VWT$R{zUgf2^#lsAOVEQCHcqdiTH7>Q6j%$127Z zVR@g-d$x8IH4nFOistd*4yg!U(4lR>+5f8ohT$tYPqdJ|CL<+mA>J&78tC9 ziZMBNm*$ju?t3$RFPe4KQ&Q=ey>Q74M`@`i=)oCx=ZsN6{Aj$6k~h12@Y}+J7t_w? z2HERsF$Fk;noBJw+KmANkrYQGbmnYI#3a6cwR^1ph!Y<%MPojaM%)OHi8yNXi54QDUlrOA zFnejZp(XcZcbmPqxV1|jXu1-@D`{}rg{OR(Pd1mnhN<)eT8lY3y}LA+L@yT&Esiu6 z!x@9cVjtDjB*C81qq?GjOP$VTV>wVhe^+`4Bw&Y1Qi`p#?8JcQO zfGq`Pa}in-k*zg${uQq5G+5k)D`^1V4a6&g7Wfx`A|CL^;v+A>o|RAycpf?~_*K^m z`hf=Oz9WXtFwy02vvA=X3!zhBazEUO_cEMi_}$MwV}m03Xq+4@HTpeZVLn zZpC!bm{&mPCvf~YCu$_F!E}a<=C`;O!jX5}a^Jp+%8K>tR|AzlSG#L{IF#QsW=vB) z+B0O`qT0vmYlcpF=9=!#Y2dLB80G^8PHLK6-4$_4A!m^ogWZz9OYYT_sYj2kN`KW> zR^HKGQEr+sXC^(ds&nV%;PqFO^4#o=kC>&wkUQIKbmfmMLvLBj<~QF_$z+dS=wK{& zkGT3+Vc#?Pe{uu^czlBk+7(2GSV%*RD zP|JXi#*+u_1G?zX>^-u9e96rgL(WZW05=o<={%)$1Natqg}jNN6!GXdebxECX3Ne} z%y02Gatb&`B5)Z8i4;t*RT42JiAf5vTo-U_1UyWly(@wqk&R{nl$j`3V1k5hUe;b2 zt&aVe59~%34->U9*w_%RYSJ$40slULzP%+`Z#1*4-xw{MdL-4-k~;DnK9$H-!EAYQ z(t$s(x&^2hL(fuQeLLEYEG7@M8#a9Vn@2ZSb`AICbSy2v1N*xJYBqqM%&0P#OUWtcmS`1dffm1jq64bq%(@L2?BXSEXpNrqP0%OF)(H*EP{{e;|T7j zSwxb`xR4PPZEVi~D^ zSTGHkXu=oFviQ<8mD)Zvm@)(B}%}uVA<~$Y)} z0tGpYMKV=y;#tT5kRPTsws;^MazYb;5YmdLt7$`aJtG700>JmvUe%c9d``eG_h5Q? zn1F42j({I5?uHjn1~|x&{vZs_5SQ>1v=f4QM>JT>A|Retpju6^A(EY2SC^YjTccrn ze!e{%{k&LAf%lb!NJ^*#{ooGWjXt{F?DN=)s_mV!^icG{^Pu&`hd|j0xcJJIiQn#R zAO&s*j=OIKj(Zt-XCxX9MbQ*TUcTLtp9j9YFyS8NMs(^xTQg0|86DjCmsf%NZs53m z>nG`&m46uf=)%DEZ-DEY?c2Ylz*&Up1A-sz%J>!*_}2g}!Z*b*|3FZ^1k4G^M;^&p zinXhC3KgpOM(0drSB<<#5AiF|F;lu_N! zSUZyK@61djz!(c3mp$Kstq3b1q1L^DK00t8dSxL8q*ux{T5i}otLHp@)rb*SJw0dI z(Z(x@`)QQ41;ZiN=J|lX{s3^ikv`q8ymwMiLZcn%Wr7>FbF17cy-Ehf;hFXCZ*A{^DtjRW`K9RT<$naVB zf}Ix#4_OLl4laZq|CxNS8b9kf{H$%5p3G>V39}@gL5QeM07^8{2D6LKaCn1DgmAkN zL}bwK<_V85fsZ3v=SH50_dH}S;!8pW@Zu$e`$~4@J)EESP@cu+%`4Y>08j)m9ezEh&!6wz^%6Ty9(qE;q^;!fl+F!L<;~PtGZ5`vyWp`ChbNj%O1b4ivCN7@LIlTNhaU*ZOP= zY`*KKZKz9*8@F~bh=32Rezty?GYKSCMeIz<>i1ij=gw4BtKWe5BM zA3^#QHONN^(IBp;nuu=@Pb}~=O<_-rH~M1aOkbFH;l3FzN8D0^Zqx$>cUl?Dxt_kB zlP4uqI_u=QL^^dY43j5M_Vtk6(m?=sL4f0sN~QYnk2x;~QG;WdVxo*Y|X~`r#>v_D|e^gWEPt1alyPq9Z}HA3`u^ zBBV%>r?x3gN5_z?F-J{G@iH8;;KcLBYJiGSlwY)gjboO{6cx9X@lwO}yEI7%2C+Xg z8Z9^OQu^dzx``X$9d-CyS5qz2IBEvw9w@3nbeJRf*c1JMnF$7&dtIK)t7U2r&0Zm_Bp zIePD=QC9kig6|r5J~^IXx}v`k$XEgD^|4!%e2i~6BUh^A6J#>EP2MGcPhnAX$>lP; zY=SIHuNDAVy44Tp9eVtK-vm-rj*HpkGWy1dL7sPbfwf4^hDUAkD!}~(-!|YICU1T0 z+Wuz%7r~?*pXB)lke9g--`W19aFhutPYL(#$vjH0AJYGP{6-nP1k$z)WguT31X$Vw zFW3eGabgC{n}Z=U8%RjF1W$~D%?Xz0Op!#055TFw4crUS&Fs(jftZDRW_?w2+1@W> z=&$Inu`l;tUj5aqJuc9A^@^20tXy$5XoPRQ^%i=FNnM1&Ju~#xGxYeApkDb#%ld-{ z*SEZ(L{Fa_PoH^pYZ(1;NGLP}Wu65 z3*z7x@&o;fO+N6yyc3y=N?1k!oTz5-3g}{V7ZlMAI0^-#S4hz{jro;>F_^qe}P zg0w`0e*Fo8SRrBt1CVpR=ap}miSdFu;r@7W8k3(mvoOFjiVgG_hxydYYFixjRGN*n_( zk|H|;&GYf4pMvWGxDE{ZT+%1_=rdB~f~Tax2nZMPYw2P!WfK>iDa6eY7p!LSh}Vmj zcL_R1B>x#74!qzH!UfEk`QNBZ#7*?vjYl@(|KNuWUE?=y9N)F!ugUf^ca5ybozOHP zI^HoFHrOSM&BrZfYs?M7rs%M$=9ku<88yFd<(#%L43K&_z>IC5v$A&X$TMrLIU!n0 zPp)S^sh?~N<fkeP4>UJDOo zx2B`ekE_*73f=8rO4=`!x_Xuzhvr%=u6d_`c@ zt8G$8x{IwSFGZJ0?b)EUJS?Mw@Fv=+K`+%?fVn{Ja)IVcBQi&zXs_hmjp#j9mQ*%5 zM`Ki~<;{;Y@(P(e_)$U=8V9}BNXw%Qu+^#e%5u^1_#X{wqZ}ApjS*w64utCLoC%JY zWzda-V|@19NgBCNpMLh`kU`#}kwQ$26o$dfd+Q{;&isCvVB0Usb5iHoKG-QArdf#} z9sKnK3Qs3MPsYys5&BiwAoS=A+<9;go)|+RBGFF^mKrRDFu`>0hY7r3Nl=nHO)1z{ zF+I1W<5a3+382VDXE9|*Q^IxBfLvbq^(E~QWS|W)Ps#VGt~X@mXq`XyLN4rD{-PmcJsl5H_J%DCtrK*Nm7t#!3lOV!XD;esZL=PVvyJ#Xkyk$-c{*U^v z?>EI`@li;6wWZ{=AVFvGF*Z-Un*0Z^3McgH;MheI(Ww#aLsJA^cv zI!%#s5^}`dSAyFdNC?*75Md7ldVB=Bk3a_qMo?r^vH}P`d4vgsC|ihbrVPFiW&mlS zi4y%9>6jq>Qg0fIym{6j%OoHhvYs(oXqiv%m$AVu+h#wwWLC_g05rq2-%!x;!P2X{ zx@PF%NT5LPnw<2%*nB4(bgpeh9$1s9ZX0+UbnR0A%iAHiO5 z&I3hPKKLU`xL}B&D+r$Lco(fFjuwDeFs_dm(ETN07jKaVbBzrg71b zuRiK3Pb&1j95dt1uMOlCkES23y7ZQw+7bI_wflj0>-vy)4H6wp!L#|l;|1XRK( zswZ=%sEMeWi^7Ar8w4=xNJkSMw7XD@#dT1HN|7(7IX8O4^!p&G=TxbW{hNJY9jq+2)R6DhR+Dz@CZl{h>f1p01z6DM| z{4$7=m3SZ;ix)6HFWVn45jJau9NL%Qd?C)qN6i5;czlTg%FA3r$ z^pH1HLfCIX_m0TM%u&uqWB{1i6?!h&Ux}IxoR5Ia2uUI>hv~H-c?Qnq@Mq-C*?)28 z9(&?|o%%K-2@ zU0l%Fd_ZdA?J`|>tk=RhO<6Ks?kLv+2j_$`mX}JUMm`rxX;b1wZZU1Mx*Rf>eM%z7 zmwmNLhMC$@OuR;EwfQxf!{iRztwy`tVaks+mD*lpR7?Rdgv^d;A*L@y}G6Y+1HYE}&Tk z801Wzf+?nTQYpu04+RofDCIes)DRlVl;{dwv=$a}g~~j`hPh^^$)t`;rzDzkLgo-G znWf%5#ADP2%G8NmmseFGttx38zf^B&_h#gpH?9A0sW2tG> zJZdR*DRmWfqu?EpAjt|2xD7&pC5Gy{erN4$M#f9}S)yMG-0$@#By=i4)|=^yu>l{u zIyF#2)^l!64+x&&`9zdxu!=tr6||(t<6=LP>VY!9vr?z4a`+`*C3!>5sgX0oo z0=gR+5R!Oo!M^+F?VUGoFM!uIb&YS@@zxWomoH!a1h~9oZcBCP)LI$vv?hL%CR$q) z+)s&C_+!*#d(ZAxmCRh$JPAD#jE)Db{|e_BH8cG<)P%?F+H_4(5WYYjI!_A5oIHu{k(G9pHkYACuF0$*nI>Bx=9 zZ@|z>hZhiYG-i$_FlnBMki8NYjQ1z%e8v#@PyEFj$r>fZxB)&?$iP335r1y-;{-b) zd@b&2MsgJJ)f42U4HC|UXL6s=HOQ+(1QD8$R)Uv%A<;~BZ3ew2L0A(zFhQg%5YecO z!qgpifrL@gpC=LI1(`e-pmqJtf#+(R>J6$H0h=Nrv`%dG_}ZthE_ zyW7NWxF+g)IAKOFxJ%zQH+&k8pxeRNM9B$bh5G@il!3Z3_g$6ge2dAdueErG)ZSQB zjy|&*ZMs^38B4RiF?mBV<{ke0=Y6|(qc7^kT z&ycXQ3Vh?N3@#`{U%!L@Dl35oodw{DC(`d2Tm}^f!Gx|Zpcy~DuM}v?@OA08KTfo_ zC*a|#s)B;T!s$Rg#;jBVSXEVC4%X%2KNJ3&IyEov5pX#vneH-W{>sbIWfc|URkNlu z(yHaFIj)X48Lo~$x^Ik-#vI6}1(REELn0w@SaO9&<1;Qn3B@%aBtVIf-fI>!65v2)PMf56Dg4 zS2ZhyqIEnxHH^){GYM4iVL!L*yk&h=pg7ABh4Vmz87k@JhB zavDzk8(<}JPk6zwibjh;DboU@TqZxTS1V)TvaQS#sY(u(lx8kbt@!yRK#Pf@`+!=3 zx*;p$0q-;6$C<&0=Pku#A7o%H)=&{@C|-#tVET0hbv1R9xDMk5HAa-feQ{wG7S`R& zvdd+Vyos}!ps?&F;vnIRY3OLi)KOHpVub}5PrkY+!F}X~6g{8_>BI(>a-Ye7+MeaKzp>~!mgc8@5E zVy2{flfFP#ofjOIRhXsB0at2NS%q@>mc6!8ZQ$d8bW(Tr?Z}H{EWzyOIXO!QiSj9zNv|deTxk^zsh`7;%;7=c{D=R52OkZN%rzouj zFOVk}qR*DrB)2Y0RVKo--8^5Yh7X_j;b=;Img2sVP{KGT$VYlJX&|y^8)73R!dND& z3@{NW5rUQ$C%&z!8RCATe}f1wUS^^eFELep(Ncnvd*9gu0HxJdjLw?PM5RFf(?fE* zbQBIe$wxZJRfRr%Mq1iYDqa6f4BUou;C<-8%Ox%I_U@VYVAkjgt#;UKNm6c?ow`Q~ z<=wczty$ijiPzur&DHw>>);JU7v8|@H%$WbaRJe`@mxJjn2u;8J2wL_AC-ZOTSqMz zs9nMnq!W6g>HmurW5lWqOaDkO%z1R%q#L@5nBM-1?t$MQu3B6L>PP)zMIXvk4txfG z8n?1$+JY!bp`=*xO-}*sRCIv3tNYhhd;o)(O%2GQ5=66y_&pS+P@Raz^hwO==ebp2!dFnrY#JT z;WkYph^h5GP!P4Gg-icKnEv-l8HBPuINaAVa_!2I^b^8k?hKTa1n$%i!WzyKG!coe z0D%RfMA#MDNhl|8)nIL=ez6z)PdXyZhGEOsmc5R?0NPi*BWHJ(YFBBu487*z$9FVb zBa^I_$oqathXlN_Fw&Nb$IY9s05q8UJ--}AY)gtQWmaZ ztyzxpadk!L5PGj)S^cAj6*g(M6hQf`Gus3ofP!y7Fb>=WPc2wiwczm7CF{2RR=4=R zX;BDbo=Dxe-#lnvt|O&dozvkDvLWWr3;b z59qr|x4pKCjfA{`x=9s&&3W?5T)Yymr>>z6hzQaV0ppTvp2DaQhEX9Rri)=7vkD;* z*p(A7wk{qaYz$EY^9=kG*%?vQiHV&P`u#k@QKzWu~ze32xmn`W>5>E=^zhuXfGt|)1*l^zAb@0J1 z_#Y!FB64xqEq0U1ZnZg_Rx7Vnn{eEbNyH(L>=iN{HZk*payF~o)Z4KH^rB?{Zwak! z9XUMa%(G;<%Y(aH{$oTO>w+waCG@w)NW4a1b{+qu)K3(i1^{&`1$to;2T!LMsxJj` zpG)@+_)_T=);}#?0Vz!O3tpn|Y!>A`#BT`x?u?$Mpm!en_~y68dFJh>Xm-tlLuu-5 zJm0{}(jP2X(?9#9shiQq^WbeXg(tT2-p$?rZe*z-Ba95QkT9}{fgD*Xg!kpBkalhQ zay&pjLEXJ@7zu#4)@pS|@Q7M3*5M>-HR^;?{e{FbA$`U_6Gt%)a8|g zh)3oDKoQY)1Fu<7R8uBSQ$!SOi2$}rB#=HAG;_g_KtQrex!hIa4}c*j_EgMmYl)P( ziWONE%YHZ?9SiL9edsEvE>yx<+koCM=TH4bdDX@ zT&kcST--Lg2q;Z1W|PffZZ2-5lM|kWY)JAhzXh?f%{Ah7B6{X23YXe(nWU5!j7R2tekt-{ME)O8uw zi0v7@z+11MD6)EpY7ytbQN0#VUc>-Fi+hO&GpkH0qhBhXXhB;QZCHKv)vLkgIZt2p zHd)isRR8KmlMu9=yP*Hng}y_tq3^mzTm|mDfG!wh^G69N_LK#PPluVe0nC89J!W|a zo-=FU+02pio(NFp*8Q}@&huVInD>eL1wIiANeiZmh%^d+=Nh8KEzy#(5sG5+9(XvD znGwM9iA{juKaS7~S$GP`B0kL$A+mgueuGm8uO_&(jpETC%7h3QS~LPrqnE-y%kkQw zTaO>#y8NNrpVXIur63DsO`mII+2dO)s~*tEO&X(5|G=cisp-P_FIJdw>JW0GD_?SQ1PTvAF{+$s26@%n3aw zmtfsd7sz_~exN8?BFJgsdA^5z7h+H8N{CdFm~ol;e%UP}%2l01S)aLYp4rC^WrHpz z=nDSRVMwP84u=7z4B$ReI8EV0$~s&2FtCF$!2Ymot{Er>$!4Jvq|8pI8KqnW1#nT= z;Rrj@6Vi92V#9~WQsNO#Sh5(r)V8X!a#b5DpCzmdSKz+)6J8ezi2Xk$4te3*VcuE9 zn2LG`LX)80?-8v@Jtl@If&;=3h{}z)4}`?|qXGzork~*Y;JJi-JmOE+`6CfOe8vx? z=Dr*frmq=?{&N4r=){9&`i~@`Z^bwex_|3856l6}BmOPAE$^W>@B9JHpZ+w--HPL& z_^$84p6SQ^5%~AUXtXgpX3VIF&mXz=t_RUO5BG;>KlnA+>WhpXeJ6VJ{VhQLZp1Id zK=J!q&=2oMh`od2EX91E`L=f4|5plF-?UjzWKM!Ta{;az!8tM$_&W(LIJ71fdt_aa z5Up*&!L_c0Sc&+>4GI^NhzQt5B2+jYCq|qc3`u+$S8bTMGi4SYVVmNdF|Vk?&6~{C ztf0e96Xk6vqU=NZ*s_&(1k2DhE;`^<=J?R-2lZ}E<=WvzyrF&eR#CgDw|BN}c}@Z)1=;o0?SZDwgH`Q8_2hf{_Ag$t=P%4<=m{fuzP_|? zNryDY3OSD6HVuuJvtY`5zP|7Mhp(}zEp1sH(~@y?b9T+nL-*VbU~W;1zBr~}UEUH0 z&oGeZ{SKSSQgFo(_i~p~3FU7Uy&sHE%v^74c2%#_fH&rL%uGL} zlV~?C+BtLRv|$TSqo#WDq~u=I_spW4GN3x=ACRnnHYzUQw^JZGcro*3RzI@P1^#1B zJU}*`U?}LxBH-@A7bJc+OpGUsfUs8s9+R)M?oIXGn{PYzd? z{No$yyZX~#W2z%0Jr*iXfQ9aSiN*oPq;F1NJDRoXB>65^zC>@9%s=KG>zK>**Oy$>VfGE@Ajs%Mf(VBO>U{o|KRcUM?2c#E=#eK+-raap^{9?m(9k4ZRk} zLGQ)UWTvH@N=Z-0yEJ633T&)NPp@eSRGC7Ub)TG)ZVH;yQ>J3(K4gMJs{`mtpc)4= zD~|`N*KBF(e6MNCmL{&SX$$<-V)7KSLmh#tl9H-GhuM6I#9it-F5eTVstTZ6Or~Gv zRKb1ScW+7dbqMj$Of>u)X~04LW!KsJ?Lr^#x(q_-7#fU@fe=^==N?)f4KF`*XgS-q z{1A8@dZQ0u?wC(!EGU=I3Hn+Kl(Tv%r_N6|->V1>2{jRr%d(Pkcu zL0dW8S9XTcyZcTYc!C4cr)&>_KA(NYojERHS7>9qK0v?2Uo|_nY74lOGa9(R*}wv` z^dnx1>OnBtb^!lz<%KQTzk%#i>xS}hohg$;56fgme0WAGwK(-gqtTHfRf6GMrcovX zGx$s+P6NgP4rFP-Jh?Q*VZwio6p0e;0S>cDjgE1d(KBEg+OK8PIhmYC4?-5a4JN!U zg`n-^Np0s%624~m93V$$!f1Os2%;xB4NiYl!h@C7pz5(tUOg&h0{{Z8>L^et&^!A; z->*KEqANq*fy(yJbJ3gV1n_INp)Wqk16w*Ft_l;bF|ZPFs0h6Te*6qwir$I-2-5!N ze+Gg%at?p%?AXI2Sy5g>@%afZ9Yec8SEs-qJV{yZh4t_fXnJ9N^!xQMaPK`E_MvoN zxGJ9=xBfV|rK5VoYp-p{`XzXh;EW@qZ-7X5*5iJ62P3B*!HGPEV_3q#VE%>2>@PmS zlTDy!+~NsOv`m6bNFtco$I!2lbA|B?XnJoXm@#P(S`~Y9;iQUY7(@q_KpmK#twtA7 zc*QLCHz$s4-n#${Ic;jJ;^*FmGSG>e$G!)qp1G@P{G!+iv}*8p&;t8*_6IYdarwkq zD^Ugdz1mn@b(7@`sK52W4bQ}Bgp}d_LG^P9MK_3Ec<2gAE-(Z!yB+k~iR6Y&#It0= ziy0cxd7MDKH(7!fVdmcTYfhf{!+rPt;l#{jl9z17iC{^DEa@ghHc5RcIly6hn){^xS&>(0ADP?JzmD2=fJ z{-Vt|$!McH^o7khlZ5dOUA%Fa-}2RComr24wPud|XNztbmJf1Xy+683z4`D#_=(A8 zGsRpaAvBPE>}#?IPm?_wMZ9}iATiaH(UH6pM(gnB~0{6Ov*ppaT4AS z4|JRy;ZFQjYUXG%@n)mP*_z>VG;>zs?Y8(aTD2G$mjKfeU|dXp@o?vh?j?`*j{kPp zlCB54V_Vj}_~N>j7hXUYy!~tXdz+_P*~|e`GD4-UP~-4WpKOz}PJ_AfESXJhH7heh z0f&U?*p7~XkyY&e=rr^(pZ(4|=))yT?o0aJ>nw1nojxboR1Tlh>2nlJ_BnlIn^fTR zap$sn{h`Cdm-LKTGCZrtGx5*$LW`JNa7R`j84nDmB7bF$+?$0w?6*F*0HN* zPKmf}M*T43Bk#HM+$N17Z9rY;Ywiq9oTnvz%Za{!E;E+adamd*G6PUmv3`JpfDo*Z z1l~LsKN_eP1d9ESKSF}kRe%tikgeD_G9BlLV_zb@puT@;Aa+UA^A^>;-?gW9egyfY0C&{tVS7G>1Y*g`-)tLVQrztALPm;QTS)NqtZIJ^ z$A)lFrO!0G1y48jJSn%RGe1gfZJLCtJM~az0p{Wm_;1V1GoBK|F8tbEnAtP{hQL=d zv0eXlsSP`Un_NJ@-)X>4zQ!2H^PK;A*@bJ@FngATWY zrHs8>Tr#KLHwcb^qxd{rh|Yt{U{Y-0ou^R;YG-3O=GExy@X%@W4O|GuqjuB*ZUzxG z)JDVlzWQib3)LW^cW@C0%fx2EhoVuIqdqaBe}WIu0Epaz7=3{*${39tqbtxuhS*u+ zLJD8wv8axDfN8}8G!f4WUJ4ie)4Pypy!uaf?&L%|mMoj={KO5YiNJLdKMJg_JN3VM zB`~@902yWk1OCX7@uNoRgZfdUaQL6@NTQ#*KB^->DOLD=ozZqQA}$6+j@pd6_YKKU z`pMUUFd$|)2)7sUfrfv!{lwMV$kmY}4Th0n;0ArIt>`WEdp*85 z@+Tj{Sw(ovME~Ox{#FJs%NfRDz%^;m01$W5=#2Yn6x}S!@Lh#=>w@6RC(u6JQ{ej~O^sNEfCK93v-wQlJ9=SS7Dg z==2sj+jhz_d?NzmKQzPF-`CY<+4F4k z`_H%K*|TbO@4qgjeK@l6<{T|(i-d_8Q#b;PIVd$iXpllqFJlFPb4aaHqoCxtRF^X~ z)#*y*IHh33kq%A}SXuPIZFk*uTlwNUZ=Gtr7!E6q*`;MU729*%6&3EB?G-s?rP(8f zf9_b@dM_O}J7h9U%Nj7p+Dt4`)R0&oc<6!&6@|Kz1mK=7n{6AkIQ&E+8lr3Mq`Ak1 z6PQ)EkToaF!G;{7YjrAi&j!KkWbM+JvZm#gSwH()s~kRjP}8mMv};UlmpHtkA!XI` z)MP6%Y}53-49F}Q{i)5vbDor#!#HrUA#EnP_=_d$x8Hl}%K0VFTF_fAqh7bGAaBF5 zV|)ZikM)$jgYRb@-_jr`zGz+e_MmxY{97@pODoPWNAhhJTl$>E2K-v9 z=Wu13^+K$3$HGi|CZ5p|0sOJvV)wWYB0j>mV;*-n83`RmHMIMnh<9NoN;YavuyME{ zhNw*pH8W&InN_mJNta$;e8k`*tIqs@I(|5_s(R_lLDoEu&$RY!D$CXYws2a@@$<)9 zrWLY4lU>%-*P6+5dDcNImsX>Q#~K#RkZ|qQ2S6lH-$eaURn9EW%q*W-Su{N8QsPJ9 z2g=h@ELu*H>9QG(wyaDgr%th?$?=o$^OUaOaCSH%4!+Ej|gN{!4b!Egq8}H2+|o)#LGE0wnJZ{ zk8S6*V3FCy4}4AHG@G1~ouzu{orUgQD0La~73pYao^5F_aPiB{buuj2PZ?k&n3sB3N341^I^9Oq;;KQqS}%Kt$X<0WnyY_(;BdbKBgnmU6w9g6pqm5a?!p`Z^Bh*`iUwG zco?d2hA9qF*|8C-K`DtKNo1O>*l`qBs)(pSUn>SLpbJNL9ITWWbhRdFUfWk~dD4t> zok3C=`+0XExHkr)zdTNAc|+2zG`JxJ4Ep48U>e+XRGVg;+tM=En5I42c`>O-v^~(V zrkWW-)}G@E?}=g%aJPR^KGH;j3?Tw;(!Udh;uvDnp7IzzcLlCZ_|%I7}?T2wNgS%5{I= zokTGZ(~I2bfcMPVr=B`{26&^pFzeE`WY(TNvzE}26<)n_#fm#&_$5+`m*@rduY1uq zN3=ai(e(uBEXX&QmMk$D&~Ia>)`R)$*Q5K;k7Wn{(EfOtSml@@=QP8IYfu!#X+zoL z?SD8}hWWN@SJ7pGw6}pwBQu$qf1@^s*=GqONV2>>HY5(6?k+vdo{iHI?@*wGGAfn| z;5M2qxYn2uS@ptnks+3Rv=Q5Yq(@6@s5EDy?_PKx9T>3eymp`6lu!6t!l2d|Wc? zz^5xV|M`B6*aySOsfJ9EEx~c9)#yp>c%1H@h*~mi?}JMB%AM$HRKQ%27=upW7+i;c zjjwME!F4#1nf()Wh}+D+MVP2d5V0z0+oP;r$fG5#udB^zag&SmszN*Z$Mc`Pylm@r zeRl8FJ1nU{^>X{mJCD2*@0Co1nDgV}EStG!&&*{nv1MZ8qo+OlDXzO;qG+0P^)Su# zomKY|a6bA9&}2AQPo=%_Pw{357Lw*y_Bd#Jye!()^icTmvK~4_{V2+N@|Y=fDN71H zN6%2V#^gU8M?bh*Ci7t;boa2HU7z%WMWI+U75{r>2XLqxJ@$$gP1>ik`K0LJX^Q{U( zS?D5Y>qIdVr|?|xlvtjL;)Sc-rD0d6pqD;*9Q}ExL9_GHroBLaL@R!_gA>Jj-Z2>7 z5g#=1AidDpqcrf^-xx-SaCarjLJ`ZwTqluB2}AVxL~hG$@dpx%p^gMtRN~tR3k(MI zu`ErNFPFcBK91A)f09Swc}XtM$B8?`-9>^6aDmas;)Rz)Du~CSBOs@%e#FR^#J5Dh zzHVHl--gJCL>{sWsEr{r0?hJuu>pi#q&dMah=2T;kW{;rL5w|2b;4(mkt*IwV(<2P zCnm5Fj@VBVp!GO2%5*hnqV2_?t6hBL=I+*t4O)nl=H#A)8-IY5%cVt~LFW;9r@sD7z@IROIh$o;OxHVSt%cnT%TmQ=MFp)`bIw0vaBF2tKTR_u%EBv-w-dL(o}t`P9nE zo520g{q`aJWa@(@jt?ec`WUE;*o$ic&sai^fJ2A3E>oqXu)Yfmg!+!58&UOT$R@Fu zHkOt)cBCYoh`$G~GDMx4Y!M0^^B}#z*%Kisri|H%zz{Os`>u6Iian4^EN2+IM@w-3 zK%9k5(k4la1CE3i33WhjN(hs9e_{qhG*gN9x+&=O&k2G)41*?>!JtB|234ENfLh53 zXrd=EdqW9eYGx79kYKV02hJ=v7>7Ub+yldnh7F@XD`|j{I0!#_Jf8onvM z>$bqmWizG>$kvtPKV4HpNkTVT_y;YYpBa->KGG63Ktz=gvHAifm9&cyG*l|nA$!tZ zd7=WA36cwHw$ox#=BvA$&tH|vw#Za!+10BuwF(DGpjS-H^t{_W%4F$L;5}f-9-|>W zBi-umDsSwwfBul}nCIQWfO{0%UHIE?*GbZRj-We9KUPGQU;t&6L{MDZEb)71HkQI0Al8U zBw}Zn`Gkp&C!LrM zZ6vGH1h3Sua{(9esYSw60gS9zIShV-!{mx+k54baU)dttl_hR0~@_ zk$eXC4>IKC8c&})$L{ak!7YqVJ9o~jXBX-7&PCs41LyMe(R=mYUijvk-uUJYU2jbD z4yG59Id@3Za!X+vu5r@C5*W8bE?{byp-dD=fF7g)H>TtL!5}aKOa}A83h*2_0X_m> zf*4fd&qMHbJQO^~%oAxg@rLa6NJ2DBK~5xM8lqqjGy}g=h=a^{WntlLO_l@ z0>wGA>sU?SS4IL9QBzXI6k6^cUYG73TQohE{uhcjpi0wdXz zl95S}=*bXIgPdNor5Kl<7d;nJKUNl8F-62~jNB2zoJBxlq4i`Vve}S_iTf`Il&~Hl zATf*a9v*MrfW#%b5pheXmuZ|{BH#>gmS9#0xA}mHzLtXadDT*v#H(fnr^JZ^VjP*z zo7o@%_w%TMMf^HcFPGehc>ps-d~)F|Svcw?UPAA2nTp+{R6;NyBGwTvjQCM}P=sbR zin#=zN9c_tj|&?^r$pekU~uU_vBVIL;g!5qrZjwsn1FP$e*vE$;4vI}GkFgS)%C z%f-1kgS)%CyTjnl;O=s9cZV6?d|S1<@5g&dRVV2rKax&WSEZ}Zv7Vv_yN9Wy)X1eC z$2$AQl}fd3u}pw1YMdiVy@(X7sKi%)U#UZTL$PYjz*%6b(zQ*wjMDgMp)(HetE*z- z{Cov{)PC8qn4z{`p**NU%2NAv%FvHU7!r78SGjoLOy+0uCGy=ims|>l$009D>4gX6 z)GA*^h?{`eU(w#Rz-SxJsX&%qR?TnRMU_v!*VfcfN|$Sm}yI-Mr%Q z#JMS*Ih2r>ma9@M>)y%v7mdb8XL~jw^`^P33AcnVP2;TT;Rk~4*L~wyuP+0S=f4QR zw+l84!ua0gCPD#J-biuKRtWLZ^Y_J59nG25-kC0Lut~Gy82IgxQ39I~YvpqCxUK)WN=C76C&4qjUw>Log*uYJa~;ds5wgUaQ` zd)B|klbW@938nZ`%l~rSs6xj|H73-V!U5p3@gCHnowl(Y!qXZ#cC1L5>?ggvB+TO^ zbA5_QJp~6v5tkDYH|Z<`OfP^}DDGTFt?#xg@5m3Yl{kKi*-^)m39Svr?U(>SCsvcr*#pl&-%Bo#g=NQV%Dm+2@R^4V<_2D>`Xx+kI z<)%@M>(apl$Q$z(+(hygvDM!t8GM3GXW|Dst*agmFtR%EUTYwD+yS~hB zTq;+!FbDBPIw;%0GHTI6J_P-gg!?e6VK7iPY_g!E3C?IDU_eMUT>?A#mTaSyI62i+ z_V^cF8Lj4-r+*G+3#c079d}YvuW;?@>16n$Qkzw|nrYArQ1aOi_U+K9RNqthTQWn0H2vesGU5`7R(bCtkcR-uO^d#eR z(82(Pljd z_CsN_Kj87;Wu? z$8+M#1ZF-s5D1Bt|6{<3B`{_i3$sD@()z`vPvZ2n%t+l7IMUTy2d1|>d5Z5x5%rt8 z)<{?e=}N$d%Nw<%A_R+?+k~AOlXaUh#fsvAVG8f5DhkXXgX2jvn~n=Hu^JtGw)yd# zUVYx6;Q8k1=ftwsMiq@x9nRo#GUOAX*z1xuK}5vhdxiDtP89jicg>`j(n!6FOhYf( zi{EPcD|7USW$I1_nyiyE>0uFz^z6+zd z7Jpg2{WN%M+%uf~q~T5c>&CPeaPcRjUMhEMo4k&_z@HBZK0S3QJA&rgdwY6Hx#X>{Pu>+2I2#~raY&yaY4{srcN zDN?-fjR**MktM7P+$Ej^_0)xgF^c$xA{VzwLxl{PJUY0tzjG17fTW>XLB(yI->ipx zONclnOs}pIbNMN*=7_;-IcPPl20h3?He~7Kx{t-GDnW0esWEOP<@;v+1KAbqhk;Cc zY@HKRVb<0A`l@|x&OUA~CC6vf->(~K7bZye&AA5I1C5U`oFkzCx%=p#HCn|H$%y0y zJja1mC-41at?p>EAA?E`u;`};aPzwm@FRE|LF5T7ED~>{vO1C#N%x? zs|!w+xl+l(CCQz!y=})`7hy2>qI82iaGZuoBrHAHbTw5mJ~5kTFdEV3EeA{ESQAkQ zCk|>cjrt|f{6rHXh8Y<`(Q$652uh@|JQw6%a__1F-E1hR4F{fZ0%$4&ue}OTW{>a+ zTOtFqZ$X!;=X7{mh2Q-ffs_r!)U0hB{2S_gK+3o!mWgK$jPut8TB?C@@IYO|I^ejn7-Ne@0qS+&8U?NU z3WHCJvaU>ENtaiAdJ&@N#BLu|{iI_jM+Qi_NS-SEn4oW~vd&QBa-pdS&XDWcYmLY9 z)z+UT#B0nV!0C7Vxe3S@cJ&5bK0dZG%TG>bKM!tX+HYr^H{FigYR(q3-KLYNc@Ltd zrgV4#xexQdd$<@A?QMv_^KG}+88u5H2AZivlIA|&b5!mDG;K*!%(=N39c-u4oL->p zyfpdxajPuBgWT;KVB64kHI$%c`+vV?AS^&EWqgefhAu&WJ9nRwGO*g<{Sn(*iCvX9 zR9YLjsv{Yj|H}k2r_JPApT&ga{W=jF_gP^hyw4e0dFU~e`LCbg`&IMlAiLC$8T5p{ z>u_A$Am@ovD8pCZe66ofy1!46$Y+o6I#Xr$HuMQ9T+MIf$<_SdD^G5n z0zVY@b?xlPn<6QrrCh~+VJg93*VabTCj#}icB@k69E-~Fjelp(PeG7}lVR`#9n@VU zU3tj3-EIB42pJ5fOmc$vO6|xJO@#>_!66uXiA!iP*_hC$!b$<3t)_1#I~wFWJ%!0` zqF){tmul$CD67r0ga{~<`xpF%hF*r=dX{;)+-SJSlYzvY&6qwTc-*@D77gpc#vOGu zIQ$^OFeQ0Q!S8<>M!b*xTFRl$Wv%=T*&1>Dpjho9O_QH+S?&VMGyh|GGH8gb`?K2B zlim?8o1t&YDr{e~Iy6WpU)k!^BcOCSTtGR!<%be;Fapo{y}ElGsCX!F*R`%E-fvM2I(ueou`w+{0U<$u^mq*nU-G4Tb8El$_^Eoko4WXyNQ zu-EAPVEG~aOTuPXuDcFvx7)6E>`+o|Vy9kN4BXS@2lD}%gZg_cx`e|5_}&H`zF$q+ zS1OXD{uI?ZZk|J>VZU&fKR>7{>u7KA=I&RE?bz8@iT~KiDP=NG`1E}--7q*_F>Rs# z&8>;I9E)K>?EUwnSA!e$>ql)0N2gT zmx0**%^CTd)n{YR}B!sSnEPv@jSq?gT$@J7c6>u~2#<6mKskfx<;%eyV zxHC-^E8&-`nHIf6>!JH%VA7MNOLAbq!{Ia4;pFF^$|$(4nQBBr%x&p$D(NhaO6{zc zl#?}3{Hp(Ha4PG#)!I2j593tFXpS7Q0L*zxAj5;j#9Z`F4&E_6Pt3l)jl~L-Bg6{S zzBG-tE*jgPNEFmRtuEuoh4U8Fj3^(ue{;dtyVRJxEv(8&-%;1l+y=C^!ICEmNnmIvQauE9NaQQFT$sHm)wF3T)$AO= z!=6WGIp7IhAR!?8w&DT4j?$*ddqYiDn4L@$PgEfW?pI9oDW{7?D8rpFa;j&k5881FJA;y zwMw3TUfMoQIQ`jr?*wQZ?_gLU6=S!0-GYAn!IwgRAJ<}?d)e`Ud?=xS;0<=)?AjpC zMYUA9|qCj zzjx7pZEgEpVOR_Ba;1pk;3^g#7ILuncY%KOQnWveF<7WNmXz5nS*z~>S*I=!*}A&~ zP!q(pfg0SLgkt2!nU03;_vO{~1i!r;k=G)ml$)c4I#){#rr=0?{T-KSi3jTQdIMaG z{YH`#rx(L#o4C1*93U58YArOVh^x1c*e$&;iS6?E>H#)wl8b4eJbj0D?~p%qMjP4c zfmHk3=sR^$IDRYcN}F5&A{l0|;q%|D9A*5zpSm6Q8}Z7Pu$SaCq|`Fq zs*jiHaW{ZOl{)RmHu5KbgHqNK<~bvnnKlJ!TE}&)Q6{wD>1nFCcLb_Nce7=0go%*5V1q9r z^U1EyBJIWfUw-7DCy|kZ3)p$wVXDaz$c>noN~59Ti3L4eb5E9|ey7#ppk*|3k$V@v zx;)ozlt#MAXRp}37T)}s`w0}FCWVnugeH)sC6j0Wd0b|L`~Jv0%|v4+0`#>8`W3)G zBO}LO=6a&9WQ`(Z(->)YfjOYYqsf4BVD;xXJw2tiX5_b$R(iIVqA%6ULLU|7T+ku; zxax{h;KdmYdYyegQ{1 z-4hh+I0EJSfHq%24r%jcwFjo`$Jc+W9bdLapU(K?YZl~NCk;J9mc(E}qX=02s{BVU zxpYdakne3t;v7>$`KwE`94Bgh5!K4xZ)M!wJqq&VW~((~xa=2^XW(NJj*)$D1b6!p zNZu>P8_R_HcPuLfoZRlkA0IQ`ezEpJr5}GBU+1w<0?^4uE0XIGE!I&kYZ)LYVl|DP zENi*6^5cZ4Knw)d3k1>h0}QUR_Fh+_yB5}DE!;RiZ9V<{#*BhGjn%iu;ZIY>wDeRZ zC3|ZaPu&W75pN`bd1e{vzs0f~YckdBkC82Zj(TH5^-V^iE_KGOVzNZ^7r=DUI-oTg zIdWCZg?lesrh@-bw3w@2S5N(^h6>HrX`8Hy>RT_XKp)#=_V%NGt0rkO40IqUxh~O} zqv4!C9e z6C?*y3S%&sr=FuVnL$`qZ*8@Qz0Co|c-I8f(NdBoP|=ZR88Sqql3yT)*Wmy?{vqP7 z^=|QYn)p^JZws8G_4BJYWIX5fA;&H*kF85SEPgoM>8ZL8i^4c!TKoCa*olCEP#A+D;4&1(WM$>tO`{elLgD%(t9#LbmV*+SP;GZ)*dF;`!r9 z!U2S^bvp$r7+y~j--fI}zW5oB9qE(0mROF3iFp-Yk*OL&bwW5LioTW1SXoiZe`Cm)>}`@b7_QWc4(| zts!BdqC-VH61CB{@p|nQ&ae9twg1@TzC+@)xHkm!%7|vk6zD-3BH1c^^{CAHrO0-Ve`0w0r>*F&udeFKbIo; zEFBU*(ClgNxCuVKQ!viS1VHThv-uUKS26MGOpXd8CP}g6RM9MbThQ%-H zw`DbNWN$mDAMaj3&7i7SNz*@TzHCL0w{_C?xx7sG$yN_TF{2+U6QL?LOS|(0JhC86 zQ3)IweVPJs9)r!aD_lz5H|k{|2|^mERq?b&rQ7_65B;7ZnM*#a1^o3$=MURa-ZJCl z;sV=;#l-YFq~!KRU-`IwTIS^R7%u9FPv*LBxA~?5WD{&pSZ}};XF*6ijaXJwgn*6e zrIZ;$KApnE%)*7*80SZT;MAJ zyXX8Kd)e~m2a&J2sK(`abH&xd@pSr+R~_0A8V~?}Z3Zl10I0@|bDI;5_5}MdEhQo`+Wc_FTRhAYL$$FL3HH-;dhV z@0@BsUV{z7qDJCS)dR5l<<3R^)a-G9>Cv0+@>&kyMwza1L4YYXjH->ujouR5u*%yA3DA^_+iKg_PI0?{LTk zy;FAE^Ck~6jOt&_P)12v=G!WQVdrepqP^Pbe|4m|X(q^|>%;FMON@*@(uoVDhTXoA z1qntdAykC(51!%7d4anxOS+*~K19oIu}Uz;AEN&nv+ftVk#6+# z9Q=*!sTAfpZMmq%tIb);MO8MiOB<8npV0etDvZ^hi>9a@{ne_Q%)EPyKWxDE~cfc_F-8V3K;+ z8VsA`ho8|Z8!1w0zhgFZ_G-Hvq?$>m|78=6kwjhr^A*|a>);Z$*A*}*RoI6Zcpj1U zjYgyo+}wToY9OCJg9_4;Y1sQ#y2w5I2~7=&8%`8}Ge9yB654aHx$ED_X6YcY`!TPD z?qqj~$zsaFa?|NXEco1Z7~6Xp)BIv6x*Pm4_T92*A+A`8KTZ}8_)!MvZW{9pq9OLe zpN^mIeCb6}zwSU-F@%bmb95v0!ysr?LB_3vO`W8Yno!_TTdmuFhJN!rjS9-W^De*+ zSwkQ%gG&?|R?StS)$Yb1V0|Rh#lwqwGD5v&E|Hw(zaAtll{UTpr}>pD-~egU*sW<6FOyJ&|}fyuZ3z z^v?o68`&2)_^+WdN}QY?i%AM6SMd@8ECf5?mx8urPL*smxlLK8z7zt!TYiEG4^n9( z9Mz+Y6X|AAkAE7DKTQV(8B$r4$0(!dOLpSDXhsZ_*rt=3|Dgs9q7R*&?MEaS={ysO5PE0rn5T&hpz9r8R)#^n4b?J(^5H_2nkTS}F3Ze;NGcwbxwF_Y96P~8j zo?Od(0Q5mt0M=cS6|#(yZ~RY@Lw08#UX>ckX2{w^-Ywv9l-&V*eZ8 z*Q1nPX_{~pIg^*pR2o@V>KyOvbM5VFY?G!mU3Q90__+DItN?&$XWPLn0xyIm3*&It4*aB++k_UB+8aA1xjaddi@~BU;?v+nNrt zD@>)^T>u$Gx$>Fq*q56D5PFkR|RU6*H&XBP5ZA{emi ze{$Gm57rE;w9W?Hk7M;R#+>sZKya;wpjKna(c@WiU^#}WvIdJt9~`p1(P!&u@GvG@ zzo&=Aktw}4wo$RPG|`aIsH5hvT8tQ#_)+GpyH`LFzhyt&@_e>guXI;1FcRsox1gXd zl;9DYsGo+GQ;T5vJ&~(3*s}OXbxi4B_i1${fm7;nx(vO6SjYfq{UKW}*eGKr5%xF2 zOmin{b}LS~^x8M&z^=$a_p7o|53Uuc7F#Fpu)7rBkXWNJ2J5BMYFE zEH!aYXtA!Y3nhyOw*dBSB~D8{n2udOss{OP-}Ln?P=7T0nA6sN-M>*pM_o`OdyYQG ze;;QrSDa+_!@@@_W0`1D#w{ZdH?uKJ`eOzm)3J%tN`Dx4zzwqxjPtE`RoT6#VQ4-G zlUcHG+fw1ACJgC_2)CP<2}>H(FQFJ@Tm2aykp(U8&nGT+)J4>gI0to=3YxGqFigCpXRZaHwG9oZYc}TR3#4u7qzOo z#rEf`DhP;ZdZ@{3i`(pv9$|52|9(>i{VWwD4|8c6x>r6wHv0Y-Hx<0=SnHcJA4CPR z>wW@<8mxmRs{FhThEMzx-7-Ns3$dLW1yJ{@k^FA%`{+Rrt=Yl&LuyA`WvxeroTa^@ z_WQ51CXw_{O1R8(1lt4cUPuA(`#CQTl-zKn?=v&a?{0sR3luQ*#0?>CmYq!Q_{JfX zIQF8gJd@n$^M-Fc4sJeu_#`_k6%nw<+@guQgmFZuWX-FyvqnV_;5IFia*`+8ORYSW zH)Zi~7+EqeA5U3Hv&@>XFl&k#`TYnK;GMT!{$;)S>G6RJmsDsG+wt@~kS}|+H#v~w z;V3FDw6xCis)eT{N>}DFo=wJdv_+k$7;@*&k)nj%%13#^dJ)yT9s~r&58|F#`Y|LW zVfe5-7w9|8fz%?DK=wSFJDCtexe9YLtz#Q+Br$Pu5%Wy?W>`@q0f*Rh8aporFDxJ4l$_ekUK5@a0thFzrSU6kp06dUM_)rEX-A@4}woGFOKoYC=@? z1-pWHv4~%sp(z12Rd837V1%GzOl^6D#Hwxqk%0Exvf%KKaVGVwE@H5jwmN~30>{pn zcDR`kXUD@k!-FY?HxiW2Sgk}o7>1(L7-HC>5jC9{%Tly_h~PKR0>06fz5y3g|CV|p`F7+9RR#CHKBHQ-X2B$zz z-^(3}{*NU!`F21FK|w+pQwU)USoP+DP+nc%kH z%h+?$7LD7K@f%X!VXStMD1Yho3JJI#gX+&bQ=E~$P`4ncVscc_>1v0B6A(_(F;X2r zQP0Box2F3E_@jhOwT9z@>>Y*Shd`$gk)>=ciK`owW3S$_;go^SygI0ek>v|f9ncj! zmvTAJ?tR3Y70O{VJdl?5o(Se<6` z4m&GK608tg$%P7eQ6ANNmnyY(GfIfW^~p+@pl2E3T3tGmn5%;!@j}f3xU$!etUc() zqW?ydKg{KK4^KM=2?>cZh+TmCZg8piNW3^?1W8Pt!Q!g+>Hl+IF1(wJ*_m$oAk!p5 z(NP=>$uyaA9xRz6(8@+Uc!b1-cY@Cg8VbCs8E1|cDw;Ph#yq%3PbWW<4`66(+2bPH zPyFN8RpnkpwYSs!D6#^wWM>sh%QiEJ3~Wp=AW2%s0$-mP3mDPc7Slw#3@LNm$u(9n zQfXmP87;+|m4&i~C|~H^?ma;iOrg3|qzPfNg~tg-NOLmq9+BiAFE^;9vQ>CM&UP`DulDm$pprX6LSHKw-8$K<);`N5_&EsOArzK*>mtc&M%jkh0)^eAE0-_NaKik`DvG)m1=N|T))bn3wM>LjOPI+M(YP?20;3- zE!WNSvi{NMtc$OIK=)(}{APPA0MW}Bcx|*(0W`GV>5FCb={m*b%qF)3{W!=Traj+q&DqermTB?ttvlo5B3}{;MjgF%hPPQ?6trAxWDrL?fapfhxN%(MPPfvO~dZXD-pq) z+H()oW1Tpjuy25Y@8qW;s+oLgeTsxitknLJ{7!!KFnA0c--hl1AqaO7zh+Hz`EyjJnfE=t zxPD4;Ex*I;x+Whz6!z{3_Nt&h7+HV)efk5{+_*Ac4>Ab z_Oc?K`RB~ROf@u|67>DtRQ5?8dbVudU;b@AD2{Pl)cj?9qpaL^OrDN<_8v9P#4OB! zJaApO7i}W=d_39Y8<;Ui1+`xP6D1a0`X0%F4tL-u! zGU=$(fZwS0Y4+Ea!>l1lUpO;q$Bc&5IXWXqjkbN)ChY4gK^YLDKb!Vs$eNVZ*L0xh z25}mr4kbp5NW-TRoiB4HYNu*(9Ldv%HJm6mX*cD+{=rYv?TmA`TxDE^5j_%R5s?W+ z*PjS)L~iKN?7`O|3SA9e+3sMYmmvZ!!!FaVuhGECOUHEx|7A(neQ!$-lw*_Qp_*C9 zP<6JEvgwF1@~C1^j-$g(wVNa|jmV%`i5~K4dZvBmp=6PXrtEIF1pp)@Lw!lSjV^?w zEG#WP{4f30u-kqENsj_M`404=Qb<$f3}9JdM__B&en_TIpcJA!5k`&MxJ2sHw@*Tb z+k}sV4{^3pd{R)zhN)H~5l;)~db!CwHMBO^R5_VC7Rw~bTpZb#G8x011%wkp@H)^!*5a$j<7a8>ZmFs$>;v&wyGZQS_8rNw;=6AxZ6 z{>XGNH;U=C?l@(em(PvG7pt-|%an-%4&~D(lar3wn>4w?$>w4j)ZOeTl zgzM#ofq!DhmHE!_qNf+O12zZtO0ZGzDd3T>0Od*Sb|@?SPyA&-+T-Z6t+!ZwGYPlQ z-%s&Jj^oO@_zmvInCGd>5Z;H}rT}*VDFJ~0_07riFW5lv_dxIdD+v8z+$mh@_SOA3%l`)q}6<>5&#_FvKSjM0Qlv{ zlYf`HXK?XrZY}oZ^(F1ar0-B{2i5=#dkAkN>VRPBK@v0t2TewS*Fdfq`Yo2M5Cz28Z~M?^Y3% zgA_sY^Nh@*g@T4Rbr03nK9qxo=Ndp8kX6TG2$6GnBb|`ADKfRQv2i$JMhgfXoe^!g z3)g=0aD1Sm8E^Up@U-0N&IE4=^b|K1KLDHQfV3x_&tkAzY0XL8%-aDx6fvcHA>)!#_uCH%d_2*n(AJBMQ%R! z3lyf%<|1hbW}0z^L{(UtFK|JWSnCK9YmqxFlKmA*$Tn`8jIBdkFl`Yl@pkV5qnxp#!E(MM2a{mkrJ0yz z^qCeVm~g`0hN>vrL5uljdMhyo6F)Up>>`mBd;oxdI>mz!E3cZa8n^cd z4O&hgHtgjW#zu=wig5Ql+q`10meVU`5iRe64q35LG5v&6ndmI(4_M9BSpI+Z@za7% zAsj>Bt}+ZuRsN3X3(*;)SsPtzK-+o_!k%}U|Exy@*r%$O4kS-0 zK*FvNMLsq*IDVe$$^2z3I5h;b2JI2LZS1)Q`5e+?3|NDG4*g>szypR761->31BDVg zwCBVF5f@UtXUzi>7kaP<~T*e!!s*H^9j?AkjAv5ktp^jrE&>oNs|Z2m$mw zD5bD$5DpMQ06Pz+ebB*)e+%4m(7=g%3-V=f5hMhJ5x~rYo(=l|fdf$laEU|0_q=X> zf#BU}hEU95>HTsbi(3~UbT@_}bbZ)rzuiA*L2n>rH~J0~AgsM#59Dy`0fg{-4MV)JBa_*;FZ{y#2-vJgk&HdM02b5`t6g@AG|NbXrLa%eGB)A;}6>xF5FK7 zQo6NzMf}A63lk6?&@T)!x&^$VTB4z;7~{BRj6vWuhFH`XW83kBUpNWQ9KdWrdyZ^7 zd2Ug-vRp^{fOa}iucJRee}Q1c5wM^EARKX2I0yuUB94>-%>$8$qsKsZKnNydB7(JH z99era*k5Zyn0J%{-;@T_?l=U9xc9$xz;hpDc0kV#Hs28n;LZ*`+(C4sF%L%HVRU0L z4^7@7{6l~otiHqV#;G5=xP$3N{{Uj*TU!!KBEnWUMNkkH$Lcu;p(xHvp!#ivfrsIl z#6)+5Om+lq-l@D=`yvV9kc7vN(d=Q~$-J6(e*+AZ@2TC{0O@za+7F0;G&`Z52ZBIm zA)=cht3CERomcyA5|aLZl-745zHs^Bvtzh>h<6gNroQmKSVm#YV_JLkcN(v@zR0~e zM&b2i+i9^lUN)#nrPFZx$Vz-Zr|(H-E`^Aq+j=2z&~=ocIUGDIkv zP9mn43YvrphJ^~ch6<*uX|6W&@d!*~^qR&cwFj233OLBmo0ik3i9Qu(;3zRbTRDOL>I zJiLvaQSzYI42mLjzN5d5Nb*$S{%4kVbXCLlLz&+u5)DB? zXf?K@j%~xW%$-9^u&$PhEMTTg1eB{2gYm?*iuJv8O>H(<)T?`qYg}l*?03PcJ)@_f zgR;e|aMC}lJ%uNl%`y*%Rpr`s;3!qc(u&zhSXk+r-5&{` zg6<%Io(f?_cfJ0k$8WWvn+HRU1a24sGOvv1N*Iq6#4*VNmlf^A@QemsyzhMg{1x*F zIGEN#5vH8hD0YfT#o0HQ$iNWLTWBG!Q-B6)KIfyn4Mlky9evdTU-ZxPoNg|=Q;HN{ z8k7%)nENFUwdSM<=}l-r(ZxoacA^~ISZ&f3N)Hr{?oU-mp64Q61UYpTa%0m}g`wO` zNi?9GH%aR7(l1(SkIVAiR`Ql;ZK;;rxt+TAp*82KN+Lz%F`fD}#<2|i>doJAmt+%) z-^98oe$rK8W8gQcm=3vgD{D;9*ImUu-V(koYDi2vrSP)^`5JdX0(2X?&r*11lwuRB zi|(h48vD+rc1R`!byexA=I8zL%UezdHN#6pu_>c97GMA-23>a&*y3EZJo#;7hQ$%PAgDs}&Q53jcBaGmCRKxO!`h}7kp?ht%iP^Oz z5tzW8DuOPm?JTbTeuzD^`ri1*-kPC`?V}u!q)b!7!%Qk@a#?VqJPdak88ylQveu9K z&IHX-TO^nf_d5~j5IyK?uOKTS?MS75+>R~U@68-TB(w_h3PPVlxe}0t8S?~xzH}nw?Qcuv&}-xm?)@c-kX$| z@3oE{X}^`0jZLLe$pDd>>s8hlQTP2k@M=S$g;^xP#tBuI^#k1i{wK=!&C2MEpK(3{s7#ihy6DJGpjalb<7q#7t&qZ$M!}7qg#V#fy z>TlV_mp3&ji^@OZbo#iU&RJThkz9V&r1|xR!v7L4$d8!}Rojqul-8QWR^w!fpX1bPv=`f@S)G|$TFWh!2SoEwR zi$@{B$dzoH05|Vc&dgGbQ8$XS_YI*5J}%7YF!yW?;ho-GKP!4U6^JAF^;lQ_sa}6z ztiut~v1KIn`m{iKg-~TA2i7JiLjYg7K`jTERtpYY!Lb?gk60lr*Lwl1wJjQQX`>BA z`M~;oyaqdLTEHe*)RH%{sxsm`n~KL)=%eFDAyJ)-^h32@b4ltIH*OZypT~o@hb5Vh z+|4_exidcax31<>+O9{2q2akGh29IR5R{8|*~jcBNnV*ZK8m^4a=YnFM)Yx%(gZgz zH>nC9G>S!BXCAaRf{5C`QE;Ye@5<0^_m^jld||mdcnR94 zDhgz|hThG45&#C|qnGa~Fi|0j$})7@tuuGlg+w}4 zZDm9sc708CEA=)sTE3Baoja=91$OwrXHqF#3d1so4eFCLr>1>1)rWo3EgVdbanbl4oI>IoJ05OGov9L^9%W6@90*>pZAv zGW73yTWPQJ&wsR|mE~gvhRNAT=d2ZD1;oMLNas&Ye^!DdGweA#tX<}1E%}RQV!3dM zn7Z^?Dth~&18UhTW(vHc5htK2&SNUri}J1=7DaX0>jpYt4)9~_SpK_nE305wIT1lk zkriWIwz-+3*wLA{;teI1eU_AMq1(QgMFY4aWHf9Yscr)DY&$Yw**2Zf^q+^#;|N?(rrUv%``gwjHPHY zf{8*KmvKcR+I`;Cpyj{2=WIn|5yTYQShd6y-nEwvg*KEb38lg;K@wy#Sn5li)=u+> zMI)hyMbi@D(M-5KTSY|;GSqUS_xedxWI7oCE1G7aIe>{U6xv8hBcwY2Kf&ue@n2_W z3*scrj6=e(ZN}u{=zC-oEl<7IqEq83dc9Zmf zsn#vUv(e?d?AeQ^;mG~gNTIM}NEaqdp^}+0-PTRS!~e~hFHrqwG*Kc)ZNPSxB$NLC zPzg#pQ6><=Q%XU|l%Nt2m0E0^GL>+GHst-XD*@$q1@oyk+s88~xCTttJzRE`)1U2` ZUtABnb?tu81_!itTT%&fM`8Do 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 literal 64464 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 o-IM%8o*ehr=#Iq=Q0BvwUBdJ3D Date: Wed, 11 Apr 2018 23:35:06 +0200 Subject: [PATCH 050/126] Kleinere Ausbesserungen --- src/CustomFields/ColorPicker.php | 21 ++++++++++++++++----- src/CustomFields/CustomField.php | 6 +++++- src/CustomFields/TextInput.php | 21 ++++++++++++++++----- src/TaxonomyCustomFields.php | 4 ---- src/einsatzverwaltung-core.php | 8 ++++++-- 5 files changed, 43 insertions(+), 17 deletions(-) diff --git a/src/CustomFields/ColorPicker.php b/src/CustomFields/ColorPicker.php index 4b83712e..b08dde1a 100644 --- a/src/CustomFields/ColorPicker.php +++ b/src/CustomFields/ColorPicker.php @@ -1,8 +1,20 @@

    %3$s

    ', - $this->key, - $this->label, - $this->description + esc_attr($this->key), + esc_html($this->label), + esc_html($this->description) ); } @@ -31,5 +43,4 @@ public function getEditTermMarkup($tag) esc_attr($value) ); } - -} \ No newline at end of file +} diff --git a/src/CustomFields/CustomField.php b/src/CustomFields/CustomField.php index 373309de..079faa8f 100644 --- a/src/CustomFields/CustomField.php +++ b/src/CustomFields/CustomField.php @@ -1,6 +1,10 @@ key, true); return (false === $termMeta ? $this->defaultValue : $termMeta); } -} \ No newline at end of file +} diff --git a/src/CustomFields/TextInput.php b/src/CustomFields/TextInput.php index 877a43c9..49af47ef 100644 --- a/src/CustomFields/TextInput.php +++ b/src/CustomFields/TextInput.php @@ -1,8 +1,20 @@

    %3$s

    ', - $this->key, - $this->label, - $this->description + esc_attr($this->key), + esc_html($this->label), + esc_html($this->description) ); } @@ -31,5 +43,4 @@ public function getEditTermMarkup($tag) esc_attr($value) ); } - -} \ No newline at end of file +} diff --git a/src/TaxonomyCustomFields.php b/src/TaxonomyCustomFields.php index 04437468..58e64139 100644 --- a/src/TaxonomyCustomFields.php +++ b/src/TaxonomyCustomFields.php @@ -21,10 +21,6 @@ class TaxonomyCustomFields */ public function __construct() { - require 'CustomFields/CustomField.php'; - require 'CustomFields/ColorPicker.php'; - require 'CustomFields/TextInput.php'; - $this->fields = array(); add_action('edited_term', array($this, 'saveTerm'), 10, 3); diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 629d3f6c..fa028f5c 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -19,7 +19,6 @@ require_once dirname(__FILE__) . '/Frontend/ReportListSettings.php'; require_once dirname(__FILE__) . '/ReportQuery.php'; require_once dirname(__FILE__) . '/TasksPage.php'; -require_once dirname(__FILE__) . '/TaxonomyCustomFields.php'; use abrain\Einsatzverwaltung\CustomFields\ColorPicker; use abrain\Einsatzverwaltung\CustomFields\TextInput; @@ -480,6 +479,11 @@ private function registerTypes() 'Kein Fehlalarm' )); + require dirname(__FILE__) . '/TaxonomyCustomFields.php'; + require dirname(__FILE__) . '/CustomFields/CustomField.php'; + require dirname(__FILE__) . '/CustomFields/ColorPicker.php'; + require dirname(__FILE__) . '/CustomFields/TextInput.php'; + $taxonomyCustomFields = new TaxonomyCustomFields(); $taxonomyCustomFields->addTextInput('exteinsatzmittel', new TextInput( 'url', @@ -489,7 +493,7 @@ private function registerTypes() $taxonomyCustomFields->addColorpicker('einsatzart', new ColorPicker( 'color', 'Farbe', - 'Beschreibung' + 'Beschreibung' // TODO )); } From ead8f2d5202278b8ee843b9bbe742c9086c0ffad Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Wed, 11 Apr 2018 23:38:05 +0200 Subject: [PATCH 051/126] =?UTF-8?q?Dropdown=20f=C3=BCr=20Seiten,=20Beitr?= =?UTF-8?q?=C3=A4ge=20o.=C3=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CustomFields/PostSelector.php | 146 ++++++++++++++++++++++++++++ src/TaxonomyCustomFields.php | 10 ++ src/einsatzverwaltung-core.php | 8 ++ src/einsatzverwaltung-utilities.php | 75 -------------- 4 files changed, 164 insertions(+), 75 deletions(-) create mode 100644 src/CustomFields/PostSelector.php diff --git a/src/CustomFields/PostSelector.php b/src/CustomFields/PostSelector.php new file mode 100644 index 00000000..f87226ba --- /dev/null +++ b/src/CustomFields/PostSelector.php @@ -0,0 +1,146 @@ +excludedTypes = $excludedTypes; + } + + /** + * @inheritdoc + */ + public function getAddTermMarkup() + { + return sprintf( + '
    %4$s

    %3$s

    ', + esc_attr($this->key), + esc_html($this->label), + esc_html($this->description), + $this->dropdownPosts(array( + 'echo' => false, + 'name' => 'fahrzeugpid', + 'post_type' => $this->getDropdownPostTypes() + )) + ); + } + + /** + * @inheritdoc + */ + public function getEditTermMarkup($tag) + { + $value = $this->getValue($tag->term_id); + + return sprintf( + '%4$s

    %3$s

    ', + esc_attr($this->key), + esc_html($this->label), + esc_html($this->description), + $this->dropdownPosts(array( + 'echo' => false, + 'selected' => $value, + 'name' => 'fahrzeugpid', + 'post_type' => $this->getDropdownPostTypes() + )) + ); + } + + /** + * @return array + */ + private function getDropdownPostTypes() + { + $postTypes = get_post_types(array('public' => true)); + return array_diff($postTypes, $this->excludedTypes); + } + + /** + * Generiert ein Dropdown ähnlich zu wp_dropdown_pages, allerdings mit frei wählbaren Beitragstypen + * + * @since 1.0.0 + * + * @param array $args { + * @type bool|int $echo Ob der generierte Code aus- oder zurückgegeben werden soll. Standard true (ausgeben) + * @type array $post_type Array mit Beitragstypen, die auswählbar sein sollen + * @type int $selected Post-ID, die vorausgewählt sein soll + * @type string $name Wert für name-Attribut des Auswahlfelds + * @type string $id Wert für id-Attribut des Auswahlfelds, erhält im Standard den Wert von name + * } + * @return string HTML-Code für Auswahlfeld + */ + public function dropdownPosts($args) + { + $defaults = array( + 'echo' => true, + 'post_type' => array('post'), + 'selected' => 0, + 'name' => '', + 'id' => '' + ); + $parsedArgs = wp_parse_args($args, $defaults); + + if (empty($parsedArgs['id'])) { + $parsedArgs['id'] = $parsedArgs['name']; + } + + $wpQuery = new \WP_Query(array( + 'post_type' => $parsedArgs['post_type'], + 'post_status' => 'publish', + 'orderby' => 'type title', + 'order' => 'ASC', + 'nopaging' => true + )); + + $string = sprintf(''; + + if ($parsedArgs['echo']) { + echo $string; + } + + return $string; + } +} diff --git a/src/TaxonomyCustomFields.php b/src/TaxonomyCustomFields.php index 58e64139..ece0ec4f 100644 --- a/src/TaxonomyCustomFields.php +++ b/src/TaxonomyCustomFields.php @@ -3,6 +3,7 @@ use abrain\Einsatzverwaltung\CustomFields\ColorPicker; use abrain\Einsatzverwaltung\CustomFields\CustomField; +use abrain\Einsatzverwaltung\CustomFields\PostSelector; use abrain\Einsatzverwaltung\CustomFields\TextInput; /** @@ -45,6 +46,15 @@ public function addColorpicker($taxonomy, ColorPicker $colorPicker) $this->add($taxonomy, $colorPicker); } + /** + * @param string $taxonomy The slug of the taxonomy. + * @param PostSelector $postSelector + */ + public function addPostSelector($taxonomy, PostSelector $postSelector) + { + $this->add($taxonomy, $postSelector); + } + /** * @param string $taxonomy * @param CustomField $customField diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index fa028f5c..0fa80f92 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -21,6 +21,7 @@ require_once dirname(__FILE__) . '/TasksPage.php'; use abrain\Einsatzverwaltung\CustomFields\ColorPicker; +use abrain\Einsatzverwaltung\CustomFields\PostSelector; use abrain\Einsatzverwaltung\CustomFields\TextInput; use abrain\Einsatzverwaltung\Import\Tool as ImportTool; use abrain\Einsatzverwaltung\Model\ReportAnnotation; @@ -482,6 +483,7 @@ private function registerTypes() require dirname(__FILE__) . '/TaxonomyCustomFields.php'; require dirname(__FILE__) . '/CustomFields/CustomField.php'; require dirname(__FILE__) . '/CustomFields/ColorPicker.php'; + require dirname(__FILE__) . '/CustomFields/PostSelector.php'; require dirname(__FILE__) . '/CustomFields/TextInput.php'; $taxonomyCustomFields = new TaxonomyCustomFields(); @@ -495,6 +497,12 @@ private function registerTypes() 'Farbe', 'Beschreibung' // TODO )); + $taxonomyCustomFields->addPostSelector('fahrzeug', new PostSelector( + 'fahrzeugpid', + 'Fahrzeugseite', + 'Seite mit mehr Informationen über das Fahrzeug. Wird in Einsatzberichten mit diesem Fahrzeug verlinkt.', + array('einsatz', 'attachment') + )); } private function addRewriteRules() diff --git a/src/einsatzverwaltung-utilities.php b/src/einsatzverwaltung-utilities.php index 9154ffce..c7e08575 100644 --- a/src/einsatzverwaltung-utilities.php +++ b/src/einsatzverwaltung-utilities.php @@ -62,81 +62,6 @@ public function checked($value) return ($value === true || $value == 1 ? 'checked="checked" ' : ''); } - /** - * Generiert ein Dropdown ähnlich zu wp_dropdown_pages, allerdings mit frei wählbaren Beitragstypen - * - * @since 1.0.0 - * - * @param array $args { - * @type bool|int $echo Ob der generierte Code aus- oder zurückgegeben werden soll. Standard true (ausgeben) - * @type array $post_type Array mit Beitragstypen, die auswählbar sein sollen - * @type int $selected Post-ID, die vorausgewählt sein soll - * @type string $name Wert für name-Attribut des Auswahlfelds - * @type string $id Wert für id-Attribut des Auswahlfelds, erhält im Standard den Wert von name - * } - * @return string HTML-Code für Auswahlfeld - */ - public function dropdownPosts($args) - { - $defaults = array( - 'echo' => true, - 'post_type' => array('post'), - 'selected' => 0, - 'name' => '', - 'id' => '' - ); - $parsedArgs = wp_parse_args($args, $defaults); - - if (empty($parsedArgs['id'])) { - $parsedArgs['id'] = $parsedArgs['name']; - } - - $wpQuery = new \WP_Query(array( - 'post_type' => $parsedArgs['post_type'], - 'post_status' => 'publish', - 'orderby' => 'type title', - 'order' => 'ASC', - 'nopaging' => true - )); - - $string = sprintf(''; - - if ($parsedArgs['echo']) { - echo $string; - } - - return $string; - } - /** * @param array $array * @param string $key From 757baeba74c4b6ebba2248c9a4b39e1b16647d74 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Thu, 12 Apr 2018 21:44:53 +0200 Subject: [PATCH 052/126] Refactoring --- src/CustomFields/ColorPicker.php | 18 +++------ src/CustomFields/CustomField.php | 21 ++++++++-- src/CustomFields/PostSelector.php | 64 ++++++++++++------------------- src/CustomFields/TextInput.php | 18 +++------ 4 files changed, 55 insertions(+), 66 deletions(-) diff --git a/src/CustomFields/ColorPicker.php b/src/CustomFields/ColorPicker.php index b08dde1a..405e6ba1 100644 --- a/src/CustomFields/ColorPicker.php +++ b/src/CustomFields/ColorPicker.php @@ -18,29 +18,23 @@ public function __construct($key, $label, $description, $defaultValue = '') /** * @inheritdoc */ - public function getAddTermMarkup() + public function getAddTermInput() { return sprintf( - '

    %3$s

    ', - esc_attr($this->key), - esc_html($this->label), - esc_html($this->description) + '', + esc_attr($this->key) ); } /** * @inheritdoc */ - public function getEditTermMarkup($tag) + public function getEditTermInput($tag) { - $value = $this->getValue($tag->term_id); - return sprintf( - '

    %3$s

    ', + '', esc_attr($this->key), - esc_html($this->label), - esc_html($this->description), - esc_attr($value) + esc_attr($this->getValue($tag->term_id)) ); } } diff --git a/src/CustomFields/CustomField.php b/src/CustomFields/CustomField.php index 079faa8f..735a289e 100644 --- a/src/CustomFields/CustomField.php +++ b/src/CustomFields/CustomField.php @@ -5,7 +5,7 @@ * Base class for additional fields of taxonomies * @package abrain\Einsatzverwaltung\CustomFields */ -class CustomField +abstract class CustomField { public $key; protected $label; @@ -32,7 +32,13 @@ public function __construct($key, $label, $description, $defaultValue = false) */ public function getAddTermMarkup() { - return 'NOT IMPLEMENTED'; + return sprintf( + '
    %4$s

    %3$s

    ', + esc_attr($this->key), + esc_html($this->label), + esc_html($this->description), + $this->getAddTermInput() + ); } /** @@ -41,7 +47,13 @@ public function getAddTermMarkup() */ public function getEditTermMarkup($tag) { - return 'NOT IMPLEMENTED'; + return sprintf( + '%4$s

    %3$s

    ', + esc_attr($this->key), + esc_html($this->label), + esc_html($this->description), + $this->getEditTermInput($tag) + ); } /** @@ -53,4 +65,7 @@ public function getValue($termId) $termMeta = get_term_meta($termId, $this->key, true); return (false === $termMeta ? $this->defaultValue : $termMeta); } + + abstract function getAddTermInput(); + abstract function getEditTermInput($tag); } diff --git a/src/CustomFields/PostSelector.php b/src/CustomFields/PostSelector.php index f87226ba..ac9512ce 100644 --- a/src/CustomFields/PostSelector.php +++ b/src/CustomFields/PostSelector.php @@ -21,45 +21,6 @@ public function __construct($key, $label, $description, $excludedTypes = array() $this->excludedTypes = $excludedTypes; } - /** - * @inheritdoc - */ - public function getAddTermMarkup() - { - return sprintf( - '
    %4$s

    %3$s

    ', - esc_attr($this->key), - esc_html($this->label), - esc_html($this->description), - $this->dropdownPosts(array( - 'echo' => false, - 'name' => 'fahrzeugpid', - 'post_type' => $this->getDropdownPostTypes() - )) - ); - } - - /** - * @inheritdoc - */ - public function getEditTermMarkup($tag) - { - $value = $this->getValue($tag->term_id); - - return sprintf( - '%4$s

    %3$s

    ', - esc_attr($this->key), - esc_html($this->label), - esc_html($this->description), - $this->dropdownPosts(array( - 'echo' => false, - 'selected' => $value, - 'name' => 'fahrzeugpid', - 'post_type' => $this->getDropdownPostTypes() - )) - ); - } - /** * @return array */ @@ -143,4 +104,29 @@ public function dropdownPosts($args) return $string; } + + /** + * @inheritdoc + */ + public function getAddTermInput() + { + return $this->dropdownPosts(array( + 'echo' => false, + 'name' => 'fahrzeugpid', + 'post_type' => $this->getDropdownPostTypes() + )); + } + + /** + * @inheritdoc + */ + public function getEditTermInput($tag) + { + return $this->dropdownPosts(array( + 'echo' => false, + 'selected' => $this->getValue($tag->term_id), + 'name' => 'fahrzeugpid', + 'post_type' => $this->getDropdownPostTypes() + )); + } } diff --git a/src/CustomFields/TextInput.php b/src/CustomFields/TextInput.php index 49af47ef..0b1b017f 100644 --- a/src/CustomFields/TextInput.php +++ b/src/CustomFields/TextInput.php @@ -18,29 +18,23 @@ public function __construct($key, $label, $description, $defaultValue = '') /** * @inheritdoc */ - public function getAddTermMarkup() + public function getAddTermInput() { return sprintf( - '

    %3$s

    ', - esc_attr($this->key), - esc_html($this->label), - esc_html($this->description) + '', + esc_attr($this->key) ); } /** * @inheritdoc */ - public function getEditTermMarkup($tag) + public function getEditTermInput($tag) { - $value = $this->getValue($tag->term_id); - return sprintf( - '

    %3$s

    ', + '', esc_attr($this->key), - esc_html($this->label), - esc_html($this->description), - esc_attr($value) + esc_attr($this->getValue($tag->term_id)) ); } } From 7831e80577af8f1c34c3222263e7d64c5ebd2d35 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Thu, 12 Apr 2018 21:46:03 +0200 Subject: [PATCH 053/126] Name des Selectors war noch fest gesetzt --- src/CustomFields/PostSelector.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CustomFields/PostSelector.php b/src/CustomFields/PostSelector.php index ac9512ce..d2cf71c4 100644 --- a/src/CustomFields/PostSelector.php +++ b/src/CustomFields/PostSelector.php @@ -112,7 +112,7 @@ public function getAddTermInput() { return $this->dropdownPosts(array( 'echo' => false, - 'name' => 'fahrzeugpid', + 'name' => $this->key, 'post_type' => $this->getDropdownPostTypes() )); } @@ -125,7 +125,7 @@ public function getEditTermInput($tag) return $this->dropdownPosts(array( 'echo' => false, 'selected' => $this->getValue($tag->term_id), - 'name' => 'fahrzeugpid', + 'name' => $this->key, 'post_type' => $this->getDropdownPostTypes() )); } From 284986ba5ffb826d2298427bc4b8c43b71ad21ad Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Thu, 12 Apr 2018 22:01:45 +0200 Subject: [PATCH 054/126] =?UTF-8?q?Neues=20Eingabefeld=20f=C3=BCr=20Zahlen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CustomFields/NumberInput.php | 41 ++++++++++++++++++++++++++++++++ src/TaxonomyCustomFields.php | 10 ++++++++ src/einsatzverwaltung-core.php | 7 ++++++ 3 files changed, 58 insertions(+) create mode 100644 src/CustomFields/NumberInput.php diff --git a/src/CustomFields/NumberInput.php b/src/CustomFields/NumberInput.php new file mode 100644 index 00000000..373f8c64 --- /dev/null +++ b/src/CustomFields/NumberInput.php @@ -0,0 +1,41 @@ +', + esc_attr($this->key), + esc_attr($this->defaultValue) + ); + } + + /** + * @inheritdoc + */ + public function getEditTermInput($tag) + { + return sprintf( + '', + esc_attr($this->key), + esc_attr($this->getValue($tag->term_id)) + ); + } +} diff --git a/src/TaxonomyCustomFields.php b/src/TaxonomyCustomFields.php index ece0ec4f..bbcea3f9 100644 --- a/src/TaxonomyCustomFields.php +++ b/src/TaxonomyCustomFields.php @@ -3,6 +3,7 @@ use abrain\Einsatzverwaltung\CustomFields\ColorPicker; use abrain\Einsatzverwaltung\CustomFields\CustomField; +use abrain\Einsatzverwaltung\CustomFields\NumberInput; use abrain\Einsatzverwaltung\CustomFields\PostSelector; use abrain\Einsatzverwaltung\CustomFields\TextInput; @@ -46,6 +47,15 @@ public function addColorpicker($taxonomy, ColorPicker $colorPicker) $this->add($taxonomy, $colorPicker); } + /** + * @param string $taxonomy The slug of the taxonomy. + * @param NumberInput $numberInput + */ + public function addNumberInput($taxonomy, NumberInput $numberInput) + { + $this->add($taxonomy, $numberInput); + } + /** * @param string $taxonomy The slug of the taxonomy. * @param PostSelector $postSelector diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 0fa80f92..714107b0 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -21,6 +21,7 @@ require_once dirname(__FILE__) . '/TasksPage.php'; use abrain\Einsatzverwaltung\CustomFields\ColorPicker; +use abrain\Einsatzverwaltung\CustomFields\NumberInput; use abrain\Einsatzverwaltung\CustomFields\PostSelector; use abrain\Einsatzverwaltung\CustomFields\TextInput; use abrain\Einsatzverwaltung\Import\Tool as ImportTool; @@ -483,6 +484,7 @@ private function registerTypes() require dirname(__FILE__) . '/TaxonomyCustomFields.php'; require dirname(__FILE__) . '/CustomFields/CustomField.php'; require dirname(__FILE__) . '/CustomFields/ColorPicker.php'; + require dirname(__FILE__) . '/CustomFields/NumberInput.php'; require dirname(__FILE__) . '/CustomFields/PostSelector.php'; require dirname(__FILE__) . '/CustomFields/TextInput.php'; @@ -503,6 +505,11 @@ private function registerTypes() 'Seite mit mehr Informationen über das Fahrzeug. Wird in Einsatzberichten mit diesem Fahrzeug verlinkt.', array('einsatz', 'attachment') )); + $taxonomyCustomFields->addNumberInput('fahrzeug', new NumberInput( + 'vehicleorder', + 'Reihenfolge', + 'Optionale Angabe, mit der die Anzeigereihenfolge der Fahrzeuge beeinflusst werden kann. Fahrzeuge mit der kleineren Zahl werden zuerst angezeigt, anschließend diejenigen ohne Angabe bzw. dem Wert 0 in alphabetischer Reihenfolge.' + )); } private function addRewriteRules() From 469bb9e0dd9cf8e102b7a44e82e2656d0a2fde89 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Thu, 12 Apr 2018 22:10:54 +0200 Subject: [PATCH 055/126] Leere Werte konnten nicht gespeichert werden --- src/CustomFields/CustomField.php | 6 +++--- src/TaxonomyCustomFields.php | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/CustomFields/CustomField.php b/src/CustomFields/CustomField.php index 735a289e..f3a13694 100644 --- a/src/CustomFields/CustomField.php +++ b/src/CustomFields/CustomField.php @@ -8,9 +8,9 @@ abstract class CustomField { public $key; - protected $label; - protected $description; - protected $defaultValue; + public $label; + public $description; + public $defaultValue; /** * CustomField constructor. diff --git a/src/TaxonomyCustomFields.php b/src/TaxonomyCustomFields.php index bbcea3f9..1b2c1e46 100644 --- a/src/TaxonomyCustomFields.php +++ b/src/TaxonomyCustomFields.php @@ -128,9 +128,7 @@ public function saveTerm($termId, $ttId, $taxonomy) foreach ($this->fields[$taxonomy] as $field) { $value = filter_input(INPUT_POST, $field->key, FILTER_SANITIZE_STRING); - if (!empty($value)) { - update_term_meta($termId, $field->key, $value); - } + update_term_meta($termId, $field->key, empty($value) ? $field->defaultValue : $value); } } } From 26b89866e51b330e865f9e5fee4058a3f4d8e349 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 14 Apr 2018 23:29:37 +0200 Subject: [PATCH 056/126] =?UTF-8?q?F=C3=BCr=20zus=C3=A4tzliche=20Felder=20?= =?UTF-8?q?werden=20automatisch=20Spalten=20in=20der=20=C3=9Cbersicht=20ge?= =?UTF-8?q?neriert=20und=20bef=C3=BCllt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CustomFields/ColorPicker.php | 16 ++++++++ src/CustomFields/CustomField.php | 24 +++++++++--- src/CustomFields/NumberInput.php | 8 ++++ src/CustomFields/PostSelector.php | 20 ++++++++++ src/CustomFields/TextInput.php | 8 ++++ src/TaxonomyCustomFields.php | 63 ++++++++++++++++++++++++++++++- 6 files changed, 133 insertions(+), 6 deletions(-) diff --git a/src/CustomFields/ColorPicker.php b/src/CustomFields/ColorPicker.php index 405e6ba1..ed9a8db0 100644 --- a/src/CustomFields/ColorPicker.php +++ b/src/CustomFields/ColorPicker.php @@ -37,4 +37,20 @@ public function getEditTermInput($tag) esc_attr($this->getValue($tag->term_id)) ); } + + /** + * @inheritdoc + */ + public function getColumnContent($termId) + { + $value = $this->getValue($termId); + if (empty($value)) { + return ''; + } + + return sprintf( + '
     
    ', + esc_attr($value) + ); + } } diff --git a/src/CustomFields/CustomField.php b/src/CustomFields/CustomField.php index f3a13694..90f9545b 100644 --- a/src/CustomFields/CustomField.php +++ b/src/CustomFields/CustomField.php @@ -28,7 +28,7 @@ public function __construct($key, $label, $description, $defaultValue = false) } /** - * @return string + * @return string The markup for the form field shown when adding a new term. */ public function getAddTermMarkup() { @@ -42,8 +42,8 @@ public function getAddTermMarkup() } /** - * @param object $tag - * @return string + * @param object $tag Current taxonomy term object. + * @return string The markup for the form field shown when editing an existing term. */ public function getEditTermMarkup($tag) { @@ -66,6 +66,20 @@ public function getValue($termId) return (false === $termMeta ? $this->defaultValue : $termMeta); } - abstract function getAddTermInput(); - abstract function getEditTermInput($tag); + /** + * @return string The markup for the input shown when adding a new term. + */ + abstract public function getAddTermInput(); + + /** + * @param int $termId + * @return string + */ + abstract public function getColumnContent($termId); + + /** + * @param object $tag Current taxonomy term object. + * @return string The markup for the input shown when editing an existing term. + */ + abstract public function getEditTermInput($tag); } diff --git a/src/CustomFields/NumberInput.php b/src/CustomFields/NumberInput.php index 373f8c64..fe952731 100644 --- a/src/CustomFields/NumberInput.php +++ b/src/CustomFields/NumberInput.php @@ -38,4 +38,12 @@ public function getEditTermInput($tag) esc_attr($this->getValue($tag->term_id)) ); } + + /** + * @inheritdoc + */ + public function getColumnContent($termId) + { + return esc_html($this->getValue($termId)); + } } diff --git a/src/CustomFields/PostSelector.php b/src/CustomFields/PostSelector.php index d2cf71c4..36298972 100644 --- a/src/CustomFields/PostSelector.php +++ b/src/CustomFields/PostSelector.php @@ -129,4 +129,24 @@ public function getEditTermInput($tag) 'post_type' => $this->getDropdownPostTypes() )); } + + /** + * @inheritdoc + */ + public function getColumnContent($termId) + { + $postId = $this->getValue($termId); + + if (empty($postId)) { + return ''; + } + + $title = get_the_title($postId); + return sprintf( + '
    %3$s', + get_permalink($postId), + esc_attr($title), + esc_html($title) + ); + } } diff --git a/src/CustomFields/TextInput.php b/src/CustomFields/TextInput.php index 0b1b017f..7614e88b 100644 --- a/src/CustomFields/TextInput.php +++ b/src/CustomFields/TextInput.php @@ -37,4 +37,12 @@ public function getEditTermInput($tag) esc_attr($this->getValue($tag->term_id)) ); } + + /** + * @inheritdoc + */ + public function getColumnContent($termId) + { + return esc_html($this->getValue($termId)); + } } diff --git a/src/TaxonomyCustomFields.php b/src/TaxonomyCustomFields.php index 1b2c1e46..c446cb92 100644 --- a/src/TaxonomyCustomFields.php +++ b/src/TaxonomyCustomFields.php @@ -75,9 +75,11 @@ private function add($taxonomy, CustomField $customField) $this->fields[$taxonomy] = array(); add_action("{$taxonomy}_add_form_fields", array($this, 'onAddFormFields')); add_action("{$taxonomy}_edit_form_fields", array($this, 'onEditFormFields'), 10, 2); + add_action("manage_edit-{$taxonomy}_columns", array($this, 'onCustomColumns')); + add_action("manage_{$taxonomy}_custom_column", array($this, 'onColumnContent'), 10, 3); } - $this->fields[$taxonomy][] = $customField; + $this->fields[$taxonomy][$customField->key] = $customField; } /** @@ -111,6 +113,65 @@ public function onEditFormFields($tag, $taxonomy) } } + public function onCustomColumns($columns) + { + $screen = get_current_screen(); + + if (empty($screen)) { + return $columns; + } + + $taxonomy = $screen->taxonomy; + if (!array_key_exists($taxonomy, $this->fields) || !is_array($this->fields[$taxonomy])) { + return $columns; + } + + $filteredColumns = array(); + + foreach ($columns as $slug => $name) { + $filteredColumns[$slug] = $name; + if ($slug == 'description') { + /** @var CustomField $field */ + foreach ($this->fields[$taxonomy] as $field) { + $filteredColumns[$field->key] = $field->label; + } + } + } + + return $filteredColumns; + } + + /** + * Filterfunktion für den Inhalt der selbst angelegten Spalten + * + * @param string $string Leerer String. + * @param string $columnName Name der Spalte + * @param int $termId Term ID + * + * @return string Inhalt der Spalte + */ + public function onColumnContent($string, $columnName, $termId) + { + $term = get_term($termId); + if (empty($term) || is_wp_error($term)) { + return ''; + } + + $taxonomy = $term->taxonomy; + if (!array_key_exists($taxonomy, $this->fields) || !is_array($this->fields[$taxonomy])) { + return ''; + } + + $fields = $this->fields[$taxonomy]; + if (!array_key_exists($columnName, $fields)) { + return ''; + } + + /** @var CustomField $customField */ + $customField = $fields[$columnName]; + return $customField->getColumnContent($termId); + } + /** * Speichert zusätzliche Infos zu Terms als options ab * From aaf4279069844b834536557d15e947e6f62800c7 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 13 May 2018 00:49:45 +0200 Subject: [PATCH 057/126] =?UTF-8?q?Beitragstypen,=20die=20f=C3=BCr=20Fahrz?= =?UTF-8?q?eugseiten=20nicht=20relevant=20sind,=20ausschlie=C3=9Fen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-core.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 714107b0..a82e1eb8 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -503,7 +503,7 @@ private function registerTypes() 'fahrzeugpid', 'Fahrzeugseite', 'Seite mit mehr Informationen über das Fahrzeug. Wird in Einsatzberichten mit diesem Fahrzeug verlinkt.', - array('einsatz', 'attachment') + array('einsatz', 'attachment', 'ai1ec_event', 'tribe_events') )); $taxonomyCustomFields->addNumberInput('fahrzeug', new NumberInput( 'vehicleorder', From a9a921029d405ae9ad9ad5315a0b72e33004f99e Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Fri, 18 May 2018 22:38:55 +0200 Subject: [PATCH 058/126] =?UTF-8?q?Farbe=20f=C3=BCr=20Einsatzart=20in=20Fo?= =?UTF-8?q?rmatter=20verf=C3=BCgbar=20gemacht=20und=20entsprechenden=20Tag?= =?UTF-8?q?=20im=20Widget=20freigeschaltet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Model/IncidentReport.php | 3 ++- src/Util/Formatter.php | 28 ++++++++++++++++++++++++ src/Widgets/RecentIncidentsFormatted.php | 2 +- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/Model/IncidentReport.php b/src/Model/IncidentReport.php index 0b39a9a4..2c1798a2 100644 --- a/src/Model/IncidentReport.php +++ b/src/Model/IncidentReport.php @@ -5,6 +5,7 @@ use abrain\Einsatzverwaltung\Taxonomies; use DateTime; use WP_Post; +use WP_Term; /** * Datenmodellklasse für Einsatzberichte @@ -312,7 +313,7 @@ private function getTheTerms($taxonomy) * Gibt die Einsatzart eines bestimmten Einsatzes zurück. Auch wenn die Taxonomie 'einsatzart' mehrere Werte * speichern kann, wird nur der erste zurückgegeben. * - * @return object|false + * @return WP_Term|false */ public function getTypeOfIncident() { diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index 30e85916..141a7877 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -9,6 +9,7 @@ use abrain\Einsatzverwaltung\Taxonomies; use abrain\Einsatzverwaltung\Utilities; use WP_Post; +use WP_Term; /** * Formatierungen aller Art @@ -102,6 +103,9 @@ private function format($post, $pattern, $tag) case '%incidentType%': $replace = $this->getTypeOfIncident($incidentReport, false, false, false); break; + case '%incidentTypeColor%': + $replace = $this->getColorOfTypeOfIncident($incidentReport->getTypeOfIncident()); + break; case '%url%': $replace = get_permalink($post->ID); break; @@ -127,6 +131,29 @@ private function format($post, $pattern, $tag) return str_replace($tag, $replace, $pattern); } + /** + * @param WP_Term|false $typeOfIncident + * @return string + */ + public function getColorOfTypeOfIncident($typeOfIncident) + { + if (empty($typeOfIncident)) { + return 'inherit'; + } + + $color = get_term_meta($typeOfIncident->term_id, 'color', true); + while (empty($color) && $typeOfIncident->parent !== 0) { + $typeOfIncident = WP_Term::get_instance($typeOfIncident->parent); + $color = get_term_meta($typeOfIncident->term_id, 'color', true); + } + + if (empty($color)) { + return 'inherit'; + } + + return $color; + } + /** * @return array Ersetzbare Tags und ihre Beschreibungen */ @@ -138,6 +165,7 @@ public function getTags() '%time%' => 'Zeitpunkt der Alarmierung', '%duration%' => 'Dauer des Einsatzes', '%incidentType%' => 'Art des Einsatzes', + '%incidentTypeColor%' => 'Farbe der Art des Einsatzes', '%url%' => 'URL zum Einsatzbericht', '%location%' => 'Ort des Einsatzes', '%feedUrl%' => 'URL zum Feed', diff --git a/src/Widgets/RecentIncidentsFormatted.php b/src/Widgets/RecentIncidentsFormatted.php index f1bbbf71..b75b825e 100644 --- a/src/Widgets/RecentIncidentsFormatted.php +++ b/src/Widgets/RecentIncidentsFormatted.php @@ -112,7 +112,7 @@ class RecentIncidentsFormatted extends WP_Widget 'afterContent' => '' ); private $allowedTagsPattern = array('%title%', '%date%', '%time%', '%location%', '%duration%', '%incidentType%', - '%url%', '%number%', '%seqNum%', '%annotations%'); + '%incidentTypeColor%', '%url%', '%number%', '%seqNum%', '%annotations%'); private $allowedTagsAfter = array('%feedUrl%'); /** From 268d541a0391d94bef6cd3ca533d00b795490e7d Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Fri, 18 May 2018 22:41:49 +0200 Subject: [PATCH 059/126] Style-Attribut wird nicht mehr aus Formatvorlagen gefiltert --- src/Widgets/RecentIncidentsFormatted.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Widgets/RecentIncidentsFormatted.php b/src/Widgets/RecentIncidentsFormatted.php index b75b825e..e8b8412d 100644 --- a/src/Widgets/RecentIncidentsFormatted.php +++ b/src/Widgets/RecentIncidentsFormatted.php @@ -28,6 +28,7 @@ class RecentIncidentsFormatted extends WP_Widget 'rel' => true, 'rev' => true, 'name' => true, + 'style' => true, 'target' => true, ), 'abbr' => array(), @@ -38,24 +39,30 @@ class RecentIncidentsFormatted extends WP_Widget 'class' => true, 'dir' => true, 'lang' => true, + 'style' => true, 'xml:lang' => true, ), 'h3' => array( 'align' => true, + 'style' => true ), 'h4' => array( 'align' => true, + 'style' => true ), 'h5' => array( 'align' => true, + 'style' => true ), 'h6' => array( 'align' => true, + 'style' => true ), 'hr' => array( 'align' => true, 'noshade' => true, 'size' => true, + 'style' => true, 'width' => true, ), 'i' => array( @@ -73,11 +80,13 @@ class RecentIncidentsFormatted extends WP_Widget 'longdesc' => true, 'vspace' => true, 'src' => true, + 'style' => true, 'width' => true, ), 'li' => array( 'align' => true, 'class' => true, + 'style' => true, 'value' => true, ), 'p' => array( @@ -85,6 +94,7 @@ class RecentIncidentsFormatted extends WP_Widget 'class' => true, 'dir' => true, 'lang' => true, + 'style' => true, 'xml:lang' => true, ), 'span' => array( @@ -92,15 +102,18 @@ class RecentIncidentsFormatted extends WP_Widget 'align' => true, 'class' => true, 'lang' => true, + 'style' => true, 'xml:lang' => true, ), 'ul' => array( 'class' => true, + 'style' => true, 'type' => true, ), 'ol' => array( 'class' => true, 'start' => true, + 'style' => true, 'type' => true, ), ); From c56953f3f510dd09e4a7067f127b18a6442cc9c3 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Fri, 18 May 2018 22:55:02 +0200 Subject: [PATCH 060/126] =?UTF-8?q?Fallback=20f=C3=BCr=20Titel=20auch=20be?= =?UTF-8?q?im=20Ersetzen=20von=20Platzhaltern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Util/Formatter.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index 141a7877..0b7febfd 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -90,6 +90,9 @@ private function format($post, $pattern, $tag) switch ($tag) { case '%title%': $replace = get_the_title($post); + if (empty($replace)) { + $replace = '(kein Titel)'; + } break; case '%date%': $replace = date_i18n($this->options->getDateFormat(), $timeOfAlerting->getTimestamp()); From a71ee20a3893ff627c25f816320939a4b3b4ed86 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Fri, 18 May 2018 23:36:33 +0200 Subject: [PATCH 061/126] Teste gegen die neuesten Patches --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 930a1a67..9f295673 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ env: - WP_VERSION=4.6.11 WP_MULTISITE=0 - WP_VERSION=4.7.10 WP_MULTISITE=0 - WP_VERSION=4.8.6 WP_MULTISITE=0 - - WP_VERSION=4.9.5 WP_MULTISITE=0 + - WP_VERSION=4.9.6 WP_MULTISITE=0 - WP_VERSION=nightly WP_MULTISITE=0 matrix: From fd056671ffc917b18b2c63e7ef254b6d8cb0a322 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 19 May 2018 13:50:40 +0200 Subject: [PATCH 062/126] Auch bei lokalen Tests phpcompatinfo aus vendor nehmen --- tests/SmokeTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/SmokeTest.php b/tests/SmokeTest.php index e3d91868..3f413dc4 100644 --- a/tests/SmokeTest.php +++ b/tests/SmokeTest.php @@ -17,9 +17,9 @@ public function testPhpCompatibility() $phpHeader = $fileData['PHPmin']; $buildDir = getenv('TRAVIS_BUILD_DIR'); - $prefix = $buildDir === false ? '' : '$TRAVIS_BUILD_DIR/vendor/bin/'; + $prefix = $buildDir === false ? '.' : '$TRAVIS_BUILD_DIR'; - $lastLine = exec($prefix . 'phpcompatinfo --no-ansi analyser:run src/'); + $lastLine = exec($prefix . '/vendor/bin/phpcompatinfo --no-ansi analyser:run src/'); $this->assertEquals(1, preg_match('/Requires PHP (\d\.\d\.\d) \(min\)/', $lastLine, $matches)); $actualRequirement = $matches[1]; From 350953da940e151a791ca15796f4e0b2e4416b75 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 19 May 2018 14:12:19 +0200 Subject: [PATCH 063/126] =?UTF-8?q?Bereits=20ersetzte=20Klasse=20Taxonomie?= =?UTF-8?q?s=20gel=C3=B6scht,=20zugeh=C3=B6riger=20Test=20so=20nicht=20meh?= =?UTF-8?q?r=20durchf=C3=BChrbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-taxonomies.php | 293 --------------------------- tests/Taxonomies/TermmetaTest.php | 58 ------ 2 files changed, 351 deletions(-) delete mode 100644 src/einsatzverwaltung-taxonomies.php delete mode 100644 tests/Taxonomies/TermmetaTest.php diff --git a/src/einsatzverwaltung-taxonomies.php b/src/einsatzverwaltung-taxonomies.php deleted file mode 100644 index ab40e1a9..00000000 --- a/src/einsatzverwaltung-taxonomies.php +++ /dev/null @@ -1,293 +0,0 @@ - array('url'), - 'fahrzeug' => array('fahrzeugpid', 'vehicleorder') - ); - - /** - * Constructor - * - * @param Utilities $utilities - */ - public function __construct($utilities) - { - $this->utilities = $utilities; - $this->addHooks(); - } - - private function addHooks() - { - add_action('exteinsatzmittel_add_form_fields', array($this, 'addFieldsExteinsatzmittelNew')); - add_action('exteinsatzmittel_edit_form_fields', array($this, 'addFieldsExteinsatzmittelEdit')); - add_action('fahrzeug_add_form_fields', array($this, 'addFieldsFahrzeugNew')); - add_action('fahrzeug_edit_form_fields', array($this, 'addFieldsFahrzeugEdit')); - add_action('manage_edit-fahrzeug_columns', array($this, 'customColumnsFahrzeug')); - add_action('manage_fahrzeug_custom_column', array($this, 'columnContentFahrzeug'), 10, 3); - add_action('manage_edit-exteinsatzmittel_columns', array($this, 'customColumnsExteinsatzmittel')); - add_action('manage_exteinsatzmittel_custom_column', array($this, 'columnContentExteinsatzmittel'), 10, 3); - add_action('edited_term', array($this, 'saveTerm'), 10, 3); - add_action('created_term', array($this, 'saveTerm'), 10, 3); - add_action('split_shared_term', array($this, 'splitSharedTerms'), 10, 4); - } - - /** - * Zeigt zusätzliche Felder beim Anlegen eines externen Einsatzmittels an - */ - public function addFieldsExteinsatzmittelNew() - { - echo '
    '; - echo ''; - echo ''; - echo '

    URL zu mehr Informationen über ein externes Einsatzmittel, beispielsweise dessen Webseite.

    '; - echo '
    '; - } - - /** - * Zeigt zusätzliche Felder beim Bearbeiten eines externen Einsatzmittels an - * - * @param $tag - */ - public function addFieldsExteinsatzmittelEdit($tag) - { - $exteinsatzmittelUrl = self::getTermField($tag->term_id, 'url', ''); - - echo ''; - echo ''; - echo ''; - echo '

    URL zu mehr Informationen über ein externes Einsatzmittel, beispielsweise dessen Webseite.

    '; - echo ''; - } - - /** - * Zeigt zusätzliche Felder beim Anlegen eines Fahrzeugs an - */ - public function addFieldsFahrzeugNew() - { - echo '
    '; - echo ''; - $this->utilities->dropdownPosts(array( - 'name' => 'fahrzeugpid', - 'post_type' => $this->getFahrzeugPostTypes() - )); - echo '

    Seite mit mehr Informationen über das Fahrzeug. Wird in Einsatzberichten mit diesem Fahrzeug verlinkt.

    '; - - echo '
    '; - echo ''; - echo ''; - echo '

    Optionale Angabe, mit der die Anzeigereihenfolge der Fahrzeuge beeinflusst werden kann. Fahrzeuge mit der kleineren Zahl werden zuerst angezeigt, anschließend diejenigen ohne Angabe bzw. dem Wert 0 in alphabetischer Reihenfolge.

    '; - } - - /** - * Zeigt zusätzliche Felder beim Bearbeiten eines Fahrzeugs an - * - * @param $tag - */ - public function addFieldsFahrzeugEdit($tag) - { - $fahrzeugPid = self::getTermField($tag->term_id, 'fahrzeugpid', ''); - - echo ''; - echo ''; - $this->utilities->dropdownPosts(array( - 'selected' => $fahrzeugPid, - 'name' => 'fahrzeugpid', - 'post_type' => $this->getFahrzeugPostTypes() - )); - echo '

    Seite mit mehr Informationen über das Fahrzeug. Wird in Einsatzberichten mit diesem Fahrzeug verlinkt.

    '; - - $vehicleOrder = self::getTermField($tag->term_id, 'vehicleorder', 0); - echo ''; - echo ''; - echo ''; - echo '

    Optionale Angabe, mit der die Anzeigereihenfolge der Fahrzeuge beeinflusst werden kann. Fahrzeuge mit der kleineren Zahl werden zuerst angezeigt, anschließend diejenigen ohne Angabe bzw. dem Wert 0 in alphabetischer Reihenfolge.

    '; - } - - /** - * Filterfunktion für die Spalten der Adminansicht der Taxonomie Fahrzeug - * - * @param array $columns Liste der Spaltentitel - * - * @return array Die gefilterte Liste - */ - public function customColumnsFahrzeug($columns) - { - $filteredColumns = array(); - - // Fahrzeugseite nach der Spalte 'Beschreibung' einblenden, ansonsten am Ende - if (!array_key_exists('description', $columns)) { - $filteredColumns['fahrzeugpage'] = 'Fahrzeugseite'; - $filteredColumns['vehicleorder'] = 'Reihenfolge'; - return $filteredColumns; - } - - foreach ($columns as $slug => $name) { - $filteredColumns[$slug] = $name; - if ($slug == 'description') { - $filteredColumns['fahrzeugpage'] = 'Fahrzeugseite'; - $filteredColumns['vehicleorder'] = 'Reihenfolge'; - } - } - - return $filteredColumns; - } - - /** - * Filterfunktion für den Inhalt der selbst angelegten Spalten - * - * @param string $string Leerer String. - * @param string $columnName Name der Spalte - * @param int $termId Term ID - * - * @return string Inhalt der Spalte - */ - public function columnContentFahrzeug($string, $columnName, $termId) - { - switch ($columnName) { - case 'fahrzeugpage': - $fahrzeugpid = self::getTermField($termId, 'fahrzeugpid'); - if (empty($fahrzeugpid)) { - return ' '; - } - - $url = get_permalink($fahrzeugpid); - $title = get_the_title($fahrzeugpid); - return sprintf( - '%3$s', - esc_attr($url), - esc_attr($title), - esc_html($title) - ); - break; - case 'vehicleorder': - $vehicleOrder = self::getTermField($termId, 'vehicleorder'); - return (empty($vehicleOrder) ? ' ' : esc_html($vehicleOrder)); - break; - default: - return ' '; - } - } - - /** - * Filterfunktion für die Spalten der Adminansicht der Taxonomie Externe Einsatzmittel - * - * @param array $columns Liste der Spaltentitel - * - * @return array Die gefilterte Liste - */ - public function customColumnsExteinsatzmittel($columns) - { - // URL nach der Spalte 'Beschreibung' einblenden, ansonsten am Ende - $filteredColumns = array(); - if (!array_key_exists('description', $columns)) { - $filteredColumns['exturl'] = 'URL'; - return $filteredColumns; - } - - foreach ($columns as $slug => $name) { - $filteredColumns[$slug] = $name; - if ($slug == 'description') { - $filteredColumns['exturl'] = 'URL'; - } - } - - return $filteredColumns; - } - - /** - * Filterfunktion für den Inhalt der selbst angelegten Spalten - * - * @param string $string Leerer String. - * @param string $columnName Name der Spalte - * @param int $termId Term ID - * - * @return string Inhalt der Spalte - */ - public function columnContentExteinsatzmittel($string, $columnName, $termId) - { - $url = self::getTermField($termId, 'url'); - if (empty($url)) { - return ' '; - } - - return sprintf( - '%2$s', - esc_attr($url), - esc_html($url) - ); - } - - /** - * Speichert zusätzliche Infos zu Terms als options ab - * - * @param int $termId Term ID - * @param int $ttId Term taxonomy ID - * @param string $taxonomy Taxonomy slug - */ - public function saveTerm($termId, $ttId, $taxonomy) - { - $evwTaxonomies = $this->getTaxonomies(); - - if (!array_key_exists($taxonomy, $evwTaxonomies) || !is_array($evwTaxonomies[$taxonomy])) { - return; - } - - foreach ($evwTaxonomies[$taxonomy] as $field) { - if (isset($field) && !empty($field) && isset($_POST[$field])) { - $value = $_POST[$field]; //FIXME sanitize - update_term_meta($termId, $field, $value); - } - } - } - - /** - * Liefert den Wert eines zusätzlich angelegten Feldes zurück - * - * @param int $termId - * @param string $field - * @param mixed $default - * - * @return mixed - */ - public static function getTermField($termId, $field, $default = false) - { - $termMeta = get_term_meta($termId, $field, true); - return (false === $termMeta ? $default : $termMeta); - } - - /** - * @return array - */ - public static function getTaxonomies() - { - return self::$taxonomies; - } - - /** - * @since 1.0.0 - * - * @return array - */ - private function getFahrzeugPostTypes() - { - $postTypes = get_post_types(array('public' => true)); - - return array_filter( - $postTypes, - function ($value) { - return !in_array($value, array('einsatz', 'attachment')); - } - ); - } -} diff --git a/tests/Taxonomies/TermmetaTest.php b/tests/Taxonomies/TermmetaTest.php deleted file mode 100644 index 43883409..00000000 --- a/tests/Taxonomies/TermmetaTest.php +++ /dev/null @@ -1,58 +0,0 @@ -assertEmpty(Taxonomies::getTermField($wpCreateTerm['term_id'], 'url')); - } - - public function testCreateTermWithMeta() - { - $url = 'http://www.example.org'; - $_POST['url'] = $url; - $wpCreateTerm = wp_create_term('testterm', 'exteinsatzmittel'); - $this->assertEquals($url, Taxonomies::getTermField($wpCreateTerm['term_id'], 'url')); - } - - public function testEditTerm() - { - $wpCreateTerm = wp_create_term('testterm', 'exteinsatzmittel'); - $url1 = 'http://www.example.org'; - $_POST['url'] = $url1; - wp_update_term($wpCreateTerm['term_id'], 'exteinsatzmittel'); - $this->assertEquals($url1, Taxonomies::getTermField($wpCreateTerm['term_id'], 'url')); - - $url2 = ''; - $_POST['url'] = $url2; - wp_update_term($wpCreateTerm['term_id'], 'exteinsatzmittel'); - $this->assertEmpty(Taxonomies::getTermField($wpCreateTerm['term_id'], 'url')); - - $url3 = 'http://www.example.com'; - $_POST['url'] = $url3; - wp_update_term($wpCreateTerm['term_id'], 'exteinsatzmittel'); - $this->assertEquals($url3, Taxonomies::getTermField($wpCreateTerm['term_id'], 'url')); - } - - public function testDeleteTerm() - { - $url = 'http://www.example.org'; - $_POST['url'] = $url; - $wpCreateTerm = wp_create_term('testterm', 'exteinsatzmittel'); - $this->assertEquals($url, Taxonomies::getTermField($wpCreateTerm['term_id'], 'url')); - - wp_delete_term($wpCreateTerm['term_id'], 'exteinsatzmittel'); - $this->assertEmpty(Taxonomies::getTermField($wpCreateTerm['term_id'], 'url')); - } -} From 19658b36ce9281e3fb04e67a05d2437cc108168e Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 19 May 2018 14:19:00 +0200 Subject: [PATCH 064/126] Dokumentation --- src/TaxonomyCustomFields.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/TaxonomyCustomFields.php b/src/TaxonomyCustomFields.php index c446cb92..dd23094d 100644 --- a/src/TaxonomyCustomFields.php +++ b/src/TaxonomyCustomFields.php @@ -113,6 +113,12 @@ public function onEditFormFields($tag, $taxonomy) } } + /** + * Fügt für die zusätzlichen Felder zusätzliche Spalten in der Übersicht ein + * + * @param array $columns + * @return array + */ public function onCustomColumns($columns) { $screen = get_current_screen(); From fd55b94306a0c1f62ef76d7db2e3c3e9c071388c Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 19 May 2018 14:20:32 +0200 Subject: [PATCH 065/126] Test repariert: Klasse war nicht eingebunden --- tests/Util/ProgressTrackerTest.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/Util/ProgressTrackerTest.php b/tests/Util/ProgressTrackerTest.php index 9e9e2b2e..55f14cc2 100644 --- a/tests/Util/ProgressTrackerTest.php +++ b/tests/Util/ProgressTrackerTest.php @@ -7,6 +7,15 @@ */ class ProgressTrackerTest extends \WP_UnitTestCase { + /** + * @inheritDoc + */ + public static function setUpBeforeClass() + { + parent::setUpBeforeClass(); + require_once dirname(dirname(dirname(__FILE__))) . '/src/Util/ProgressTracker.php'; + } + public function testAddStep() { $progressTracker = new ProgressTracker(); From ec03dd33715c04033521f8fcdf3beaa387f0bf51 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 19 May 2018 14:22:02 +0200 Subject: [PATCH 066/126] =?UTF-8?q?Test=20repariert:=20Metafelder=20werden?= =?UTF-8?q?=20mittlerweile=20automatisch=20mit=20Standardwert=20bef=C3=BCl?= =?UTF-8?q?lt,=20die=20alte=20Upgrade-Routine=20geht=20davon=20aus,=20dass?= =?UTF-8?q?=20die=20Felder=20nicht=20existieren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/UpgradeTest.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/UpgradeTest.php b/tests/UpgradeTest.php index 237cbbc3..372fc5dc 100644 --- a/tests/UpgradeTest.php +++ b/tests/UpgradeTest.php @@ -283,14 +283,20 @@ public function testUpgrade120NoCategory() public function testUpgrade130() { $ee1 = wp_create_term('Externes Einsatzmittel 1', 'exteinsatzmittel'); + delete_term_meta($ee1['term_id'], 'url'); // Metafelder sollen noch nicht existieren add_option('evw_tax_exteinsatzmittel_'.$ee1['term_id'].'_url', 'website1'); $ee2 = wp_create_term('Externes Einsatzmittel 2', 'exteinsatzmittel'); + delete_term_meta($ee2['term_id'], 'url'); add_option('evw_tax_exteinsatzmittel_'.$ee2['term_id'].'_url', 'website2'); $vehicle1 = wp_create_term('Fahrzeug 1', 'fahrzeug'); + delete_term_meta($vehicle1['term_id'], 'fahrzeugpid'); + delete_term_meta($vehicle1['term_id'], 'vehicleorder'); add_option('evw_tax_fahrzeug_'.$vehicle1['term_id'].'_fahrzeugpid', 46); add_option('evw_tax_fahrzeug_'.$vehicle1['term_id'].'_vehicleorder', 1); $vehicle2 = wp_create_term('Fahrzeug 2', 'fahrzeug'); + delete_term_meta($vehicle2['term_id'], 'fahrzeugpid'); + delete_term_meta($vehicle2['term_id'], 'vehicleorder'); add_option('evw_tax_fahrzeug_'.$vehicle2['term_id'].'_vehicleorder', 147); // Unbehandelte Term-Splits From 504b137b3ccaf15ec443890639c6169d568621a5 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 19 May 2018 19:50:01 +0200 Subject: [PATCH 067/126] Letzte Reste der alten Taxonomies-Klasse entfernt --- src/Model/IncidentReport.php | 3 +-- src/Util/Formatter.php | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Model/IncidentReport.php b/src/Model/IncidentReport.php index 2c1798a2..2ff2956d 100644 --- a/src/Model/IncidentReport.php +++ b/src/Model/IncidentReport.php @@ -2,7 +2,6 @@ namespace abrain\Einsatzverwaltung\Model; -use abrain\Einsatzverwaltung\Taxonomies; use DateTime; use WP_Post; use WP_Term; @@ -346,7 +345,7 @@ public function getVehicles() continue; } - $vehicleOrder = Taxonomies::getTermField($vehicle->term_id, 'vehicleorder'); + $vehicleOrder = get_term_meta($vehicle->term_id, 'vehicleorder', true); if (!empty($vehicleOrder)) { $vehicle->vehicle_order = $vehicleOrder; } diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index 0b7febfd..55c5d416 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -6,7 +6,6 @@ use abrain\Einsatzverwaltung\Frontend\AnnotationIconBar; use abrain\Einsatzverwaltung\Model\IncidentReport; use abrain\Einsatzverwaltung\Options; -use abrain\Einsatzverwaltung\Taxonomies; use abrain\Einsatzverwaltung\Utilities; use WP_Post; use WP_Term; @@ -268,7 +267,7 @@ public function getVehicles($report, $makeLinks, $showArchiveLinks) $name = $vehicle->name; if ($makeLinks) { - $pageid = Taxonomies::getTermField($vehicle->term_id, 'fahrzeugpid'); + $pageid = get_term_meta($vehicle->term_id, 'fahrzeugpid', true); if (!empty($pageid)) { $pageurl = get_permalink($pageid); if ($pageurl !== false) { @@ -310,7 +309,7 @@ public function getAdditionalForces($report, $makeLinks, $showArchiveLinks) $name = $force->name; if ($makeLinks) { - $url = Taxonomies::getTermField($force->term_id, 'url'); + $url = get_term_meta($force->term_id, 'url', true); if (!empty($url)) { $openInNewWindow = $this->options->isOpenExtEinsatzmittelNewWindow(); $name = ' Date: Sun, 20 May 2018 15:49:37 +0200 Subject: [PATCH 068/126] Einstellungen angelegt --- src/einsatzverwaltung-settings.php | 112 ++++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 11 deletions(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 59e51886..f451cbc3 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -163,14 +163,24 @@ public function registerSettings() array($this->utilities, 'sanitizeCheckbox') ); register_setting( - 'einsatzvw_settings_general', - 'einsatzvw_excerpt_type', - array($this->utilities, 'sanitizeExcerptType') + 'einsatzvw_settings_report', + 'einsatzverwaltung_use_reporttemplate', + array($this, 'sanitizeReportTemplateUsage') ); register_setting( - 'einsatzvw_settings_general', - 'einsatzvw_excerpt_type_feed', - array($this->utilities, 'sanitizeExcerptType') + 'einsatzvw_settings_report', + 'einsatzverwaltung_reporttemplate', + array($this, 'sanitizeTemplate') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzverwaltung_use_excerpttemplate', + array($this->utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzverwaltung_excerpttemplate', + array($this, 'sanitizeTemplate') ); register_setting( 'einsatzvw_settings_list', @@ -330,11 +340,18 @@ private function addSettingsFields() 'einsatzvw_settings_einsatzberichte' ); add_settings_field( - 'einsatzvw_settings_excerpt', - 'Kurzfassung', - array($this, 'echoSettingsExcerpt'), - self::EVW_SETTINGS_SLUG . '-general', - 'einsatzvw_settings_general' + 'einsatzvw_settings_reporttemplate', + 'Template', + array($this, 'echoReportTemplateSettings'), + self::EVW_SETTINGS_SLUG . '-report', + 'einsatzvw_settings_einsatzberichte' + ); + add_settings_field( + 'einsatzvw_settings_excerpttemplate', + 'Template für Kurzfassung', + array($this, 'echoExcerptTemplateSettings'), + self::EVW_SETTINGS_SLUG . '-report', + 'einsatzvw_settings_einsatzberichte' ); add_settings_field( 'einsatzvw_settings_columns', @@ -404,6 +421,24 @@ private function echoSettingsCheckbox($checkboxId, $text) echo $text . ''; } + /** + * @param string $name Name der Option + * @param array $options Array aus Wert/Label-Paaren + * @param string $defaultValue Standardwert für Option, falls diese nicht existiert + */ + private function echoRadioButtons($name, $options, $defaultValue) + { + $currentValue = get_option($name, $defaultValue); + foreach ($options as $value => $label) { + printf( + '
    ', + $name, + $value, + checked($value, $currentValue, false), + $label + ); + } + } /** * Generiert eine Auswahlliste @@ -422,6 +457,18 @@ private function echoSelect($name, $options, $selectedValue) echo ''; } + /** + * @param string $name Name der Option + */ + private function echoTextarea($name) + { + $currentValue = get_option($name, ''); + printf( + '', + $name, + esc_textarea($currentValue) + ); + } /** * Gibt ein Eingabefeld aus @@ -562,6 +609,27 @@ public function echoSettingsExtNew() ); } + public function echoReportTemplateSettings() + { + echo '
    '; + $this->echoRadioButtons('einsatzverwaltung_use_reporttemplate', array( + 'no' => 'Nicht verwenden', + 'singular' => 'In der Einzelansicht verwenden', + 'everywhere' => 'Überall verwenden', + ), 'no'); + $this->echoTextarea('einsatzverwaltung_reporttemplate'); + echo '

    Beschreibung

    '; // TODO + echo '
    '; + } + + public function echoExcerptTemplateSettings() + { + echo '
    '; + $this->echoSettingsCheckbox('einsatzverwaltung_use_excerpttemplate', 'Template verwenden'); + $this->echoTextarea('einsatzverwaltung_excerpttemplate'); + echo '

    Beschreibung

    '; // TODO + echo '
    '; + } /** * Gibt die Einstellmöglichkeiten für den Auszug aus @@ -949,4 +1017,26 @@ public function sanitizeAnnotationOffColor($input) { return $this->utilities->sanitizeHexColor($input, AnnotationIconBar::DEFAULT_COLOR_OFF); } + + /** + * @param string $input + * @return string + */ + public function sanitizeReportTemplateUsage($input) + { + if (!in_array($input, array('no', 'singular', 'everywhere'))) { + return 'no'; + } + + return $input; + } + + /** + * @param string $input + * @return string + */ + public function sanitizeTemplate($input) + { + return stripslashes(wp_filter_post_kses(addslashes($input))); + } } From d1bb179d5883569fa6dbf7540c6ab56e09372255 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 20 May 2018 20:55:27 +0200 Subject: [PATCH 069/126] =?UTF-8?q?Vierte=20Option=20zur=20Nutzung=20des?= =?UTF-8?q?=20Templates=20eingef=C3=BChrt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-settings.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index f451cbc3..7a15910e 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -14,6 +14,14 @@ class Settings { const EVW_SETTINGS_SLUG = 'einsatzvw-settings'; + + private $useReportTemplateOptions = array( + 'no' => 'Nicht verwenden', + 'singular' => 'In der Einzelansicht verwenden', + 'loops' => 'In Übersichten verwenden', + 'everywhere' => 'Überall verwenden', + ); + /** * @var Options */ @@ -612,11 +620,7 @@ public function echoSettingsExtNew() public function echoReportTemplateSettings() { echo '
    '; - $this->echoRadioButtons('einsatzverwaltung_use_reporttemplate', array( - 'no' => 'Nicht verwenden', - 'singular' => 'In der Einzelansicht verwenden', - 'everywhere' => 'Überall verwenden', - ), 'no'); + $this->echoRadioButtons('einsatzverwaltung_use_reporttemplate', $this->useReportTemplateOptions, 'no'); $this->echoTextarea('einsatzverwaltung_reporttemplate'); echo '

    Beschreibung

    '; // TODO echo '
    '; @@ -1024,7 +1028,7 @@ public function sanitizeAnnotationOffColor($input) */ public function sanitizeReportTemplateUsage($input) { - if (!in_array($input, array('no', 'singular', 'everywhere'))) { + if (!in_array($input, array_keys($this->useReportTemplateOptions))) { return 'no'; } From 5eb4f632cae3038b1f0d9911253bc9d700c7b840 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 20 May 2018 22:11:43 +0200 Subject: [PATCH 070/126] Ausgabe des formatierten Templates im Frontend --- src/einsatzverwaltung-frontend.php | 46 ++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/src/einsatzverwaltung-frontend.php b/src/einsatzverwaltung-frontend.php index 017accd1..5a336cf0 100644 --- a/src/einsatzverwaltung-frontend.php +++ b/src/einsatzverwaltung-frontend.php @@ -193,21 +193,61 @@ private function getDetailString($title, $value, $newline = true) public function renderContent($content) { global $post; - if (get_post_type() !== "einsatz") { - return $content; - } // Wenn Beiträge durch ein Passwort geschützt sind, werden auch keine Einsatzdetails preisgegeben if (post_password_required()) { return $content; } + if ($this->useReportTemplate()) { + $template = get_option('einsatzverwaltung_reporttemplate', ''); + + if (empty($template)) { + return $content; + } + + $formatted = $this->formatter->formatIncidentData($template, array(), $post); + return stripslashes(wp_filter_post_kses(addslashes($formatted))); + } + + if (!is_singular('einsatz')) { + return $content; + } + + // Fallback auf das klassische Layout $header = $this->getEinsatzberichtHeader($post, true, true); $content = $this->prepareContent($content); return $header . '
    ' . $content; } + /** + * Entscheidet, ob für die Ausgabe des Einsatzberichts das Template verwendet wird oder nicht + * + * @return bool + */ + private function useReportTemplate() + { + $useTemplate = get_option('einsatzverwaltung_use_reporttemplate', 'no'); + + if ($useTemplate === 'no') { + return false; + } + + if ($useTemplate === 'singular' && is_singular('einsatz') && is_main_query() && in_the_loop()) { + return true; + } + + if ($useTemplate === 'loops' && get_post_type() === 'einsatz' && is_main_query() && in_the_loop()) { + return true; + } + + if ($useTemplate === 'everywhere' && get_post_type() === 'einsatz') { + return true; + } + + return false; + } /** * Bereitet den Beitragstext auf From dd47dc0b23d205551f67e32f65993d4128230f0f Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 20 May 2018 22:45:45 +0200 Subject: [PATCH 071/126] =?UTF-8?q?Ausgabe=20des=20formatierten=20Template?= =?UTF-8?q?s=20im=20Frontend=20auch=20f=C3=BCr=20Auszug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-frontend.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/einsatzverwaltung-frontend.php b/src/einsatzverwaltung-frontend.php index 5a336cf0..d68c5624 100644 --- a/src/einsatzverwaltung-frontend.php +++ b/src/einsatzverwaltung-frontend.php @@ -279,14 +279,18 @@ public function filterEinsatzExcerpt($excerpt) return $excerpt; } - $excerptType = $this->options->getExcerptType(); + if (get_option('einsatzverwaltung_use_excerpttemplate') !== '1') { + return $excerpt; + } - // Kein Eingriff in das normale Verhalten von WordPress - if ('default' == $excerptType) { + $template = get_option('einsatzverwaltung_excerpttemplate', ''); + + if (empty($template)) { return $excerpt; } - return $this->getEinsatzExcerpt($post, $excerptType, true, true); + $formatted = $this->formatter->formatIncidentData($template, array(), $post); + return stripslashes(wp_filter_post_kses(addslashes($formatted))); } From 9cdf2cf0ad59c73a9e35d8ac16d282bbdd118bee Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 21 May 2018 22:59:26 +0200 Subject: [PATCH 072/126] =?UTF-8?q?Neue=20Platzhalter=20f=C3=BCr=20Fahrzeu?= =?UTF-8?q?ge,=20Weitere=20Kr=C3=A4fte,=20Alarmierungsarten=20und=20den=20?= =?UTF-8?q?Berichtstext=20eingef=C3=BChrt.=20Formatierung=20findet=20jetzt?= =?UTF-8?q?=20abh=C3=A4ngig=20von=20einem=20Kontext=20(Beitrag,=20Widget,?= =?UTF-8?q?=20...)=20statt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Util/Formatter.php | 29 ++++++++++++++++++++---- src/Widgets/RecentIncidentsFormatted.php | 7 +++--- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index 55c5d416..b0f77953 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -53,10 +53,11 @@ public function __construct($options, $utilities, $core) * @param string $pattern * @param array $allowedTags * @param WP_Post $post + * @param string $context * * @return mixed */ - public function formatIncidentData($pattern, $allowedTags = array(), $post = null) + public function formatIncidentData($pattern, $allowedTags = array(), $post = null, $context = 'post') { if (empty($allowedTags)) { $allowedTags = array_keys($this->getTags()); @@ -64,7 +65,7 @@ public function formatIncidentData($pattern, $allowedTags = array(), $post = nul $formattedString = $pattern; foreach ($allowedTags as $tag) { - $formattedString = $this->format($post, $formattedString, $tag); + $formattedString = $this->format($post, $formattedString, $tag, $context); } return $formattedString; } @@ -73,9 +74,10 @@ public function formatIncidentData($pattern, $allowedTags = array(), $post = nul * @param WP_Post $post * @param string $pattern * @param string $tag + * @param string $context * @return mixed|string */ - private function format($post, $pattern, $tag) + private function format($post, $pattern, $tag, $context = 'post') { if ($post == null && !in_array($tag, $this->tagsNotNeedingPost)) { $message = 'Alle Tags außer ' . implode(',', $this->tagsNotNeedingPost) . ' brauchen ein Post-Objekt'; @@ -103,7 +105,8 @@ private function format($post, $pattern, $tag) $replace = $this->utilities->getDurationString(Data::getDauer($incidentReport)); break; case '%incidentType%': - $replace = $this->getTypeOfIncident($incidentReport, false, false, false); + $showTypeArchive = get_option('einsatzvw_show_einsatzart_archive') === '1'; + $replace = $this->getTypeOfIncident($incidentReport, ($context === 'post'), $showTypeArchive, false); break; case '%incidentTypeColor%': $replace = $this->getColorOfTypeOfIncident($incidentReport->getTypeOfIncident()); @@ -126,6 +129,18 @@ private function format($post, $pattern, $tag) case '%annotations%': $replace = $this->annotationIconBar->render($incidentReport); break; + case '%vehicles%': + $replace = $this->getVehicles($incidentReport, ($context === 'post'), ($context === 'post')); + break; + case '%additionalForces%': + $replace = $this->getAdditionalForces($incidentReport, ($context === 'post'), ($context === 'post')); + break; + case '%typesOfAlerting%': + $replace = $this->getTypesOfAlerting($incidentReport); + break; + case '%content%': + $replace = $post->post_content; + break; default: return $pattern; } @@ -173,7 +188,11 @@ public function getTags() '%feedUrl%' => 'URL zum Feed', '%number%' => 'Einsatznummer', '%seqNum%' => 'Laufende Nummer', - '%annotations%' => 'Vermerke' + '%annotations%' => 'Vermerke', + '%vehicles%' => 'Fahrzeuge', + '%additionalForces%' => 'Weitere Kräfte', + '%typesOfAlerting%' => 'Alarmierungsarten', + '%content%' => 'Berichtstext' ); } diff --git a/src/Widgets/RecentIncidentsFormatted.php b/src/Widgets/RecentIncidentsFormatted.php index e8b8412d..c151b2f3 100644 --- a/src/Widgets/RecentIncidentsFormatted.php +++ b/src/Widgets/RecentIncidentsFormatted.php @@ -125,7 +125,8 @@ class RecentIncidentsFormatted extends WP_Widget 'afterContent' => '' ); private $allowedTagsPattern = array('%title%', '%date%', '%time%', '%location%', '%duration%', '%incidentType%', - '%incidentTypeColor%', '%url%', '%number%', '%seqNum%', '%annotations%'); + '%incidentTypeColor%', '%url%', '%number%', '%seqNum%', '%annotations%', '%vehicles%', '%additionalForces%', + '%typesOfAlerting%'); private $allowedTagsAfter = array('%feedUrl%'); /** @@ -183,9 +184,9 @@ public function widget($args, $instance) $widgetContent = $settings['beforeContent']; foreach ($incidents as $incident) { - $widgetContent .= self::$formatter->formatIncidentData($settings['pattern'], $this->allowedTagsPattern, $incident); + $widgetContent .= self::$formatter->formatIncidentData($settings['pattern'], $this->allowedTagsPattern, $incident, 'widget'); } - $widgetContent .= self::$formatter->formatIncidentData($settings['afterContent'], $this->allowedTagsAfter); + $widgetContent .= self::$formatter->formatIncidentData($settings['afterContent'], $this->allowedTagsAfter, null, 'widget'); echo wp_kses($widgetContent, $this->allowedHtmlTags); echo $args['after_widget']; From 7ca500504d599804a6a84c062de7d39c88ef2e17 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 21 May 2018 23:47:05 +0200 Subject: [PATCH 073/126] =?UTF-8?q?Auszug=20f=C3=BCr=20den=20Feed=20wird?= =?UTF-8?q?=20ebenfalls=20mit=20dem=20Template=20generiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-frontend.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/einsatzverwaltung-frontend.php b/src/einsatzverwaltung-frontend.php index d68c5624..f0b4bf9b 100644 --- a/src/einsatzverwaltung-frontend.php +++ b/src/einsatzverwaltung-frontend.php @@ -60,7 +60,7 @@ private function addHooks() add_filter('the_content', array($this, 'renderContent')); } add_filter('the_excerpt', array($this, 'filterEinsatzExcerpt')); - add_filter('the_excerpt_rss', array($this, 'filterEinsatzExcerptFeed')); + add_filter('the_excerpt_rss', array($this, 'filterEinsatzExcerpt')); add_action('pre_get_posts', array($this, 'addReportsToQuery')); } @@ -289,7 +289,7 @@ public function filterEinsatzExcerpt($excerpt) return $excerpt; } - $formatted = $this->formatter->formatIncidentData($template, array(), $post); + $formatted = $this->formatter->formatIncidentData($template, array(), $post, is_feed() ? 'feed' : 'post'); return stripslashes(wp_filter_post_kses(addslashes($formatted))); } From c442f75393b08dbdf653f9f0179ceb7be5f1d321 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 21 May 2018 23:47:31 +0200 Subject: [PATCH 074/126] Sprachliche Anpassung --- src/einsatzverwaltung-frontend.php | 4 ++-- src/einsatzverwaltung-settings.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/einsatzverwaltung-frontend.php b/src/einsatzverwaltung-frontend.php index f0b4bf9b..5b2e84ab 100644 --- a/src/einsatzverwaltung-frontend.php +++ b/src/einsatzverwaltung-frontend.php @@ -264,13 +264,13 @@ private function prepareContent($content) /** - * Stellt die Kurzfassung (Exzerpt) zur Verfügung, im Fall von Einsatzberichten wird + * Stellt den Auszug zur Verfügung, im Fall von Einsatzberichten wird * hier wahlweise der Berichtstext, Einsatzdetails oder beides zurückgegeben * * @param string $excerpt Filterparameter, wird bei Einsatzberichten nicht beachtet, bei anderen Beitragstypen * unverändert verwendet * - * @return string Die Kurzfassung + * @return string Der Auszug */ public function filterEinsatzExcerpt($excerpt) { diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 7a15910e..aa250530 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -356,7 +356,7 @@ private function addSettingsFields() ); add_settings_field( 'einsatzvw_settings_excerpttemplate', - 'Template für Kurzfassung', + 'Template für Auszug', array($this, 'echoExcerptTemplateSettings'), self::EVW_SETTINGS_SLUG . '-report', 'einsatzvw_settings_einsatzberichte' From 0caafc3b356d639e4829111e5757d9b491b6a22d Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 21 May 2018 23:48:12 +0200 Subject: [PATCH 075/126] Veraltete Methoden zur Erzeugung des Auszugs entfernt --- src/einsatzverwaltung-core.php | 15 --------- src/einsatzverwaltung-frontend.php | 52 ----------------------------- src/einsatzverwaltung-options.php | 25 -------------- src/einsatzverwaltung-settings.php | 25 -------------- src/einsatzverwaltung-utilities.php | 17 ---------- 5 files changed, 134 deletions(-) diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index c8f05959..44ae543c 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -586,21 +586,6 @@ public function formatEinsatznummer($jahr, $nummer) } } - /** - * Gibt die möglichen Kurzfassungstypen zurück - * - * @return array - */ - public function getExcerptTypes() - { - return array( - 'default' => 'WordPress-Standard', - 'none' => 'Leer', - 'details' => 'Einsatzdetails', - 'text' => 'Berichtstext' - ); - } - /** * Gibt die möglichen Berechtigungen für Einsatzberichte zurück * diff --git a/src/einsatzverwaltung-frontend.php b/src/einsatzverwaltung-frontend.php index 5b2e84ab..d8799fbc 100644 --- a/src/einsatzverwaltung-frontend.php +++ b/src/einsatzverwaltung-frontend.php @@ -293,58 +293,6 @@ public function filterEinsatzExcerpt($excerpt) return stripslashes(wp_filter_post_kses(addslashes($formatted))); } - - /** - * Gibt die Kurzfassung (Exzerpt) für den Feed zurück - * - * @param string $excerpt Filterparameter, wird bei Einsatzberichten nicht beachtet, bei anderen Beitragstypen - * unverändert verwendet - * - * @return string Die Kurzfassung - */ - public function filterEinsatzExcerptFeed($excerpt) - { - global $post; - if (get_post_type() !== 'einsatz') { - return $excerpt; - } - - $excerptType = $this->options->getExcerptTypeFeed(); - - // Kein Eingriff in das normale Verhalten von WordPress - if ('default' == $excerptType) { - return $excerpt; - } - - $getExcerpt = $this->getEinsatzExcerpt($post, $excerptType, true, false); - $getExcerpt = str_replace('', '', $getExcerpt); - $getExcerpt = str_replace('', '', $getExcerpt); - return $getExcerpt; - } - - /** - * @param WP_Post $post - * @param string $excerptType - * @param bool $excerptMayContainLinks - * @param bool $showArchiveLinks - * - * @return mixed|string|void - */ - private function getEinsatzExcerpt($post, $excerptType, $excerptMayContainLinks, $showArchiveLinks) - { - switch ($excerptType) { - case 'details': - return $this->getEinsatzberichtHeader($post, $excerptMayContainLinks, $showArchiveLinks); - case 'text': - return $this->prepareContent(get_the_content()); - case 'none': - return ''; - default: - return $this->getEinsatzberichtHeader($post, $excerptMayContainLinks, $showArchiveLinks); - } - } - - /** * Gibt Einsatzberichte ggf. auch zwischen den 'normalen' Blogbeiträgen aus * diff --git a/src/einsatzverwaltung-options.php b/src/einsatzverwaltung-options.php index 46de0ec3..8910547e 100644 --- a/src/einsatzverwaltung-options.php +++ b/src/einsatzverwaltung-options.php @@ -13,8 +13,6 @@ class Options 'einsatzvw_show_exteinsatzmittel_archive' => false, 'einsatzvw_show_fahrzeug_archive' => false, 'einsatzvw_open_ext_in_new' => false, - 'einsatzvw_excerpt_type' => 'default', - 'einsatzvw_excerpt_type_feed' => 'default', 'einsatzvw_show_einsatzberichte_mainloop' => false, 'einsatzvw_einsatz_hideemptydetails' => true, 'einsatzvw_einsatznummer_lfdvorne' => false, @@ -87,11 +85,6 @@ public function getDefaultEinsatznummerStellen() return $this->defaults['einsatzvw_einsatznummer_stellen']; } - public function getDefaultExcerptType() - { - return $this->defaults['einsatzvw_excerpt_type']; - } - /** * Gibt das Datumsformat von WordPress zurück */ @@ -134,24 +127,6 @@ public function getEinsatznummerStellen() return $this->utilities->sanitizeEinsatznummerStellen($option); } - /** - * @return string - */ - public function getExcerptType() - { - $option = $this->getOption('einsatzvw_excerpt_type'); - return $this->utilities->sanitizeExcerptType($option); - } - - /** - * @return string - */ - public function getExcerptTypeFeed() - { - $option = $this->getOption('einsatzvw_excerpt_type_feed'); - return $this->utilities->sanitizeExcerptType($option); - } - /** * Gibt die Basis für die URL zu Einsatzberichten zurück * diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index aa250530..92cd24f1 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -635,31 +635,6 @@ public function echoExcerptTemplateSettings() echo ''; } - /** - * Gibt die Einstellmöglichkeiten für den Auszug aus - */ - public function echoSettingsExcerpt() - { - $types = $this->core->getExcerptTypes(); - - echo '

    Kurzfassung auf der Webseite: '; - $this->echoSelect( - 'einsatzvw_excerpt_type', - $types, - $this->options->getExcerptType() - ); - echo '

    Sollte diese Einstellung keinen Effekt auf der Webseite zeigen, nutzt das verwendete Theme möglicherweise keine Kurzfassungen und zeigt immer den vollen Beitrag.

    '; - - echo '

    Kurzfassung im Feed: '; - $this->echoSelect( - 'einsatzvw_excerpt_type_feed', - $types, - $this->options->getExcerptTypeFeed() - ); - echo '

    Bitte auch die Einstellung zum Umfang der Einträge im Feed (Einstellungen > Lesen) beachten!
    Im Feed werden bei den Einsatzdetails aus technischen Gründen keine Links zu gefilterten Einsatzlisten angezeigt.

    '; - } - - /** * */ diff --git a/src/einsatzverwaltung-utilities.php b/src/einsatzverwaltung-utilities.php index c7e08575..fb66c637 100644 --- a/src/einsatzverwaltung-utilities.php +++ b/src/einsatzverwaltung-utilities.php @@ -262,23 +262,6 @@ public function sanitizeEinsatznummerStellen($input) } } - - /** - * Stellt einen gültigen Wert der Exzerpttypeinstellung sicher - * - * @param string $input Eingegebener Wert - * - * @return string Der Eingabewert, wenn gültig, ansonsten ein Standardwert - */ - public function sanitizeExcerptType($input) - { - if (array_key_exists($input, $this->core->getExcerptTypes())) { - return $input; - } else { - return $this->options->getDefaultExcerptType(); - } - } - /** * Stellt sicher, dass es sich um einen validen Farbwert im Hexformat handelt * From 482927e3310661076761416f346b1f4216ccc04f Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 26 May 2018 18:04:46 +0200 Subject: [PATCH 076/126] Fehlenden Standardwert nachgetragen --- src/einsatzverwaltung-options.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/einsatzverwaltung-options.php b/src/einsatzverwaltung-options.php index 8910547e..39607b80 100644 --- a/src/einsatzverwaltung-options.php +++ b/src/einsatzverwaltung-options.php @@ -26,6 +26,7 @@ class Options 'einsatzvw_category' => false, 'einsatzvw_loop_only_special' => false, 'einsatzverwaltung_incidentnumbers_auto' => false, + 'einsatzverwaltung_use_excerpttemplate' => false, ); /** From 13378d6c2a298e772ac6bead2c6cfcc0ac848333 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 26 May 2018 21:51:21 +0200 Subject: [PATCH 077/126] Dokumentation --- src/einsatzverwaltung-settings.php | 39 +++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index 92cd24f1..c297006d 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -16,10 +16,10 @@ class Settings const EVW_SETTINGS_SLUG = 'einsatzvw-settings'; private $useReportTemplateOptions = array( - 'no' => 'Nicht verwenden', + 'no' => 'Nicht verwenden (zeigt die klassische Einzelansicht)', 'singular' => 'In der Einzelansicht verwenden', - 'loops' => 'In Übersichten verwenden', - 'everywhere' => 'Überall verwenden', + 'loops' => 'In der Einzelansicht und in Übersichten (Startseite, Archive, Suchergebnisse, ...) verwenden', + 'everywhere' => 'Überall verwenden', ); /** @@ -274,6 +274,14 @@ function () { }, self::EVW_SETTINGS_SLUG . '-report' ); + add_settings_section( + 'einsatzvw_settings_reporttemplates', + 'Templates', + function () { + echo '

    Mit den beiden folgenden Templates kann das Aussehen der Einsatzberichte bzw. deren Auszüge individuell angepasst werden. Das ausgefüllte Template erscheint immer dort, wo normal der Beitragstext stehen würde. Wie die Templates funktionieren ist in der Dokumentation beschrieben.

    '; + }, + self::EVW_SETTINGS_SLUG . '-report' + ); add_settings_section( 'einsatzvw_settings_einsatzliste', '', @@ -349,17 +357,17 @@ private function addSettingsFields() ); add_settings_field( 'einsatzvw_settings_reporttemplate', - 'Template', + 'Template für Einsatzbericht', array($this, 'echoReportTemplateSettings'), self::EVW_SETTINGS_SLUG . '-report', - 'einsatzvw_settings_einsatzberichte' + 'einsatzvw_settings_reporttemplates' ); add_settings_field( 'einsatzvw_settings_excerpttemplate', - 'Template für Auszug', + 'Template für Auszug', array($this, 'echoExcerptTemplateSettings'), self::EVW_SETTINGS_SLUG . '-report', - 'einsatzvw_settings_einsatzberichte' + 'einsatzvw_settings_reporttemplates' ); add_settings_field( 'einsatzvw_settings_columns', @@ -472,7 +480,7 @@ private function echoTextarea($name) { $currentValue = get_option($name, ''); printf( - '', + '

    ', $name, esc_textarea($currentValue) ); @@ -578,7 +586,7 @@ public function echoSettingsEmptyDetails() 'einsatzvw_einsatz_hideemptydetails', 'Nicht ausgefüllte Details ausblenden' ); - echo '

    Ein Einsatzdetail gilt als nicht ausgefüllt, wenn das entsprechende Textfeld oder die entsprechende Liste leer ist.

    '; + echo '

    Ein Einsatzdetail gilt als nicht ausgefüllt, wenn das entsprechende Textfeld oder die entsprechende Liste leer ist. Diese Einstellung greift nur bei der klassischen Darstellung ohne Template.

    '; } @@ -617,21 +625,30 @@ public function echoSettingsExtNew() ); } + /** + * Einstellungen für die Gestaltung der Einsatzberichte per Template + */ public function echoReportTemplateSettings() { echo '
    '; $this->echoRadioButtons('einsatzverwaltung_use_reporttemplate', $this->useReportTemplateOptions, 'no'); + echo '

    '; + printf('Die Option "%s" wird nicht empfohlen, ist aber bei manchen Themes die einzige Möglichkeit, das Template in Übersichten nutzen zu können.', $this->useReportTemplateOptions['everywhere']); + echo '

    '; $this->echoTextarea('einsatzverwaltung_reporttemplate'); - echo '

    Beschreibung

    '; // TODO + echo '

    Es kann sein, dass das Theme in Übersichten nur den Auszug anzeigt. Dessen Aussehen kann mit einem eigenen Template festgelegt werden (siehe unten).

    '; echo '
    '; } + /** + * Einstellungen für die Gestaltung des Auszugs von Einsatzberichten per Template + */ public function echoExcerptTemplateSettings() { echo '
    '; $this->echoSettingsCheckbox('einsatzverwaltung_use_excerpttemplate', 'Template verwenden'); + echo '

    Im Gegensatz zum von WordPress generierten Auszug wird dieser nicht auf eine bestimmte Länge begrenzt. Das Einfügen des Beitragstextes (%content%) ist also nicht zu empfehlen.

    '; $this->echoTextarea('einsatzverwaltung_excerpttemplate'); - echo '

    Beschreibung

    '; // TODO echo '
    '; } From f0f3145d431a769db8eca06ae0bedf89704600f1 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 26 May 2018 22:00:40 +0200 Subject: [PATCH 078/126] Durch fieldsets Layout etwas aufgelockert --- src/einsatzverwaltung-settings.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php index c297006d..3ee8c9bb 100644 --- a/src/einsatzverwaltung-settings.php +++ b/src/einsatzverwaltung-settings.php @@ -511,6 +511,7 @@ private function echoSettingsInput($name, $description, $value = '') */ public function echoSettingsPermalinks() { + echo '
    '; $this->echoSettingsInput( 'einsatzvw_rewrite_slug', sprintf( @@ -521,6 +522,7 @@ public function echoSettingsPermalinks() ), $this->options->getRewriteSlug() ); + echo '
    '; } /** @@ -528,10 +530,12 @@ public function echoSettingsPermalinks() */ public function echoSettingsEinsatznummerFormat() { + echo '
    '; printf('Jahreszahl + jahresbezogene, fortlaufende Nummer mit Stellen

    Beispiel für den fünften Einsatz in 2014:
    bei 2 Stellen: 201405
    bei 4 Stellen: 20140005


    ', 'einsatzvw_einsatznummer_stellen', $this->options->getEinsatznummerStellen()); $this->echoSettingsCheckbox('einsatzvw_einsatznummer_lfdvorne', 'Laufende Nummer vor das Jahr stellen'); - echo '

    Hinweis: Nach einer Änderung des Formats erhalten die bestehenden Einsatzberichte automatisch aktualisierte Nummern.'; + echo '

    Hinweis: Nach einer Änderung des Formats erhalten die bestehenden Einsatzberichte automatisch aktualisierte Nummern.

    '; + echo '
    '; } public function echoSettingsEinsatznummerAuto() @@ -549,6 +553,7 @@ public function echoSettingsEinsatznummerAuto() */ public function echoEinsatzberichteMainloop() { + echo '
    '; $this->echoSettingsCheckbox( 'einsatzvw_show_einsatzberichte_mainloop', 'Einsatzberichte zwischen den regulären WordPress-Beiträgen anzeigen' @@ -574,6 +579,7 @@ public function echoEinsatzberichteMainloop() 'Nur als besonders markierte Einsatzberichte zwischen den regulären WordPress-Beiträgen bzw. in der Kategorie anzeigen.' ); echo '

    Mit dieser Einstellung gelten die beiden oberen Einstellungen nur für als besonders markierte Einsatzberichte.

    '; + echo '
    '; } @@ -582,11 +588,13 @@ public function echoEinsatzberichteMainloop() */ public function echoSettingsEmptyDetails() { + echo '
    '; $this->echoSettingsCheckbox( 'einsatzvw_einsatz_hideemptydetails', 'Nicht ausgefüllte Details ausblenden' ); echo '

    Ein Einsatzdetail gilt als nicht ausgefüllt, wenn das entsprechende Textfeld oder die entsprechende Liste leer ist. Diese Einstellung greift nur bei der klassischen Darstellung ohne Template.

    '; + echo '
    '; } @@ -595,6 +603,7 @@ public function echoSettingsEmptyDetails() */ public function echoSettingsArchive() { + echo '
    '; $this->echoSettingsCheckbox( 'einsatzvw_show_einsatzart_archive', 'Einsatzart' @@ -610,6 +619,7 @@ public function echoSettingsArchive() 'Fahrzeuge' ); echo '

    Für alle hier aktivierten Arten von Einsatzdetails werden im Kopfbereich des Einsatzberichts für alle auftretenden Werte Links zu einer gefilterten Einsatzübersicht angezeigt. Beispielsweise kann man damit alle Einsätze unter Beteiligung einer bestimmten externen Einsatzkraft auflisten lassen.

    '; + echo '
    '; } @@ -619,10 +629,12 @@ public function echoSettingsArchive() */ public function echoSettingsExtNew() { + echo '
    '; $this->echoSettingsCheckbox( 'einsatzvw_open_ext_in_new', 'Links zu externen Einsatzmitteln in einem neuen Fenster öffnen' ); + echo '
    '; } /** @@ -692,6 +704,7 @@ public function echoEinsatzlisteColumns() public function echoEinsatzlisteColumnSettings() { + echo '
    '; $this->echoSettingsCheckbox( 'einsatzvw_list_art_hierarchy', 'Einsatzart: Hierarchie der Einsatzart anzeigen' @@ -706,17 +719,21 @@ public function echoEinsatzlisteColumnSettings() 'einsatzvw_list_ext_link', 'Weitere Kräfte: Links anzeigen, sofern verfügbar' ); + echo '
    '; } public function echoEinsatzlisteAnnotationsSettings() { + echo '
    '; echo '

    Farbe für inaktive Vermerke:

    '; $this->echoColorPicker('einsatzvw_list_annotations_color_off', AnnotationIconBar::DEFAULT_COLOR_OFF); echo '

    Diese Farbe wird für die Symbole von inaktiven Vermerken verwendet, die von aktiven werden in der Textfarbe Deines Themes dargestellt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; + echo '
    '; } public function echoEinsatzlisteZebraSettings() { + echo '
    '; $this->echoSettingsCheckbox( 'einsatzvw_list_zebra', 'Zebrastreifen anzeigen', @@ -733,6 +750,7 @@ public function echoEinsatzlisteZebraSettings() echo '>Gerade Zeilen einfärben

    '; + echo ''; } /** @@ -740,6 +758,7 @@ public function echoEinsatzlisteZebraSettings() */ public function echoSettingsCapsRoles() { + echo '
    '; $roles = get_editable_roles(); if (empty($roles)) { echo "Es konnten keine Rollen gefunden werden."; @@ -759,6 +778,7 @@ public function echoSettingsCapsRoles() echo '

    Die Benutzer mit den hier ausgewählten Rollen haben alle Rechte, um die Einsatzberichte und die zugehörigen Eigenschaften (z.B. Einsatzarten) zu verwalten. Zu dieser Einstellungsseite und den Werkzeugen haben in jedem Fall nur Administratoren Zugang.

    '; echo '

    Die Berechtigungen können mit speziellen Plugins deutlich feingranularer eingestellt werden.

    '; } + echo '
    '; } From abc54f2f00a50f5e0c713e965b36fe427c436565 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sat, 26 May 2018 23:04:43 +0200 Subject: [PATCH 079/126] Einstellungen beim Update aktualisieren --- src/einsatzverwaltung-core.php | 2 +- src/einsatzverwaltung-update.php | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 44ae543c..49b39923 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -37,7 +37,7 @@ class Core { const VERSION = '1.3.6'; - const DB_VERSION = 21; + const DB_VERSION = 30; /** * Statische Variable, um die aktuelle (einzige!) Instanz dieser Klasse zu halten diff --git a/src/einsatzverwaltung-update.php b/src/einsatzverwaltung-update.php index 8ff7825e..d966349d 100644 --- a/src/einsatzverwaltung-update.php +++ b/src/einsatzverwaltung-update.php @@ -101,6 +101,10 @@ public function doUpdate($currentDbVersion, $targetDbVersion) if ($currentDbVersion < 21 && $targetDbVersion >= 21) { $this->upgrade134(); } + + if ($currentDbVersion < 30 && $targetDbVersion >= 30) { + $this->upgrade140(); + } } /** @@ -336,6 +340,22 @@ private function upgrade134() update_option('einsatzvw_db_version', 21); } + /** + * Adds newly introduced options and removes their predecessors + * + * @since 1.4.0 + */ + private function upgrade140() + { + add_option('einsatzverwaltung_use_reporttemplate', 'no'); + add_option('einsatzverwaltung_reporttemplate', ''); + add_option('einsatzverwaltung_use_excerpttemplate', '0'); + add_option('einsatzverwaltung_excerpttemplate', ''); + + delete_option('einsatzvw_excerpt_type'); + delete_option('einsatzvw_excerpt_type_feed'); + } + /** * Fügt einen Bezeichner für eine Admin Notice der Liste der noch anzuzeigenden Notices hinzu * From 172b9b9a752b19401e3980d7c739dbb3e936f188 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 14:33:07 +0200 Subject: [PATCH 080/126] =?UTF-8?q?Neuen=20Platzhalter=20f=C3=BCr=20Beitra?= =?UTF-8?q?gsbild=20eingef=C3=BChrt,=20closes=20#59?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Util/Formatter.php | 6 +++++- src/Widgets/RecentIncidentsFormatted.php | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index b0f77953..b2d9a0f3 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -141,6 +141,9 @@ private function format($post, $pattern, $tag, $context = 'post') case '%content%': $replace = $post->post_content; break; + case '%featuredImage%': + $replace = current_theme_supports('post-thumbnails') ? get_the_post_thumbnail($post->ID) : ''; + break; default: return $pattern; } @@ -192,7 +195,8 @@ public function getTags() '%vehicles%' => 'Fahrzeuge', '%additionalForces%' => 'Weitere Kräfte', '%typesOfAlerting%' => 'Alarmierungsarten', - '%content%' => 'Berichtstext' + '%content%' => 'Berichtstext', + '%featuredImage%' => 'Beitragsbild', ); } diff --git a/src/Widgets/RecentIncidentsFormatted.php b/src/Widgets/RecentIncidentsFormatted.php index c151b2f3..979d1af9 100644 --- a/src/Widgets/RecentIncidentsFormatted.php +++ b/src/Widgets/RecentIncidentsFormatted.php @@ -126,7 +126,7 @@ class RecentIncidentsFormatted extends WP_Widget ); private $allowedTagsPattern = array('%title%', '%date%', '%time%', '%location%', '%duration%', '%incidentType%', '%incidentTypeColor%', '%url%', '%number%', '%seqNum%', '%annotations%', '%vehicles%', '%additionalForces%', - '%typesOfAlerting%'); + '%typesOfAlerting%', '%featuredImage%'); private $allowedTagsAfter = array('%feedUrl%'); /** From cc6b62ad4fefa0f6f9fc367cd35793c0b886b8c3 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 14:48:50 +0200 Subject: [PATCH 081/126] Ungefilterten Zugriff auf $_POST entfernt und damit sanitizeCheckbox() vereinfacht --- src/Import/Tool.php | 3 ++- src/einsatzverwaltung-utilities.php | 12 ++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Import/Tool.php b/src/Import/Tool.php index 9734e020..a3e05409 100644 --- a/src/Import/Tool.php +++ b/src/Import/Tool.php @@ -191,9 +191,10 @@ public function renderToolPage() } // 'Sofort veröffentlichen'-Option übernehmen + $publishReports = filter_input(INPUT_POST, 'import_publish_reports', FILTER_SANITIZE_STRING); $this->currentSource->putArg( 'import_publish_reports', - $this->utilities->sanitizeCheckbox(array($_POST, 'import_publish_reports')) + $this->utilities->sanitizeCheckbox($publishReports) ); echo "

    {$this->currentAction['name']}

    "; diff --git a/src/einsatzverwaltung-utilities.php b/src/einsatzverwaltung-utilities.php index fb66c637..6b372cdc 100644 --- a/src/einsatzverwaltung-utilities.php +++ b/src/einsatzverwaltung-utilities.php @@ -223,20 +223,12 @@ public function removePostFromCategory($postId, $category) /** * Bereitet den Formularwert einer Checkbox für das Speichern in der Datenbank vor * - * @param array $input Der aufzubereitende Wert + * @param mixed $value Der aufzubereitende Wert * * @return int 0 für false, 1 für true */ - public function sanitizeCheckbox($input) + public function sanitizeCheckbox($value) { - if (is_array($input)) { - $arr = $input[0]; - $index = $input[1]; - $value = (array_key_exists($index, $arr) ? $arr[$index] : ""); - } else { - $value = $input; - } - if (isset($value) && $value == "1") { return 1; } else { From b610c85d206e81e4cc3d47db6fbf30623e5a366f Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 14:53:52 +0200 Subject: [PATCH 082/126] Kommentar eindeutiger formuliert --- src/Frontend/ReportList.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Frontend/ReportList.php b/src/Frontend/ReportList.php index c496b94f..6bd2c220 100644 --- a/src/Frontend/ReportList.php +++ b/src/Frontend/ReportList.php @@ -500,7 +500,7 @@ public static function getDynamicCss() { $reportListSettings = self::$settings; // FIXME Verrenkung, um PHP 5.3.0 als Minimum zu ermöglichen, solange das // Ende der Untersützung nicht im Blog angekündigt wurde. - if (empty($reportListSettings)) { + if (empty($reportListSettings)) { // NEEDS_PHP5.5 direkt empty(self::$settings) prüfen self::$settings = new ReportListSettings(); } From c8cf4ae55f30f1e606e53e5ac488e49c08c4bd1c Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 15:55:26 +0200 Subject: [PATCH 083/126] =?UTF-8?q?Neuer=20Einstiegspunkt=20f=C3=BCr=20die?= =?UTF-8?q?=20Settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Settings/MainPage.php | 131 +++++++++++++++++++++++++++++++++ src/einsatzverwaltung-core.php | 24 +++--- 2 files changed, 140 insertions(+), 15 deletions(-) create mode 100644 src/Settings/MainPage.php diff --git a/src/Settings/MainPage.php b/src/Settings/MainPage.php new file mode 100644 index 00000000..37321866 --- /dev/null +++ b/src/Settings/MainPage.php @@ -0,0 +1,131 @@ +options = $options; + } + + /** + * Fügt die Einstellungsseite zum Menü hinzu + */ + public function addToSettingsMenu() + { + add_options_page( + 'Einstellungen', + 'Einsatzverwaltung', + 'manage_options', + self::EVW_SETTINGS_SLUG, + array($this, 'echoSettingsPage') + ); + } + + /** + * Generiert den Inhalt der Einstellungsseite + */ + public function echoSettingsPage() + { + if (!current_user_can('manage_options')) { + wp_die(__('You do not have sufficient permissions to manage options for this site.')); + } + ?> + +
    +

    Einstellungen › Einsatzverwaltung

    + + options->getRewriteSlug(); + $conflictingPage = get_page_by_path($rewriteSlug); + if ($conflictingPage instanceof \WP_Post) { + $pageEditLink = '' . $conflictingPage->post_title . ''; + $message = sprintf('Die Seite %s und das Archiv der Einsatzberichte haben einen identischen Permalink (%s). Ändere einen der beiden Permalinks, um beide Seiten erreichen zu können.', $pageEditLink, $rewriteSlug); + echo '

    ' . $message . '

    '; + } + + $tabs = array( + 'general' => 'Allgemein', + 'numbers' => 'Einsatznummern', + 'report' => 'Einsatzberichte', + 'list' => 'Einsatzliste', + 'capabilities' => 'Berechtigungen', + 'about' => 'Über', + ); + + $flags = FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH; + $currentTab = filter_input(INPUT_GET, 'tab', FILTER_SANITIZE_STRING, $flags); + + if (empty($currentTab) || !array_key_exists($currentTab, $tabs)) { + $tabIds = array_keys($tabs); + $currentTab = $tabIds[0]; // NEEDS_PHP5.4 array_keys($tabs)[0] + } + + echo "

    "; + foreach ($tabs as $identifier => $label) { + $class = $currentTab === $identifier ? "nav-tab nav-tab-active" : "nav-tab"; + printf( + '%s', + self::EVW_SETTINGS_SLUG, + $identifier, + $class, + $label + ); + } + echo "

    "; + + if ('about' === $currentTab) { + ?> + + +

    Support

    +

    Solltest Du ein Problem bei der Benutzung des Plugins haben, schaue bitte erst auf GitHub und im Forum auf wordpress.org nach, ob andere das Problem auch haben bzw. hatten. Wenn es noch keinen passenden Eintrag gibt, lege bitte einen entsprechenden Issue bzw. Thread an. Du kannst aber auch einfach eine E-Mail schreiben.

    +

    Gib bitte immer die folgenden Versionen mit an:  + +

    + +

    Social Media

    + +

    Du kannst die Neuigkeiten auch mit deinem Feedreader abonnieren: RSS / Atom

    + '; + settings_fields('einsatzvw_settings_' . $currentTab); + do_settings_sections(self::EVW_SETTINGS_SLUG . '-' . $currentTab); + submit_button(); + echo ''; + } +} diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 49b39923..f9bf891f 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -13,7 +13,7 @@ require_once dirname(__FILE__) . '/Widgets/RecentIncidentsFormatted.php'; require_once dirname(__FILE__) . '/einsatzverwaltung-options.php'; require_once dirname(__FILE__) . '/einsatzverwaltung-shortcodes.php'; -require_once dirname(__FILE__) . '/einsatzverwaltung-settings.php'; +require_once dirname(__FILE__) . '/Settings/MainPage.php'; require_once dirname(__FILE__) . '/Import/Tool.php'; require_once dirname(__FILE__) . '/Frontend/ReportList.php'; require_once dirname(__FILE__) . '/Frontend/ReportListSettings.php'; @@ -26,6 +26,7 @@ use abrain\Einsatzverwaltung\CustomFields\TextInput; use abrain\Einsatzverwaltung\Import\Tool as ImportTool; use abrain\Einsatzverwaltung\Model\ReportAnnotation; +use abrain\Einsatzverwaltung\Settings\MainPage; use abrain\Einsatzverwaltung\Util\Formatter; use abrain\Einsatzverwaltung\Widgets\RecentIncidents; use abrain\Einsatzverwaltung\Widgets\RecentIncidentsFormatted; @@ -258,11 +259,6 @@ class Core * @var Frontend */ private $frontend; - - /** - * @var Settings - */ - private $settings; /** * @var Options @@ -305,7 +301,7 @@ private function __construct() $this->admin = new Admin($this, $this->options, $this->utilities); $this->data = new Data($this, $this->utilities, $this->options); $this->frontend = new Frontend($this, $this->options, $this->utilities, $formatter); - $this->settings = new Settings($this, $this->options, $this->utilities, $this->data); + $this->registerSettings(); $this->shortcodes = new Shortcodes($this->utilities, $this, $this->options, $formatter); // Tools @@ -512,6 +508,12 @@ private function registerTypes() )); } + private function registerSettings() + { + $mainPage = new MainPage($this->options); + add_action('admin_menu', array($mainPage, 'addToSettingsMenu')); + } + private function addRewriteRules() { global $wp_rewrite; @@ -684,14 +686,6 @@ public function getFrontend() return $this->frontend; } - /** - * @return Settings - */ - public function getSettings() - { - return $this->settings; - } - /** * @return Shortcodes */ From 2691836f9049f1cb4a31b3061ae3a50b32cf25a6 Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Sun, 27 May 2018 16:34:34 +0200 Subject: [PATCH 084/126] Stelle sicher, dass vor dem Export das Plugin initialisiert wurde --- src/Export/Tool.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index d198e3fb..3ab8a7b3 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -33,7 +33,8 @@ private function addHooks() { add_action('admin_menu', array($this, 'addToolToMenu')); - add_action('init', array($this, 'startExport')); + // Priorität muss höher als 10 sein, damit das Plugin in Core vorher richtig initialisiert wird + add_action('init', array($this, 'startExport'), 20); } /** From 93abbe1baf4eeb7b917d6922820b61463a26718b Mon Sep 17 00:00:00 2001 From: Heiko Bornholdt Date: Sun, 27 May 2018 16:58:46 +0200 Subject: [PATCH 085/126] Formatierung korrigiert --- src/Export/Formats/Csv.php | 14 ++++++++------ src/Export/Formats/Json.php | 28 ++++++++++++++-------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index c6ccb84d..004890a8 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -137,25 +137,27 @@ public function export() $report = new IncidentReport($post); $duration = Data::getDauer($report); - if (empty($duration)) { + // $duration soll stets eine Zahl sein + if (empty($duration)) { $duration = 0; } - $typeOfIncident = $report->getTypeOfIncident(); - if (empty($typeOfIncident)) { + $typeOfIncident = $report->getTypeOfIncident()->name; + // $typeOfIncident soll stets ein String sein + if (empty($typeOfIncident)) { $typeOfIncident = ''; } $data = array( $report->getSequentialNumber(), - implode(',', $report->getTypesOfAlerting()), + implode(',', array_map(function($e) { return $e->name; }, $report->getTypesOfAlerting())), $report->getTimeOfAlerting()->format('Y-m-d H:i'), $report->getTimeOfEnding(), $duration, $report->getLocation(), $typeOfIncident, - implode(',', $report->getVehicles()), - implode(',', $report->getAdditionalForces()), + implode(',', array_map(function($e) { return $e->name; }, $report->getVehicles())), + implode(',', array_map(function($e) { return $e->name; }, $report->getAdditionalForces())), $report->getWorkforce(), $report->getIncidentCommander(), $post->post_title, diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index 90324d01..6079e6ae 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -84,28 +84,28 @@ public function export() $report = new IncidentReport($post); - $duration = Data::getDauer($report); - // $duration soll stets eine Zahl sein - if (empty($duration)) { - $duration = 0; - } - - $typeOfIncident = $report->getTypeOfIncident(); - // $typeOfIncident soll stets ein String sein - if (empty($typeOfIncident)) { - $typeOfIncident = ''; - } + $duration = Data::getDauer($report); + // $duration soll stets eine Zahl sein + if (empty($duration)) { + $duration = 0; + } + + $typeOfIncident = $report->getTypeOfIncident()->name; + // $typeOfIncident soll stets ein String sein + if (empty($typeOfIncident)) { + $typeOfIncident = ''; + } $data = array( 'Einsatznummer' => $report->getSequentialNumber(), - 'Alarmierungsart' => implode(',', $report->getTypesOfAlerting()), + 'Alarmierungsart' => implode(',', array_map(function($e) { return $e->name; }, $report->getTypesOfAlerting())), 'Alarmzeit' => $report->getTimeOfAlerting()->format('Y-m-d H:i'), 'Einsatzende' => $report->getTimeOfEnding(), 'Dauer (Minuten)' => $duration, 'Einsatzort' => $report->getLocation(), 'Einsatzart' => $typeOfIncident, - 'Fahrzeuge' => implode(',', $report->getVehicles()), - 'Externe Einsatzmittel' => implode(',', $report->getAdditionalForces()), + 'Fahrzeuge' => implode(',', array_map(function($e) { return $e->name; }, $report->getVehicles())), + 'Externe Einsatzmittel' => implode(',', array_map(function($e) { return $e->name; }, $report->getAdditionalForces())), 'Mannschaftsstärke' => $report->getWorkforce(), 'Einsatzleiter' => $report->getIncidentCommander(), 'Berichtstitel' => $post->post_title, From e89f1ef0550adc4302199dd17aafac15b8fba252 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 17:45:15 +0200 Subject: [PATCH 086/126] =?UTF-8?q?Ger=C3=BCst=20f=C3=BCr=20Unterseiten=20?= =?UTF-8?q?angelegt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Settings/MainPage.php | 69 ++++++++++++++++++++++------- src/Settings/Pages/About.php | 31 +++++++++++++ src/Settings/Pages/Capabilities.php | 31 +++++++++++++ src/Settings/Pages/General.php | 31 +++++++++++++ src/Settings/Pages/Numbers.php | 31 +++++++++++++ src/Settings/Pages/Report.php | 31 +++++++++++++ src/Settings/Pages/ReportList.php | 31 +++++++++++++ src/Settings/Pages/SubPage.php | 29 ++++++++++++ 8 files changed, 268 insertions(+), 16 deletions(-) create mode 100644 src/Settings/Pages/About.php create mode 100644 src/Settings/Pages/Capabilities.php create mode 100644 src/Settings/Pages/General.php create mode 100644 src/Settings/Pages/Numbers.php create mode 100644 src/Settings/Pages/Report.php create mode 100644 src/Settings/Pages/ReportList.php create mode 100644 src/Settings/Pages/SubPage.php diff --git a/src/Settings/MainPage.php b/src/Settings/MainPage.php index 37321866..ada31e9a 100644 --- a/src/Settings/MainPage.php +++ b/src/Settings/MainPage.php @@ -4,6 +4,13 @@ use abrain\Einsatzverwaltung\Core; use abrain\Einsatzverwaltung\Options; +use abrain\Einsatzverwaltung\Settings\Pages\About; +use abrain\Einsatzverwaltung\Settings\Pages\Capabilities; +use abrain\Einsatzverwaltung\Settings\Pages\General; +use abrain\Einsatzverwaltung\Settings\Pages\Numbers; +use abrain\Einsatzverwaltung\Settings\Pages\Report; +use abrain\Einsatzverwaltung\Settings\Pages\ReportList; +use abrain\Einsatzverwaltung\Settings\Pages\SubPage; /** * Entry point for the plugin settings @@ -19,6 +26,11 @@ class MainPage */ private $options; + /** + * @var SubPage[] + */ + private $subPages; + /** * MainPage constructor. * @param Options $options @@ -26,6 +38,22 @@ class MainPage public function __construct(Options $options) { $this->options = $options; + $this->subPages = array(); + + require_once dirname(__FILE__) . '/Pages/SubPage.php'; + require_once dirname(__FILE__) . '/Pages/General.php'; + require_once dirname(__FILE__) . '/Pages/Numbers.php'; + require_once dirname(__FILE__) . '/Pages/Report.php'; + require_once dirname(__FILE__) . '/Pages/ReportList.php'; + require_once dirname(__FILE__) . '/Pages/Capabilities.php'; + require_once dirname(__FILE__) . '/Pages/About.php'; + + $this->subPages[] = new General(); + $this->subPages[] = new Numbers(); + $this->subPages[] = new Report(); + $this->subPages[] = new ReportList(); + $this->subPages[] = new Capabilities(); + $this->subPages[] = new About(); } /** @@ -65,32 +93,22 @@ public function echoSettingsPage() echo '

    ' . $message . '

    '; } - $tabs = array( - 'general' => 'Allgemein', - 'numbers' => 'Einsatznummern', - 'report' => 'Einsatzberichte', - 'list' => 'Einsatzliste', - 'capabilities' => 'Berechtigungen', - 'about' => 'Über', - ); - $flags = FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH; $currentTab = filter_input(INPUT_GET, 'tab', FILTER_SANITIZE_STRING, $flags); - if (empty($currentTab) || !array_key_exists($currentTab, $tabs)) { - $tabIds = array_keys($tabs); - $currentTab = $tabIds[0]; // NEEDS_PHP5.4 array_keys($tabs)[0] + if (empty($currentTab) || !$this->subPageExists($currentTab)) { + $currentTab = $this->subPages[0]->identifier; } echo "

    "; - foreach ($tabs as $identifier => $label) { - $class = $currentTab === $identifier ? "nav-tab nav-tab-active" : "nav-tab"; + foreach ($this->subPages as $subPage) { + $class = $currentTab === $subPage->identifier ? "nav-tab nav-tab-active" : "nav-tab"; printf( '%s', self::EVW_SETTINGS_SLUG, - $identifier, + $subPage->identifier, $class, - $label + $subPage->title ); } echo "

    "; @@ -128,4 +146,23 @@ public function echoSettingsPage() submit_button(); echo ''; } + + /** + * @param string $slug + * @return bool + */ + private function subPageExists($slug) + { + if (empty($slug)) { + return false; + } + + foreach ($this->subPages as $subPage) { + if ($subPage->identifier === $slug) { + return true; + } + } + + return false; + } } diff --git a/src/Settings/Pages/About.php b/src/Settings/Pages/About.php new file mode 100644 index 00000000..fbadc55e --- /dev/null +++ b/src/Settings/Pages/About.php @@ -0,0 +1,31 @@ +identifier = $identifier; + $this->title = $title; + } + + abstract public function addSettingsFields(); + abstract public function addSettingsSections(); + abstract public function registerSettings(); +} From 2a2f4f648eb8f22cf40030663e203fa94f8ee8d7 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 17:54:49 +0200 Subject: [PATCH 087/126] =?UTF-8?q?Settings=20Sections=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Settings/MainPage.php | 12 ++++++++++++ src/Settings/Pages/Capabilities.php | 9 ++++++++- src/Settings/Pages/General.php | 7 ++++++- src/Settings/Pages/Numbers.php | 7 ++++++- src/Settings/Pages/Report.php | 17 ++++++++++++++++- src/Settings/Pages/ReportList.php | 9 ++++++++- src/Settings/Pages/SubPage.php | 4 ++++ src/einsatzverwaltung-core.php | 3 ++- 8 files changed, 62 insertions(+), 6 deletions(-) diff --git a/src/Settings/MainPage.php b/src/Settings/MainPage.php index ada31e9a..15a07b25 100644 --- a/src/Settings/MainPage.php +++ b/src/Settings/MainPage.php @@ -147,6 +147,18 @@ public function echoSettingsPage() echo ''; } + /** + * Macht Einstellungen im System bekannt und regelt die Zugehörigkeit zu Abschnitten auf Einstellungsseiten + */ + public function registerSettings() + { + foreach ($this->subPages as $subPage) { + $subPage->addSettingsSections(); + $subPage->addSettingsFields(); + $subPage->registerSettings(); + } + } + /** * @param string $slug * @return bool diff --git a/src/Settings/Pages/Capabilities.php b/src/Settings/Pages/Capabilities.php index a4d3ba21..45c36c5e 100644 --- a/src/Settings/Pages/Capabilities.php +++ b/src/Settings/Pages/Capabilities.php @@ -21,7 +21,14 @@ public function addSettingsFields() public function addSettingsSections() { - // TODO: Implement addSettingsSections() method. + add_settings_section( + 'einsatzvw_settings_caps', + '', + function () { + echo '

    Hier kann festgelegt werden, welche Benutzer die Einsatzberichte verwalten können.

    '; + }, + $this->settingsApiPage + ); } public function registerSettings() diff --git a/src/Settings/Pages/General.php b/src/Settings/Pages/General.php index dbcf1b2a..c988e39a 100644 --- a/src/Settings/Pages/General.php +++ b/src/Settings/Pages/General.php @@ -21,7 +21,12 @@ public function addSettingsFields() public function addSettingsSections() { - // TODO: Implement addSettingsSections() method. + add_settings_section( + 'einsatzvw_settings_general', + '', + null, + $this->settingsApiPage + ); } public function registerSettings() diff --git a/src/Settings/Pages/Numbers.php b/src/Settings/Pages/Numbers.php index e1ffe238..8c062b9a 100644 --- a/src/Settings/Pages/Numbers.php +++ b/src/Settings/Pages/Numbers.php @@ -21,7 +21,12 @@ public function addSettingsFields() public function addSettingsSections() { - // TODO: Implement addSettingsSections() method. + add_settings_section( + 'einsatzvw_settings_numbers', + '', + null, + $this->settingsApiPage + ); } public function registerSettings() diff --git a/src/Settings/Pages/Report.php b/src/Settings/Pages/Report.php index afa6761c..b4cac2c5 100644 --- a/src/Settings/Pages/Report.php +++ b/src/Settings/Pages/Report.php @@ -21,7 +21,22 @@ public function addSettingsFields() public function addSettingsSections() { - // TODO: Implement addSettingsSections() method. + add_settings_section( + 'einsatzvw_settings_einsatzberichte', + '', + function () { + echo '

    Mit diesen Einstellungen kann das Aussehen der einzelnen Einsatzberichte beeinflusst werden.

    '; + }, + $this->settingsApiPage + ); + add_settings_section( + 'einsatzvw_settings_reporttemplates', + 'Templates', + function () { + echo '

    Mit den beiden folgenden Templates kann das Aussehen der Einsatzberichte bzw. deren Auszüge individuell angepasst werden. Das ausgefüllte Template erscheint immer dort, wo normal der Beitragstext stehen würde. Wie die Templates funktionieren ist in der Dokumentation beschrieben.

    '; + }, + $this->settingsApiPage + ); } public function registerSettings() diff --git a/src/Settings/Pages/ReportList.php b/src/Settings/Pages/ReportList.php index e9ce0101..3ecc2e02 100644 --- a/src/Settings/Pages/ReportList.php +++ b/src/Settings/Pages/ReportList.php @@ -21,7 +21,14 @@ public function addSettingsFields() public function addSettingsSections() { - // TODO: Implement addSettingsSections() method. + add_settings_section( + 'einsatzvw_settings_einsatzliste', + '', + function () { + echo '

    Mit diesen Einstellungen kann das Aussehen der Einsatzlisten beeinflusst werden. Einsatzlisten können über den Shortcode [einsatzliste] in Seiten und Beiträge eingebunden werden.

    '; + }, + $this->settingsApiPage + ); } public function registerSettings() diff --git a/src/Settings/Pages/SubPage.php b/src/Settings/Pages/SubPage.php index 3a743126..e4af6a26 100644 --- a/src/Settings/Pages/SubPage.php +++ b/src/Settings/Pages/SubPage.php @@ -2,6 +2,8 @@ namespace abrain\Einsatzverwaltung\Settings\Pages; +use abrain\Einsatzverwaltung\Settings\MainPage; + /** * Base class for a sub page of the plugin settings * @@ -10,6 +12,7 @@ abstract class SubPage { public $identifier; + public $settingsApiPage; public $title; /** @@ -20,6 +23,7 @@ abstract class SubPage public function __construct($identifier, $title) { $this->identifier = $identifier; + $this->settingsApiPage = MainPage::EVW_SETTINGS_SLUG . '-' . $identifier; $this->title = $title; } diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index f9bf891f..3d6cf56e 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -13,7 +13,6 @@ require_once dirname(__FILE__) . '/Widgets/RecentIncidentsFormatted.php'; require_once dirname(__FILE__) . '/einsatzverwaltung-options.php'; require_once dirname(__FILE__) . '/einsatzverwaltung-shortcodes.php'; -require_once dirname(__FILE__) . '/Settings/MainPage.php'; require_once dirname(__FILE__) . '/Import/Tool.php'; require_once dirname(__FILE__) . '/Frontend/ReportList.php'; require_once dirname(__FILE__) . '/Frontend/ReportListSettings.php'; @@ -510,8 +509,10 @@ private function registerTypes() private function registerSettings() { + require_once dirname(__FILE__) . '/Settings/MainPage.php'; $mainPage = new MainPage($this->options); add_action('admin_menu', array($mainPage, 'addToSettingsMenu')); + add_action('admin_init', array($mainPage, 'registerSettings')); } private function addRewriteRules() From 2a25a89bade03fc5914f1645a284b739ac730309 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 18:47:30 +0200 Subject: [PATCH 088/126] Unterseite "Allgemein" wiederhergestellt --- src/Settings/MainPage.php | 6 +- src/Settings/Pages/General.php | 212 ++++++++++++++++++++++++++++++++- src/Settings/Pages/SubPage.php | 124 +++++++++++++++++++ src/einsatzverwaltung-core.php | 2 +- 4 files changed, 340 insertions(+), 4 deletions(-) diff --git a/src/Settings/MainPage.php b/src/Settings/MainPage.php index 15a07b25..b46b943f 100644 --- a/src/Settings/MainPage.php +++ b/src/Settings/MainPage.php @@ -11,6 +11,7 @@ use abrain\Einsatzverwaltung\Settings\Pages\Report; use abrain\Einsatzverwaltung\Settings\Pages\ReportList; use abrain\Einsatzverwaltung\Settings\Pages\SubPage; +use abrain\Einsatzverwaltung\Utilities; /** * Entry point for the plugin settings @@ -34,8 +35,9 @@ class MainPage /** * MainPage constructor. * @param Options $options + * @param Utilities $utilities */ - public function __construct(Options $options) + public function __construct(Options $options, Utilities $utilities) { $this->options = $options; $this->subPages = array(); @@ -48,6 +50,8 @@ public function __construct(Options $options) require_once dirname(__FILE__) . '/Pages/Capabilities.php'; require_once dirname(__FILE__) . '/Pages/About.php'; + SubPage::$options = $this->options; + SubPage::$utilities = $utilities; $this->subPages[] = new General(); $this->subPages[] = new Numbers(); $this->subPages[] = new Report(); diff --git a/src/Settings/Pages/General.php b/src/Settings/Pages/General.php index c988e39a..8f63aeb7 100644 --- a/src/Settings/Pages/General.php +++ b/src/Settings/Pages/General.php @@ -2,6 +2,8 @@ namespace abrain\Einsatzverwaltung\Settings\Pages; +use abrain\Einsatzverwaltung\Model\IncidentReport; + /** * General settings page * @@ -12,11 +14,28 @@ class General extends SubPage public function __construct() { parent::__construct('general', 'Allgemein'); + + add_filter('pre_update_option_einsatzvw_rewrite_slug', array($this, 'maybeRewriteSlugChanged'), 10, 2); + add_filter('pre_update_option_einsatzvw_category', array($this, 'maybeCategoryChanged'), 10, 2); + add_filter('pre_update_option_einsatzvw_loop_only_special', array($this, 'maybeCategorySpecialChanged'), 10, 2); } public function addSettingsFields() { - // TODO: Implement addSettingsFields() method. + add_settings_field( + 'einsatzvw_permalinks', + 'Permalinks', + array($this, 'echoFieldPermalinks'), + $this->settingsApiPage, + 'einsatzvw_settings_general' + ); + add_settings_field( + 'einsatzvw_einsatznummer_mainloop', + 'Einsatzbericht als Beitrag', + array($this, 'echoFieldMainloop'), + $this->settingsApiPage, + 'einsatzvw_settings_general' + ); } public function addSettingsSections() @@ -29,8 +48,197 @@ public function addSettingsSections() ); } + /** + * Gibt die Einstellmöglichkeit aus, ob und wie Einsatzberichte zusammen mit anderen Beiträgen ausgegeben werden + * sollen + */ + public function echoFieldMainloop() + { + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_show_einsatzberichte_mainloop', + 'Einsatzberichte zwischen den regulären WordPress-Beiträgen anzeigen' + ); + echo '

    Lässt die Einsatzberichte z.B. auf der Startseite, im Widget "Letzte Beiträge" oder auch im Beitragsfeed erscheinen

    '; + + echo '

    '; + $categoryId = intval(get_option('einsatzvw_category', -1)); + wp_dropdown_categories(array( + 'show_option_none' => '- keine -', + 'hide_empty' => false, + 'name' => 'einsatzvw_category', + 'selected' => $categoryId, + 'orderby' => 'name', + 'hierarchical' => true + )); + echo '

    '; + + + $this->echoSettingsCheckbox( + 'einsatzvw_loop_only_special', + 'Nur als besonders markierte Einsatzberichte zwischen den regulären WordPress-Beiträgen bzw. in der Kategorie anzeigen.' + ); + echo '

    Mit dieser Einstellung gelten die beiden oberen Einstellungen nur für als besonders markierte Einsatzberichte.

    '; + echo '
    '; + } + + /** + * @since 1.0.0 + */ + public function echoFieldPermalinks() + { + echo '
    '; + $this->echoSettingsInput( + 'einsatzvw_rewrite_slug', + sprintf( + 'Basis für Links zu Einsatzberichten, zum %1$sArchiv%2$s und zum %3$sFeed%2$s.', + '', + '', + '' + ), + sanitize_title(get_option('einsatzvw_rewrite_slug'), 'einsatzberichte') + ); + echo '
    '; + } + + /** + * Prüft, ob sich die Basis für die Links zu Einsatzberichten ändert und veranlasst gegebenenfalls ein Erneuern der + * Permalinkstruktur + * + * @param string $newValue Der neue Wert + * @param string $oldValue Der alte Wert + * @return string Der zu speichernde Wert + */ + public function maybeRewriteSlugChanged($newValue, $oldValue) + { + if ($newValue != $oldValue) { + self::$options->setFlushRewriteRules(true); + } + + return $newValue; + } + + /** + * Prüft, ob sich die Kategorie der Einsatzberichte ändert und veranlasst gegebenenfalls ein Erneuern der + * Kategoriezuordnung + * + * @param string $newValue Der neue Wert + * @param string $oldValue Der alte Wert + * + * @return string Der zu speichernde Wert + */ + public function maybeCategoryChanged($newValue, $oldValue) + { + // Nur Änderungen sind interessant + if ($newValue == $oldValue) { + return $newValue; + } + + $posts = get_posts(array( + 'post_type' => 'einsatz', + 'post_status' => array('publish', 'private'), + 'numberposts' => -1 + )); + $reports = self::$utilities->postsToIncidentReports($posts); + + // Wenn zuvor eine Kategorie gesetzt war, müssen die Einsatzberichte aus dieser entfernt werden + if ($oldValue != -1) { + /** @var IncidentReport $report */ + foreach ($reports as $report) { + self::$utilities->removePostFromCategory($report->getPostId(), $oldValue); + } + } + + // Wenn eine neue Kategorie gesetzt wird, müssen Einsatzberichte dieser zugeordnet werden + if ($newValue != -1) { + $onlySpecialInCategory = self::$options->isOnlySpecialInLoop(); + /** @var IncidentReport $report */ + foreach ($reports as $report) { + if (!$onlySpecialInCategory || $report->isSpecial()) { + self::$utilities->addPostToCategory($report->getPostId(), $newValue); + } + } + } + + return $newValue; + } + + /** + * Prüft, ob sich die Beschränkung, nur als besonders markierte Einsatzberichte der Kategorie zuzuordnen, ändert + * und veranlasst gegebenenfalls ein Erneuern der Kategoriezuordnung + * + * @param string $newValue Der neue Wert + * @param string $oldValue Der alte Wert + * + * @return string Der zu speichernde Wert + */ + public function maybeCategorySpecialChanged($newValue, $oldValue) + { + // Nur Änderungen sind interessant + if ($newValue == $oldValue) { + return $newValue; + } + + // Ohne gesetzte Kategorie brauchen wir nicht weitermachen + $categoryId = self::$options->getEinsatzberichteCategory(); + if (-1 === $categoryId) { + return $newValue; + } + + $posts = get_posts(array( + 'post_type' => 'einsatz', + 'post_status' => array('publish', 'private'), + 'numberposts' => -1 + )); + $reports = self::$utilities->postsToIncidentReports($posts); + + // Wenn die Einstellung abgewählt wurde, werden alle Einsatzberichte zur Kategorie hinzugefügt + if ($newValue == 0) { + /** @var IncidentReport $report */ + foreach ($reports as $report) { + self::$utilities->addPostToCategory($report->getPostId(), $categoryId); + } + } + + // Wenn die Einstellung aktiviert wurde, werden nur die als besonders markierten Einsatzberichte zur Kategorie + // hinzugefügt, alle anderen daraus entfernt + if ($newValue == 1) { + /** @var IncidentReport $report */ + foreach ($reports as $report) { + if ($report->isSpecial()) { + self::$utilities->addPostToCategory($report->getPostId(), $categoryId); + } else { + self::$utilities->removePostFromCategory($report->getPostId(), $categoryId); + } + } + } + + return $newValue; + } + public function registerSettings() { - // TODO: Implement registerSettings() method. + register_setting( + 'einsatzvw_settings_general', + 'einsatzvw_rewrite_slug', + 'sanitize_title' + ); + register_setting( + 'einsatzvw_settings_general', + 'einsatzvw_show_einsatzberichte_mainloop', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_general', + 'einsatzvw_category', + 'intval' + ); + register_setting( + 'einsatzvw_settings_general', + 'einsatzvw_loop_only_special', + array(self::$utilities, 'sanitizeCheckbox') + ); } } diff --git a/src/Settings/Pages/SubPage.php b/src/Settings/Pages/SubPage.php index e4af6a26..030d812f 100644 --- a/src/Settings/Pages/SubPage.php +++ b/src/Settings/Pages/SubPage.php @@ -2,7 +2,9 @@ namespace abrain\Einsatzverwaltung\Settings\Pages; +use abrain\Einsatzverwaltung\Options; use abrain\Einsatzverwaltung\Settings\MainPage; +use abrain\Einsatzverwaltung\Utilities; /** * Base class for a sub page of the plugin settings @@ -11,10 +13,33 @@ */ abstract class SubPage { + /** + * @var string + */ public $identifier; + + /** + * FIXME provisorisch + * @var Options + */ + public static $options; + + /** + * @var string + */ public $settingsApiPage; + + /** + * @var string + */ public $title; + /** + * FIXME provisorisch + * @var Utilities + */ + public static $utilities; + /** * SubPage constructor. * @param $identifier @@ -30,4 +55,103 @@ public function __construct($identifier, $title) abstract public function addSettingsFields(); abstract public function addSettingsSections(); abstract public function registerSettings(); + + /** + * Gibt den von WordPress mitgelieferten Colorpicker aus + * + * @param string $optionName Name der Einstellung + * @param string $defaultValue Der Standardwert, der im Colorpicker angeboten werden soll + */ + protected function echoColorPicker($optionName, $defaultValue) + { + printf( + '', + esc_attr($optionName), + esc_attr(get_option($optionName, $defaultValue)), + esc_attr($defaultValue) + ); + } + + /** + * Gibt eine Checkbox auf der Einstellungsseite aus + * + * @param string $checkboxId Id der Option + * @param string $text Beschriftung der Checkbox + * @internal param bool $state Optional, gibt den Zustand der Checkbox an. + */ + protected function echoSettingsCheckbox($checkboxId, $text) + { + echo ' 2 ? func_get_arg(2) : self::$options->getBoolOption($checkboxId)); + echo self::$utilities->checked($state) . '/>'; + } + + /** + * @param string $name Name der Option + * @param array $options Array aus Wert/Label-Paaren + * @param string $defaultValue Standardwert für Option, falls diese nicht existiert + */ + protected function echoRadioButtons($name, $options, $defaultValue) + { + $currentValue = get_option($name, $defaultValue); + foreach ($options as $value => $label) { + printf( + '
    ', + $name, + $value, + checked($value, $currentValue, false), + $label + ); + } + } + + /** + * Generiert eine Auswahlliste + * + * @param string $name Name des Parameters + * @param array $options Array aus Wert/Label-Paaren + * @param string $selectedValue Vorselektierter Wert + */ + protected function echoSelect($name, $options, $selectedValue) + { + echo ''; + } + + /** + * @param string $name Name der Option + */ + protected function echoTextarea($name) + { + $currentValue = get_option($name, ''); + printf( + '

    ', + $name, + esc_textarea($currentValue) + ); + } + + /** + * Gibt ein Eingabefeld aus + * + * @since 1.0.0 + * + * @param string $name Name des Parameters + * @param string $description Beschreibungstext + * @param string $value Wert, der im Eingabefeld stehen soll + */ + protected function echoSettingsInput($name, $description, $value = '') + { + printf( + '

    %3$s

    ', + $name, + (empty($value) ? self::$options->getOption($name) : $value), + $description + ); + } } diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 3d6cf56e..c2a3e1d1 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -510,7 +510,7 @@ private function registerTypes() private function registerSettings() { require_once dirname(__FILE__) . '/Settings/MainPage.php'; - $mainPage = new MainPage($this->options); + $mainPage = new MainPage($this->options, $this->utilities); add_action('admin_menu', array($mainPage, 'addToSettingsMenu')); add_action('admin_init', array($mainPage, 'registerSettings')); } From 069d312c155c8d1d5d5e3419c98d1726920740c5 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 19:30:20 +0200 Subject: [PATCH 089/126] Unterseite "Einsatznummern" wiederhergestellt --- src/Settings/Pages/Numbers.php | 59 ++++++++++++++++++++++++++++++++-- src/einsatzverwaltung-data.php | 27 ++++++++++++++++ 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/src/Settings/Pages/Numbers.php b/src/Settings/Pages/Numbers.php index 8c062b9a..f292729a 100644 --- a/src/Settings/Pages/Numbers.php +++ b/src/Settings/Pages/Numbers.php @@ -16,7 +16,20 @@ public function __construct() public function addSettingsFields() { - // TODO: Implement addSettingsFields() method. + add_settings_field( + 'einsatzvw_einsatznummer_auto', + 'Einsatznummern automatisch verwalten', + array($this, 'echoFieldAuto'), + $this->settingsApiPage, + 'einsatzvw_settings_numbers' + ); + add_settings_field( + 'einsatzvw_einsatznummer_stellen', + 'Format der Einsatznummer', + array($this, 'echoFieldFormat'), + $this->settingsApiPage, + 'einsatzvw_settings_numbers' + ); } public function addSettingsSections() @@ -29,8 +42,50 @@ public function addSettingsSections() ); } + public function echoFieldAuto() + { + $this->echoSettingsCheckbox( + 'einsatzverwaltung_incidentnumbers_auto', + 'Einsatznummern automatisch verwalten' + ); + echo '

    Ist diese Option aktiv, kann die Einsatznummer nicht mehr manuell geändert werden. Sie wird automatisch gemäß den nachfolgenden Regeln generiert und aktualisiert.

    '; + } + + /** + * + */ + public function echoFieldFormat() + { + echo '
    '; + printf( + 'Jahreszahl + jahresbezogene, fortlaufende Nummer mit Stellen', + 'einsatzvw_einsatznummer_stellen', + self::$options->getEinsatznummerStellen() + ); + echo '

    Beispiel für den fünften Einsatz in 2014:
    bei 2 Stellen: 201405
    bei 4 Stellen: 20140005


    '; + $this->echoSettingsCheckbox('einsatzvw_einsatznummer_lfdvorne', 'Laufende Nummer vor das Jahr stellen'); + + // FIXME das ist so nicht richtig + echo '

    Hinweis: Nach einer Änderung des Formats erhalten die bestehenden Einsatzberichte automatisch aktualisierte Nummern.

    '; + echo '
    '; + } + public function registerSettings() { - // TODO: Implement registerSettings() method. + register_setting( + 'einsatzvw_settings_numbers', + 'einsatzverwaltung_incidentnumbers_auto', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_numbers', + 'einsatzvw_einsatznummer_stellen', + array(self::$utilities, 'sanitizeEinsatznummerStellen') + ); + register_setting( + 'einsatzvw_settings_numbers', + 'einsatzvw_einsatznummer_lfdvorne', + array(self::$utilities, 'sanitizeCheckbox') + ); } } diff --git a/src/einsatzverwaltung-data.php b/src/einsatzverwaltung-data.php index db1eed30..142cefd3 100644 --- a/src/einsatzverwaltung-data.php +++ b/src/einsatzverwaltung-data.php @@ -59,6 +59,7 @@ private function addHooks() add_action('updated_postmeta', array($this, 'adjustIncidentNumber'), 10, 4); add_action('added_post_meta', array($this, 'adjustIncidentNumber'), 10, 4); } + add_action('updated_option', array($this, 'maybeAutoIncidentNumbersChanged'), 10, 3); } /** @@ -422,4 +423,30 @@ public function sanitizeTimeOfEnding($value) return ($formattedDateTime === false ? '' : $formattedDateTime); } + + /** + * Prüft, ob die automatische Verwaltung der Einsatznummern aktiviert wurde, und deshalb alle Einsatznummern + * aktualisiert werden müssen + * + * @param string $option Name der Option + * @param string $oldValue Der alte Wert + * @param string $newValue Der neue Wert + */ + public function maybeAutoIncidentNumbersChanged($option, $oldValue, $newValue) + { + // Wir sind nur an einer bestimmten Option interessiert + if ('einsatzverwaltung_incidentnumbers_auto' != $option) { + return; + } + + // Nur Änderungen sind interessant + if ($newValue == $oldValue) { + return; + } + + // Die automatische Verwaltung wurde aktiviert + if ($newValue == 1) { + $this->updateAllIncidentNumbers(); + } + } } From ca8215b762cc322dfdfab9a5995112beee73bdf8 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 19:42:30 +0200 Subject: [PATCH 090/126] Unterseite "Einsatzberichte" wiederhergestellt --- src/Settings/Pages/Report.php | 192 +++++++++++++++++++++++++++++++++- 1 file changed, 190 insertions(+), 2 deletions(-) diff --git a/src/Settings/Pages/Report.php b/src/Settings/Pages/Report.php index b4cac2c5..a0a11d7d 100644 --- a/src/Settings/Pages/Report.php +++ b/src/Settings/Pages/Report.php @@ -9,6 +9,13 @@ */ class Report extends SubPage { + private $useReportTemplateOptions = array( + 'no' => 'Nicht verwenden (zeigt die klassische Einzelansicht)', + 'singular' => 'In der Einzelansicht verwenden', + 'loops' => 'In der Einzelansicht und in Übersichten (Startseite, Archive, Suchergebnisse, ...) verwenden', + 'everywhere' => 'Überall verwenden', + ); + public function __construct() { parent::__construct('report', 'Einsatzberichte'); @@ -16,7 +23,41 @@ public function __construct() public function addSettingsFields() { - // TODO: Implement addSettingsFields() method. + add_settings_field( + 'einsatzvw_einsatz_hideemptydetails', + 'Einsatzdetails', + array($this, 'echoFieldEmptyDetails'), + $this->settingsApiPage, + 'einsatzvw_settings_einsatzberichte' + ); + add_settings_field( + 'einsatzvw_settings_archivelinks', + 'Gefilterte Einsatzübersicht verlinken', + array($this, 'echoFieldArchiveLinks'), + $this->settingsApiPage, + 'einsatzvw_settings_einsatzberichte' + ); + add_settings_field( + 'einsatzvw_settings_ext_newwindow', + 'Links zu externen Einsatzmitteln', + array($this, 'echoFieldExtNew'), + $this->settingsApiPage, + 'einsatzvw_settings_einsatzberichte' + ); + add_settings_field( + 'einsatzvw_settings_reporttemplate', + 'Template für Einsatzbericht', + array($this, 'echoFieldReportTemplate'), + $this->settingsApiPage, + 'einsatzvw_settings_reporttemplates' + ); + add_settings_field( + 'einsatzvw_settings_excerpttemplate', + 'Template für Auszug', + array($this, 'echoFieldExcerptTemplate'), + $this->settingsApiPage, + 'einsatzvw_settings_reporttemplates' + ); } public function addSettingsSections() @@ -39,8 +80,155 @@ function () { ); } + /** + * Gibt die Einstellmöglichkeiten für nicht ausgefüllte Einsatzdetails aus + */ + public function echoFieldEmptyDetails() + { + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_einsatz_hideemptydetails', + 'Nicht ausgefüllte Details ausblenden' + ); + echo '

    Ein Einsatzdetail gilt als nicht ausgefüllt, wenn das entsprechende Textfeld oder die entsprechende Liste leer ist. Diese Einstellung greift nur bei der klassischen Darstellung ohne Template.

    '; + echo '
    '; + } + + + /** + * Gibt die Einstellmöglichkeiten für gefilterte Ansichten aus + */ + public function echoFieldArchiveLinks() + { + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_show_einsatzart_archive', + 'Einsatzart' + ); + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_show_exteinsatzmittel_archive', + 'Externe Einsatzkräfte' + ); + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_show_fahrzeug_archive', + 'Fahrzeuge' + ); + echo '

    Für alle hier aktivierten Arten von Einsatzdetails werden im Kopfbereich des Einsatzberichts für alle auftretenden Werte Links zu einer gefilterten Einsatzübersicht angezeigt. Beispielsweise kann man damit alle Einsätze unter Beteiligung einer bestimmten externen Einsatzkraft auflisten lassen.

    '; + echo '
    '; + } + + + /** + * Gibt die Einstellmöglichkeiten aus, ob Links zu externen Einsatzmitteln in einem neuen Fenster geöffnet werden + * sollen + */ + public function echoFieldExtNew() + { + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_open_ext_in_new', + 'Links zu externen Einsatzmitteln in einem neuen Fenster öffnen' + ); + echo '
    '; + } + + /** + * Einstellungen für die Gestaltung der Einsatzberichte per Template + */ + public function echoFieldReportTemplate() + { + echo '
    '; + $this->echoRadioButtons('einsatzverwaltung_use_reporttemplate', $this->useReportTemplateOptions, 'no'); + echo '

    '; + printf('Die Option "%s" wird nicht empfohlen, ist aber bei manchen Themes die einzige Möglichkeit, das Template in Übersichten nutzen zu können.', $this->useReportTemplateOptions['everywhere']); + echo '

    '; + $this->echoTextarea('einsatzverwaltung_reporttemplate'); + echo '

    Es kann sein, dass das Theme in Übersichten nur den Auszug anzeigt. Dessen Aussehen kann mit einem eigenen Template festgelegt werden (siehe unten).

    '; + echo '
    '; + } + + /** + * Einstellungen für die Gestaltung des Auszugs von Einsatzberichten per Template + */ + public function echoFieldExcerptTemplate() + { + echo '
    '; + $this->echoSettingsCheckbox('einsatzverwaltung_use_excerpttemplate', 'Template verwenden'); + echo '

    Im Gegensatz zum von WordPress generierten Auszug wird dieser nicht auf eine bestimmte Länge begrenzt. Das Einfügen des Beitragstextes (%content%) ist also nicht zu empfehlen.

    '; + $this->echoTextarea('einsatzverwaltung_excerpttemplate'); + echo '
    '; + } + public function registerSettings() { - // TODO: Implement registerSettings() method. + register_setting( + 'einsatzvw_settings_report', + 'einsatzvw_einsatz_hideemptydetails', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzvw_show_exteinsatzmittel_archive', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzvw_show_einsatzart_archive', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzvw_show_fahrzeug_archive', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzvw_open_ext_in_new', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzverwaltung_use_reporttemplate', + array($this, 'sanitizeReportTemplateUsage') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzverwaltung_reporttemplate', + array($this, 'sanitizeTemplate') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzverwaltung_use_excerpttemplate', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_report', + 'einsatzverwaltung_excerpttemplate', + array($this, 'sanitizeTemplate') + ); + } + + /** + * @param string $input + * @return string + */ + public function sanitizeReportTemplateUsage($input) + { + if (!in_array($input, array_keys($this->useReportTemplateOptions))) { + return 'no'; + } + + return $input; + } + + /** + * @param string $input + * @return string + */ + public function sanitizeTemplate($input) + { + return stripslashes(wp_filter_post_kses(addslashes($input))); } } From be3d11fd8254e7a545c9db4acedc91096b7d0bcc Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 19:58:22 +0200 Subject: [PATCH 091/126] Unterseite "Einsatzliste" wiederhergestellt --- src/Settings/Pages/ReportList.php | 193 +++++++++++++++++++++++++++++- 1 file changed, 191 insertions(+), 2 deletions(-) diff --git a/src/Settings/Pages/ReportList.php b/src/Settings/Pages/ReportList.php index 3ecc2e02..45099b63 100644 --- a/src/Settings/Pages/ReportList.php +++ b/src/Settings/Pages/ReportList.php @@ -2,6 +2,9 @@ namespace abrain\Einsatzverwaltung\Settings\Pages; +use abrain\Einsatzverwaltung\Frontend\AnnotationIconBar; +use abrain\Einsatzverwaltung\Frontend\ReportListSettings; + /** * ReportList settings page * @@ -9,14 +12,48 @@ */ class ReportList extends SubPage { + /** + * @var ReportListSettings + */ + private $reportListSettings; + public function __construct() { parent::__construct('list', 'Einsatzliste'); + + $this->reportListSettings = new ReportListSettings(); } public function addSettingsFields() { - // TODO: Implement addSettingsFields() method. + add_settings_field( + 'einsatzvw_settings_columns', + 'Spalten der Einsatzliste', + array($this, 'echoFieldColumns'), + $this->settingsApiPage, + 'einsatzvw_settings_einsatzliste' + ); + add_settings_field( + 'einsatzvw_settings_column_settings', + 'Einstellungen zu einzelnen Spalten', + array($this, 'echoFieldColumnSettings'), + $this->settingsApiPage, + 'einsatzvw_settings_einsatzliste' + ); + add_settings_field( + 'einsatzvw_settings_listannotations', + 'Vermerke', + array($this, 'echoFieldAnnotations'), + $this->settingsApiPage, + 'einsatzvw_settings_einsatzliste' + ); + add_settings_field( + 'einsatzvw_settings_zebralist', + 'Zebrastreifen', + array($this, 'echoFieldZebra'), + $this->settingsApiPage, + 'einsatzvw_settings_einsatzliste' + ); } public function addSettingsSections() @@ -31,8 +68,160 @@ function () { ); } + /** + * + */ + public function echoFieldColumns() + { + $columns = \abrain\Einsatzverwaltung\Frontend\ReportList::getListColumns(); + $enabledColumns = self::$options->getEinsatzlisteEnabledColumns(); + + echo '
    '; + echo 'Verfügbare Spalten'; + echo '

    Spaltennamen in unteres Feld ziehen, um sie auf der Seite anzuzeigen

    '; + echo '
      '; + foreach ($columns as $colId => $colInfo) { + if (in_array($colId, $enabledColumns)) { + continue; + } + $name = self::$utilities->getArrayValueIfKey($colInfo, 'longName', $colInfo['name']); + echo '
    • ' . $name . '
    • '; + } + echo '
    '; + + echo '
    '; + echo 'Aktive Spalten'; + echo '

    Die Reihenfolge kann ebenfalls durch Ziehen geändert werden

    '; + echo '
      '; + foreach ($enabledColumns as $colId) { + if (!array_key_exists($colId, $columns)) { + continue; + } + + $colInfo = $columns[$colId]; + $name = self::$utilities->getArrayValueIfKey($colInfo, 'longName', $colInfo['name']); + echo '
    • ' . $name . '
    • '; + } + echo '
    '; + echo ''; + } + + public function echoFieldColumnSettings() + { + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_list_art_hierarchy', + 'Einsatzart: Hierarchie der Einsatzart anzeigen' + ); + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_list_fahrzeuge_link', + 'Fahrzeuge: Links zu den Fahrzeugseiten anzeigen, sofern verfügbar' + ); + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_list_ext_link', + 'Weitere Kräfte: Links anzeigen, sofern verfügbar' + ); + echo '
    '; + } + + public function echoFieldAnnotations() + { + echo '
    '; + echo '

    Farbe für inaktive Vermerke:

    '; + $this->echoColorPicker('einsatzvw_list_annotations_color_off', AnnotationIconBar::DEFAULT_COLOR_OFF); + echo '

    Diese Farbe wird für die Symbole von inaktiven Vermerken verwendet, die von aktiven werden in der Textfarbe Deines Themes dargestellt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; + echo '
    '; + } + + public function echoFieldZebra() + { + echo '
    '; + $this->echoSettingsCheckbox( + 'einsatzvw_list_zebra', + 'Zebrastreifen anzeigen', + $this->reportListSettings->isZebraTable() + ); + echo '

    Die Zeilen der Tabelle werden abwechselnd eingefärbt, um die Lesbarkeit zu verbessern. Wenn das Theme das ebenfalls tut, sollte diese Option deaktiviert werden, um Probleme bei der Darstellung zu vermeiden.

    '; + + echo '

    Farbe für Zebrastreifen:

    '; + $this->echoColorPicker('einsatzvw_list_zebracolor', ReportListSettings::DEFAULT_ZEBRACOLOR); + echo '

    Diese Farbe wird für jede zweite Zeile verwendet, die jeweils andere Zeile wird vom Theme eingefärbt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; + + echo '

    '; + echo '
    '; + } + public function registerSettings() { - // TODO: Implement registerSettings() method. + register_setting( + 'einsatzvw_settings_list', + 'einsatzvw_list_columns', + array(self::$utilities, 'sanitizeColumns') + ); + register_setting( + 'einsatzvw_settings_list', + 'einsatzvw_list_art_hierarchy', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_list', + 'einsatzvw_list_fahrzeuge_link', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_list', + 'einsatzvw_list_ext_link', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_list', + 'einsatzvw_list_annotations_color_off', + array($this, 'sanitizeAnnotationOffColor') // NEEDS_WP4.6 das globale sanitize_hex_color() verwenden + ); + register_setting( + 'einsatzvw_settings_list', + 'einsatzvw_list_zebra', + array(self::$utilities, 'sanitizeCheckbox') + ); + register_setting( + 'einsatzvw_settings_list', + 'einsatzvw_list_zebracolor', + array($this, 'sanitizeZebraColor') // NEEDS_WP4.6 das globale sanitize_hex_color() verwenden + ); + register_setting( + 'einsatzvw_settings_list', + 'einsatzvw_list_zebra_nth', + array($this->reportListSettings, 'sanitizeZebraNthChildArg') + ); + } + + /** + * Stellt sicher, dass die Farbe für die Zebrastreifen gültig ist + * + * @param string $input Der zu prüfende Farbwert + * + * @return string Der übergebene Farbwert, wenn er gültig ist, ansonsten die Standardeinstellung + */ + public function sanitizeZebraColor($input) + { + return self::$utilities->sanitizeHexColor($input, ReportListSettings::DEFAULT_ZEBRACOLOR); + } + + /** + * Stellt sicher, dass die Farbe für die inaktiven Vermerke gültig ist + * + * @param string $input Der zu prüfende Farbwert + * + * @return string Der übergebene Farbwert, wenn er gültig ist, ansonsten die Standardeinstellung + */ + public function sanitizeAnnotationOffColor($input) + { + return self::$utilities->sanitizeHexColor($input, AnnotationIconBar::DEFAULT_COLOR_OFF); } } From 093978e6c8862158691a1dd293e01c39174fc5f9 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 20:59:27 +0200 Subject: [PATCH 092/126] Unterseite "Berechtigungen" wiederhergestellt --- src/Settings/Pages/Capabilities.php | 52 +++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/src/Settings/Pages/Capabilities.php b/src/Settings/Pages/Capabilities.php index 45c36c5e..11594113 100644 --- a/src/Settings/Pages/Capabilities.php +++ b/src/Settings/Pages/Capabilities.php @@ -16,7 +16,13 @@ public function __construct() public function addSettingsFields() { - // TODO: Implement addSettingsFields() method. + add_settings_field( + 'einsatzvw_settings_caps_roles', + 'Rollen', + array($this, 'echoFieldRoles'), + $this->settingsApiPage, + 'einsatzvw_settings_caps' + ); } public function addSettingsSections() @@ -31,8 +37,50 @@ function () { ); } + /** + * Gibt die Einstellmöglichkeiten für die Berechtigungen aus + */ + public function echoFieldRoles() + { + echo '
    '; + $roles = get_editable_roles(); + if (empty($roles)) { + echo "Es konnten keine Rollen gefunden werden."; + } else { + foreach ($roles as $roleSlug => $role) { + // Administratoren haben immer Zugriff, deshalb ist keine Einstellung nötig + if ('administrator' === $roleSlug) { + continue; + } + + $this->echoSettingsCheckbox( + 'einsatzvw_cap_roles_' . $roleSlug, + translate_user_role($role['name']) + ); + echo '
    '; + } + echo '

    Die Benutzer mit den hier ausgewählten Rollen haben alle Rechte, um die Einsatzberichte und die zugehörigen Eigenschaften (z.B. Einsatzarten) zu verwalten. Zu dieser Einstellungsseite und den Werkzeugen haben in jedem Fall nur Administratoren Zugang.

    '; + echo '

    Die Berechtigungen können mit speziellen Plugins deutlich feingranularer eingestellt werden.

    '; + } + echo '
    '; + } + public function registerSettings() { - // TODO: Implement registerSettings() method. + $roles = get_editable_roles(); + if (!empty($roles)) { + foreach (array_keys($roles) as $roleSlug) { + // Administratoren haben immer Zugriff, deshalb ist keine Einstellung nötig + if ('administrator' === $roleSlug) { + continue; + } + + register_setting( + 'einsatzvw_settings_capabilities', + 'einsatzvw_cap_roles_' . $roleSlug, + array(self::$utilities, 'sanitizeCheckbox') + ); + } + } } } From cda9befc87eca77ec955fced6c5bb746f3b111a3 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 21:37:24 +0200 Subject: [PATCH 093/126] Alte Settings-Klasse entfernt --- src/einsatzverwaltung-settings.php | 1058 ---------------------------- 1 file changed, 1058 deletions(-) delete mode 100644 src/einsatzverwaltung-settings.php diff --git a/src/einsatzverwaltung-settings.php b/src/einsatzverwaltung-settings.php deleted file mode 100644 index 3ee8c9bb..00000000 --- a/src/einsatzverwaltung-settings.php +++ /dev/null @@ -1,1058 +0,0 @@ - 'Nicht verwenden (zeigt die klassische Einzelansicht)', - 'singular' => 'In der Einzelansicht verwenden', - 'loops' => 'In der Einzelansicht und in Übersichten (Startseite, Archive, Suchergebnisse, ...) verwenden', - 'everywhere' => 'Überall verwenden', - ); - - /** - * @var Options - */ - private $options; - - /** - * @var Core - */ - private $core; - - /** - * @var Utilities - */ - private $utilities; - - /** - * @var Data - */ - private $data; - - /** - * @var ReportListSettings - */ - private $reportListSettings; - - /** - * Konstruktor - * - * @param Core $core - * @param Options $options - * @param Utilities $utilities - * @param Data $data - */ - public function __construct($core, $options, $utilities, $data) - { - $this->core = $core; - $this->options = $options; - $this->utilities = $utilities; - $this->data = $data; - - // Einstellungsobjekte laden - $this->reportListSettings = new ReportListSettings(); - - require_once dirname(__FILE__) . '/Frontend/AnnotationIconBar.php'; - - $this->addHooks(); - } - - - private function addHooks() - { - add_action('admin_menu', array($this, 'addToSettingsMenu')); - add_action('admin_init', array($this, 'registerSettings')); - add_filter('pre_update_option_einsatzvw_rewrite_slug', array($this, 'maybeRewriteSlugChanged'), 10, 2); - add_filter('pre_update_option_einsatzvw_category', array($this, 'maybeCategoryChanged'), 10, 2); - add_filter('pre_update_option_einsatzvw_loop_only_special', array($this, 'maybeCategorySpecialChanged'), 10, 2); - add_action('updated_option', array($this, 'maybeAutoIncidentNumbersChanged'), 10, 3); - } - - - /** - * Fügt die Einstellungsseite zum Menü hinzu - */ - public function addToSettingsMenu() - { - add_options_page( - 'Einstellungen', - 'Einsatzverwaltung', - 'manage_options', - self::EVW_SETTINGS_SLUG, - array($this, 'echoSettingsPage') - ); - } - - - /** - * Macht Einstellungen im System bekannt und regelt die Zugehörigkeit zu Abschnitten auf Einstellungsseiten - */ - public function registerSettings() - { - // Sections - $this->addSettingsSections(); - - // Fields - $this->addSettingsFields(); - - // Registration - // NEEDS_WP4.7 Standardwerte in register_setting() mitgeben - register_setting( - 'einsatzvw_settings_general', - 'einsatzvw_rewrite_slug', - 'sanitize_title' - ); - register_setting( - 'einsatzvw_settings_numbers', - 'einsatzverwaltung_incidentnumbers_auto', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_numbers', - 'einsatzvw_einsatznummer_stellen', - array($this->utilities, 'sanitizeEinsatznummerStellen') - ); - register_setting( - 'einsatzvw_settings_numbers', - 'einsatzvw_einsatznummer_lfdvorne', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_general', - 'einsatzvw_show_einsatzberichte_mainloop', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_general', - 'einsatzvw_category', - 'intval' - ); - register_setting( - 'einsatzvw_settings_general', - 'einsatzvw_loop_only_special', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzvw_einsatz_hideemptydetails', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzvw_show_exteinsatzmittel_archive', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzvw_show_einsatzart_archive', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzvw_show_fahrzeug_archive', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzvw_open_ext_in_new', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzverwaltung_use_reporttemplate', - array($this, 'sanitizeReportTemplateUsage') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzverwaltung_reporttemplate', - array($this, 'sanitizeTemplate') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzverwaltung_use_excerpttemplate', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_report', - 'einsatzverwaltung_excerpttemplate', - array($this, 'sanitizeTemplate') - ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_columns', - array($this->utilities, 'sanitizeColumns') - ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_art_hierarchy', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_fahrzeuge_link', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_ext_link', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_annotations_color_off', - array($this, 'sanitizeAnnotationOffColor') // NEEDS_WP4.6 das globale sanitize_hex_color() verwenden - ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_zebra', - array($this->utilities, 'sanitizeCheckbox') - ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_zebracolor', - array($this, 'sanitizeZebraColor') // NEEDS_WP4.6 das globale sanitize_hex_color() verwenden - ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_zebra_nth', - array($this->reportListSettings, 'sanitizeZebraNthChildArg') - ); - - $roles = get_editable_roles(); - if (!empty($roles)) { - foreach (array_keys($roles) as $roleSlug) { - // Administratoren haben immer Zugriff, deshalb ist keine Einstellung nötig - if ('administrator' === $roleSlug) { - continue; - } - - register_setting( - 'einsatzvw_settings_capabilities', - 'einsatzvw_cap_roles_' . $roleSlug, - array($this->utilities, 'sanitizeCheckbox') - ); - } - } - } - - - /** - * Fügt die großen Abschnitte in die Einstellungsseite ein - */ - private function addSettingsSections() - { - add_settings_section( - 'einsatzvw_settings_general', - '', - null, - self::EVW_SETTINGS_SLUG . '-general' - ); - add_settings_section( - 'einsatzvw_settings_numbers', - '', - null, - self::EVW_SETTINGS_SLUG . '-numbers' - ); - add_settings_section( - 'einsatzvw_settings_einsatzberichte', - '', - function () { - echo '

    Mit diesen Einstellungen kann das Aussehen der einzelnen Einsatzberichte beeinflusst werden.

    '; - }, - self::EVW_SETTINGS_SLUG . '-report' - ); - add_settings_section( - 'einsatzvw_settings_reporttemplates', - 'Templates', - function () { - echo '

    Mit den beiden folgenden Templates kann das Aussehen der Einsatzberichte bzw. deren Auszüge individuell angepasst werden. Das ausgefüllte Template erscheint immer dort, wo normal der Beitragstext stehen würde. Wie die Templates funktionieren ist in der Dokumentation beschrieben.

    '; - }, - self::EVW_SETTINGS_SLUG . '-report' - ); - add_settings_section( - 'einsatzvw_settings_einsatzliste', - '', - function () { - echo '

    Mit diesen Einstellungen kann das Aussehen der Einsatzlisten beeinflusst werden. Einsatzlisten können über den Shortcode [einsatzliste] in Seiten und Beiträge eingebunden werden.

    '; - }, - self::EVW_SETTINGS_SLUG . '-list' - ); - add_settings_section( - 'einsatzvw_settings_caps', - '', - function () { - echo '

    Hier kann festgelegt werden, welche Benutzer die Einsatzberichte verwalten können.

    '; - }, - self::EVW_SETTINGS_SLUG . '-capabilities' - ); - } - - - /** - * Namen und Ausgabemethoden der einzelnen Felder in den Abschnitten - */ - private function addSettingsFields() - { - add_settings_field( - 'einsatzvw_permalinks', - 'Permalinks', - array($this, 'echoSettingsPermalinks'), - self::EVW_SETTINGS_SLUG . '-general', - 'einsatzvw_settings_general' - ); - add_settings_field( - 'einsatzvw_einsatznummer_mainloop', - 'Einsatzbericht als Beitrag', - array($this, 'echoEinsatzberichteMainloop'), - self::EVW_SETTINGS_SLUG . '-general', - 'einsatzvw_settings_general' - ); - add_settings_field( - 'einsatzvw_einsatznummer_auto', - 'Einsatznummern automatisch verwalten', - array($this, 'echoSettingsEinsatznummerAuto'), - self::EVW_SETTINGS_SLUG . '-numbers', - 'einsatzvw_settings_numbers' - ); - add_settings_field( - 'einsatzvw_einsatznummer_stellen', - 'Format der Einsatznummer', - array($this, 'echoSettingsEinsatznummerFormat'), - self::EVW_SETTINGS_SLUG . '-numbers', - 'einsatzvw_settings_numbers' - ); - add_settings_field( - 'einsatzvw_einsatz_hideemptydetails', - 'Einsatzdetails', - array($this, 'echoSettingsEmptyDetails'), - self::EVW_SETTINGS_SLUG . '-report', - 'einsatzvw_settings_einsatzberichte' - ); - add_settings_field( - 'einsatzvw_settings_archivelinks', - 'Gefilterte Einsatzübersicht verlinken', - array($this, 'echoSettingsArchive'), - self::EVW_SETTINGS_SLUG . '-report', - 'einsatzvw_settings_einsatzberichte' - ); - add_settings_field( - 'einsatzvw_settings_ext_newwindow', - 'Links zu externen Einsatzmitteln', - array($this, 'echoSettingsExtNew'), - self::EVW_SETTINGS_SLUG . '-report', - 'einsatzvw_settings_einsatzberichte' - ); - add_settings_field( - 'einsatzvw_settings_reporttemplate', - 'Template für Einsatzbericht', - array($this, 'echoReportTemplateSettings'), - self::EVW_SETTINGS_SLUG . '-report', - 'einsatzvw_settings_reporttemplates' - ); - add_settings_field( - 'einsatzvw_settings_excerpttemplate', - 'Template für Auszug', - array($this, 'echoExcerptTemplateSettings'), - self::EVW_SETTINGS_SLUG . '-report', - 'einsatzvw_settings_reporttemplates' - ); - add_settings_field( - 'einsatzvw_settings_columns', - 'Spalten der Einsatzliste', - array($this, 'echoEinsatzlisteColumns'), - self::EVW_SETTINGS_SLUG . '-list', - 'einsatzvw_settings_einsatzliste' - ); - add_settings_field( - 'einsatzvw_settings_column_settings', - 'Einstellungen zu einzelnen Spalten', - array($this, 'echoEinsatzlisteColumnSettings'), - self::EVW_SETTINGS_SLUG . '-list', - 'einsatzvw_settings_einsatzliste' - ); - add_settings_field( - 'einsatzvw_settings_listannotations', - 'Vermerke', - array($this, 'echoEinsatzlisteAnnotationsSettings'), - self::EVW_SETTINGS_SLUG . '-list', - 'einsatzvw_settings_einsatzliste' - ); - add_settings_field( - 'einsatzvw_settings_zebralist', - 'Zebrastreifen', - array($this, 'echoEinsatzlisteZebraSettings'), - self::EVW_SETTINGS_SLUG . '-list', - 'einsatzvw_settings_einsatzliste' - ); - add_settings_field( - 'einsatzvw_settings_caps_roles', - 'Rollen', - array($this, 'echoSettingsCapsRoles'), - self::EVW_SETTINGS_SLUG . '-capabilities', - 'einsatzvw_settings_caps' - ); - } - - /** - * Gibt den von WordPress mitgelieferten Colorpicker aus - * - * @param string $optionName Name der Einstellung - * @param string $defaultValue Der Standardwert, der im Colorpicker angeboten werden soll - */ - private function echoColorPicker($optionName, $defaultValue) - { - printf( - '', - esc_attr($optionName), - esc_attr(get_option($optionName, $defaultValue)), - esc_attr($defaultValue) - ); - } - - /** - * Gibt eine Checkbox auf der Einstellungsseite aus - * - * @param string $checkboxId Id der Option - * @param string $text Beschriftung der Checkbox - * @internal param bool $state Optional, gibt den Zustand der Checkbox an. - */ - private function echoSettingsCheckbox($checkboxId, $text) - { - echo ' 2 ? func_get_arg(2) : $this->options->getBoolOption($checkboxId)); - echo $this->utilities->checked($state) . '/>'; - } - - /** - * @param string $name Name der Option - * @param array $options Array aus Wert/Label-Paaren - * @param string $defaultValue Standardwert für Option, falls diese nicht existiert - */ - private function echoRadioButtons($name, $options, $defaultValue) - { - $currentValue = get_option($name, $defaultValue); - foreach ($options as $value => $label) { - printf( - '
    ', - $name, - $value, - checked($value, $currentValue, false), - $label - ); - } - } - - /** - * Generiert eine Auswahlliste - * - * @param string $name Name des Parameters - * @param array $options Array aus Wert/Label-Paaren - * @param string $selectedValue Vorselektierter Wert - */ - private function echoSelect($name, $options, $selectedValue) - { - echo ''; - } - - /** - * @param string $name Name der Option - */ - private function echoTextarea($name) - { - $currentValue = get_option($name, ''); - printf( - '

    ', - $name, - esc_textarea($currentValue) - ); - } - - /** - * Gibt ein Eingabefeld aus - * - * @since 1.0.0 - * - * @param string $name Name des Parameters - * @param string $description Beschreibungstext - * @param string $value Wert, der im Eingabefeld stehen soll - */ - private function echoSettingsInput($name, $description, $value = '') - { - printf( - '

    %3$s

    ', - $name, - (empty($value) ? $this->options->getOption($name) : $value), - $description - ); - } - - - /** - * @since 1.0.0 - */ - public function echoSettingsPermalinks() - { - echo '
    '; - $this->echoSettingsInput( - 'einsatzvw_rewrite_slug', - sprintf( - 'Basis für Links zu Einsatzberichten, zum %1$sArchiv%2$s und zum %3$sFeed%2$s.', - '', - '', - '' - ), - $this->options->getRewriteSlug() - ); - echo '
    '; - } - - /** - * - */ - public function echoSettingsEinsatznummerFormat() - { - echo '
    '; - printf('Jahreszahl + jahresbezogene, fortlaufende Nummer mit Stellen

    Beispiel für den fünften Einsatz in 2014:
    bei 2 Stellen: 201405
    bei 4 Stellen: 20140005


    ', 'einsatzvw_einsatznummer_stellen', $this->options->getEinsatznummerStellen()); - $this->echoSettingsCheckbox('einsatzvw_einsatznummer_lfdvorne', 'Laufende Nummer vor das Jahr stellen'); - - echo '

    Hinweis: Nach einer Änderung des Formats erhalten die bestehenden Einsatzberichte automatisch aktualisierte Nummern.

    '; - echo '
    '; - } - - public function echoSettingsEinsatznummerAuto() - { - $this->echoSettingsCheckbox( - 'einsatzverwaltung_incidentnumbers_auto', - 'Einsatznummern automatisch verwalten' - ); - echo '

    Ist diese Option aktiv, kann die Einsatznummer nicht mehr manuell geändert werden. Sie wird automatisch gemäß den nachfolgenden Regeln generiert und aktualisiert.

    '; - } - - /** - * Gibt die Einstellmöglichkeit aus, ob und wie Einsatzberichte zusammen mit anderen Beiträgen ausgegeben werden - * sollen - */ - public function echoEinsatzberichteMainloop() - { - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_show_einsatzberichte_mainloop', - 'Einsatzberichte zwischen den regulären WordPress-Beiträgen anzeigen' - ); - echo '

    Lässt die Einsatzberichte z.B. auf der Startseite, im Widget "Letzte Beiträge" oder auch im Beitragsfeed erscheinen

    '; - - echo '

    '; - wp_dropdown_categories(array( - 'show_option_none' => '- keine -', - 'hide_empty' => false, - 'name' => 'einsatzvw_category', - 'selected' => $this->options->getEinsatzberichteCategory(), - 'orderby' => 'name', - 'hierarchical' => true - )); - echo '

    '; - - - $this->echoSettingsCheckbox( - 'einsatzvw_loop_only_special', - 'Nur als besonders markierte Einsatzberichte zwischen den regulären WordPress-Beiträgen bzw. in der Kategorie anzeigen.' - ); - echo '

    Mit dieser Einstellung gelten die beiden oberen Einstellungen nur für als besonders markierte Einsatzberichte.

    '; - echo '
    '; - } - - - /** - * Gibt die Einstellmöglichkeiten für nicht ausgefüllte Einsatzdetails aus - */ - public function echoSettingsEmptyDetails() - { - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_einsatz_hideemptydetails', - 'Nicht ausgefüllte Details ausblenden' - ); - echo '

    Ein Einsatzdetail gilt als nicht ausgefüllt, wenn das entsprechende Textfeld oder die entsprechende Liste leer ist. Diese Einstellung greift nur bei der klassischen Darstellung ohne Template.

    '; - echo '
    '; - } - - - /** - * Gibt die Einstellmöglichkeiten für gefilterte Ansichten aus - */ - public function echoSettingsArchive() - { - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_show_einsatzart_archive', - 'Einsatzart' - ); - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_show_exteinsatzmittel_archive', - 'Externe Einsatzkräfte' - ); - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_show_fahrzeug_archive', - 'Fahrzeuge' - ); - echo '

    Für alle hier aktivierten Arten von Einsatzdetails werden im Kopfbereich des Einsatzberichts für alle auftretenden Werte Links zu einer gefilterten Einsatzübersicht angezeigt. Beispielsweise kann man damit alle Einsätze unter Beteiligung einer bestimmten externen Einsatzkraft auflisten lassen.

    '; - echo '
    '; - } - - - /** - * Gibt die Einstellmöglichkeiten aus, ob Links zu externen Einsatzmitteln in einem neuen Fenster geöffnet werden - * sollen - */ - public function echoSettingsExtNew() - { - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_open_ext_in_new', - 'Links zu externen Einsatzmitteln in einem neuen Fenster öffnen' - ); - echo '
    '; - } - - /** - * Einstellungen für die Gestaltung der Einsatzberichte per Template - */ - public function echoReportTemplateSettings() - { - echo '
    '; - $this->echoRadioButtons('einsatzverwaltung_use_reporttemplate', $this->useReportTemplateOptions, 'no'); - echo '

    '; - printf('Die Option "%s" wird nicht empfohlen, ist aber bei manchen Themes die einzige Möglichkeit, das Template in Übersichten nutzen zu können.', $this->useReportTemplateOptions['everywhere']); - echo '

    '; - $this->echoTextarea('einsatzverwaltung_reporttemplate'); - echo '

    Es kann sein, dass das Theme in Übersichten nur den Auszug anzeigt. Dessen Aussehen kann mit einem eigenen Template festgelegt werden (siehe unten).

    '; - echo '
    '; - } - - /** - * Einstellungen für die Gestaltung des Auszugs von Einsatzberichten per Template - */ - public function echoExcerptTemplateSettings() - { - echo '
    '; - $this->echoSettingsCheckbox('einsatzverwaltung_use_excerpttemplate', 'Template verwenden'); - echo '

    Im Gegensatz zum von WordPress generierten Auszug wird dieser nicht auf eine bestimmte Länge begrenzt. Das Einfügen des Beitragstextes (%content%) ist also nicht zu empfehlen.

    '; - $this->echoTextarea('einsatzverwaltung_excerpttemplate'); - echo '
    '; - } - - /** - * - */ - public function echoEinsatzlisteColumns() - { - $columns = ReportList::getListColumns(); - $enabledColumns = $this->options->getEinsatzlisteEnabledColumns(); - - echo '
    '; - echo 'Verfügbare Spalten'; - echo '

    Spaltennamen in unteres Feld ziehen, um sie auf der Seite anzuzeigen

    '; - echo '
      '; - foreach ($columns as $colId => $colInfo) { - if (in_array($colId, $enabledColumns)) { - continue; - } - $name = $this->utilities->getArrayValueIfKey($colInfo, 'longName', $colInfo['name']); - echo '
    • ' . $name . '
    • '; - } - echo '
    '; - - echo '
    '; - echo 'Aktive Spalten'; - echo '

    Die Reihenfolge kann ebenfalls durch Ziehen geändert werden

    '; - echo '
      '; - foreach ($enabledColumns as $colId) { - if (!array_key_exists($colId, $columns)) { - continue; - } - - $colInfo = $columns[$colId]; - $name = $this->utilities->getArrayValueIfKey($colInfo, 'longName', $colInfo['name']); - echo '
    • ' . $name . '
    • '; - } - echo '
    '; - echo ''; - } - - public function echoEinsatzlisteColumnSettings() - { - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_list_art_hierarchy', - 'Einsatzart: Hierarchie der Einsatzart anzeigen' - ); - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_list_fahrzeuge_link', - 'Fahrzeuge: Links zu den Fahrzeugseiten anzeigen, sofern verfügbar' - ); - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_list_ext_link', - 'Weitere Kräfte: Links anzeigen, sofern verfügbar' - ); - echo '
    '; - } - - public function echoEinsatzlisteAnnotationsSettings() - { - echo '
    '; - echo '

    Farbe für inaktive Vermerke:

    '; - $this->echoColorPicker('einsatzvw_list_annotations_color_off', AnnotationIconBar::DEFAULT_COLOR_OFF); - echo '

    Diese Farbe wird für die Symbole von inaktiven Vermerken verwendet, die von aktiven werden in der Textfarbe Deines Themes dargestellt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; - echo '
    '; - } - - public function echoEinsatzlisteZebraSettings() - { - echo '
    '; - $this->echoSettingsCheckbox( - 'einsatzvw_list_zebra', - 'Zebrastreifen anzeigen', - $this->reportListSettings->isZebraTable() - ); - echo '

    Die Zeilen der Tabelle werden abwechselnd eingefärbt, um die Lesbarkeit zu verbessern. Wenn das Theme das ebenfalls tut, sollte diese Option deaktiviert werden, um Probleme bei der Darstellung zu vermeiden.

    '; - - echo '

    Farbe für Zebrastreifen:

    '; - $this->echoColorPicker('einsatzvw_list_zebracolor', ReportListSettings::DEFAULT_ZEBRACOLOR); - echo '

    Diese Farbe wird für jede zweite Zeile verwendet, die jeweils andere Zeile wird vom Theme eingefärbt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; - - echo '

    '; - echo '
    '; - } - - /** - * Gibt die Einstellmöglichkeiten für die Berechtigungen aus - */ - public function echoSettingsCapsRoles() - { - echo '
    '; - $roles = get_editable_roles(); - if (empty($roles)) { - echo "Es konnten keine Rollen gefunden werden."; - } else { - foreach ($roles as $roleSlug => $role) { - // Administratoren haben immer Zugriff, deshalb ist keine Einstellung nötig - if ('administrator' === $roleSlug) { - continue; - } - - $this->echoSettingsCheckbox( - 'einsatzvw_cap_roles_' . $roleSlug, - translate_user_role($role['name']) - ); - echo '
    '; - } - echo '

    Die Benutzer mit den hier ausgewählten Rollen haben alle Rechte, um die Einsatzberichte und die zugehörigen Eigenschaften (z.B. Einsatzarten) zu verwalten. Zu dieser Einstellungsseite und den Werkzeugen haben in jedem Fall nur Administratoren Zugang.

    '; - echo '

    Die Berechtigungen können mit speziellen Plugins deutlich feingranularer eingestellt werden.

    '; - } - echo '
    '; - } - - - /** - * Generiert den Inhalt der Einstellungsseite - */ - public function echoSettingsPage() - { - if (!current_user_can('manage_options')) { - wp_die(__('You do not have sufficient permissions to manage options for this site.')); - } - ?> - -
    -

    Einstellungen › Einsatzverwaltung

    - - options->getRewriteSlug(); - $conflictingPage = get_page_by_path($rewriteSlug); - if ($conflictingPage instanceof \WP_Post) { - $pageEditLink = '
    ' . $conflictingPage->post_title . ''; - $message = sprintf('Die Seite %s und das Archiv der Einsatzberichte haben einen identischen Permalink (%s). Ändere einen der beiden Permalinks, um beide Seiten erreichen zu können.', $pageEditLink, $rewriteSlug); - echo '

    ' . $message . '

    '; - } - - $tabs = array( - 'general' => 'Allgemein', - 'numbers' => 'Einsatznummern', - 'report' => 'Einsatzberichte', - 'list' => 'Einsatzliste', - 'capabilities' => 'Berechtigungen', - 'about' => 'Über', - ); - - $flags = FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH; - $currentTab = filter_input(INPUT_GET, 'tab', FILTER_SANITIZE_STRING, $flags); - - if (empty($currentTab) || !array_key_exists($currentTab, $tabs)) { - $tabIds = array_keys($tabs); - $currentTab = $tabIds[0]; // NEEDS_PHP5.4 array_keys($tabs)[0] - } - - echo "

    "; - foreach ($tabs as $identifier => $label) { - $class = $currentTab === $identifier ? "nav-tab nav-tab-active" : "nav-tab"; - printf( - '%s', - self::EVW_SETTINGS_SLUG, - $identifier, - $class, - $label - ); - } - echo "

    "; - - if ('about' === $currentTab) { - ?> - - -

    Support

    -

    Solltest Du ein Problem bei der Benutzung des Plugins haben, schaue bitte erst auf GitHub und im Forum auf wordpress.org nach, ob andere das Problem auch haben bzw. hatten. Wenn es noch keinen passenden Eintrag gibt, lege bitte einen entsprechenden Issue bzw. Thread an. Du kannst aber auch einfach eine E-Mail schreiben.

    -

    Gib bitte immer die folgenden Versionen mit an:  - -

    - -

    Social Media

    - -

    Du kannst die Neuigkeiten auch mit deinem Feedreader abonnieren: RSS / Atom

    - '; - settings_fields('einsatzvw_settings_' . $currentTab); - do_settings_sections(self::EVW_SETTINGS_SLUG . '-' . $currentTab); - submit_button(); - echo ''; - } - - /** - * Prüft, ob sich die Basis für die Links zu Einsatzberichten ändert und veranlasst gegebenenfalls ein Erneuern der - * Permalinkstruktur - * - * @param string $newValue Der neue Wert - * @param string $oldValue Der alte Wert - * @return string Der zu speichernde Wert - */ - public function maybeRewriteSlugChanged($newValue, $oldValue) - { - if ($newValue != $oldValue) { - $this->options->setFlushRewriteRules(true); - } - - return $newValue; - } - - /** - * Prüft, ob sich die Kategorie der Einsatzberichte ändert und veranlasst gegebenenfalls ein Erneuern der - * Kategoriezuordnung - * - * @param string $newValue Der neue Wert - * @param string $oldValue Der alte Wert - * - * @return string Der zu speichernde Wert - */ - public function maybeCategoryChanged($newValue, $oldValue) - { - // Nur Änderungen sind interessant - if ($newValue == $oldValue) { - return $newValue; - } - - $posts = get_posts(array( - 'post_type' => 'einsatz', - 'post_status' => array('publish', 'private'), - 'numberposts' => -1 - )); - $reports = $this->utilities->postsToIncidentReports($posts); - - // Wenn zuvor eine Kategorie gesetzt war, müssen die Einsatzberichte aus dieser entfernt werden - if ($oldValue != -1) { - /** @var IncidentReport $report */ - foreach ($reports as $report) { - $this->utilities->removePostFromCategory($report->getPostId(), $oldValue); - } - } - - // Wenn eine neue Kategorie gesetzt wird, müssen Einsatzberichte dieser zugeordnet werden - if ($newValue != -1) { - $onlySpecialInCategory = $this->options->isOnlySpecialInLoop(); - /** @var IncidentReport $report */ - foreach ($reports as $report) { - if (!$onlySpecialInCategory || $report->isSpecial()) { - $this->utilities->addPostToCategory($report->getPostId(), $newValue); - } - } - } - - return $newValue; - } - - /** - * Prüft, ob sich die Beschränkung, nur als besonders markierte Einsatzberichte der Kategorie zuzuordnen, ändert - * und veranlasst gegebenenfalls ein Erneuern der Kategoriezuordnung - * - * @param string $newValue Der neue Wert - * @param string $oldValue Der alte Wert - * - * @return string Der zu speichernde Wert - */ - public function maybeCategorySpecialChanged($newValue, $oldValue) - { - // Nur Änderungen sind interessant - if ($newValue == $oldValue) { - return $newValue; - } - - // Ohne gesetzte Kategorie brauchen wir nicht weitermachen - $categoryId = $this->options->getEinsatzberichteCategory(); - if (-1 === $categoryId) { - return $newValue; - } - - $posts = get_posts(array( - 'post_type' => 'einsatz', - 'post_status' => array('publish', 'private'), - 'numberposts' => -1 - )); - $reports = $this->utilities->postsToIncidentReports($posts); - - // Wenn die Einstellung abgewählt wurde, werden alle Einsatzberichte zur Kategorie hinzugefügt - if ($newValue == 0) { - /** @var IncidentReport $report */ - foreach ($reports as $report) { - $this->utilities->addPostToCategory($report->getPostId(), $categoryId); - } - } - - // Wenn die Einstellung aktiviert wurde, werden nur die als besonders markierten Einsatzberichte zur Kategorie - // hinzugefügt, alle anderen daraus entfernt - if ($newValue == 1) { - /** @var IncidentReport $report */ - foreach ($reports as $report) { - if ($report->isSpecial()) { - $this->utilities->addPostToCategory($report->getPostId(), $categoryId); - } else { - $this->utilities->removePostFromCategory($report->getPostId(), $categoryId); - } - } - } - - return $newValue; - } - - /** - * Prüft, ob die automatische Verwaltung der Einsatznummern aktiviert wurde, und deshalb alle Einsatznummern - * aktualisiert werden müssen - * - * @param string $option Name der Option - * @param string $oldValue Der alte Wert - * @param string $newValue Der neue Wert - */ - public function maybeAutoIncidentNumbersChanged($option, $oldValue, $newValue) - { - // Wir sind nur an einer bestimmten Option interessiert - if ('einsatzverwaltung_incidentnumbers_auto' != $option) { - return; - } - - // Nur Änderungen sind interessant - if ($newValue == $oldValue) { - return; - } - - // Die automatische Verwaltung wurde aktiviert - if ($newValue == 1) { - $this->data->updateAllIncidentNumbers(); - } - } - - /** - * Stellt sicher, dass die Farbe für die Zebrastreifen gültig ist - * - * @param string $input Der zu prüfende Farbwert - * - * @return string Der übergebene Farbwert, wenn er gültig ist, ansonsten die Standardeinstellung - */ - public function sanitizeZebraColor($input) - { - return $this->utilities->sanitizeHexColor($input, ReportListSettings::DEFAULT_ZEBRACOLOR); - } - - /** - * Stellt sicher, dass die Farbe für die inaktiven Vermerke gültig ist - * - * @param string $input Der zu prüfende Farbwert - * - * @return string Der übergebene Farbwert, wenn er gültig ist, ansonsten die Standardeinstellung - */ - public function sanitizeAnnotationOffColor($input) - { - return $this->utilities->sanitizeHexColor($input, AnnotationIconBar::DEFAULT_COLOR_OFF); - } - - /** - * @param string $input - * @return string - */ - public function sanitizeReportTemplateUsage($input) - { - if (!in_array($input, array_keys($this->useReportTemplateOptions))) { - return 'no'; - } - - return $input; - } - - /** - * @param string $input - * @return string - */ - public function sanitizeTemplate($input) - { - return stripslashes(wp_filter_post_kses(addslashes($input))); - } -} From 2cfcc6ee26f6306f1e051f8314cbccbae945026c Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 27 May 2018 22:51:40 +0200 Subject: [PATCH 094/126] Cleanup --- src/Settings/MainPage.php | 1 + src/Settings/Pages/Report.php | 4 ++-- src/Settings/Pages/ReportList.php | 3 +-- src/Settings/Pages/SubPage.php | 15 +++++++++------ 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Settings/MainPage.php b/src/Settings/MainPage.php index b46b943f..41feca79 100644 --- a/src/Settings/MainPage.php +++ b/src/Settings/MainPage.php @@ -156,6 +156,7 @@ public function echoSettingsPage() */ public function registerSettings() { + // NEEDS_WP4.7 Standardwerte in register_setting() mitgeben foreach ($this->subPages as $subPage) { $subPage->addSettingsSections(); $subPage->addSettingsFields(); diff --git a/src/Settings/Pages/Report.php b/src/Settings/Pages/Report.php index a0a11d7d..0d7545db 100644 --- a/src/Settings/Pages/Report.php +++ b/src/Settings/Pages/Report.php @@ -88,13 +88,13 @@ public function echoFieldEmptyDetails() echo '
    '; $this->echoSettingsCheckbox( 'einsatzvw_einsatz_hideemptydetails', - 'Nicht ausgefüllte Details ausblenden' + 'Nicht ausgefüllte Details ausblenden', + true ); echo '

    Ein Einsatzdetail gilt als nicht ausgefüllt, wenn das entsprechende Textfeld oder die entsprechende Liste leer ist. Diese Einstellung greift nur bei der klassischen Darstellung ohne Template.

    '; echo '
    '; } - /** * Gibt die Einstellmöglichkeiten für gefilterte Ansichten aus */ diff --git a/src/Settings/Pages/ReportList.php b/src/Settings/Pages/ReportList.php index 45099b63..f2753c75 100644 --- a/src/Settings/Pages/ReportList.php +++ b/src/Settings/Pages/ReportList.php @@ -140,8 +140,7 @@ public function echoFieldZebra() echo '
    '; $this->echoSettingsCheckbox( 'einsatzvw_list_zebra', - 'Zebrastreifen anzeigen', - $this->reportListSettings->isZebraTable() + 'Zebrastreifen anzeigen' ); echo '

    Die Zeilen der Tabelle werden abwechselnd eingefärbt, um die Lesbarkeit zu verbessern. Wenn das Theme das ebenfalls tut, sollte diese Option deaktiviert werden, um Probleme bei der Darstellung zu vermeiden.

    '; diff --git a/src/Settings/Pages/SubPage.php b/src/Settings/Pages/SubPage.php index 030d812f..99d11c69 100644 --- a/src/Settings/Pages/SubPage.php +++ b/src/Settings/Pages/SubPage.php @@ -77,14 +77,17 @@ protected function echoColorPicker($optionName, $defaultValue) * * @param string $checkboxId Id der Option * @param string $text Beschriftung der Checkbox - * @internal param bool $state Optional, gibt den Zustand der Checkbox an. + * @param bool $defaultValue Standardwert für Option, falls diese nicht existiert */ - protected function echoSettingsCheckbox($checkboxId, $text) + protected function echoSettingsCheckbox($checkboxId, $text, $defaultValue = false) { - echo ' 2 ? func_get_arg(2) : self::$options->getBoolOption($checkboxId)); - echo self::$utilities->checked($state) . '/>'; + $currentValue = get_option($checkboxId, $defaultValue); + printf( + '', + esc_attr($checkboxId), + checked($currentValue, '1', false), + $text + ); } /** From 1718ef49142a9ddee29951a582576cf0174a62c1 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Tue, 29 May 2018 22:24:02 +0200 Subject: [PATCH 095/126] Gebrauch von Utilities als Objektinstanz reduziert --- src/Frontend/ReportList.php | 56 ++++++++++++++++++++++- src/Import/Tool.php | 2 +- src/Settings/MainPage.php | 15 ++---- src/Settings/Pages/Capabilities.php | 2 +- src/Settings/Pages/General.php | 19 ++++---- src/Settings/Pages/Numbers.php | 6 +-- src/Settings/Pages/Report.php | 12 ++--- src/Settings/Pages/ReportList.php | 19 ++++---- src/Settings/Pages/SubPage.php | 7 --- src/einsatzverwaltung-admin.php | 3 +- src/einsatzverwaltung-core.php | 8 ++-- src/einsatzverwaltung-data.php | 6 +-- src/einsatzverwaltung-options.php | 6 ++- src/einsatzverwaltung-shortcodes.php | 2 +- src/einsatzverwaltung-update.php | 2 +- src/einsatzverwaltung-utilities.php | 68 +++------------------------- tests/UtilitiesTest.php | 8 ++-- 17 files changed, 114 insertions(+), 127 deletions(-) diff --git a/src/Frontend/ReportList.php b/src/Frontend/ReportList.php index 6bd2c220..148f17e4 100644 --- a/src/Frontend/ReportList.php +++ b/src/Frontend/ReportList.php @@ -18,6 +18,7 @@ class ReportList { const TABLECLASS = 'einsatzverwaltung-reportlist'; + const DEFAULT_COLUMNS = 'number,date,time,title'; /** * @var AnnotationIconBar @@ -169,13 +170,13 @@ private function constructList($reports, $args) // Variablen setzen $this->compact = (bool) $parsedArgs['compact']; $this->splitMonths = (bool) $parsedArgs['splitMonths'] && !$this->compact; - $this->columns = $this->utilities->sanitizeColumnsArray($parsedArgs['columns']); + $this->columns = ReportList::sanitizeColumnsArray($parsedArgs['columns']); $this->numberOfColumns = count($this->columns); $this->linkToVehicles = (true === $parsedArgs['linkToVehicles']); $this->linkToAddForces = (true === $parsedArgs['linkToAddForces']); $this->columnsWithLink = $parsedArgs['columnsWithLink']; if ($this->columnsWithLink !== false) { - $this->columnsWithLink = $this->utilities->sanitizeColumnsArray($this->columnsWithLink); + $this->columnsWithLink = ReportList::sanitizeColumnsArray($this->columnsWithLink); } $this->linkEmptyReports = (true === $parsedArgs['linkEmptyReports']); $this->showHeading = (bool) $parsedArgs['showHeading']; @@ -522,4 +523,55 @@ public static function getDynamicCss() return $string; } + + /** + * Stellt sicher, dass nur gültige Spalten-Ids gespeichert werden. + * + * @param string $input Kommaseparierte Spalten-Ids + * + * @return string Der Eingabestring ohne ungültige Spalten-Ids, bei Problemen werden die Standardspalten + * zurückgegeben + */ + public static function sanitizeColumns($input) + { + if (empty($input)) { + return ReportList::DEFAULT_COLUMNS; + } + + $inputArray = explode(',', $input); + $validColumnIds = self::sanitizeColumnsArray($inputArray); + + if (empty($validColumnIds)) { + return ReportList::DEFAULT_COLUMNS; + } + + return implode(',', $validColumnIds); + } + + /** + * Bereinigt ein Array von Spalten-Ids, sodass nur gültige Ids darin verbleiben + * + * @param $inputArray + * + * @return array + */ + public static function sanitizeColumnsArray($inputArray) + { + $columns = ReportList::getListColumns(); + $columnIds = array_keys($columns); + + $validColumnIds = array(); + foreach ($inputArray as $colId) { + $colId = trim($colId); + if (in_array($colId, $columnIds)) { + $validColumnIds[] = $colId; + } + } + + if (empty($validColumnIds)) { + $validColumnIds = explode(',', ReportList::DEFAULT_COLUMNS); + } + + return $validColumnIds; + } } diff --git a/src/Import/Tool.php b/src/Import/Tool.php index a3e05409..24ecc92b 100644 --- a/src/Import/Tool.php +++ b/src/Import/Tool.php @@ -194,7 +194,7 @@ public function renderToolPage() $publishReports = filter_input(INPUT_POST, 'import_publish_reports', FILTER_SANITIZE_STRING); $this->currentSource->putArg( 'import_publish_reports', - $this->utilities->sanitizeCheckbox($publishReports) + Utilities::sanitizeCheckbox($publishReports) ); echo "

    {$this->currentAction['name']}

    "; diff --git a/src/Settings/MainPage.php b/src/Settings/MainPage.php index 41feca79..1775d851 100644 --- a/src/Settings/MainPage.php +++ b/src/Settings/MainPage.php @@ -11,7 +11,6 @@ use abrain\Einsatzverwaltung\Settings\Pages\Report; use abrain\Einsatzverwaltung\Settings\Pages\ReportList; use abrain\Einsatzverwaltung\Settings\Pages\SubPage; -use abrain\Einsatzverwaltung\Utilities; /** * Entry point for the plugin settings @@ -22,11 +21,6 @@ class MainPage { const EVW_SETTINGS_SLUG = 'einsatzvw-settings'; - /** - * @var Options - */ - private $options; - /** * @var SubPage[] */ @@ -35,11 +29,9 @@ class MainPage /** * MainPage constructor. * @param Options $options - * @param Utilities $utilities */ - public function __construct(Options $options, Utilities $utilities) + public function __construct(Options $options) { - $this->options = $options; $this->subPages = array(); require_once dirname(__FILE__) . '/Pages/SubPage.php'; @@ -50,8 +42,7 @@ public function __construct(Options $options, Utilities $utilities) require_once dirname(__FILE__) . '/Pages/Capabilities.php'; require_once dirname(__FILE__) . '/Pages/About.php'; - SubPage::$options = $this->options; - SubPage::$utilities = $utilities; + SubPage::$options = $options; $this->subPages[] = new General(); $this->subPages[] = new Numbers(); $this->subPages[] = new Report(); @@ -89,7 +80,7 @@ public function echoSettingsPage() options->getRewriteSlug(); + $rewriteSlug = sanitize_title(get_option('einsatzvw_rewrite_slug'), 'einsatzberichte'); $conflictingPage = get_page_by_path($rewriteSlug); if ($conflictingPage instanceof \WP_Post) { $pageEditLink = '' . $conflictingPage->post_title . ''; diff --git a/src/Settings/Pages/Capabilities.php b/src/Settings/Pages/Capabilities.php index 11594113..e713c39b 100644 --- a/src/Settings/Pages/Capabilities.php +++ b/src/Settings/Pages/Capabilities.php @@ -78,7 +78,7 @@ public function registerSettings() register_setting( 'einsatzvw_settings_capabilities', 'einsatzvw_cap_roles_' . $roleSlug, - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); } } diff --git a/src/Settings/Pages/General.php b/src/Settings/Pages/General.php index 8f63aeb7..026a8833 100644 --- a/src/Settings/Pages/General.php +++ b/src/Settings/Pages/General.php @@ -3,6 +3,7 @@ namespace abrain\Einsatzverwaltung\Settings\Pages; use abrain\Einsatzverwaltung\Model\IncidentReport; +use abrain\Einsatzverwaltung\Utilities; /** * General settings page @@ -141,13 +142,13 @@ public function maybeCategoryChanged($newValue, $oldValue) 'post_status' => array('publish', 'private'), 'numberposts' => -1 )); - $reports = self::$utilities->postsToIncidentReports($posts); + $reports = Utilities::postsToIncidentReports($posts); // Wenn zuvor eine Kategorie gesetzt war, müssen die Einsatzberichte aus dieser entfernt werden if ($oldValue != -1) { /** @var IncidentReport $report */ foreach ($reports as $report) { - self::$utilities->removePostFromCategory($report->getPostId(), $oldValue); + Utilities::removePostFromCategory($report->getPostId(), $oldValue); } } @@ -157,7 +158,7 @@ public function maybeCategoryChanged($newValue, $oldValue) /** @var IncidentReport $report */ foreach ($reports as $report) { if (!$onlySpecialInCategory || $report->isSpecial()) { - self::$utilities->addPostToCategory($report->getPostId(), $newValue); + Utilities::addPostToCategory($report->getPostId(), $newValue); } } } @@ -192,13 +193,13 @@ public function maybeCategorySpecialChanged($newValue, $oldValue) 'post_status' => array('publish', 'private'), 'numberposts' => -1 )); - $reports = self::$utilities->postsToIncidentReports($posts); + $reports = Utilities::postsToIncidentReports($posts); // Wenn die Einstellung abgewählt wurde, werden alle Einsatzberichte zur Kategorie hinzugefügt if ($newValue == 0) { /** @var IncidentReport $report */ foreach ($reports as $report) { - self::$utilities->addPostToCategory($report->getPostId(), $categoryId); + Utilities::addPostToCategory($report->getPostId(), $categoryId); } } @@ -208,9 +209,9 @@ public function maybeCategorySpecialChanged($newValue, $oldValue) /** @var IncidentReport $report */ foreach ($reports as $report) { if ($report->isSpecial()) { - self::$utilities->addPostToCategory($report->getPostId(), $categoryId); + Utilities::addPostToCategory($report->getPostId(), $categoryId); } else { - self::$utilities->removePostFromCategory($report->getPostId(), $categoryId); + Utilities::removePostFromCategory($report->getPostId(), $categoryId); } } } @@ -228,7 +229,7 @@ public function registerSettings() register_setting( 'einsatzvw_settings_general', 'einsatzvw_show_einsatzberichte_mainloop', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_general', @@ -238,7 +239,7 @@ public function registerSettings() register_setting( 'einsatzvw_settings_general', 'einsatzvw_loop_only_special', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); } } diff --git a/src/Settings/Pages/Numbers.php b/src/Settings/Pages/Numbers.php index f292729a..1462b5a6 100644 --- a/src/Settings/Pages/Numbers.php +++ b/src/Settings/Pages/Numbers.php @@ -75,17 +75,17 @@ public function registerSettings() register_setting( 'einsatzvw_settings_numbers', 'einsatzverwaltung_incidentnumbers_auto', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_numbers', 'einsatzvw_einsatznummer_stellen', - array(self::$utilities, 'sanitizeEinsatznummerStellen') + array('Utilities', 'sanitizeEinsatznummerStellen') ); register_setting( 'einsatzvw_settings_numbers', 'einsatzvw_einsatznummer_lfdvorne', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); } } diff --git a/src/Settings/Pages/Report.php b/src/Settings/Pages/Report.php index 0d7545db..ab6ede48 100644 --- a/src/Settings/Pages/Report.php +++ b/src/Settings/Pages/Report.php @@ -166,27 +166,27 @@ public function registerSettings() register_setting( 'einsatzvw_settings_report', 'einsatzvw_einsatz_hideemptydetails', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_report', 'einsatzvw_show_exteinsatzmittel_archive', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_report', 'einsatzvw_show_einsatzart_archive', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_report', 'einsatzvw_show_fahrzeug_archive', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_report', 'einsatzvw_open_ext_in_new', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_report', @@ -201,7 +201,7 @@ public function registerSettings() register_setting( 'einsatzvw_settings_report', 'einsatzverwaltung_use_excerpttemplate', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_report', diff --git a/src/Settings/Pages/ReportList.php b/src/Settings/Pages/ReportList.php index f2753c75..0073e33e 100644 --- a/src/Settings/Pages/ReportList.php +++ b/src/Settings/Pages/ReportList.php @@ -4,6 +4,7 @@ use abrain\Einsatzverwaltung\Frontend\AnnotationIconBar; use abrain\Einsatzverwaltung\Frontend\ReportListSettings; +use abrain\Einsatzverwaltung\Utilities; /** * ReportList settings page @@ -84,7 +85,7 @@ public function echoFieldColumns() if (in_array($colId, $enabledColumns)) { continue; } - $name = self::$utilities->getArrayValueIfKey($colInfo, 'longName', $colInfo['name']); + $name = array_key_exists('longName', $colInfo) ? $colInfo['longName'] : $colInfo['name']; echo '
  • ' . $name . '
  • '; } echo ''; @@ -99,7 +100,7 @@ public function echoFieldColumns() } $colInfo = $columns[$colId]; - $name = self::$utilities->getArrayValueIfKey($colInfo, 'longName', $colInfo['name']); + $name = array_key_exists('longName', $colInfo) ? $colInfo['longName'] : $colInfo['name']; echo '
  • ' . $name . '
  • '; } echo ''; @@ -161,22 +162,22 @@ public function registerSettings() register_setting( 'einsatzvw_settings_list', 'einsatzvw_list_columns', - array(self::$utilities, 'sanitizeColumns') + array('\abrain\Einsatzverwaltung\Frontend\ReportList', 'sanitizeColumns') ); register_setting( 'einsatzvw_settings_list', 'einsatzvw_list_art_hierarchy', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_list', 'einsatzvw_list_fahrzeuge_link', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_list', 'einsatzvw_list_ext_link', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_list', @@ -186,7 +187,7 @@ public function registerSettings() register_setting( 'einsatzvw_settings_list', 'einsatzvw_list_zebra', - array(self::$utilities, 'sanitizeCheckbox') + array('Utilities', 'sanitizeCheckbox') ); register_setting( 'einsatzvw_settings_list', @@ -209,7 +210,7 @@ public function registerSettings() */ public function sanitizeZebraColor($input) { - return self::$utilities->sanitizeHexColor($input, ReportListSettings::DEFAULT_ZEBRACOLOR); + return Utilities::sanitizeHexColor($input, ReportListSettings::DEFAULT_ZEBRACOLOR); } /** @@ -221,6 +222,6 @@ public function sanitizeZebraColor($input) */ public function sanitizeAnnotationOffColor($input) { - return self::$utilities->sanitizeHexColor($input, AnnotationIconBar::DEFAULT_COLOR_OFF); + return Utilities::sanitizeHexColor($input, AnnotationIconBar::DEFAULT_COLOR_OFF); } } diff --git a/src/Settings/Pages/SubPage.php b/src/Settings/Pages/SubPage.php index 99d11c69..b3430435 100644 --- a/src/Settings/Pages/SubPage.php +++ b/src/Settings/Pages/SubPage.php @@ -4,7 +4,6 @@ use abrain\Einsatzverwaltung\Options; use abrain\Einsatzverwaltung\Settings\MainPage; -use abrain\Einsatzverwaltung\Utilities; /** * Base class for a sub page of the plugin settings @@ -34,12 +33,6 @@ abstract class SubPage */ public $title; - /** - * FIXME provisorisch - * @var Utilities - */ - public static $utilities; - /** * SubPage constructor. * @param $identifier diff --git a/src/einsatzverwaltung-admin.php b/src/einsatzverwaltung-admin.php index 61e01527..0fbe65e3 100644 --- a/src/einsatzverwaltung-admin.php +++ b/src/einsatzverwaltung-admin.php @@ -3,6 +3,7 @@ use abrain\Einsatzverwaltung\Frontend\AnnotationIconBar; use abrain\Einsatzverwaltung\Model\IncidentReport; +use abrain\Einsatzverwaltung\Settings\MainPage; use WP_Post; /** @@ -483,7 +484,7 @@ public function pluginMetaLinks($links, $file) */ public function addActionLinks($links) { - $settingsPage = 'options-general.php?page=' . Settings::EVW_SETTINGS_SLUG; + $settingsPage = 'options-general.php?page=' . MainPage::EVW_SETTINGS_SLUG; $actionLinks = array('Einstellungen'); return array_merge($links, $actionLinks); } diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index c2a3e1d1..c7432ee5 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -413,7 +413,7 @@ private function registerTypes() 'type' => 'boolean', 'description' => 'Vermerk, ob es sich um einen Fehlalarm handelte.', 'single' => true, - 'sanitize_callback' => array($this->utilities, 'sanitizeCheckbox'), + 'sanitize_callback' => array('Utilities', 'sanitizeCheckbox'), 'show_in_rest' => false )); @@ -421,7 +421,7 @@ private function registerTypes() 'type' => 'boolean', 'description' => 'Vermerk, ob der Einsatzbericht Bilder enthält.', 'single' => true, - 'sanitize_callback' => array($this->utilities, 'sanitizeCheckbox'), + 'sanitize_callback' => array('Utilities', 'sanitizeCheckbox'), 'show_in_rest' => false )); @@ -445,7 +445,7 @@ private function registerTypes() 'type' => 'boolean', 'description' => 'Vermerk, ob es sich um einen besonderen Einsatzbericht handelt.', 'single' => true, - 'sanitize_callback' => array($this->utilities, 'sanitizeCheckbox'), + 'sanitize_callback' => array('Utilities', 'sanitizeCheckbox'), 'show_in_rest' => false )); @@ -510,7 +510,7 @@ private function registerTypes() private function registerSettings() { require_once dirname(__FILE__) . '/Settings/MainPage.php'; - $mainPage = new MainPage($this->options, $this->utilities); + $mainPage = new MainPage($this->options); add_action('admin_menu', array($mainPage, 'addToSettingsMenu')); add_action('admin_init', array($mainPage, 'registerSettings')); } diff --git a/src/einsatzverwaltung-data.php b/src/einsatzverwaltung-data.php index 142cefd3..0e3e9292 100644 --- a/src/einsatzverwaltung-data.php +++ b/src/einsatzverwaltung-data.php @@ -289,9 +289,9 @@ public function onPublish($postId, $post) $category = $this->options->getEinsatzberichteCategory(); if ($category != -1) { if (!($this->options->isOnlySpecialInLoop()) || $report->isSpecial()) { - $this->utilities->addPostToCategory($postId, $category); + Utilities::addPostToCategory($postId, $category); } else { - $this->utilities->removePostFromCategory($postId, $category); + Utilities::removePostFromCategory($postId, $category); } } @@ -317,7 +317,7 @@ public function onTrash($postId, $post) // Kategoriezugehörigkeit aktualisieren $category = $this->options->getEinsatzberichteCategory(); if ($category != -1) { - $this->utilities->removePostFromCategory($postId, $category); + Utilities::removePostFromCategory($postId, $category); } } diff --git a/src/einsatzverwaltung-options.php b/src/einsatzverwaltung-options.php index 39607b80..0b122097 100644 --- a/src/einsatzverwaltung-options.php +++ b/src/einsatzverwaltung-options.php @@ -1,6 +1,8 @@ getOption('einsatzvw_list_columns'); - $enabledColumns = $this->utilities->sanitizeColumns($enabledColumns); + $enabledColumns = ReportList::sanitizeColumns($enabledColumns); return explode(',', $enabledColumns); } @@ -125,7 +127,7 @@ public function getEinsatzlisteEnabledColumns() public function getEinsatznummerStellen() { $option = $this->getOption('einsatzvw_einsatznummer_stellen'); - return $this->utilities->sanitizeEinsatznummerStellen($option); + return Utilities::sanitizeEinsatznummerStellen($option); } /** diff --git a/src/einsatzverwaltung-shortcodes.php b/src/einsatzverwaltung-shortcodes.php index e3672f58..7361ea81 100644 --- a/src/einsatzverwaltung-shortcodes.php +++ b/src/einsatzverwaltung-shortcodes.php @@ -88,7 +88,7 @@ public function einsatzliste($atts) $columnsWithLink = false; } if ($columnsWithLink !== false) { - $columnsWithLink = $this->utilities->sanitizeColumnsArray($columnsWithLink); + $columnsWithLink = ReportList::sanitizeColumnsArray($columnsWithLink); } // Berichte abfragen diff --git a/src/einsatzverwaltung-update.php b/src/einsatzverwaltung-update.php index d966349d..3f6a1b5e 100644 --- a/src/einsatzverwaltung-update.php +++ b/src/einsatzverwaltung-update.php @@ -235,7 +235,7 @@ private function upgrade120() )); foreach ($posts as $post) { - $this->utilities->addPostToCategory($post->ID, $categoryId); + Utilities::addPostToCategory($post->ID, $categoryId); } } diff --git a/src/einsatzverwaltung-utilities.php b/src/einsatzverwaltung-utilities.php index 6b372cdc..8ef9034c 100644 --- a/src/einsatzverwaltung-utilities.php +++ b/src/einsatzverwaltung-utilities.php @@ -1,7 +1,6 @@ 0) { return $val; } else { - return $this->options->getDefaultEinsatznummerStellen(); + return 3; } } @@ -264,7 +263,7 @@ public function sanitizeEinsatznummerStellen($input) * * @return string Den übergebenen Farbwert, wenn er korrekt ist, ansonsten den Standardwert */ - public function sanitizeHexColor($color, $default) + public static function sanitizeHexColor($color, $default) { if (empty($color)) { return $default; @@ -294,57 +293,4 @@ public function sanitizeNumberGreaterZero($input, $defaultvalue = 0) return $defaultvalue; } } - - - /** - * Stellt sicher, dass nur gültige Spalten-Ids gespeichert werden. - * - * @param string $input Kommaseparierte Spalten-Ids - * - * @return string Der Eingabestring ohne ungültige Spalten-Ids, bei Problemen werden die Standardspalten - * zurückgegeben - */ - public function sanitizeColumns($input) - { - if (empty($input)) { - return $this->options->getDefaultColumns(); - } - - $inputArray = explode(',', $input); - $validColumnIds = $this->sanitizeColumnsArray($inputArray); - - if (empty($validColumnIds)) { - return $this->options->getDefaultColumns(); - } - - return implode(',', $validColumnIds); - } - - /** - * Bereinigt ein Array von Spalten-Ids, sodass nur gültige Ids darin verbleiben - * - * @param $inputArray - * - * @return array - */ - public function sanitizeColumnsArray($inputArray) - { - $columns = ReportList::getListColumns(); - $columnIds = array_keys($columns); - - $validColumnIds = array(); - foreach ($inputArray as $colId) { - $colId = trim($colId); - if (in_array($colId, $columnIds)) { - $validColumnIds[] = $colId; - } - } - - if (empty($validColumnIds)) { - $defaultColumns = $this->options->getDefaultColumns(); - $validColumnIds = explode(',', $defaultColumns); - } - - return $validColumnIds; - } } diff --git a/tests/UtilitiesTest.php b/tests/UtilitiesTest.php index 1f463df4..4e31ab88 100644 --- a/tests/UtilitiesTest.php +++ b/tests/UtilitiesTest.php @@ -39,11 +39,11 @@ public function testAddPostToCategory() $this->assertEquals($initialCategories, wp_get_post_categories($postId)); // Kategorie hinzufügen und prüfen, ob die Aktion erfolgreich war - $this->utilities->addPostToCategory($postId, $categoryIds[2]); + Utilities::addPostToCategory($postId, $categoryIds[2]); $this->assertEquals(array_slice($categoryIds, 0, 3), wp_get_post_categories($postId)); // Kategorie hinzufügen und prüfen, ob die Aktion erfolgreich war - $this->utilities->addPostToCategory($postId, $categoryIds[3]); + Utilities::addPostToCategory($postId, $categoryIds[3]); $this->assertEquals($categoryIds, wp_get_post_categories($postId)); } @@ -75,11 +75,11 @@ public function testRemovePostFromCategory() $this->assertEquals($categoryIds, wp_get_post_categories($postId)); // Kategorie entfernen und prüfen, ob die Aktion erfolgreich war - $this->utilities->removePostFromCategory($postId, $categoryIds[0]); + Utilities::removePostFromCategory($postId, $categoryIds[0]); $this->assertEquals(array_slice($categoryIds, 1), wp_get_post_categories($postId)); // Kategorie entfernen und prüfen, ob die Aktion erfolgreich war - $this->utilities->removePostFromCategory($postId, $categoryIds[3]); + Utilities::removePostFromCategory($postId, $categoryIds[3]); $this->assertEquals(array_slice($categoryIds, 1, 2), wp_get_post_categories($postId)); } } From 3b086e0eb90c2a7dca3fbac0ae1c82bfcb9b72ac Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 3 Jun 2018 12:37:08 +0200 Subject: [PATCH 096/126] Beschreibungen aktualisiert --- src/Settings/Pages/ReportList.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Settings/Pages/ReportList.php b/src/Settings/Pages/ReportList.php index 0073e33e..4a56919f 100644 --- a/src/Settings/Pages/ReportList.php +++ b/src/Settings/Pages/ReportList.php @@ -132,7 +132,7 @@ public function echoFieldAnnotations() echo '
    '; echo '

    Farbe für inaktive Vermerke:

    '; $this->echoColorPicker('einsatzvw_list_annotations_color_off', AnnotationIconBar::DEFAULT_COLOR_OFF); - echo '

    Diese Farbe wird für die Symbole von inaktiven Vermerken verwendet, die von aktiven werden in der Textfarbe Deines Themes dargestellt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; + echo '

    Diese Farbe wird für die Symbole von inaktiven Vermerken verwendet, die von aktiven werden in der Textfarbe Deines Themes dargestellt.

    '; echo '
    '; } @@ -147,7 +147,7 @@ public function echoFieldZebra() echo '

    Farbe für Zebrastreifen:

    '; $this->echoColorPicker('einsatzvw_list_zebracolor', ReportListSettings::DEFAULT_ZEBRACOLOR); - echo '

    Diese Farbe wird für jede zweite Zeile verwendet, die jeweils andere Zeile wird vom Theme eingefärbt. Anzugeben ist der Farbwert in Hexadezimalschreibweise (3- oder 6-stellig) mit führendem #-Zeichen.

    '; + echo '

    Diese Farbe wird für jede zweite Zeile verwendet, die jeweils andere Zeile behält die vom Theme vorgegebene Farbe.

    '; echo '

    '; } + public function echoFieldAnnotations() + { + echo '
    '; + echo '

    Farbe für inaktive Vermerke:

    '; + $this->echoColorPicker('einsatzvw_list_annotations_color_off', AnnotationIconBar::DEFAULT_COLOR_OFF); + echo '

    Diese Farbe wird für die Symbole von inaktiven Vermerken verwendet, die von aktiven werden in der Textfarbe Deines Themes dargestellt.

    '; + echo '
    '; + } + /** * Prüft, ob sich die Basis für die Links zu Einsatzberichten ändert und veranlasst gegebenenfalls ein Erneuern der * Permalinkstruktur @@ -241,5 +258,22 @@ public function registerSettings() 'einsatzvw_loop_only_special', array('Utilities', 'sanitizeCheckbox') ); + register_setting( + 'einsatzvw_settings_general', + 'einsatzvw_list_annotations_color_off', + array($this, 'sanitizeAnnotationOffColor') // NEEDS_WP4.6 das globale sanitize_hex_color() verwenden + ); + } + + /** + * Stellt sicher, dass die Farbe für die inaktiven Vermerke gültig ist + * + * @param string $input Der zu prüfende Farbwert + * + * @return string Der übergebene Farbwert, wenn er gültig ist, ansonsten die Standardeinstellung + */ + public function sanitizeAnnotationOffColor($input) + { + return Utilities::sanitizeHexColor($input, AnnotationIconBar::DEFAULT_COLOR_OFF); } } diff --git a/src/Settings/Pages/ReportList.php b/src/Settings/Pages/ReportList.php index 4a56919f..e9040f96 100644 --- a/src/Settings/Pages/ReportList.php +++ b/src/Settings/Pages/ReportList.php @@ -2,7 +2,6 @@ namespace abrain\Einsatzverwaltung\Settings\Pages; -use abrain\Einsatzverwaltung\Frontend\AnnotationIconBar; use abrain\Einsatzverwaltung\Frontend\ReportListSettings; use abrain\Einsatzverwaltung\Utilities; @@ -41,13 +40,6 @@ public function addSettingsFields() $this->settingsApiPage, 'einsatzvw_settings_einsatzliste' ); - add_settings_field( - 'einsatzvw_settings_listannotations', - 'Vermerke', - array($this, 'echoFieldAnnotations'), - $this->settingsApiPage, - 'einsatzvw_settings_einsatzliste' - ); add_settings_field( 'einsatzvw_settings_zebralist', 'Zebrastreifen', @@ -127,15 +119,6 @@ public function echoFieldColumnSettings() echo '
    '; } - public function echoFieldAnnotations() - { - echo '
    '; - echo '

    Farbe für inaktive Vermerke:

    '; - $this->echoColorPicker('einsatzvw_list_annotations_color_off', AnnotationIconBar::DEFAULT_COLOR_OFF); - echo '

    Diese Farbe wird für die Symbole von inaktiven Vermerken verwendet, die von aktiven werden in der Textfarbe Deines Themes dargestellt.

    '; - echo '
    '; - } - public function echoFieldZebra() { echo '
    '; @@ -179,11 +162,6 @@ public function registerSettings() 'einsatzvw_list_ext_link', array('Utilities', 'sanitizeCheckbox') ); - register_setting( - 'einsatzvw_settings_list', - 'einsatzvw_list_annotations_color_off', - array($this, 'sanitizeAnnotationOffColor') // NEEDS_WP4.6 das globale sanitize_hex_color() verwenden - ); register_setting( 'einsatzvw_settings_list', 'einsatzvw_list_zebra', @@ -212,16 +190,4 @@ public function sanitizeZebraColor($input) { return Utilities::sanitizeHexColor($input, ReportListSettings::DEFAULT_ZEBRACOLOR); } - - /** - * Stellt sicher, dass die Farbe für die inaktiven Vermerke gültig ist - * - * @param string $input Der zu prüfende Farbwert - * - * @return string Der übergebene Farbwert, wenn er gültig ist, ansonsten die Standardeinstellung - */ - public function sanitizeAnnotationOffColor($input) - { - return Utilities::sanitizeHexColor($input, AnnotationIconBar::DEFAULT_COLOR_OFF); - } } From e521f520b49a203f3fbb10fb7dd962c696bf9e12 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 3 Jun 2018 14:37:12 +0200 Subject: [PATCH 098/126] Whitespace korrigiert --- src/Export/Formats/Csv.php | 10 +++++----- src/Export/Formats/Json.php | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index 004890a8..c4a9129c 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -8,7 +8,7 @@ * Exportiert Einsatzberichte in eine CSV-Datei. * * Die escapeChar-Funktion wurde erst einmal auskommentiert, da diese PHP >=5.5.4 - * voraussetzt, das Plugin jedoch auch unter PHP <5.4 laufen soll. + * voraussetzt, das Plugin jedoch auch unter PHP <5.4 laufen soll. */ class Csv extends AbstractFormat { @@ -137,14 +137,14 @@ public function export() $report = new IncidentReport($post); $duration = Data::getDauer($report); - // $duration soll stets eine Zahl sein - if (empty($duration)) { + // $duration soll stets eine Zahl sein + if (empty($duration)) { $duration = 0; } $typeOfIncident = $report->getTypeOfIncident()->name; - // $typeOfIncident soll stets ein String sein - if (empty($typeOfIncident)) { + // $typeOfIncident soll stets ein String sein + if (empty($typeOfIncident)) { $typeOfIncident = ''; } diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index 6079e6ae..b4f30456 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -8,7 +8,7 @@ * Exportiert Einsatzberichte in eine JSON-Datei. * * Die prettyPrint-Funktion wurde erst einmal auskommentiert, da diese PHP >=5.4 - * voraussetzt, das Plugin jedoch auch unter PHP <5.4 laufen soll. + * voraussetzt, das Plugin jedoch auch unter PHP <5.4 laufen soll. */ class Json extends AbstractFormat { @@ -84,17 +84,17 @@ public function export() $report = new IncidentReport($post); - $duration = Data::getDauer($report); - // $duration soll stets eine Zahl sein - if (empty($duration)) { - $duration = 0; - } - - $typeOfIncident = $report->getTypeOfIncident()->name; - // $typeOfIncident soll stets ein String sein - if (empty($typeOfIncident)) { - $typeOfIncident = ''; - } + $duration = Data::getDauer($report); + // $duration soll stets eine Zahl sein + if (empty($duration)) { + $duration = 0; + } + + $typeOfIncident = $report->getTypeOfIncident()->name; + // $typeOfIncident soll stets ein String sein + if (empty($typeOfIncident)) { + $typeOfIncident = ''; + } $data = array( 'Einsatznummer' => $report->getSequentialNumber(), From b1f74f1bf77925cfab63916c71c74eabf6422a4c Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 3 Jun 2018 15:12:01 +0200 Subject: [PATCH 099/126] PHPDoc korrigiert --- src/Export/Tool.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index 3ab8a7b3..bcb5f764 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -16,7 +16,7 @@ class Tool const EVW_TOOL_EXPORT_SLUG = 'einsatzvw-tool-export'; /** - * @var Formats\Format + * @var Formats\Format[] */ private $formats = array(); From 2dbf077a7864e666137452eca95b33f15355afc4 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 3 Jun 2018 15:19:17 +0200 Subject: [PATCH 100/126] Fehler "Trying to get property of non-object" behoben --- src/Export/Formats/Csv.php | 9 ++------- src/Export/Formats/Json.php | 9 ++------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index c4a9129c..4da2824c 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -3,6 +3,7 @@ use abrain\Einsatzverwaltung\Model\IncidentReport; use abrain\Einsatzverwaltung\Data; +use abrain\Einsatzverwaltung\Util\Formatter; /** * Exportiert Einsatzberichte in eine CSV-Datei. @@ -142,12 +143,6 @@ public function export() $duration = 0; } - $typeOfIncident = $report->getTypeOfIncident()->name; - // $typeOfIncident soll stets ein String sein - if (empty($typeOfIncident)) { - $typeOfIncident = ''; - } - $data = array( $report->getSequentialNumber(), implode(',', array_map(function($e) { return $e->name; }, $report->getTypesOfAlerting())), @@ -155,7 +150,7 @@ public function export() $report->getTimeOfEnding(), $duration, $report->getLocation(), - $typeOfIncident, + Formatter::getTypeOfIncident($report, false, false, false), implode(',', array_map(function($e) { return $e->name; }, $report->getVehicles())), implode(',', array_map(function($e) { return $e->name; }, $report->getAdditionalForces())), $report->getWorkforce(), diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index b4f30456..5ab767d3 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -3,6 +3,7 @@ use abrain\Einsatzverwaltung\Model\IncidentReport; use abrain\Einsatzverwaltung\Data; +use abrain\Einsatzverwaltung\Util\Formatter; /** * Exportiert Einsatzberichte in eine JSON-Datei. @@ -89,12 +90,6 @@ public function export() if (empty($duration)) { $duration = 0; } - - $typeOfIncident = $report->getTypeOfIncident()->name; - // $typeOfIncident soll stets ein String sein - if (empty($typeOfIncident)) { - $typeOfIncident = ''; - } $data = array( 'Einsatznummer' => $report->getSequentialNumber(), @@ -103,7 +98,7 @@ public function export() 'Einsatzende' => $report->getTimeOfEnding(), 'Dauer (Minuten)' => $duration, 'Einsatzort' => $report->getLocation(), - 'Einsatzart' => $typeOfIncident, + 'Einsatzart' => Formatter::getTypeOfIncident($report, false, false, false), 'Fahrzeuge' => implode(',', array_map(function($e) { return $e->name; }, $report->getVehicles())), 'Externe Einsatzmittel' => implode(',', array_map(function($e) { return $e->name; }, $report->getAdditionalForces())), 'Mannschaftsstärke' => $report->getWorkforce(), From c41a92c872d2208746e8003ab473f0ea01ee1604 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 3 Jun 2018 15:33:09 +0200 Subject: [PATCH 101/126] Option "Spaltennamen in die erste Zeile setzen" wurde nicht richtig gesetzt --- src/Export/Formats/Excel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Export/Formats/Excel.php b/src/Export/Formats/Excel.php index 1b8d4081..adeb3281 100644 --- a/src/Export/Formats/Excel.php +++ b/src/Export/Formats/Excel.php @@ -38,6 +38,6 @@ public function setOptions(array $options) $this->delimiter = ';'; $this->enclosure = '"'; // $this->escapeChar = '\\'; - $this->header = (boolean)@$options['columns']; + $this->headers = (boolean)@$options['columns']; } } From 7c5a7ff153e22c0a558864415f6ed51a74034c85 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 3 Jun 2018 16:56:17 +0200 Subject: [PATCH 102/126] =?UTF-8?q?Zusammentragen=20der=20Werte=20in=20Kla?= =?UTF-8?q?sse=20AbstractFormat=20zentralisiert,=20um=20einheitliche=20Erg?= =?UTF-8?q?ebnisse=20unabh=C3=A4ngig=20vom=20Format=20zu=20garantieren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Formats/AbstractFormat.php | 69 +++++++++++++++++++++++++++ src/Export/Formats/Csv.php | 56 +++++----------------- src/Export/Formats/Json.php | 42 +++++----------- 3 files changed, 93 insertions(+), 74 deletions(-) diff --git a/src/Export/Formats/AbstractFormat.php b/src/Export/Formats/AbstractFormat.php index db1d8416..6bf1014c 100644 --- a/src/Export/Formats/AbstractFormat.php +++ b/src/Export/Formats/AbstractFormat.php @@ -1,6 +1,10 @@ getSequentialNumber(), + implode(',', array_map(function($e) { return $e->name; }, $report->getTypesOfAlerting())), + $report->getTimeOfAlerting()->format('Y-m-d H:i'), + $report->getTimeOfEnding(), + $duration, + $report->getLocation(), + Formatter::getTypeOfIncident($report, false, false, false), + implode(',', array_map(function($e) { return $e->name; }, $report->getVehicles())), + implode(',', array_map(function($e) { return $e->name; }, $report->getAdditionalForces())), + $report->getWorkforce(), + $report->getIncidentCommander(), + $post->post_title, + $post->post_content, + $this->getBooleanRepresentation($report->isSpecial()), + $this->getBooleanRepresentation($report->isFalseAlarm()), + ); + } + + /** + * @param bool $bool + * @return mixed + */ + abstract protected function getBooleanRepresentation($bool); } diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index 4da2824c..fda2ef51 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -1,10 +1,6 @@ headers) { - $data = array( - 'Einsatznummer', - 'Alarmierungsart', - 'Alarmzeit', - 'Einsatzende', - 'Dauer (Minuten)', - 'Einsatzort', - 'Einsatzart', - 'Fahrzeuge', - 'Externe Einsatzmittel', - 'Mannschaftsstärke', - 'Einsatzleiter', - 'Berichtstitel', - 'Berichtstext', - 'Besonderer Einsatz', - 'Fehlalarm' - ); + $data = $this->getColumnNames(); fputcsv($handle, $data, $this->delimiter, $this->enclosure/*, $this->escapeChar*/); } $query = $this->getQuery(); while ($query->have_posts()) { $post = $query->next_post(); - $report = new IncidentReport($post); - - $duration = Data::getDauer($report); - // $duration soll stets eine Zahl sein - if (empty($duration)) { - $duration = 0; - } - $data = array( - $report->getSequentialNumber(), - implode(',', array_map(function($e) { return $e->name; }, $report->getTypesOfAlerting())), - $report->getTimeOfAlerting()->format('Y-m-d H:i'), - $report->getTimeOfEnding(), - $duration, - $report->getLocation(), - Formatter::getTypeOfIncident($report, false, false, false), - implode(',', array_map(function($e) { return $e->name; }, $report->getVehicles())), - implode(',', array_map(function($e) { return $e->name; }, $report->getAdditionalForces())), - $report->getWorkforce(), - $report->getIncidentCommander(), - $post->post_title, - $post->post_content, - ($report->isSpecial() ? 'Ja' : 'Nein'), - ($report->isFalseAlarm() ? 'Ja' : 'Nein'), - ); + $data = $this->getValuesForReport($post); fputcsv($handle, $data, $this->delimiter, $this->enclosure/*, $this->escapeChar*/); } fclose($handle); } + + /** + * @param bool $bool + * @return mixed + */ + protected function getBooleanRepresentation($bool) + { + return ($bool === true ? 'Ja' : 'Nein'); + } } diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index 5ab767d3..c674a87c 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -1,10 +1,6 @@ getColumnNames(); + $query = $this->getQuery(); while ($query->have_posts()) { $post = $query->next_post(); - $report = new IncidentReport($post); - - $duration = Data::getDauer($report); - // $duration soll stets eine Zahl sein - if (empty($duration)) { - $duration = 0; - } - - $data = array( - 'Einsatznummer' => $report->getSequentialNumber(), - 'Alarmierungsart' => implode(',', array_map(function($e) { return $e->name; }, $report->getTypesOfAlerting())), - 'Alarmzeit' => $report->getTimeOfAlerting()->format('Y-m-d H:i'), - 'Einsatzende' => $report->getTimeOfEnding(), - 'Dauer (Minuten)' => $duration, - 'Einsatzort' => $report->getLocation(), - 'Einsatzart' => Formatter::getTypeOfIncident($report, false, false, false), - 'Fahrzeuge' => implode(',', array_map(function($e) { return $e->name; }, $report->getVehicles())), - 'Externe Einsatzmittel' => implode(',', array_map(function($e) { return $e->name; }, $report->getAdditionalForces())), - 'Mannschaftsstärke' => $report->getWorkforce(), - 'Einsatzleiter' => $report->getIncidentCommander(), - 'Berichtstitel' => $post->post_title, - 'Berichtstext' => $post->post_content, - 'Besonderer Einsatz' => $report->isSpecial(), - 'Fehlalarm' => $report->isFalseAlarm(), - ); + $values = $this->getValuesForReport($post); + $data = array_combine($keys, $values); $output = json_encode($data, $options); @@ -129,4 +104,13 @@ public function export() echo ']'; } + + /** + * @param bool $bool + * @return mixed + */ + protected function getBooleanRepresentation($bool) + { + return $bool; + } } From cac37ae1b69c5591f4179e55e4ec932af80da738 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 3 Jun 2018 17:10:55 +0200 Subject: [PATCH 103/126] Unbenutzte Imports entfernt --- src/Export/Tool.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Export/Tool.php b/src/Export/Tool.php index bcb5f764..e9200a08 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -1,9 +1,6 @@ Date: Sun, 3 Jun 2018 17:39:56 +0200 Subject: [PATCH 104/126] =?UTF-8?q?Alarmierungsarten,=20Fahrzeuge=20und=20?= =?UTF-8?q?externe=20Kr=C3=A4fte=20werden=20im=20JSON-Export=20jetzt=20als?= =?UTF-8?q?=20Array=20ausgegeben,=20im=20CSV=20weiterhin=20als=20kommasepa?= =?UTF-8?q?rierte=20Liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Formats/AbstractFormat.php | 23 +++++++++++++++++++---- src/Export/Formats/Csv.php | 9 +++++++++ src/Export/Formats/Json.php | 9 +++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/Export/Formats/AbstractFormat.php b/src/Export/Formats/AbstractFormat.php index 6bf1014c..081d16b6 100644 --- a/src/Export/Formats/AbstractFormat.php +++ b/src/Export/Formats/AbstractFormat.php @@ -69,7 +69,7 @@ protected function getColumnNames() { return array( 'Einsatznummer', - 'Alarmierungsart', + 'Alarmierungsarten', 'Alarmzeit', 'Einsatzende', 'Dauer (Minuten)', @@ -102,14 +102,14 @@ protected function getValuesForReport(\WP_Post $post) return array( $report->getSequentialNumber(), - implode(',', array_map(function($e) { return $e->name; }, $report->getTypesOfAlerting())), + $this->getArrayRepresentation(array_map(array($this, 'getName'), $report->getTypesOfAlerting())), $report->getTimeOfAlerting()->format('Y-m-d H:i'), $report->getTimeOfEnding(), $duration, $report->getLocation(), Formatter::getTypeOfIncident($report, false, false, false), - implode(',', array_map(function($e) { return $e->name; }, $report->getVehicles())), - implode(',', array_map(function($e) { return $e->name; }, $report->getAdditionalForces())), + $this->getArrayRepresentation(array_map(array($this, 'getName'), $report->getVehicles())), + $this->getArrayRepresentation(array_map(array($this, 'getName'), $report->getAdditionalForces())), $report->getWorkforce(), $report->getIncidentCommander(), $post->post_title, @@ -119,6 +119,21 @@ protected function getValuesForReport(\WP_Post $post) ); } + /** + * @param \WP_Term $object + * @return string + */ + private function getName($object) + { + return $object->name; + } + + /** + * @param array $array + * @return mixed + */ + abstract protected function getArrayRepresentation($array); + /** * @param bool $bool * @return mixed diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index fda2ef51..21bced8d 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -131,4 +131,13 @@ protected function getBooleanRepresentation($bool) { return ($bool === true ? 'Ja' : 'Nein'); } + + /** + * @param array $array + * @return mixed + */ + protected function getArrayRepresentation($array) + { + return join(',', $array); + } } diff --git a/src/Export/Formats/Json.php b/src/Export/Formats/Json.php index c674a87c..9946c10f 100644 --- a/src/Export/Formats/Json.php +++ b/src/Export/Formats/Json.php @@ -113,4 +113,13 @@ protected function getBooleanRepresentation($bool) { return $bool; } + + /** + * @param array $array + * @return mixed + */ + protected function getArrayRepresentation($array) + { + return $array; + } } From 67da545e001edbdceaf0eac173be06a1cc029347 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 3 Jun 2018 23:10:43 +0200 Subject: [PATCH 105/126] =?UTF-8?q?Getrennte=20Spalten=20f=C3=BCr=20Einsat?= =?UTF-8?q?znummer=20und=20laufende=20Nummer=20angelegt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Formats/AbstractFormat.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Export/Formats/AbstractFormat.php b/src/Export/Formats/AbstractFormat.php index 081d16b6..bdf27c4e 100644 --- a/src/Export/Formats/AbstractFormat.php +++ b/src/Export/Formats/AbstractFormat.php @@ -69,6 +69,7 @@ protected function getColumnNames() { return array( 'Einsatznummer', + 'Lfd.', 'Alarmierungsarten', 'Alarmzeit', 'Einsatzende', @@ -101,6 +102,7 @@ protected function getValuesForReport(\WP_Post $post) } return array( + $report->getNumber(), $report->getSequentialNumber(), $this->getArrayRepresentation(array_map(array($this, 'getName'), $report->getTypesOfAlerting())), $report->getTimeOfAlerting()->format('Y-m-d H:i'), From f88ad203e8e4230c2c844d2e22a313094d251678 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 4 Jun 2018 23:18:21 +0200 Subject: [PATCH 106/126] Inline-Script in eigene Datei ausgelagert, erste Option wird vorselektiert --- src/Export/Tool.php | 31 +++++++++++++++---------------- src/js/export.js | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 src/js/export.js diff --git a/src/Export/Tool.php b/src/Export/Tool.php index e9200a08..7d586a8d 100644 --- a/src/Export/Tool.php +++ b/src/Export/Tool.php @@ -1,6 +1,7 @@ scriptUrl . 'export.js', + array('jquery'), + Core::VERSION + ); + }); } /** @@ -121,21 +135,6 @@ public function renderToolPage()
    -

    Wähle, in welches Format du exportieren möchtest

    Wähle, in welches Format du exportieren möchtest @@ -147,7 +146,7 @@ public function renderToolPage() getTitle(); ?>

    -
      + diff --git a/src/js/export.js b/src/js/export.js new file mode 100644 index 00000000..03bd7abf --- /dev/null +++ b/src/js/export.js @@ -0,0 +1,20 @@ +jQuery(function($) { + let form = $('#export-form'), + options = form.find('.export-options'), + inputs = form.find('input[name="format"]'); + + inputs.change(function() { + let formatkey = $(this).val(); + options.each(function () { + let optionContainer = $(this); + if (optionContainer.attr('id') === formatkey + '-options') { + optionContainer.show(); + } else { + optionContainer.hide(); + } + }); + }); + + // Erste option auswählen + inputs.first().click(); +}); From 4af98e89dc49eec373c1ad5d2e1a9de3247967fa Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Tue, 5 Jun 2018 00:05:04 +0200 Subject: [PATCH 107/126] =?UTF-8?q?WP=5FWidget::form()=20sollte=20einen=20?= =?UTF-8?q?String=20zur=C3=BCckgeben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Widgets/RecentIncidents.php | 4 +++- src/Widgets/RecentIncidentsFormatted.php | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Widgets/RecentIncidents.php b/src/Widgets/RecentIncidents.php index 3beba5d9..fc27af03 100644 --- a/src/Widgets/RecentIncidents.php +++ b/src/Widgets/RecentIncidents.php @@ -192,7 +192,7 @@ public function update($newInstance, $oldInstance) * @see WP_Widget::form() * * @param array $instance Previously saved values from database. - * @return string|void + * @return string */ public function form($instance) { @@ -279,5 +279,7 @@ public function form($instance) checked($showAnnotations, '1', false), 'Vermerke anzeigen' ); + + return ''; } } diff --git a/src/Widgets/RecentIncidentsFormatted.php b/src/Widgets/RecentIncidentsFormatted.php index 979d1af9..bf660cde 100644 --- a/src/Widgets/RecentIncidentsFormatted.php +++ b/src/Widgets/RecentIncidentsFormatted.php @@ -283,5 +283,7 @@ public function form($instance) echo '
      ' . $tag . ' (' . $formatterTags[$tag] . ')'; } echo '

      '; + + return ''; } } From b165c91c8d9ef13748bec51a9ae0575a671edfe3 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 10 Jun 2018 15:43:39 +0200 Subject: [PATCH 108/126] =?UTF-8?q?Statischen=20Text=20der=20'=C3=9Cber'-S?= =?UTF-8?q?eite=20in=20entsprechende=20Unterklasse=20verschoben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Settings/MainPage.php | 105 ++++++++++++++------------------- src/Settings/Pages/About.php | 45 +++++++++++++- src/Settings/Pages/SubPage.php | 20 +++++++ 3 files changed, 105 insertions(+), 65 deletions(-) diff --git a/src/Settings/MainPage.php b/src/Settings/MainPage.php index 1775d851..f40e44ee 100644 --- a/src/Settings/MainPage.php +++ b/src/Settings/MainPage.php @@ -43,12 +43,21 @@ public function __construct(Options $options) require_once dirname(__FILE__) . '/Pages/About.php'; SubPage::$options = $options; - $this->subPages[] = new General(); - $this->subPages[] = new Numbers(); - $this->subPages[] = new Report(); - $this->subPages[] = new ReportList(); - $this->subPages[] = new Capabilities(); - $this->subPages[] = new About(); + $this->addSubPage(new General()); + $this->addSubPage(new Numbers()); + $this->addSubPage(new Report()); + $this->addSubPage(new ReportList()); + $this->addSubPage(new Capabilities()); + $this->addSubPage(new About()); + } + + /** + * Fügt der Einstellungsseite eine Unterseite hinzu + * @param SubPage $subPage + */ + private function addSubPage(SubPage $subPage) + { + $this->subPages[$subPage->identifier] = $subPage; } /** @@ -88,89 +97,61 @@ public function echoSettingsPage() echo '

      ' . $message . '

      '; } - $flags = FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH; - $currentTab = filter_input(INPUT_GET, 'tab', FILTER_SANITIZE_STRING, $flags); - - if (empty($currentTab) || !$this->subPageExists($currentTab)) { - $currentTab = $this->subPages[0]->identifier; + $currentSubPage = $this->getCurrentSubPage(); + if (empty($currentSubPage)) { + return; } echo "

      "; foreach ($this->subPages as $subPage) { - $class = $currentTab === $subPage->identifier ? "nav-tab nav-tab-active" : "nav-tab"; printf( '%s', self::EVW_SETTINGS_SLUG, $subPage->identifier, - $class, + $currentSubPage === $subPage ? "nav-tab nav-tab-active" : "nav-tab", $subPage->title ); } echo "

      "; - if ('about' === $currentTab) { - ?> - - -

      Support

      -

      Solltest Du ein Problem bei der Benutzung des Plugins haben, schaue bitte erst auf GitHub und im Forum auf wordpress.org nach, ob andere das Problem auch haben bzw. hatten. Wenn es noch keinen passenden Eintrag gibt, lege bitte einen entsprechenden Issue bzw. Thread an. Du kannst aber auch einfach eine E-Mail schreiben.

      -

      Gib bitte immer die folgenden Versionen mit an:  - -

      - -

      Social Media

      - -

      Du kannst die Neuigkeiten auch mit deinem Feedreader abonnieren: RSS / Atom

      - echoStaticContent(); // Einstellungen ausgeben - echo '
      '; - settings_fields('einsatzvw_settings_' . $currentTab); - do_settings_sections(self::EVW_SETTINGS_SLUG . '-' . $currentTab); - submit_button(); - echo '
      '; + if ($currentSubPage->hasForm()) { + echo '
      '; + settings_fields('einsatzvw_settings_' . $currentSubPage->identifier); + do_settings_sections(self::EVW_SETTINGS_SLUG . '-' . $currentSubPage->identifier); + submit_button(); + echo '
      '; + } } /** - * Macht Einstellungen im System bekannt und regelt die Zugehörigkeit zu Abschnitten auf Einstellungsseiten + * @return SubPage */ - public function registerSettings() + private function getCurrentSubPage() { - // NEEDS_WP4.7 Standardwerte in register_setting() mitgeben - foreach ($this->subPages as $subPage) { - $subPage->addSettingsSections(); - $subPage->addSettingsFields(); - $subPage->registerSettings(); + $flags = FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH; + $tab = filter_input(INPUT_GET, 'tab', FILTER_SANITIZE_STRING, $flags); + + if (empty($tab) || !array_key_exists($tab, $this->subPages)) { + $subPageObjects = array_values($this->subPages); + return $subPageObjects[0]; } + + return $this->subPages[$tab]; } /** - * @param string $slug - * @return bool + * Macht Einstellungen im System bekannt und regelt die Zugehörigkeit zu Abschnitten auf Einstellungsseiten */ - private function subPageExists($slug) + public function registerSettings() { - if (empty($slug)) { - return false; - } - + // NEEDS_WP4.7 Standardwerte in register_setting() mitgeben foreach ($this->subPages as $subPage) { - if ($subPage->identifier === $slug) { - return true; - } + $subPage->addSettingsSections(); + $subPage->addSettingsFields(); + $subPage->registerSettings(); } - - return false; } } diff --git a/src/Settings/Pages/About.php b/src/Settings/Pages/About.php index fbadc55e..b3f541fc 100644 --- a/src/Settings/Pages/About.php +++ b/src/Settings/Pages/About.php @@ -2,6 +2,8 @@ namespace abrain\Einsatzverwaltung\Settings\Pages; +use abrain\Einsatzverwaltung\Core; + /** * About page * @@ -16,16 +18,53 @@ public function __construct() public function addSettingsFields() { - // TODO: Implement addSettingsFields() method. + return; } public function addSettingsSections() { - // TODO: Implement addSettingsSections() method. + return; + } + + /** + * @inheritDoc + */ + public function echoStaticContent() + { + ?> + + +

      Support

      +

      Solltest Du ein Problem bei der Benutzung des Plugins haben, schaue bitte erst auf GitHub und im Forum auf wordpress.org nach, ob andere das Problem auch haben bzw. hatten. Wenn es noch keinen passenden Eintrag gibt, lege bitte einen entsprechenden Issue bzw. Thread an. Du kannst aber auch einfach eine E-Mail schreiben.

      +

      Gib bitte immer die folgenden Versionen mit an:  + +

      + +

      Social Media

      + +

      Du kannst die Neuigkeiten auch mit deinem Feedreader abonnieren: RSS / Atom

      + Date: Sun, 10 Jun 2018 17:29:54 +0200 Subject: [PATCH 109/126] =?UTF-8?q?=C3=84nderungen=20am=20Format=20der=20E?= =?UTF-8?q?insatznummer=20ggf.=20automatisch=20anwenden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Settings/Pages/Numbers.php | 5 ++--- src/einsatzverwaltung-data.php | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/Settings/Pages/Numbers.php b/src/Settings/Pages/Numbers.php index 1462b5a6..a5bb22bb 100644 --- a/src/Settings/Pages/Numbers.php +++ b/src/Settings/Pages/Numbers.php @@ -64,9 +64,8 @@ public function echoFieldFormat() ); echo '

      Beispiel für den fünften Einsatz in 2014:
      bei 2 Stellen: 201405
      bei 4 Stellen: 20140005


      '; $this->echoSettingsCheckbox('einsatzvw_einsatznummer_lfdvorne', 'Laufende Nummer vor das Jahr stellen'); - - // FIXME das ist so nicht richtig - echo '

      Hinweis: Nach einer Änderung des Formats erhalten die bestehenden Einsatzberichte automatisch aktualisierte Nummern.

      '; + + echo '

      Hinweis: Nach einer Änderung des Formats erhalten die bestehenden Einsatzberichte nur dann automatisch aktualisierte Nummern, wenn die Option Einsatznummern automatisch verwalten aktiviert ist.

      '; echo '
    '; } diff --git a/src/einsatzverwaltung-data.php b/src/einsatzverwaltung-data.php index 0e3e9292..7c3dd3a3 100644 --- a/src/einsatzverwaltung-data.php +++ b/src/einsatzverwaltung-data.php @@ -60,6 +60,7 @@ private function addHooks() add_action('added_post_meta', array($this, 'adjustIncidentNumber'), 10, 4); } add_action('updated_option', array($this, 'maybeAutoIncidentNumbersChanged'), 10, 3); + add_action('updated_option', array($this, 'maybeIncidentNumberFormatChanged'), 10, 3); } /** @@ -449,4 +450,32 @@ public function maybeAutoIncidentNumbersChanged($option, $oldValue, $newValue) $this->updateAllIncidentNumbers(); } } + + /** + * Prüft, ob sich das Format der Einsatznummern geändert hat, und deshalb alle Einsatznummern aktualisiert werden + * müssen + * + * @param string $option Name der Option + * @param string $oldValue Der alte Wert + * @param string $newValue Der neue Wert + */ + public function maybeIncidentNumberFormatChanged($option, $oldValue, $newValue) + { + // Wir sind nur an bestimmten Optionen interessiert + if (!in_array($option, array('einsatzvw_einsatznummer_stellen', 'einsatzvw_einsatznummer_lfdvorne'))) { + return; + } + + // Nur Änderungen sind interessant + if ($newValue == $oldValue) { + return; + } + + // Nur neu formatieren, wenn die Einsatznummern automatisch verwaltet werden + if (get_option('einsatzverwaltung_incidentnumbers_auto') !== '1') { + return; + } + + $this->updateAllIncidentNumbers(); + } } From 066579085efeccf3d39979cd06ec7d89370b7fa1 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 10 Jun 2018 21:09:44 +0200 Subject: [PATCH 110/126] Beim Import auch 'ja' als Wahrheitswert zulassen --- src/Import/Helper.php | 21 ++++++++++++++++++--- src/Import/Tool.php | 2 +- tests/Import/HelperTest.php | 11 +++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/Import/Helper.php b/src/Import/Helper.php index 41805b5d..cec4f5e9 100644 --- a/src/Import/Helper.php +++ b/src/Import/Helper.php @@ -289,12 +289,27 @@ public function prepareArgsForInsertPost(&$insertArgs, $dateTimeFormat, $postSta $insertArgs['post_title'] = 'Einsatz'; } - // Berichte müssen explizit als 'nicht besonders' markiert werden - if (!array_key_exists('einsatz_special', $insertArgs['meta_input'])) { - $insertArgs['meta_input']['einsatz_special'] = '0'; + // sicherstellen, dass boolsche Werte als 0 oder 1 dargestellt werden + $boolAnnotations = array('einsatz_special', 'einsatz_fehlalarm', 'einsatz_hasimages'); + foreach ($boolAnnotations as $metaKey) { + $insertArgs['meta_input'][$metaKey] = $this->sanitizeBooleanValues(@$insertArgs['meta_input'][$metaKey]); } } + /** + * Stellt sicher, dass boolsche Werte durch 0 und 1 dargestellt werden + * @param string $value + * @return string + */ + public function sanitizeBooleanValues($value) + { + if (empty($value)) { + return '0'; + } + + return (in_array(strtolower($value), array('1', 'ja')) ? '1' : '0'); + } + /** * @param AbstractSource $source * @param array $mapping diff --git a/src/Import/Tool.php b/src/Import/Tool.php index 24ecc92b..808941ff 100644 --- a/src/Import/Tool.php +++ b/src/Import/Tool.php @@ -366,6 +366,6 @@ private function printDataNotice() if ('evw_csv' == $this->currentSource->getIdentifier()) { echo '

    Die Felder Alarmzeit und Einsatzende erwarten eine Datums- und Zeitangabe, das Format kann bei der Zuordnung der Felder angegeben werden.

    '; } - echo '

    Die Felder Besonderer Einsatz und Fehlalarm erwarten den Wert 1 (= ja) oder 0 (= nein). Sie dürfen auch leer bleiben, was als 0 (= nein) zählt.

    '; + echo '

    Die Felder Besonderer Einsatz und Fehlalarm erwarten Ja/Nein-Werte. Als Ja interpretiert werden 1 und Ja (Groß- und Kleinschreibung unerheblich), alle anderen Werte einschließlich eines leeren Feldes zählen als Nein.

    '; } } diff --git a/tests/Import/HelperTest.php b/tests/Import/HelperTest.php index 8a58d16d..f9336442 100644 --- a/tests/Import/HelperTest.php +++ b/tests/Import/HelperTest.php @@ -276,4 +276,15 @@ public function testDefaults() $this->assertArrayHasKey('einsatz_special', $insertArgs['meta_input']); $this->assertEquals('0', $insertArgs['meta_input']['einsatz_special']); } + + public function testSanitizeBooleanValues() + { + $this->assertEquals('1', self::$helper->sanitizeBooleanValues('1')); + $this->assertEquals('1', self::$helper->sanitizeBooleanValues('ja')); + $this->assertEquals('1', self::$helper->sanitizeBooleanValues('Ja')); + $this->assertEquals('0', self::$helper->sanitizeBooleanValues('')); + $this->assertEquals('0', self::$helper->sanitizeBooleanValues('0')); + $this->assertEquals('0', self::$helper->sanitizeBooleanValues('invalid')); + $this->assertEquals('0', self::$helper->sanitizeBooleanValues('Nein')); + } } From 4f00b477131ca0af6c342eb47dd03cd41bbc66c3 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 10 Jun 2018 22:02:37 +0200 Subject: [PATCH 111/126] =?UTF-8?q?Anderen=20Termmeta-Key=20f=C3=BCr=20Far?= =?UTF-8?q?be=20einer=20Einsatzart=20gew=C3=A4hlt,=20um=20Konflikt=20mit?= =?UTF-8?q?=20bestehender=20CSS-Klasse=20zu=20umgehen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Util/Formatter.php | 4 ++-- src/einsatzverwaltung-core.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index b2d9a0f3..83be4219 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -161,10 +161,10 @@ public function getColorOfTypeOfIncident($typeOfIncident) return 'inherit'; } - $color = get_term_meta($typeOfIncident->term_id, 'color', true); + $color = get_term_meta($typeOfIncident->term_id, 'typecolor', true); while (empty($color) && $typeOfIncident->parent !== 0) { $typeOfIncident = WP_Term::get_instance($typeOfIncident->parent); - $color = get_term_meta($typeOfIncident->term_id, 'color', true); + $color = get_term_meta($typeOfIncident->term_id, 'typecolor', true); } if (empty($color)) { diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 46cbbbd2..3fe899f3 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -498,7 +498,7 @@ private function registerTypes() 'URL zu mehr Informationen über ein externes Einsatzmittel, beispielsweise dessen Webseite.' )); $taxonomyCustomFields->addColorpicker('einsatzart', new ColorPicker( - 'color', + 'typecolor', 'Farbe', 'Beschreibung' // TODO )); From bd4f31dacb32bfc0a565c7613eef832bf19cd31c Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 10 Jun 2018 22:08:47 +0200 Subject: [PATCH 112/126] =?UTF-8?q?Beschreibung=20f=C3=BCr=20Farbe=20von?= =?UTF-8?q?=20Einsatzarten=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-core.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 3fe899f3..5866a9d4 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -500,7 +500,7 @@ private function registerTypes() $taxonomyCustomFields->addColorpicker('einsatzart', new ColorPicker( 'typecolor', 'Farbe', - 'Beschreibung' // TODO + 'Ordne dieser Einsatzart eine Farbe zu. Einsatzarten ohne Farbe erben diese gegebenenfalls von übergeordneten Einsatzarten.' )); $taxonomyCustomFields->addPostSelector('fahrzeug', new PostSelector( 'fahrzeugpid', From 15f88b1c1bcb11ba10dbddb833145892d57d9fec Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Mon, 11 Jun 2018 22:40:14 +0200 Subject: [PATCH 113/126] =?UTF-8?q?Widgets=20als=20Instanz=20=C3=BCbergebe?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Widgets/RecentIncidents.php | 80 +++++++++---------- src/Widgets/RecentIncidentsFormatted.php | 38 ++++----- src/einsatzverwaltung-core.php | 19 ++--- .../Widgets/RecentIncidentsFormattedTest.php | 4 +- 4 files changed, 66 insertions(+), 75 deletions(-) diff --git a/src/Widgets/RecentIncidents.php b/src/Widgets/RecentIncidents.php index fc27af03..3d50fd20 100644 --- a/src/Widgets/RecentIncidents.php +++ b/src/Widgets/RecentIncidents.php @@ -18,22 +18,25 @@ class RecentIncidents extends WP_Widget /** * @var Formatter */ - private static $formatter; + private $formatter; /** * @var Options */ - private static $options; + private $options; /** * @var Utilities */ - private static $utilities; + private $utilities; /** * Register widget with WordPress. + * @param Options $options + * @param Utilities $utilities + * @param Formatter $formatter */ - public function __construct() + public function __construct(Options $options, Utilities $utilities, Formatter $formatter) { parent::__construct( 'einsatzverwaltung_widget', // Base ID @@ -43,18 +46,9 @@ public function __construct() 'customize_selective_refresh' => true, ) // Args ); - } - - /** - * @param Options $options - * @param Utilities $utilities - * @param Formatter $formatter - */ - public static function setDependencies($options, $utilities, $formatter) - { - self::$formatter = $formatter; - self::$options = $options; - self::$utilities = $utilities; + $this->options = $options; + $this->utilities = $utilities; + $this->formatter = $formatter; } /** @@ -70,14 +64,14 @@ public function widget($args, $instance) $title = apply_filters('widget_title', $instance['title']); // TODO mit wp_parse_args() vereinfachen - $anzahl = self::$utilities->getArrayValueIfKey($instance, 'anzahl', 3); - $zeigeDatum = self::$utilities->getArrayValueIfKey($instance, 'zeigeDatum', false); - $zeigeZeit = self::$utilities->getArrayValueIfKey($instance, 'zeigeZeit', false); - $zeigeFeedlink = self::$utilities->getArrayValueIfKey($instance, 'zeigeFeedlink', false); - $zeigeOrt = self::$utilities->getArrayValueIfKey($instance, 'zeigeOrt', false); - $zeigeArt = self::$utilities->getArrayValueIfKey($instance, 'zeigeArt', false); - $zeigeArtHierarchie = self::$utilities->getArrayValueIfKey($instance, 'zeigeArtHierarchie', false); - $showAnnotations = self::$utilities->getArrayValueIfKey($instance, 'showAnnotations', false); + $anzahl = $this->utilities->getArrayValueIfKey($instance, 'anzahl', 3); + $zeigeDatum = $this->utilities->getArrayValueIfKey($instance, 'zeigeDatum', false); + $zeigeZeit = $this->utilities->getArrayValueIfKey($instance, 'zeigeZeit', false); + $zeigeFeedlink = $this->utilities->getArrayValueIfKey($instance, 'zeigeFeedlink', false); + $zeigeOrt = $this->utilities->getArrayValueIfKey($instance, 'zeigeOrt', false); + $zeigeArt = $this->utilities->getArrayValueIfKey($instance, 'zeigeArt', false); + $zeigeArtHierarchie = $this->utilities->getArrayValueIfKey($instance, 'zeigeArtHierarchie', false); + $showAnnotations = $this->utilities->getArrayValueIfKey($instance, 'showAnnotations', false); if (empty($title)) { $title = "Letzte Einsätze"; @@ -113,16 +107,16 @@ public function widget($args, $instance) if ($zeigeDatum) { $timestamp = strtotime($post->post_date); - $datumsformat = self::$options->getDateFormat(); + $datumsformat = $this->options->getDateFormat(); $letzteEinsaetze .= "
    ".date_i18n($datumsformat, $timestamp).""; if ($zeigeZeit) { - $zeitformat = self::$options->getTimeFormat(); + $zeitformat = $this->options->getTimeFormat(); $letzteEinsaetze .= " | ".date_i18n($zeitformat, $timestamp)." Uhr"; } } if ($zeigeArt) { - $typeOfIncident = self::$formatter->getTypeOfIncident($report, false, false, $zeigeArtHierarchie); + $typeOfIncident = $this->formatter->getTypeOfIncident($report, false, false, $zeigeArtHierarchie); if (!empty($typeOfIncident)) { $letzteEinsaetze .= sprintf('
    %s', $typeOfIncident); } @@ -175,13 +169,13 @@ public function update($newInstance, $oldInstance) $instance['anzahl'] = $newInstance['anzahl']; } - $instance['zeigeDatum'] = self::$utilities->getArrayValueIfKey($newInstance, 'zeigeDatum', false); - $instance['zeigeZeit'] = self::$utilities->getArrayValueIfKey($newInstance, 'zeigeZeit', false); - $instance['zeigeOrt'] = self::$utilities->getArrayValueIfKey($newInstance, 'zeigeOrt', false); - $instance['zeigeArt'] = self::$utilities->getArrayValueIfKey($newInstance, 'zeigeArt', false); - $instance['zeigeArtHierarchie'] = self::$utilities->getArrayValueIfKey($newInstance, 'zeigeArtHierarchie', false); - $instance['zeigeFeedlink'] = self::$utilities->getArrayValueIfKey($newInstance, 'zeigeFeedlink', false); - $instance['showAnnotations'] = '1' === self::$utilities->getArrayValueIfKey($newInstance, 'showAnnotations', false); + $instance['zeigeDatum'] = $this->utilities->getArrayValueIfKey($newInstance, 'zeigeDatum', false); + $instance['zeigeZeit'] = $this->utilities->getArrayValueIfKey($newInstance, 'zeigeZeit', false); + $instance['zeigeOrt'] = $this->utilities->getArrayValueIfKey($newInstance, 'zeigeOrt', false); + $instance['zeigeArt'] = $this->utilities->getArrayValueIfKey($newInstance, 'zeigeArt', false); + $instance['zeigeArtHierarchie'] = $this->utilities->getArrayValueIfKey($newInstance, 'zeigeArtHierarchie', false); + $instance['zeigeFeedlink'] = $this->utilities->getArrayValueIfKey($newInstance, 'zeigeFeedlink', false); + $instance['showAnnotations'] = '1' === $this->utilities->getArrayValueIfKey($newInstance, 'showAnnotations', false); return $instance; } @@ -196,15 +190,15 @@ public function update($newInstance, $oldInstance) */ public function form($instance) { - $title = self::$utilities->getArrayValueIfKey($instance, 'title', 'Letzte Einsätze'); - $anzahl = self::$utilities->getArrayValueIfKey($instance, 'anzahl', 3); - $zeigeDatum = self::$utilities->getArrayValueIfKey($instance, 'zeigeDatum', false); - $zeigeZeit = self::$utilities->getArrayValueIfKey($instance, 'zeigeZeit', false); - $zeigeFeedlink = self::$utilities->getArrayValueIfKey($instance, 'zeigeFeedlink', false); - $zeigeOrt = self::$utilities->getArrayValueIfKey($instance, 'zeigeOrt', false); - $zeigeArt = self::$utilities->getArrayValueIfKey($instance, 'zeigeArt', false); - $zeigeArtHierarchie = self::$utilities->getArrayValueIfKey($instance, 'zeigeArtHierarchie', false); - $showAnnotations = self::$utilities->getArrayValueIfKey($instance, 'showAnnotations', false); + $title = $this->utilities->getArrayValueIfKey($instance, 'title', 'Letzte Einsätze'); + $anzahl = $this->utilities->getArrayValueIfKey($instance, 'anzahl', 3); + $zeigeDatum = $this->utilities->getArrayValueIfKey($instance, 'zeigeDatum', false); + $zeigeZeit = $this->utilities->getArrayValueIfKey($instance, 'zeigeZeit', false); + $zeigeFeedlink = $this->utilities->getArrayValueIfKey($instance, 'zeigeFeedlink', false); + $zeigeOrt = $this->utilities->getArrayValueIfKey($instance, 'zeigeOrt', false); + $zeigeArt = $this->utilities->getArrayValueIfKey($instance, 'zeigeArt', false); + $zeigeArtHierarchie = $this->utilities->getArrayValueIfKey($instance, 'zeigeArtHierarchie', false); + $showAnnotations = $this->utilities->getArrayValueIfKey($instance, 'showAnnotations', false); printf( '

    ', diff --git a/src/Widgets/RecentIncidentsFormatted.php b/src/Widgets/RecentIncidentsFormatted.php index bf660cde..09e2cae1 100644 --- a/src/Widgets/RecentIncidentsFormatted.php +++ b/src/Widgets/RecentIncidentsFormatted.php @@ -15,12 +15,12 @@ class RecentIncidentsFormatted extends WP_Widget /** * @var Formatter */ - private static $formatter; + private $formatter; /** * @var Utilities */ - private static $utilities; + private $utilities; private $allowedHtmlTags = array( 'a' => array( @@ -131,8 +131,10 @@ class RecentIncidentsFormatted extends WP_Widget /** * Konstruktor, generiert und registriert das Widget + * @param Formatter $formatter + * @param Utilities $utilities */ - public function __construct() + public function __construct(Formatter $formatter, Utilities $utilities) { parent::__construct( 'recent-incidents-formatted', @@ -143,16 +145,8 @@ public function __construct() 'customize_selective_refresh' => true, ) ); - } - - /** - * @param Formatter $formatter - * @param Utilities $utilities - */ - public static function setDependencies($formatter, $utilities) - { - self::$formatter = $formatter; - self::$utilities = $utilities; + $this->formatter = $formatter; + $this->utilities = $utilities; } /** @@ -184,9 +178,9 @@ public function widget($args, $instance) $widgetContent = $settings['beforeContent']; foreach ($incidents as $incident) { - $widgetContent .= self::$formatter->formatIncidentData($settings['pattern'], $this->allowedTagsPattern, $incident, 'widget'); + $widgetContent .= $this->formatter->formatIncidentData($settings['pattern'], $this->allowedTagsPattern, $incident, 'widget'); } - $widgetContent .= self::$formatter->formatIncidentData($settings['afterContent'], $this->allowedTagsAfter, null, 'widget'); + $widgetContent .= $this->formatter->formatIncidentData($settings['afterContent'], $this->allowedTagsAfter, null, 'widget'); echo wp_kses($widgetContent, $this->allowedHtmlTags); echo $args['after_widget']; @@ -204,7 +198,7 @@ public function update($newInstance, $oldInstance) { $instance = array(); $instance['title'] = strip_tags($newInstance['title']); - $instance['numIncidents'] = self::$utilities->sanitizeNumberGreaterZero( + $instance['numIncidents'] = $this->utilities->sanitizeNumberGreaterZero( $newInstance['numIncidents'], $this->defaults['numIncidents'] ); @@ -230,11 +224,11 @@ public function form($instance) $this->get_field_id('title'), 'Titel:', $this->get_field_name('title'), - esc_attr(self::$utilities->getArrayValueIfKey($instance, 'title', '')) + esc_attr($this->utilities->getArrayValueIfKey($instance, 'title', '')) ); echo '

    '; - $numIncidents = self::$utilities->getArrayValueIfKey($instance, 'numIncidents', $this->defaults['numIncidents']); + $numIncidents = $this->utilities->getArrayValueIfKey($instance, 'numIncidents', $this->defaults['numIncidents']); echo '

    '; printf( ' ', @@ -251,7 +245,7 @@ public function form($instance) $this->get_field_id('beforeContent'), 'HTML-Code vor den Einsatzberichten:', $this->get_field_name('beforeContent'), - self::$utilities->getArrayValueIfKey($instance, 'beforeContent', '') + $this->utilities->getArrayValueIfKey($instance, 'beforeContent', '') ); echo '

    '; @@ -261,10 +255,10 @@ public function form($instance) $this->get_field_id('pattern'), 'HTML-Template pro Einsatzbericht:', $this->get_field_name('pattern'), - self::$utilities->getArrayValueIfKey($instance, 'pattern', '') + $this->utilities->getArrayValueIfKey($instance, 'pattern', '') ); echo '

    ' . 'Folgende Tags werden ersetzt:'; - $formatterTags = self::$formatter->getTags(); + $formatterTags = $this->formatter->getTags(); foreach ($this->allowedTagsPattern as $tag) { echo '
    ' . $tag . ' (' . $formatterTags[$tag] . ')'; } @@ -276,7 +270,7 @@ public function form($instance) $this->get_field_id('afterContent'), 'HTML-Code nach den Einsatzberichten:', $this->get_field_name('afterContent'), - self::$utilities->getArrayValueIfKey($instance, 'afterContent', '') + $this->utilities->getArrayValueIfKey($instance, 'afterContent', '') ); echo '

    ' . 'Folgende Tags werden ersetzt:'; foreach ($this->allowedTagsAfter as $tag) { diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 5866a9d4..52b50eda 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -286,6 +286,11 @@ class Core */ public $utilities; + /** + * @var Formatter + */ + public $formatter; + /** * Constructor */ @@ -302,23 +307,19 @@ private function __construct() $this->options = new Options($this->utilities); $this->utilities->setDependencies($this->options); // FIXME Yay, zirkuläre Abhängigkeiten! - $formatter = new Formatter($this->options, $this->utilities, $this); // TODO In Singleton umwandeln + $this->formatter = new Formatter($this->options, $this->utilities, $this); // TODO In Singleton umwandeln $this->admin = new Admin($this, $this->options, $this->utilities); $this->data = new Data($this, $this->utilities, $this->options); - $this->frontend = new Frontend($this, $this->options, $this->utilities, $formatter); + $this->frontend = new Frontend($this, $this->options, $this->utilities, $this->formatter); $this->registerSettings(); - $this->shortcodes = new Shortcodes($this->utilities, $this, $this->options, $formatter); + $this->shortcodes = new Shortcodes($this->utilities, $this, $this->options, $this->formatter); // Tools $this->importTool = new ImportTool($this->utilities, $this->options, $this->data); $this->exportTool = new ExportTool(); $this->tasksPage = new TasksPage($this->utilities, $this->data); - // Widgets - RecentIncidents::setDependencies($this->options, $this->utilities, $formatter); - RecentIncidentsFormatted::setDependencies($formatter, $this->utilities); - $this->addHooks(); } @@ -555,8 +556,8 @@ public function einsatznummerMetaQuery($query) public function registerWidgets() { // NEEDS_WP4.6 Instanziierte Widgets übergeben - register_widget('abrain\Einsatzverwaltung\Widgets\RecentIncidents'); - register_widget('abrain\Einsatzverwaltung\Widgets\RecentIncidentsFormatted'); + register_widget(new RecentIncidents($this->options, $this->utilities, $this->formatter)); + register_widget(new RecentIncidentsFormatted($this->formatter, $this->utilities)); } /** diff --git a/tests/Widgets/RecentIncidentsFormattedTest.php b/tests/Widgets/RecentIncidentsFormattedTest.php index 73eea5b1..5e1cb4e5 100644 --- a/tests/Widgets/RecentIncidentsFormattedTest.php +++ b/tests/Widgets/RecentIncidentsFormattedTest.php @@ -1,6 +1,7 @@ formatter, $core->utilities); $new = array( 'title' => '', 'numIncidents' => '', From f32a7495e22f04d919e1a3435d7cf17f843511f5 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Wed, 13 Jun 2018 20:41:24 +0200 Subject: [PATCH 114/126] =?UTF-8?q?Ausgabe=20des=20klassischen=20Widgets?= =?UTF-8?q?=20aufger=C3=A4umt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Widgets/RecentIncidents.php | 154 ++++++++++++++++++-------------- 1 file changed, 88 insertions(+), 66 deletions(-) diff --git a/src/Widgets/RecentIncidents.php b/src/Widgets/RecentIncidents.php index 3d50fd20..ca3ef671 100644 --- a/src/Widgets/RecentIncidents.php +++ b/src/Widgets/RecentIncidents.php @@ -6,6 +6,7 @@ use abrain\Einsatzverwaltung\Options; use abrain\Einsatzverwaltung\Util\Formatter; use abrain\Einsatzverwaltung\Utilities; +use WP_Post; use WP_Widget; /** @@ -61,90 +62,111 @@ public function __construct(Options $options, Utilities $utilities, Formatter $f */ public function widget($args, $instance) { - $title = apply_filters('widget_title', $instance['title']); - - // TODO mit wp_parse_args() vereinfachen - $anzahl = $this->utilities->getArrayValueIfKey($instance, 'anzahl', 3); - $zeigeDatum = $this->utilities->getArrayValueIfKey($instance, 'zeigeDatum', false); - $zeigeZeit = $this->utilities->getArrayValueIfKey($instance, 'zeigeZeit', false); - $zeigeFeedlink = $this->utilities->getArrayValueIfKey($instance, 'zeigeFeedlink', false); - $zeigeOrt = $this->utilities->getArrayValueIfKey($instance, 'zeigeOrt', false); - $zeigeArt = $this->utilities->getArrayValueIfKey($instance, 'zeigeArt', false); - $zeigeArtHierarchie = $this->utilities->getArrayValueIfKey($instance, 'zeigeArtHierarchie', false); - $showAnnotations = $this->utilities->getArrayValueIfKey($instance, 'showAnnotations', false); + $defaults = array( + 'title' => 'Letzte Einsätze', + 'anzahl' => 3, + 'zeigeDatum' => false, + 'zeigeZeit' => false, + 'zeigeFeedlink' => false, + 'zeigeOrt' => false, + 'zeigeArt' => false, + 'zeigeArtHierarchie' => false, + 'showAnnotations' => false + ); + $instance = wp_parse_args($instance, $defaults); - if (empty($title)) { - $title = "Letzte Einsätze"; - } + $title = apply_filters('widget_title', $instance['title']); - if (!isset($anzahl) || empty($anzahl) || !is_numeric($anzahl) || $anzahl < 1) { - $anzahl = 3; + echo $args['before_widget']; + echo $args['before_title']; + echo esc_html($title); + echo $args['after_title']; + + $this->echoReports($instance); + + if ($instance['zeigeFeedlink']) { + printf( + '

     %s

    ', + get_post_type_archive_feed_link('einsatz'), + 'Einsatzberichte (Feed)' + ); } + echo $args['after_widget']; + } - $letzteEinsaetze = ""; + /** + * @param array $instance + */ + private function echoReports($instance) + { $posts = get_posts(array( 'post_type' => 'einsatz', 'post_status' => 'publish', - 'posts_per_page' => $anzahl + 'posts_per_page' => absint($instance['anzahl']) )); + + if (empty($posts)) { + echo '

    Keine Einsätze

    '; + return; + } + + echo '
      '; foreach ($posts as $post) { - $report = new IncidentReport($post); - $letzteEinsaetze .= '
    • '; + echo '
    • '; + $this->echoSingleReport($post, $instance); + echo "
    • "; + } + echo '
    '; + } - if (true === $showAnnotations) { - $annotationIconBar = AnnotationIconBar::getInstance(); - $letzteEinsaetze .= '
    ' . $annotationIconBar->render($report) . '
    '; - } + /** + * @param WP_Post $post + * @param array $instance + */ + private function echoSingleReport(WP_Post $post, $instance) + { + $report = new IncidentReport($post); - $letzteEinsaetze .= "ID)."\" rel=\"bookmark\" class=\"einsatzmeldung\">"; - $meldung = get_the_title($post->ID); - if (!empty($meldung)) { - $letzteEinsaetze .= $meldung; - } else { - $letzteEinsaetze .= "(kein Titel)"; - } - $letzteEinsaetze .= ""; - - if ($zeigeDatum) { - $timestamp = strtotime($post->post_date); - $datumsformat = $this->options->getDateFormat(); - $letzteEinsaetze .= "
    ".date_i18n($datumsformat, $timestamp).""; - if ($zeigeZeit) { - $zeitformat = $this->options->getTimeFormat(); - $letzteEinsaetze .= " | ".date_i18n($zeitformat, $timestamp)." Uhr"; - } - } + if (true === ($instance['showAnnotations'])) { + $annotationIconBar = AnnotationIconBar::getInstance(); + printf('
    %s
    ', $annotationIconBar->render($report)); + } - if ($zeigeArt) { - $typeOfIncident = $this->formatter->getTypeOfIncident($report, false, false, $zeigeArtHierarchie); - if (!empty($typeOfIncident)) { - $letzteEinsaetze .= sprintf('
    %s', $typeOfIncident); - } - } + $meldung = get_the_title($post->ID); + printf( + '%s', + esc_attr(get_permalink($post->ID)), + (empty($meldung) ? "(kein Titel)" : $meldung) + ); - if ($zeigeOrt) { - $location = $report->getLocation(); - if (!empty($location)) { - $letzteEinsaetze .= "
    Ort: ".$location.""; - } + if ($instance['zeigeDatum']) { + $timestamp = strtotime($post->post_date); + $datumsformat = $this->options->getDateFormat(); + printf('
    %s', date_i18n($datumsformat, $timestamp)); + if ($instance['zeigeZeit']) { + $zeitformat = $this->options->getTimeFormat(); + printf(' | %s Uhr', date_i18n($zeitformat, $timestamp)); } - - $letzteEinsaetze .= ""; } - echo $args['before_widget']; - echo $args['before_title'] . $title . $args['after_title']; - if (empty($letzteEinsaetze)) { - echo '

    Keine Einsätze

    '; - } else { - echo '
      ' . $letzteEinsaetze . '
    '; + if ($instance['zeigeArt']) { + $typeOfIncident = $this->formatter->getTypeOfIncident( + $report, + false, + false, + $instance['zeigeArtHierarchie'] + ); + if (!empty($typeOfIncident)) { + printf('
    %s', $typeOfIncident); + } } - if ($zeigeFeedlink) { - echo '

     Einsatzberichte (Feed)

    '; + + if ($instance['zeigeOrt']) { + $location = $report->getLocation(); + if (!empty($location)) { + printf('
    Ort: %s', $location); + } } - echo $args['after_widget']; } /** From 6a77db36ac2241cc657e72dde06e5d9b5bfde5b3 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Thu, 21 Jun 2018 22:30:07 +0200 Subject: [PATCH 115/126] Ein falsch eingesetztes _doing_it_wrong() weniger --- src/Util/Formatter.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index 83be4219..313ce0c5 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -80,9 +80,7 @@ public function formatIncidentData($pattern, $allowedTags = array(), $post = nul private function format($post, $pattern, $tag, $context = 'post') { if ($post == null && !in_array($tag, $this->tagsNotNeedingPost)) { - $message = 'Alle Tags außer ' . implode(',', $this->tagsNotNeedingPost) . ' brauchen ein Post-Objekt'; - _doing_it_wrong(__FUNCTION__, $message, null); - return ''; + return $pattern; } $incidentReport = new IncidentReport($post); From a3152223f67d3ece2f58d8cf76e1cd9b120f13e0 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Thu, 21 Jun 2018 22:55:58 +0200 Subject: [PATCH 116/126] Unbenutzte Referenz auf Core entfernt --- src/Util/Formatter.php | 4 +--- src/einsatzverwaltung-core.php | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index 313ce0c5..81f4852d 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -1,7 +1,6 @@ options = $options; diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 52b50eda..2a3a2a57 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -307,7 +307,7 @@ private function __construct() $this->options = new Options($this->utilities); $this->utilities->setDependencies($this->options); // FIXME Yay, zirkuläre Abhängigkeiten! - $this->formatter = new Formatter($this->options, $this->utilities, $this); // TODO In Singleton umwandeln + $this->formatter = new Formatter($this->options, $this->utilities); // TODO In Singleton umwandeln $this->admin = new Admin($this, $this->options, $this->utilities); $this->data = new Data($this, $this->utilities, $this->options); From 792e1f9a5600e0bdc022d5693521bb71692a1500 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Fri, 22 Jun 2018 22:21:34 +0200 Subject: [PATCH 117/126] =?UTF-8?q?Neuer=20Platzhalter=20f=C3=BCr=20Link?= =?UTF-8?q?=20zu=20Jahresarchiv,=20closes=20#35?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Util/Formatter.php | 6 ++++++ src/einsatzverwaltung-core.php | 15 +++++++++++++++ src/einsatzverwaltung-shortcodes.php | 6 ++---- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Util/Formatter.php b/src/Util/Formatter.php index 81f4852d..d7f08508 100644 --- a/src/Util/Formatter.php +++ b/src/Util/Formatter.php @@ -1,6 +1,7 @@ ID) : ''; break; + case '%yearArchive%': + $year = $timeOfAlerting->format('Y'); + $replace = Core::getInstance()->getYearArchiveLink($year); + break; default: return $pattern; } @@ -193,6 +198,7 @@ public function getTags() '%typesOfAlerting%' => 'Alarmierungsarten', '%content%' => 'Berichtstext', '%featuredImage%' => 'Beitragsbild', + '%yearArchive%' => 'Link zum Jahresarchiv', ); } diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index 2a3a2a57..c8b057a2 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -598,6 +598,21 @@ public function formatEinsatznummer($jahr, $nummer) } } + /** + * Gibt den Link zu einem bestimmten Jahresarchiv zurück, berücksichtigt dabei die Permalink-Einstellungen + * + * @param string $year + * + * @return string + */ + public function getYearArchiveLink($year) + { + global $wp_rewrite; + $link = get_post_type_archive_link('einsatz'); + $link = ($wp_rewrite->using_permalinks() ? trailingslashit($link) : $link . '&year=') . $year; + return user_trailingslashit($link); + } + /** * Gibt die möglichen Berechtigungen für Einsatzberichte zurück * diff --git a/src/einsatzverwaltung-shortcodes.php b/src/einsatzverwaltung-shortcodes.php index 7361ea81..477afc9f 100644 --- a/src/einsatzverwaltung-shortcodes.php +++ b/src/einsatzverwaltung-shortcodes.php @@ -126,7 +126,7 @@ public function einsatzliste($atts) */ public function einsatzjahre() { - global $year, $wp_rewrite; + global $year; $jahre = Data::getJahreMitEinsatz(); $string = ''; @@ -135,9 +135,7 @@ public function einsatzjahre() $string .= ' | '; } - $link = get_post_type_archive_link('einsatz'); - $link = ($wp_rewrite->using_permalinks() ? trailingslashit($link) : $link . '&year=') . $jahr; - $string .= ''; + $string .= sprintf('', $this->core->getYearArchiveLink($jahr)); if ($year == $jahr || empty($year) && $jahr == date('Y')) { $string .= "$jahr"; From e89a7a425009dea53c507828a0354183d87837cf Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Fri, 22 Jun 2018 22:40:28 +0200 Subject: [PATCH 118/126] Cleanup --- src/einsatzverwaltung-core.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index c8b057a2..e63405de 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -376,7 +376,6 @@ public function onInit() public function onPluginsLoaded() { - load_plugin_textdomain('einsatzverwaltung'); $this->maybeUpdate(); } @@ -555,7 +554,6 @@ public function einsatznummerMetaQuery($query) public function registerWidgets() { - // NEEDS_WP4.6 Instanziierte Widgets übergeben register_widget(new RecentIncidents($this->options, $this->utilities, $this->formatter)); register_widget(new RecentIncidentsFormatted($this->formatter, $this->utilities)); } From f4b614e9746cc3597425110a09afa6ca89d46f35 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Fri, 22 Jun 2018 22:41:58 +0200 Subject: [PATCH 119/126] =?UTF-8?q?Aktuelle=20Version=20des=20Plugins=20wi?= =?UTF-8?q?rd=20in=20die=20Datenbank=20geschrieben,=20erm=C3=B6glicht=20be?= =?UTF-8?q?im=20Update=20zu=20wissen=20von=20welcher=20Version=20aus=20das?= =?UTF-8?q?=20Update=20veranlasst=20wurde?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/einsatzverwaltung-core.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/einsatzverwaltung-core.php b/src/einsatzverwaltung-core.php index e63405de..7257f9ea 100644 --- a/src/einsatzverwaltung-core.php +++ b/src/einsatzverwaltung-core.php @@ -339,10 +339,10 @@ private function addHooks() */ public function onActivation() { - update_option('einsatzvw_version', self::VERSION); add_option('einsatzvw_db_version', self::DB_VERSION); $this->maybeUpdate(); + update_option('einsatzvw_version', self::VERSION); // Posttypen registrieren $this->registerTypes(); @@ -377,6 +377,7 @@ public function onInit() public function onPluginsLoaded() { $this->maybeUpdate(); + update_option('einsatzvw_version', self::VERSION); } /** From 25717deecdcf7cbc61a30bc82974b393144baaa1 Mon Sep 17 00:00:00 2001 From: Andreas Brain Date: Sun, 24 Jun 2018 21:10:51 +0200 Subject: [PATCH 120/126] =?UTF-8?q?CSV-Parameter=20auf=20L=C3=A4nge=201=20?= =?UTF-8?q?beschr=C3=A4nkt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Export/Formats/Csv.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Export/Formats/Csv.php b/src/Export/Formats/Csv.php index 21bced8d..85de3076 100644 --- a/src/Export/Formats/Csv.php +++ b/src/Export/Formats/Csv.php @@ -46,13 +46,13 @@ public function renderOptions()