Skip to content

Commit

Permalink
Updated HTMLSPECIALCHARS and readme
Browse files Browse the repository at this point in the history
  • Loading branch information
weed- committed Feb 13, 2023
1 parent 7fa696e commit 590de34
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 59 deletions.
36 changes: 17 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,39 @@

Ein WordPress-Plugin, das Termine aus dem [Scoutnet-Kalender](https://www.scoutnet.de/kalender/start) anzeigt.

Scoutnet bietet allen deutschen RDP-Pfadfinderverbänden (DPSG, BDP, PSG, BMPPD, VCP) ein zentrales und hirarchisches Kalender-System an. Die Nutzung ist natürlich freiwillig, aber überaus praktisch. Scoutnet-Termine lassen sich, beispielsweise, in allen Apps anzeigen und verwalten (Outlook, Thunderbird, Android, iOS, ...).
Scoutnet bietet den deutschen RDP-Pfadfinderverbänden (DPSG, BDP, PSG, BMPPD, VCP) ein zentrales und hirarchisches Kalender-System an. Die Nutzung ist natürlich freiwillig, aber überaus praktisch. Scoutnet-Termine lassen sich, beispielsweise, in allen Apps anzeigen und verwalten (Outlook, Thunderbird, Android, iOS, ...).

Dieses Plugin ermöglich schnell und einfach die Darstellung von Scoutnet-Terminen sowie deren Details innerhalb von WordPress Seiten, Beiträgen oder Sidebar(s). Mit einfachen Shortcodes können die Daten angezeigt werden. Außerdem kann man die Ausgabe mit eigenen Templates formatieren. Alle Ansichten bringen kommentierte Vorlagen mit. Es sind keine iFrames, iCAL-Exporte, oder umständliche Datenkonverteierung notwendig, alle Daten werden in Echzeit (verschlüsselt) von der Scoutnet API geladen.

**Achtung**: Das Default-Template bettet auch HTML-Code aus dem Scoutnet ein ("Remote Code"), sofern dort welcher liegt. Das ist so, weil manche Vereine den Kalender zur Ablage von Statusinformationen ("gebucht" oder "frei") nutzen. Die Änderung des Verhaltens würde das "standartmäßig" nicht erlauben. Daher bindet ausschliesslich vertrauenswuerdige Kalender ein!

Das ist auch der Grund warum das Plugin nicht mehr im WordPress-Repository zu finden ist. Wer das "default" Template dahingehend anpassen möchte, ich herzlich gerne eingeladen. Ich freue mich über Pull-Requests oder eine E-Mail (oder auf dem Moment wo ich Zeit habe das zu überarbeiten) 🙂
Dieses Plugin ermöglicht die Darstellung von Scoutnet-Terminen innerhalb von WordPress Seiten und Beiträgen. Mit Shortcodes können verschiedene Daten angezeigt werden und man kann die Ausgabe mit eigenen Templates formatieren. Alle Ansichten bringen kommentierte Vorlagen mit. Es sind keine iFrames, iCAL-Exporte, oder umständliche Datenkonverteierung notwendig, alle Daten werden in Echzeit von der Scoutnet API geladen.

Ursprünglich gebaut und angepasst von: muetze, derweed, lordq, okay75


# Features
* Gut kommentierte Beispiel-Vorlagen
* Templates zur einfachen Layoutanpassung
* Es koennen beliebige Daten eines Termins angezeigt werden
* Widget-Template mit asynchroner Aktualisierung

* Verbandsunabhängig (VCP/DPSG/BDP/BMPPD/PSG)
* Templates zur einfachen Anpassung
* Beliebige Daten eines Termins können angezeigt werden
* Widget mit asynchroner Aktualisierung
* API-Proxy in Einstellungen konfigurierbar
* Für Plastikhoster die kein ausgehendes SSL erlauben (thx Andre)
* Einbindung mehrerer Kalender


# Installation

1. Den Ordner "scoutnet-kalender" mit allen Dateien in das Pluginverzeichnis (/wp-content/plugins/) hochladen
2. Das Plugin im WordPress-Dashboard unter Plugins -> "Scoutnet Kalender" aktivieren

- Das Widget kannst du dann sofort unter Design->Widgets in dein Theme einbinden.
- Fuer Seiten und Artikel mit Terminen darauf gibt es einen Shortcode
- Das Widget kannst du dann sofort unter Design->Widgets in dein Theme einbinden, wenn dein Theme Widgets unterstützt
- Für Seiten und Beiträge gibt es einen Shortcode
- Unter 'Einstellungen' kannst du Standartwerte vorgeben und die Shortcodes nachschlagen.


# Frequently Asked Questions

- Warum ist das Plugin nicht mehr im WordPress Repository?
- Weil es Daten und HTML-Code vom Scoutnet einbindet und das ein potentieller Sicherheitsrisiko ist
- Kann ich es trotzdem verwenden?
- Ja, aber binde nur vertrauenswürdige Kalender ein
- Weil es früher ungeprüft HTML vom Scoutnet-Server eingebunden hat
- Das Plugin funktioniert bei meinem Hoster nicht
- Hostingangebote von Strato, 1blu, 1und1, Unitedinternet und andere (schrzhaft "Plastikhoster" genannt) unterbinden gerne ausgehende Verbindungen zu API-Diensten. Wechsle den Hoster (zum Beispiel zur [DATA-systems](https://www.data-systems.de) oder nutze die Proxy-Funktion in den Einstellungen.
- Hostingangebote von Strato, 1blu, 1und1, Unitedinternet und andere (scherzhaft "Plastikhoster" genannt) unterbinden gerne ausgehende Verbindungen zu API-Diensten. Wechsle den Hoster (zum Beispiel zur [DATA-systems](https://www.data-systems.de) oder nutze die Proxy-Funktion in den Einstellungen.
- Kalender-ID?!?
- Jeder Kalender hat eine numerische ID. Mehr Informationen unter: http://www.scoutnet.de/kalender/kurzanleitung.html
- Kann ich mir das Plugin Live ansehen?
Expand All @@ -53,16 +47,16 @@ Ursprünglich gebaut und angepasst von: muetze, derweed, lordq, okay75

# Eigenes Template für custom HTML/CSS

Diese Anleitung gilt fuer die Inline-Anzeige und das Widget. Die Templates unterschieden sich anhand der Dateinamen.

1. Kopiere dein Template `scoutnet-kalender_[inline|widget]_kalender_EXAMPLE_list.php` von scoutnet-kalender/templates/ in dein Theme-Verzeichnis
2. Benenne das Template um, z.B. `scoutnet-kalender_inline_kalender_STAMMTEETRINKER_list.php`
3. Trage `STAMMTEETRINKER` (passende Klein-Grosschreibung) in das Widget/Shortcode ein. Zum Beispiel `[snk elementcount="30" externalTemplateName="STAMMTEETRINKER" ssid="53" /]`
4. Füge das CSS aus der EXAMPLE_style.css in deine eigene "style.css" ein oder ergänze das Template um dein CSS

Du kannst diese Dateien nun in deinem Theme-Ordner bearbeiten, ohne das sie bei einem Update des Plugins überschrieben werden.


# Screenshots

Die Widget-Konfiguration

![Die Widget-Konfiguration](screenshot-1.png)
Expand All @@ -74,6 +68,10 @@ Widget mit dem EXAMPLE-Template

# Changelog

= 1.3 =
- Update für PHP 8.1/8.2
- HTML-Escaping für remote-Content eingebaut

= 1.1.2 =
- Aktuelle Wordpress-Versionen getestet
- WordpressMU getestet
Expand Down
18 changes: 2 additions & 16 deletions scoutnet_kalender.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Plugin Name: Scoutnet Kalender
Plugin URI: http://www.dpsg-paderborn.de/drin/2012/05/endlich-das-scoutnet-kalender-wordpress-plugin/
Description: Zeigt Termine und Details aus dem Scoutnet-Kalender in Seiten, Artikeln und einem Widget an.
Version: 1.1.3
Version: 1.3
Author: Scoutnet und Björn Stromberg
Author URI: http://www.scoutnet.de/
Text Domain: scoutnet_kalender
Expand Down Expand Up @@ -101,7 +101,6 @@ class ScoutnetKalenderWidget extends WP_Widget {
function __construct() {

$widget_ops = array('classname' => 'ScoutnetKalenderWidget', 'description' => 'Anzeige von Scoutnet-Kalendern');
// $this->WP_Widget('ScoutnetKalenderWidget', 'Scoutnet Kalender', $widget_ops);
parent::__construct( 'ScoutnetKalenderWidget', 'Scoutnet Kalender', $widget_ops );

// AJAX actions
Expand All @@ -112,19 +111,6 @@ function __construct() {
add_action( 'wp_ajax_SNK_ajax-submit', array(&$this, 'ajax_widget'));
}

// aka __construct
// function ScoutnetKalenderWidget() {
// $widget_ops = array('classname' => 'ScoutnetKalenderWidget', 'description' => 'Anzeige von Scoutnet-Kalendern');
// $this->WP_Widget('ScoutnetKalenderWidget', 'Scoutnet Kalender', $widget_ops);
//
// // AJAX actions
// // if both logged in and not logged in users can send this AJAX request,
// // add both of these actions, otherwise add only the appropriate one
// // thanks to http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/#js-global
// add_action( 'wp_ajax_nopriv_SNK_ajax-submit', array(&$this, 'ajax_widget'));
// add_action( 'wp_ajax_SNK_ajax-submit', array(&$this, 'ajax_widget'));
// }

function form($instance) {
$instance = wp_parse_args((array) $instance, array('title' => '', 'ssid' => '3', 'elementcount'=>'0', 'wrapclassname'=>'snk_widget', 'externalTemplateName'=>''));
$title = $instance['title'];
Expand Down Expand Up @@ -154,7 +140,7 @@ function update($new_instance, $old_instance) {
}

function widget($args, $instance, $ajaxcall = false) {
// alle �bergebenen Variablen verarbeiten
// Variablen verarbeiten
extract($args, EXTR_SKIP);
$title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
$ssid = (empty($instance['ssid']) || !preg_match('/^[0-9]+$/', $instance['ssid'])) ? '3' : $instance['ssid'];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ function short_url($url, $length = 100) {
<div class="info-container">
<?php // Titel mit Link
if (trim($event->URL)=="") {
echo "<h3>".$event->Title."</h3>";
echo "<h3>".htmlspecialchars($event->Title)."</h3>";
} else {
echo "<h3><a href=".$event->URL.">".$event->Title."</a></h3>";
echo "<h3><a href=".$event->URL.">".htmlspecialchars($event->Title)."</a></h3>";
} ?>
<?php // Beschreibung
if (trim($event->Description)!="") { echo "<p>" . $event->Description . "</p>"; } ?>
if (trim($event->Description)!="") { echo "<p>" . htmlspecialchars($event->Description) . "</p>"; } ?>
<small>
<?php
// Ort mit PLZ
Expand All @@ -66,7 +66,7 @@ function short_url($url, $length = 100) {

// Link
if (trim($event->URL)!="") {
echo "Link: <a title=\"" . $event->Title . " (" . $event->URL . ")" . "\" href=" . $event->URL . ">";
echo "Link: <a title=\"" . htmlspecialchars($event->Title) . " (" . $event->URL . ")" . "\" href=" . $event->URL . ">";
short_url($event->URL, 100);
echo "</a><br />";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
// Wenn der Aufruf (noch) nicht per AJAX kam, dann dient er zur Vorbereitung der AJAX-Abfrage
if ($ajaxcall !== true) {
// Daher bauen wir an dieser Stelle das Ziel-DIV zusammen, in das wir dann beim zweiten Lauf die Daten reinladen wollen.
// (Sonst hätten wir ja das DIV doppelt)
// Die Mindesthöhe von 251px ist aus dem gerenderten Ergebnis entnommen, nachdem das komplette DOM nach dem
// (Sonst h�tten wir ja das DIV doppelt)
// Die Mindesth�he von 251px ist aus dem gerenderten Ergebnis entnommen, nachdem das komplette DOM nach dem
// fertigen AJAX-Request gerendert wurde. Damit der Seiteninhalt nicht herumspringt.
?>
<div class="<?php echo $wrapclassname; ?>" style="min-height: 251px;">Lade Scoutnet-Daten ...</div>
<?php

// Wenn dieser Aufruf jetzt via AJAX kam, wir dieser Content ausgeben der das DIV füllt.
// Wenn dieser Aufruf jetzt via AJAX kam, wir dieser Content ausgeben der das DIV f�llt.
} else {
setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
foreach($events as $event) { /* @var $event SN_Model_Event */
Expand All @@ -30,14 +30,14 @@
}
else {
?>
<a href="<?php echo addslashes(trim($event->URL)); ?>"><?php echo trim($event->Title); ?></a>
<a href="<?php echo addslashes(trim($event->URL)); ?>"><?php echo htmlspecialchars(trim($event->Title)); ?></a>
<?php
}
?>
</span>
<span class="event-descr">
<?php echo date('G:i', $event->Start); ?>
<?php echo $event->Location; ?>
<?php echo htmlspecialchars($event->Location); ?>
</span>
</div>
<div style="clear: both;"></div>
Expand Down
8 changes: 1 addition & 7 deletions templates/inline_kalender_list.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,14 @@
<?php echo $event->Title; ?>
<?php echo $event->Author->get_full_name(); ?>
<?php var_dump($event); ?>
ACHTUNG!
Dieses Template bindet auch Remote-HTML-Code ein, wenn das
jemand in den Kalender eingetragen hat.
*/

// Deutsche Zeit
date_default_timezone_set('Europe/Berlin');

foreach($events as $event) { /* @var $event SN_Model_Event */
?>
<h2><?php echo date('d.m.Y', $event->Start); ?></span>: <?php echo $event->Title; ?></h2>
<h2><?php echo date('d.m.Y', $event->Start); ?></span>: <?php echo htmlspecialchars($event->Title); ?></h2>

<p>
<?php echo $event->Description; ?>
Expand Down
11 changes: 3 additions & 8 deletions templates/widget_kalender_list.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,14 @@
/*
Scoutnet Kalender Template: EVENTLISTE (default)
Erzeugt die LISTE der Events, jedes Event wird hierin mit der Datei *_event.php angezeigt.
ACHTUNG!
Dieses Template bindet auch Remote-HTML-Code ein, wenn das
jemand in den Kalender eingetragen hat.
*/

// Deutsche Zeit
date_default_timezone_set('Europe/Berlin');

// Wenn der Aufruf (noch) nicht per AJAX kam, dann dient er zur Vorbereitung der AJAX-Abfrage
if ($ajaxcall !== true) {
// Daher bauen wir an dieser Stelle das Ziel-DIV zusammen, in das wir dann beim zweiten Lauf die Daten reinladen wollen.
// (Sonst h�tten wir ja das DIV doppelt)
// Daher bauen wir an dieser Stelle das Ziel-DIV zusammen, in das wir dann beim zweiten Lauf die Daten reinladen.
// Die Mindesth�he von 235px ist aus dem gerenderten Ergebnis meines (!) Tempplates entnommen, nachdem das komplette DOM nach dem
// fertigen AJAX-Request gerendert wurde. Damit der Seiteninhalt nicht herumspringt.
?>
Expand All @@ -29,10 +24,10 @@
<strong><?php echo date('d.n.Y', $event->Start); ?> <?php echo gmdate('G:i', $event->Start); ?> <?php echo $event->Location; ?></strong><br />
<?php
if (trim($event->URL)=="") {
echo $event->Title;
echo htmlspecialchars($event->Title);
}
else { ?>
<a href="<?php echo $event->URL; ?>"><?php echo $event->Title; ?></a>
<a href="<?php echo $event->URL; ?>"><?php echo htmlspecialchars($event->Title); ?></a>
<?php } ?>
</div>

Expand Down

0 comments on commit 590de34

Please sign in to comment.