User:Lilyuserin/FormExtension

From Wikimedia Commons, the free media repository
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.'" />' ;
	}
}