Hallo, ich habe nun nachdem ich einige wichtigere Dinge abarbeiten musste wieder etwas Zeit in die Lösung zum Quelltext versenden gesteckt. Hoffentlich nimmst du (lupo49) mir das nicht allzu übel dass ich mich immer nur sporadisch melde. Mittlerweile hab ich alles am Laufen, auch wenn noch einige kleinere Fehler drin sind. Meine Lösung ist allerdings anders als deine ursprüngliche, sie funktioniert so:
Beim Klick auf den Link "Artikel senden" wird eine Seite mit einem Formular geöffnet (siehe Quelltext unten). Dort kann der spätere Nutzer (freiwillig) seinen Namen, Email-Adresse (ich kann nicht davon ausgehen dass Name und Email im Wiki konfiguriert sind) sowie seine Feuerwehr angeben. Außerdem wird der Wiki-Quelltext in ein Textfeld eingefügt. Beim Klick auf "Senden" wird nun keine Email versandt wie ursprünglich angedacht (wie gesagt, in den meisten Fällen wird auf den eingesetzten Servern kein sendmail oder ähnliches eingerichtet sein), sondern ein PHP-Skript angestoßen welches die eingegebenen Daten mittels XMLRPC auf meinen Server übermittelt. Derzeit wird dann von dort aus die Mail versandt, vielleicht stell ich das ganze System dann aber auch auf eine Art Ticket-System um, das überlege ich mir dann wenn alles läuft.
Momentan stehe ich vor dem Problem, dass der HTML-Quelltext des Formulars noch vor dem kompletten Seitenquelltext ausgegeben wird und deswegen das Design total verhunzt ist. Ich habe schon eine gefühlte Ewigkeit recherchiert, aber komme einfach nicht drauf wie ich es schaffe dass der Quelltext erst im Inhaltsbereich des Templates ausgegeben wird. Mein modifizierter Quelltext der action.php des sendpagecontent-plugins ist derzeit:
<?php
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Matthias Schulte <dokuwiki@lupo49.de>
*/
// must be run within Dokuwiki
if (!defined('DOKU_INC')) die();
if (!defined('DOKU_LF')) define('DOKU_LF', "\n");
if (!defined('DOKU_TAB')) define('DOKU_TAB', "\t");
if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'action.php');
class action_plugin_sendpagecontent extends DokuWiki_Action_Plugin{
function register(&$controller) {
$controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_act_preprocess', array());
$controller->register_hook('TPL_ACT_UNKNOWN', 'BEFORE', $this, 'handle_tpl_act_unknown');
}
/**
* Handles sendpagecontent action
*/
function handle_act_preprocess(&$event, $param) {
global $ID;
global $INFO;
global $conf;
if ($event->data == 'sendpagecontent') {
// we can handle it -> prevent others
$event->preventDefault();
$event->stopPropagation();
// fetch raw wiki code
$raw = rawWiki($ID);
// eigener Quelltext eingefügt
echo '<h1>Einsatzleiterwiki-Artikel an das Projekt senden - Daten eingeben und prüfen</h1>';
echo '<p>Das Ausfüllen der untenstehenden Felder ist freiwillig. Wir bitten Sie jedoch diese auszufüllen, um Sie bei Rückfragen ggf. kontaktieren zu können.</p>';
echo '<p>Im großen Textfeld wird der Wiki-Quellcode Ihres Artikels angezeigt. Falls Sie beispielsweise lokal spezifische Daten entfernen möchten, können Sie dies nun vor dem Absenden erledigen. Zeichen wie beispielsweise die eckigen Klammern, Sternchen oder Gleichheitszeichen sind keine Fehler, sondern dienen als Steuerzeichen für Überschriften, Aufzählungen, Verlinkungen und Ähnliches. Bitte entfernen Sie diese nicht.</p>';
echo '<p> </p>';
echo '<form action="artikel_senden_client.php" method="post">';
echo '<p>Ihre Feuerwehr:<br /><input type="text" size="20" name="feuerwehr"></p>';
echo '<p>Ihr Name:<br /><input type="text" size="20" name="autor"></p>';
echo '<p>Ihre Emailadresse:<br /><input type="text" size="20" name="emailadresse"></p>';
echo '<p>Ihr Wiki-Artikel:<br /><textarea name="wikiquelle" cols="80" rows="30">'. $raw .'</textarea></p>';
echo '<input type="submit" value="Artikel absenden">';
echo '</form>';
return true;
}
return true;
}
function handle_tpl_act_unknown(&$event, $param) {
global $ID;
if($event->data != 'sendpagecontent') return false;
$event->preventDefault();
$event->stopPropagation();
}
}
Im Zuge meiner Recherchen bin ich auch schon darauf gestoßen, dass ein HTML-Form mit einem Security-Token versehen sein sollte, allerdings will ich die ganze Geschichte erstmal komplett zu Laufen bekommen bevor ich mir darum Gedanken mache.
Wenn ich meinen zusammengeschusterten Fork (falls man das dann schon so nennen kann) dann fehlerfrei am Laufen habe, werde ich selbstverstänlich den gesammelten Quelltext aller Dateien hier veröffenlichen. Auch wenn meine XMLRPC-Lösung eher auf auf zusammenkopiertem Trial and Error basiert als auf wirklichem Verständnis was da eigentlich gerade passiert...
Der Fehler mit dem nicht klickbaren Button lag übrigens beim Vector-Template, da müssen solche Action-Links offenbar in einem anderen Format angelegt werden, nämlich in folgender Form für das sendpagecontent-Plugin:
$_vector_boxes["p-coll-print_export"]["xhtml"] .= " <li id=\"t-sendpagecontent\"><a href=\"".wl(cleanID(getId()), array('do' => 'sendpagecontent'))."\">".hsc($lang["vector_toolbxdef_sendpagecontent"])."</a></li>\n";
In der Sprachdatei muss dann halt noch ein Eintrag für vector_toolbxdef_sendpagecontent angelegt werden