Add more options, redo config screen. (#59)

* Bump version, add me as author.

Signed-off-by: Thomas Hochstein <thh@inter.net>

* Normalize whitespace.

Replace mix of spaces and tabs by spaces.

Signed-off-by: Thomas Hochstein <thh@inter.net>

* Add option for linking to buzer.de

Signed-off-by: Thomas Hochstein <thh@inter.net>

* Add Changelog.

Signed-off-by: Thomas Hochstein <thh@inter.net>

* Reformat and rephrase plugin configuration screen.

Remove HTML added in 88e58798af05a79543e89aa87705e85a325cc164
as it was not parsed.

Move link style description to info text.

Improve some phrases.

Signed-off-by: Thomas Hochstein <thh@inter.net>

* Add option to exclude headings from linking.

Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
Thomas Hochstein 2017-05-30 11:05:35 +02:00 committed by onli
parent f949281b97
commit ea1fdf86a2
5 changed files with 163 additions and 114 deletions

View file

@ -0,0 +1,19 @@
1.7:
* Add option for linking to buzer.de
* Add option to exclude headings from linking.
* Rephrase plugin configuration screen.
* Normalize whitespace.
* Add Changelog.
1.6:
* Updated to v1.6 from upstream.
* Improve connection code, switch to SSL and
add an user agent.
1.5:
* Updated to v1.5 from upstream.
* Add uninstall function (dropping database) and
option to clear the cache.
1.2:
* Imported to git.

View file

@ -2,17 +2,21 @@
@define('DEJURE_TITLE', 'dejure.org Rechtsvernetzung');
@define('DEJURE_DESCRIPTION', 'Verlinkt automatisch zitierte Gesetze und Rechtsprechung (Aktenzeichen und Fundstellen) mit den Inhalten von dejure.org.');
@define('DEJURE_MAIL', 'E-Mail Adresse des Blogbetreibers');
@define('DEJURE_MAIL', 'E-Mail-Adresse des Blogbetreibers');
@define('DEJURE_MAIL_DESC', 'Diese Informationen werden im Rahmen der Serverkommunikation jeweils an dejure.org übertragen und dienen im übrigen nur der Kommunikation bei technischen Problemen. Die Weitergabe der Daten an Dritte sowie eine Verwendung für Werbezwecke o.ä. ist ausgeschlossen!');
@define('DEJURE_NEWSLETTER', 'Newsletter');
@define('DEJURE_NEWSLETTER_DESC', 'Bei Neuigkeiten zur dejure.org-Vernetzungsfunktion möchte ich per E-Mail informiert werden.');
@define('DEJURE_TARGET', 'Links öffnen...');
@define('DEJURE_TARGET_DESC', 'Ein leeres Feld öffnet Links im gleichen Fenster, "_blank" in einem neuen.');
@define('DEJURE_CSS', 'CSS-Klasse für dejure.org Links');
@define('DEJURE_TARGET_DESC', 'Das "target"-Attribut der generierten Links. Ein leeres Feld öffnet Links im gleichen Fenster, "_blank" in einem neuen.');
@define('DEJURE_CSS', 'CSS-Klasse für dejure.org-Links');
@define('DEJURE_CSS_DESC', '');
@define('DEJURE_LINKSTYLE', 'Stil der dejure.org Links');
@define('DEJURE_LINKSTYLE_DESC', '');
@define('DEJURE_LINKSTYLE_SHORT', 'Nur die Nummern der Vorschriften verlinken (Bsp.: § _242_ BGB; §§ _278_, _254_ BGB)');
@define('DEJURE_LINKSTYLE_WIDE', 'Möglichst weite Verlinkung (Bsp.: _§ 242 BGB_; _§§ 278_, _254 BGB_)');
@define('DEJURE_LINKSTYLE', 'Stil der dejure.org-Links');
@define('DEJURE_LINKSTYLE_DESC', 'Die erzeugten Links können entweder nur die Paragraphennummern verlinken (§ _242_ BGB; §§ _278_, _254_ BGB) oder möglichst auch Absatzangaben und die Gesetzesbezeichnung mit erfassen (_§ 242 BGB_; _§§ 278_, _254 BGB_).');
@define('DEJURE_LINKSTYLE_SHORT', 'Nur Vorschriftennummern verlinken');
@define('DEJURE_LINKSTYLE_WIDE', 'Möglichst weite Verlinkung');
@define('DEJURE_NOHEADINGS', 'Überschriften von Verlinkung ausnehmen');
@define('DEJURE_NOHEADINGS_DESC', 'Keine Verlinkung von Gesetzen und Rechtsprechung in Überschriften (<h1> bis <h9>).');
@define('DEJURE_BUZER', 'Gesetze bei buzer.de verlinken');
@define('DEJURE_BUZER_DESC', 'Zu buzer.de verlinken für Gesetze, die bei dejure.org nicht vorhanden sind.');
@define('DEJURE_CACHE', 'Cache leeren');
@define('DEJURE_CACHE_DESC', 'Den kompletten Cache beim nächsten Aufruf des Blogs leeren. Notwendig, wenn Sie das Linkziel, die CSS-Klasse oder den Linkstil ändern.');
@define('DEJURE_CACHE_DESC', 'Den kompletten Cache beim nächsten Aufruf des Blogs leeren. Notwendig, wenn Sie das Linkziel, die CSS-Klasse, den Linkstil oder die Verlinkung zu buzer.de ändern.');

View file

@ -2,17 +2,21 @@
@define('DEJURE_TITLE', 'dejure.org Rechtsvernetzung');
@define('DEJURE_DESCRIPTION', 'Verlinkt automatisch zitierte Gesetze und Rechtsprechung (Aktenzeichen und Fundstellen) mit den Inhalten von dejure.org.');
@define('DEJURE_MAIL', 'E-Mail Adresse des Blogbetreibers');
@define('DEJURE_MAIL', 'E-Mail-Adresse des Blogbetreibers');
@define('DEJURE_MAIL_DESC', 'Diese Informationen werden im Rahmen der Serverkommunikation jeweils an dejure.org übertragen und dienen im übrigen nur der Kommunikation bei technischen Problemen. Die Weitergabe der Daten an Dritte sowie eine Verwendung für Werbezwecke o.ä. ist ausgeschlossen!');
@define('DEJURE_NEWSLETTER', 'Newsletter');
@define('DEJURE_NEWSLETTER_DESC', 'Bei Neuigkeiten zur dejure.org-Vernetzungsfunktion möchte ich per E-Mail informiert werden.');
@define('DEJURE_TARGET', 'Links öffnen...');
@define('DEJURE_TARGET_DESC', 'Ein leeres Feld öffnet Links im gleichen Fenster, "_blank" in einem neuen.');
@define('DEJURE_CSS', 'CSS-Klasse für dejure.org Links');
@define('DEJURE_TARGET_DESC', 'Das "target"-Attribut der generierten Links. Ein leeres Feld öffnet Links im gleichen Fenster, "_blank" in einem neuen.');
@define('DEJURE_CSS', 'CSS-Klasse für dejure.org-Links');
@define('DEJURE_CSS_DESC', '');
@define('DEJURE_LINKSTYLE', 'Stil der dejure.org Links');
@define('DEJURE_LINKSTYLE_DESC', '');
@define('DEJURE_LINKSTYLE_SHORT', 'Nur die Nummern der Vorschriften verlinken (Bsp.: § _242_ BGB; §§ _278_, _254_ BGB)');
@define('DEJURE_LINKSTYLE_WIDE', 'Möglichst weite Verlinkung (Bsp.: _§ 242 BGB_; _§§ 278_, _254 BGB_)');
@define('DEJURE_LINKSTYLE', 'Stil der dejure.org-Links');
@define('DEJURE_LINKSTYLE_DESC', 'Die erzeugten Links können entweder nur die Paragraphennummern verlinken (§ _242_ BGB; §§ _278_, _254_ BGB) oder möglichst auch Absatzangaben und die Gesetzesbezeichnung mit erfassen (_§ 242 BGB_; _§§ 278_, _254 BGB_).');
@define('DEJURE_LINKSTYLE_SHORT', 'Nur Vorschriftennummern verlinken');
@define('DEJURE_LINKSTYLE_WIDE', 'Möglichst weite Verlinkung');
@define('DEJURE_NOHEADINGS', 'Überschriften von Verlinkung ausnehmen');
@define('DEJURE_NOHEADINGS_DESC', 'Keine Verlinkung von Gesetzen und Rechtsprechung in Überschriften (<h1> bis <h9>).');
@define('DEJURE_BUZER', 'Gesetze bei buzer.de verlinken');
@define('DEJURE_BUZER_DESC', 'Zu buzer.de verlinken für Gesetze, die bei dejure.org nicht vorhanden sind.');
@define('DEJURE_CACHE', 'Cache leeren');
@define('DEJURE_CACHE_DESC', 'Den kompletten Cache beim nächsten Aufruf des Blogs leeren. Notwendig, wenn Sie das Linkziel, die CSS-Klasse oder den Linkstil ändern.');
@define('DEJURE_CACHE_DESC', 'Den kompletten Cache beim nächsten Aufruf des Blogs leeren. Notwendig, wenn Sie das Linkziel, die CSS-Klasse, den Linkstil oder die Verlinkung zu buzer.de ändern.');

View file

@ -2,17 +2,21 @@
@define('DEJURE_TITLE', 'dejure.org automatic linking');
@define('DEJURE_DESCRIPTION', 'Automatically links quoted statues and judicature (references and source of information) with contents of dejure.org.');
@define('DEJURE_MAIL', 'E-Mail address of the blog owner');
@define('DEJURE_MAIL_DESC', 'This information is sent to dejure.org and only servers for communication means on technical failures. No data is forwarded for marketing reasons or similar!');
@define('DEJURE_MAIL', 'Email address of blog owner');
@define('DEJURE_MAIL_DESC', 'This information is sent to dejure.org to provide a contact address when problems arise. No data is used or forwarded for marketing reasons or similar!');
@define('DEJURE_NEWSLETTER', 'Newsletter');
@define('DEJURE_NEWSLETTER_DESC', 'I want to subscribe to updates to the dejure.org service.');
@define('DEJURE_TARGET', 'Open links...');
@define('DEJURE_TARGET_DESC', 'An empty field opens links in the same target, "_blank" in a new one.');
@define('DEJURE_TARGET_DESC', 'The "target" attribute of the generated links. Leave empty to open links in the same borwser window or frame, use "_blank" top open them in a new browser window.');
@define('DEJURE_CSS', 'CSS class for dejure.org links');
@define('DEJURE_CSS_DESC', '');
@define('DEJURE_LINKSTYLE', 'Style of dejure.org links');
@define('DEJURE_LINKSTYLE_DESC', '');
@define('DEJURE_LINKSTYLE_SHORT', 'Only link numbers of judicature (i.e.: § _242_ BGB; §§ _278_, _254_ BGB)');
@define('DEJURE_LINKSTYLE_WIDE', 'Use detailed linking (i.e.: _§ 242 BGB_; _§§ 278_, _254 BGB_)');
@define('DEJURE_LINKSTYLE_DESC', 'Generated links will span just the article or section number (§ _242_ BGB; §§ _278_, _254_ BGB) or include paragraphs or the abbreviation of the statute (_§ 242 BGB_; _§§ 278_, _254 BGB_).');
@define('DEJURE_LINKSTYLE_SHORT', 'Only link from article/section numbers');
@define('DEJURE_LINKSTYLE_WIDE', 'Use wide linking');
@define('DEJURE_NOHEADINGS', 'Exclude headings');
@define('DEJURE_NOHEADINGS_DESC', 'Do not create links in headings (<h1> bis <h9>).');
@define('DEJURE_BUZER', 'Also link to buzer.de');
@define('DEJURE_BUZER_DESC', 'Link to buzer.de for statutes that are not available at dejure.org.');
@define('DEJURE_CACHE', 'Purge cache');
@define('DEJURE_CACHE_DESC', 'Completely purge the cache - necessary after changes to link targets ("Open links..."), CSS class or style.');
@define('DEJURE_CACHE_DESC', 'Completely purge the cache - necessary after changes to link targets ("Open links..."), CSS class, style or linking to buzer.de.');

View file

@ -12,7 +12,7 @@ if (file_exists($probelang)) {
include dirname(__FILE__) . '/lang_en.inc.php';
define('DJO_VERSION', '1.6');
define('DJO_VERSION', '1.7');
define('CACHE_VORHALT', 4); # (Tage) Wann ein vernetzter Text aus dem Cache entfernt und neu vernetzt werden soll
class serendipity_event_dejure extends serendipity_event
@ -22,7 +22,7 @@ class serendipity_event_dejure extends serendipity_event
$propbag->add('name', DEJURE_TITLE);
$propbag->add('description', DEJURE_DESCRIPTION);
$propbag->add('author', 'Garvin Hicking, Bjoern Urban, dejure.org');
$propbag->add('author', 'Garvin Hicking, Bjoern Urban, dejure.org, Thomas Hochstein');
$propbag->add('version', DJO_VERSION);
$propbag->add('stackable', false);
$propbag->add('groups', array('FRONTEND_EXTERNAL_SERVICES'));
@ -50,6 +50,8 @@ class serendipity_event_dejure extends serendipity_event
'target',
'css',
'linkstyle',
'noheadings',
'buzer',
'cache'
)
);
@ -99,6 +101,20 @@ class serendipity_event_dejure extends serendipity_event
$propbag->add('radio_per_row', 1);
break;
case 'noheadings':
$propbag->add('type', 'boolean');
$propbag->add('name', DEJURE_NOHEADINGS);
$propbag->add('description', DEJURE_NOHEADINGS_DESC);
$propbag->add('default', false);
break;
case 'buzer':
$propbag->add('type', 'boolean');
$propbag->add('name', DEJURE_BUZER);
$propbag->add('description', DEJURE_BUZER_DESC);
$propbag->add('default', true);
break;
case 'cache':
$propbag->add('type', 'boolean');
$propbag->add('name', DEJURE_CACHE);
@ -161,64 +177,64 @@ class serendipity_event_dejure extends serendipity_event
}
function djo_vernetzen_ueber_dejure_org($ausgangstext, $parameter = array()) {
// Mögliche Parameter: Anbieterkennung / Dokumentkennung / target / class / AktenzeichenIgnorieren / zeitlimit_in_sekunden
// Mögliche Parameter: Anbieterkennung / Dokumentkennung / target / class / AktenzeichenIgnorieren / zeitlimit_in_sekunden
$uebergabe = 'Originaltext='.urlencode($ausgangstext);
foreach ($parameter as $option => $wert) {
if ($option == 'zeitlimit_in_sekunden') {
$zeitlimit_in_sekunden = $wert;
} else {
$uebergabe = 'Originaltext='.urlencode($ausgangstext);
foreach ($parameter as $option => $wert) {
if ($option == 'zeitlimit_in_sekunden') {
$zeitlimit_in_sekunden = $wert;
} else {
$uebergabe .= '&' . urlencode($option) . '=' . urlencode($wert);
}
}
}
}
if (!isset($zeitlimit_in_sekunden)) {
$zeitlimit_in_sekunden = 2;
}
if (!isset($zeitlimit_in_sekunden)) {
$zeitlimit_in_sekunden = 2;
}
if (preg_match("/<!-- zeitlimitDJO:([0-9]+) -->/", $ausgangstext, $wert_ARR)) {
$zeitlimit_in_sekunden = $wert_ARR[1];
}
$header = "POST /dienste/vernetzung/vernetzen HTTP/1.0\r\n";
$header = "POST /dienste/vernetzung/vernetzen HTTP/1.0\r\n";
$header .= 'User-Agent: '.$_SERVER['SERVER_NAME'] . ' (Serendipity-Vernetzung ' . DJO_VERSION . ')' . "\r\n";
$header .= "Content-type: application/x-www-form-urlencoded\r\n";
$header .= "Content-length: " . strlen($uebergabe) . "\r\n";
$header .= "Content-type: application/x-www-form-urlencoded\r\n";
$header .= "Content-length: " . strlen($uebergabe) . "\r\n";
$header .= 'Host: rechtsnetz.dejure.org'."\r\n";
$header .= 'Connection: close'."\r\n";
$header .= "\r\n";
$fp = @fsockopen('ssl://rechtsnetz.dejure.org', 443, $errno, $errstr, $zeitlimit_in_sekunden);
if ($fp === false) { // Verbindung gescheitert
return false;
} else {
stream_set_timeout($fp, $zeitlimit_in_sekunden, 0); // Verbindung nach $zeitlimit_in_sekunden Sekunden abbrechen
stream_set_blocking($fp, true);
fputs($fp, $header.$uebergabe);
$timeOutSock = false;
$eofSock = false;
$rueckgabe = '';
while (!$eofSock && !$timeOutSock) {
$rueckgabe.= fgets($fp, 1024); //
$stSock = socket_get_status($fp);
$eofSock = $stSock["eof"];
$timeOutSock = $stSock["timed_out"];
}
fclose($fp);
if (!preg_match("/^(.*?)\r?\n\r?\n\r?\n?(.*)/s",$rueckgabe, $rueckgabeARR)) {
return false; // Zeitüberschreitung oder Verbindungsproblem
} else if (strpos($rueckgabeARR[1],"200 OK") === false) {
return false; // sonstiges Serverproblem
} else {
$rueckgabe = $rueckgabeARR[2];
if (strlen($rueckgabe) < strlen($ausgangstext)) {
return false;
}
if ($fp === false) { // Verbindung gescheitert
return false;
} else {
stream_set_timeout($fp, $zeitlimit_in_sekunden, 0); // Verbindung nach $zeitlimit_in_sekunden Sekunden abbrechen
stream_set_blocking($fp, true);
fputs($fp, $header.$uebergabe);
$timeOutSock = false;
$eofSock = false;
$rueckgabe = '';
while (!$eofSock && !$timeOutSock) {
$rueckgabe.= fgets($fp, 1024); //
$stSock = socket_get_status($fp);
$eofSock = $stSock["eof"];
$timeOutSock = $stSock["timed_out"];
}
fclose($fp);
if (!preg_match("/^(.*?)\r?\n\r?\n\r?\n?(.*)/s",$rueckgabe, $rueckgabeARR)) {
return false; // Zeitüberschreitung oder Verbindungsproblem
} else if (strpos($rueckgabeARR[1],"200 OK") === false) {
return false; // sonstiges Serverproblem
} else {
$rueckgabe = $rueckgabeARR[2];
if (strlen($rueckgabe) < strlen($ausgangstext)) {
return false;
}
return $rueckgabe;
}
}
return $rueckgabe;
}
}
}
function djo_zwischenspeicherung() {
@ -226,38 +242,38 @@ class serendipity_event_dejure extends serendipity_event
# Cache auf alte Eintraege pruefen vor dem Eintrag
$this->cache_cleanup();
if (is_array($this->djo_vernetzung_in_cache_schreiben)) {
foreach ($this->djo_vernetzung_in_cache_schreiben as $vernetzung) {
$schluessel = md5($vernetzung[0]);
if ($vernetzung[0] == $vernetzung[1]) {
$text = "<!-- idem -->";
} else {
$text = $vernetzung[1];
}
serendipity_db_Query("DELETE FROM {$serendipity['dbPrefix']}dejure WHERE ckey = '" . $schluessel . "'");
if (is_array($this->djo_vernetzung_in_cache_schreiben)) {
foreach ($this->djo_vernetzung_in_cache_schreiben as $vernetzung) {
$schluessel = md5($vernetzung[0]);
if ($vernetzung[0] == $vernetzung[1]) {
$text = "<!-- idem -->";
} else {
$text = $vernetzung[1];
}
serendipity_db_Query("DELETE FROM {$serendipity['dbPrefix']}dejure WHERE ckey = '" . $schluessel . "'");
serendipity_db_Query("INSERT INTO {$serendipity['dbPrefix']}dejure
(ckey, cache, last_update)
VALUES ('".$schluessel."', '".serendipity_db_escape_string($text)."', " . time() . ")");
}
}
}
}
}
function djo_vernetzen_ueber_cache(&$ausgangstext) {
global $serendipity;
$schluessel = md5($ausgangstext);
$schluessel = md5($ausgangstext);
$rueckgabe = serendipity_db_query("SELECT cache FROM {$serendipity['dbPrefix']}dejure
WHERE ckey = '".$schluessel."' AND last_update > " . (time()-86400*CACHE_VORHALT), true, 'assoc');
if (!empty($rueckgabe['cache']) && $rueckgabe['cache'] == "<!-- idem -->") {
return $ausgangstext;
} else {
return $rueckgabe['cache'];
}
if (!empty($rueckgabe['cache']) && $rueckgabe['cache'] == "<!-- idem -->") {
return $ausgangstext;
} else {
return $rueckgabe['cache'];
}
}
function djo_vernetzen(&$text) {
global $serendipity;
global $serendipity;
# Cache leeren wenn Option gesetzt
if ($this->get_config('cache') === true) {
@ -265,47 +281,49 @@ class serendipity_event_dejure extends serendipity_event
$this->set_config('cache', false);
}
if (!preg_match("/§|&sect;|Art\.|\/[0-9][0-9](?![0-9\/])|[0-9][0-9], /", $text) || preg_match("/<!--ohnedjo-->/", $text)) {
return false;
}
if (!preg_match("/§|&sect;|Art\.|\/[0-9][0-9](?![0-9\/])|[0-9][0-9], /", $text) || preg_match("/<!--ohnedjo-->/", $text)) {
return false;
}
$ergebnis = $this->djo_vernetzen_ueber_cache($text);
if (empty($ergebnis)) {
$ergebnis = $this->djo_vernetzen_ueber_dejure_org(
$text,
array(
'Anbieterkennung' => urlencode($this->get_config('mail') . '|' . $serendipity['blogTitle']),
'format' => $this->get_config('linkstyle'),
'target' => $this->get_config('target'),
'class' => $this->get_config('css'),
'newsletter' => serendipity_db_bool($this->get_config('newsletter')) ? 'ja' : 'nein',
'Schema' => 'https'
)
);
$ergebnis = $this->djo_vernetzen_ueber_cache($text);
if (empty($ergebnis)) {
$ergebnis = $this->djo_vernetzen_ueber_dejure_org(
$text,
array(
'Anbieterkennung' => urlencode($this->get_config('mail') . '|' . $serendipity['blogTitle']),
'format' => $this->get_config('linkstyle'),
'buzer' => $this->get_config('buzer'),
'ohnehtags' => $this->get_config('noheadings'),
'target' => $this->get_config('target'),
'class' => $this->get_config('css'),
'newsletter' => serendipity_db_bool($this->get_config('newsletter')) ? 'ja' : 'nein',
'Schema' => 'https'
)
);
if ($ergebnis !== false) {
$ergebnis = $this->integritaetskontrolle($text, $ergebnis);
}
if ($ergebnis) {
$this->djo_vernetzung_in_cache_schreiben[] = array($text, $ergebnis);
}
}
$this->djo_vernetzung_in_cache_schreiben[] = array($text, $ergebnis);
}
}
if ($ergebnis !== false) {
$text = $ergebnis;
}
$text = $ergebnis;
}
return true;
return true;
}
function integritaetskontrolle($ausgangstext, $neuertext) {
if (preg_replace("/<a href=\"https?:\/\/dejure.org\/[^>]*>([^<]*)<\/a>/i", "\\1", $ausgangstext) == preg_replace("/<a href=\"https?:\/\/dejure.org\/[^>]*>([^<]*)<\/a>/i", "\\1", $neuertext)) {
return $neuertext;
} else {
return $ausgangstext;
}
}
function integritaetskontrolle($ausgangstext, $neuertext) {
if (preg_replace("/<a href=\"https?:\/\/dejure.org\/[^>]*>([^<]*)<\/a>/i", "\\1", $ausgangstext) == preg_replace("/<a href=\"https?:\/\/dejure.org\/[^>]*>([^<]*)<\/a>/i", "\\1", $neuertext)) {
return $neuertext;
} else {
return $ausgangstext;
}
}
function event_hook($event, &$bag, &$eventData, $addData = null) {
global $serendipity;