User:Lilyuserin/FormExtension
Jump to navigation
Jump to search
Der Reset-Button funktioniert noch nicht.
Definition der Erweiterung
[edit]<?php
/**
* AffenForm.php
* This extension inserts a form into a page
* erzeugt ein sog. Affenformular, das mit Funktionen nach freier Wahl ergänzt werden kann
* To activate the functionality of this extension include the following in your
* LocalSettings.php file:
* require_once("$IP/extensions/AffenForm/AffenForm.php");
*/
###### Name used for the extension, tag, and settings page name #######
define("AFFEN_NAME", "affen"); # Name of tag
define("AFFEN_IDENTIFIER", "sendAffen"); # Name of POST identifier flag
if(! defined( 'MEDIAWIKI' ) ) {
echo( "This is an extension to the MediaWiki package and cannot be run standalone.\n" );
die( -1 );
} else {
$wgExtensionCredits['parserhook'][] = array(
'name' => AFFEN_NAME,
'version' => '0.0.1',
'author' =>'Ich selber',
'url' => 'https://commons.wikimedia.org/wiki/User:Lilyuserin/FormExtension',
'description' => 'erzeugt ein Affenformular'
);
}
# AffenForm MediaWiki extension
$wgExtensionFunctions[] = "wfAffenFormExtension";
function wfAffenFormExtension() {
global $wgParser;
global $wgHooks;
# register the extension with the WikiText parser
# the first parameter is the name of the new tag.
# In this case it defines the tag <EmailForm> ... </EmailForm>
# the second parameter is the callback function for
# processing the text between the tags
$wgParser->setHook( /*Default: <affen>*/ AFFEN_NAME, "renderAffenForm" );
}
Funktion für das Rendern des Formulars
[edit]function renderAffenForm( $input, $argv, $parser ) {
# $input ist das, was zwischen den Tags steht <affen>$input</affen>
# $argv sind die Attribute des Tags <affen attr1=val1 attr2=val2 />
# $argv = array ("attr1"=>"val1", "attr2"=>"val2")
reset($_POST); #This code eliminates an error related to referencing the $_POST array by 'sendEmailForm'
$ispost = current($_POST); # wenn gesetzt, wurde das Formular bereits abgeschickt
$keys = array_keys($argv);
$mode = strtolower(key($keys)); #This code eliminates an error related to referencing the $keys array by numerical keys
if ( $mode=='form' ) $argv = array_shift( $argv ); # Drop 'form' or 'result' for now
else $mode = 'form'; # Empty or a field type
$output = '';
foreach ($argv as $arg => $value) {
$output .= render_affen_field($arg, $value, $ispost, $input, $parser, '') ;#. $arg . $value;
}
if ( count($keys) != 1 )
{
$output = render_affen_field( $mode, '', $ispost, $input, $parser, $output );
$output .= '<p>' . htmlentities($output);
if (empty($_POST) )
{
$output .= "<p>noch nicht gesendet";
}
else
{
# hier die Zusatzaktionen einfügen
# testhalber werden hier die Eingabewerte angezeigt
# sowie die Rohvariante des Formulars
$eingaben = '';
foreach ($_POST as $arg => $val)
$eingaben .= "<p>Eingabefeld: $arg Eingabewert: ". htmlspecialchars($val);
$output .= "<p> gesendet do something useful" . $eingaben;
}
}
return $output;
}
Rendern der einzelnen Formularfelder
[edit]function render_affen_field($arg, $value, $ispost, $input, &$parser, $extra) {
global $wgTitle;
switch ( strtolower($arg) ) {
case 'form': # Form wrapper
$parser->disableCache(); #### Important: Disable Cache ####
return
'<form action="'. $wgTitle->getFullURL() . '" method="post">'
. '<input type="hidden" name="action" value="view" />'
. '<input type="hidden" name="' . AFFEN_IDENTIFIER . '" value="send" />'
. render_wikitext($parser, $input) . $extra
. '</form>';
case 'submit':
return ' <input type="submit" name="submit" value="' . $value . '"/> ';
break;
case 'reset':
#$_POST = array();
return ' <input type="submit" name="reset" value="' . $value . '"/> ';
break;
default:
if ($ispost and empty($_POST["reset"]))
$wert = $_POST[$arg];
else $wert = $arg;
# Build other form fields
# If the argument is numeric, it's a text field size
if ( $value > 0 ) {
$size = explode( 'x', $value );
return '<input type="text" name="' . $arg . '" size="' . $value . '" value="' . $wert . '" />';
}
# Arbitrary hidden fields
return '<input type="hidden" name="'.$arg.'" value="'.$value.'" />' ;
}
}