heiko-barth.de

// Aktuelle URL per Bookmarklet in DokuWiki speichern

Ich habe zwei Skripte erstellt, mit denen man die aktuell im Browser aufgerufene Seite und deren HTML-Titel per Bookmarklet in einer Wiki-Seite speichern kann.

Folgendes PHP-Skript muss angepasst auf dem Webserver hinterlegt werden:

bookmark.php
<?php
        # path to dokuwiki page
        $file = "/path/to/wiki/data/pages/bookmarks.txt";
 
        # ensure utf-8
        $url = iconv("UTF-8", "UTF-8//IGNORE", $_GET["url"]);
        $title = iconv("UTF-8", "UTF-8//IGNORE", $_GET["title"]);
 
        # dont break wiki syntax
        $search  = array('|', '[', ']');
        $replace = "-";
        $url = str_replace($search, $replace, $url);
        $title = str_replace($search, $replace, $title);
 
        # write to dokuwiki page
        if (file_put_contents($file, "\n  * [[" . $url . "|" . $title . "]]", FILE_APPEND | LOCK_EX) === false) {
                die("Error: Failed to add bookmark.");
        }
 
        # redirect back to source
        header("HTTP/1.1 302 Found");
        header("Location: " . $_GET["url"]);

Dieses Bookmarklet sendet die aktuelle URL und den HTML-Seitentitel an das auf dem Server hinterlegte PHP-Skript:

bookmarklet.js
javascript:(function(){location.href='http://example.com/bookmark.php?url='+encodeURIComponent(window.location.href)+'&title='+encodeURIComponent(document.title)})()

http://example.com muss natürlich an die eigenen Bedürfnisse angepasst werden.

// DokuWiki: TOC automatisch einklappen

DokuWiki bietet von Hause aus leider keine Möglichkeit, den TOC einer bestimmten Seite automatisch eingeklappt (collapsed) anzuzeigen. Standardmäßig ist der TOC ausgeklappt.

Mit folgendem Quick & Dirty Hack kann man dies pro Seite aktivieren:

<html>
	<script>
		// collapse TOC
		jQuery(document).ready(function() {
			jQuery('#dw__toc h3').click();
		});
	</script>
</html>

Hierfür muss allerdings HTML im Wiki-Markup erlaubt sein.

Getestet unter: DokuWiki 2012-10-13 „Adora Belle“ mit prsnl10 Template.

// Spambots

Spam

Ich habe mich ehrlich gesagt schon länger gefragt, warum bisher der Daily-Shit nicht von unseriösen Bots heimgesucht wurde. Naja, gestern war es jedenfalls soweit :-\ Von DNS-Blacklisten, Fingerprinting des HTTP-Header und Keyword-Matching mal abgesehen, funktionieren nur Captchas zuverlässig gegen Spam. Wer sie kennt weiß, sie nerven! Ich bin zum Glück über ein DokuWiki Plugin (captcha) gestolpert, dass das Thema Captcha sehr elegant löst:

Es wird ein Textfeld generiert, in dass man eine Zeichenkette eingeben muss. Beim Absenden eines Formulars wird das Textfeld allerdings automatisch per Java-Script befüllt. Außerdem ist das Textfeld „unsichtbar“. Somit läuft der Captcha-Prozess komplett im Hintergrund ohne Zutun des Benutzers ab. Da Spambots normalerweise kein Java-Script ausführen, können sie so erkannt und geblockt werden. Den Daily-Shit habe ich nun um dieses „Feature“ erweitert. Und was soll ich sagen? Es funktioniert prächtig! Seit gestern wurden 43 Spam-Versuche vereitelt 8-)

// DokuWiki: Verschlüsselte E-Mails senden

Mit dem Bureaucracy Plugin kann man ohne viel Aufwand ein Kontaktformular erstellen, dass die Daten anschließend per E-Mail versendet. Dies passiert im Klartext. Es gibt allerdings genügend Gründe E-Mails zu verschlüsseln.

Mit dem folgendem Quick-and-Dirty Hack, werden die Daten vor dem Senden mit einem fest hinterlegten öffentlichen GPG-Schlüssel des Empfängers verschlüsselt. Benötigt wird hierfür die OpenPGP Java-Script Implementierung von Herbert Hanewinkel. Ich habe in diesem Beispiel die 5 Java-Script Dateien im Verzeichnis /js auf meinem Webspace hinterlegt.

Auf einer DokuWiki-Seite folgendes einfügen:

<form>
fieldset "E-Mail"
textbox  "Name:"
email "E-Mail:" !
textbox "Betreff:" !
textarea "Text:"

Action mail foo@localhost
submit "E-Mail senden"
Thanks "Vielen Dank für ihre Nachricht."
</form>

Bei installiertem Bureaucracy Plugin erzeugt obiger DokuWiki-Code eine HTML-Form mit 4 Textfeldern (Name, E-Mail, Betreff und Text). Der Inhalt wird nach dem Klicken auf „E-Mail senden“ an foo@localhost geschickt.

// DokuWiki On A Stick

Nicht jeder möchte/hat die Möglichkeit, DokuWiki1) auf einem Webserver im Internet zu betreiben. Um trotzdem ständig Zugriff auf seine Wissenssammlung zu haben, kann man DokuWiki ebenfalls mit einem lokalen Webserver (microapache) benutzen, z.B. gespeichert auf einem USB-Stick. Ich habe eine kleine Anleitung zusammen gestellt, wie das unter Windows erledigt werden kann. Weitere Infos zu dem Thema und komplett fertig konfigurierte Pakete gibt es hier.

Anleitung

So soll anschließend die Verzeichnisstruktur aussehen:

USB-Stick
└── DokuWiki
    ├── conf
    │   └── Apache Konfiguration
    ├── dokuwiki
    │   └── DokuWiki Dateien
    ├── logs
    │   └── Apache Log Dateien
    ├── modules
    │   └── Apache Module
    ├── MicroApache Dateien
    ├── PHP Dateien
    └── Start/Stop Skripte
  1. Ein neues Verzeichnis (z.B. DokuWiki) auf dem USB-Stick erstellen
  2. MicroApache (2.0.x; no PHP) herunterladen und komplett in das Verzeichnis entpacken
  3. PHP (VC6; thread safe) herunterladen
    1. Folgende Dateien in das Verzeichnis entpacken: php5apache2.dll, php5ts.dll, php.ini, libeay32.dll, ssleay32.dll + Erweiterungen aus dem ext-Verzeichnis: php_gd2.dll, php_mbstring.dll, php_openssl.dll2) und php_sqlite.dll3)
  4. DokuWiki herunterladen und in das Verzeichnis entpacken oder eine bestehende Installation kopieren
  5. Konfigurationen anpassen:

conf/httpd.conf:

Listen 127.0.0.1:8800
ServerName DokuWiki
ServerRoot ./
DocumentRoot ./dokuwiki
ServerAdmin webmaster@localhost
Win32DisableAcceptEx On
LoadModule access_module modules/mod_access.dll
LoadModule dir_module modules/mod_dir.dll
LoadModule mime_module modules/mod_mime.dll
LoadModule rewrite_module modules/mod_rewrite.dll
LoadModule php5_module "php5apache2.dll"
AddType application/x-httpd-php .php .php3
AcceptPathInfo off
KeepAlive on
KeepAliveTimeout 15
ServerTokens Prod
TimeOut 30
DirectoryIndex index.php

2)
optional, wird für HTTPS Zugriffe benötigt
3)
optional, wird z.B. vom blogtng Plugin benötigt
Web 2.0



RSS   RSS abonieren

Github   Github
QR Code