1fdb8d77bSTom N Harris<?php 2fdb8d77bSTom N Harris/** 3fdb8d77bSTom N Harris * DokuWiki XHTML Form 4fdb8d77bSTom N Harris * 5fdb8d77bSTom N Harris * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 7fdb8d77bSTom N Harris */ 8fdb8d77bSTom N Harris 9f600e75aSAndreas Gohr// phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps 10f600e75aSAndreas Gohr// phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore 11f600e75aSAndreas Gohr 12f600e75aSAndreas Gohr 13fdb8d77bSTom N Harris/** 14fdb8d77bSTom N Harris * Class for creating simple HTML forms. 15fdb8d77bSTom N Harris * 16fdb8d77bSTom N Harris * The forms is built from a list of pseudo-tags (arrays with expected keys). 17fdb8d77bSTom N Harris * Every pseudo-tag must have the key '_elem' set to the name of the element. 18fdb8d77bSTom N Harris * When printed, the form class calls functions named 'form_$type' for each 19fdb8d77bSTom N Harris * element it contains. 20fdb8d77bSTom N Harris * 21fdb8d77bSTom N Harris * Standard practice is for non-attribute keys in a pseudo-element to start 22fdb8d77bSTom N Harris * with '_'. Other keys are HTML attributes that will be included in the element 23fdb8d77bSTom N Harris * tag. That way, the element output functions can pass the pseudo-element 24fdb8d77bSTom N Harris * directly to buildAttributes. 25fdb8d77bSTom N Harris * 26fdb8d77bSTom N Harris * See the form_make* functions later in this file. 27fdb8d77bSTom N Harris * 28f600e75aSAndreas Gohr * Please note that even though this class is technically deprecated (use dokuwiki\Form instead), 29f600e75aSAndreas Gohr * it is still widely used in the core and the related form events. Until those have been rewritten, 30f600e75aSAndreas Gohr * this will continue to be used 31f600e75aSAndreas Gohr * 32f600e75aSAndreas Gohr * @deprecated 2019-07-14 33fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 34fdb8d77bSTom N Harris */ 35*9d01c1d9SSatoshi Saharaclass Doku_Form 36*9d01c1d9SSatoshi Sahara{ 37fdb8d77bSTom N Harris // Form id attribute 381534dc5bSAndreas Gohr public $params = array(); 39fdb8d77bSTom N Harris 40fdb8d77bSTom N Harris // Draw a border around form fields. 41fdb8d77bSTom N Harris // Adds <fieldset></fieldset> around the elements 421534dc5bSAndreas Gohr public $_infieldset = false; 43fdb8d77bSTom N Harris 44fdb8d77bSTom N Harris // Hidden form fields. 451534dc5bSAndreas Gohr public $_hidden = array(); 46fdb8d77bSTom N Harris 47fdb8d77bSTom N Harris // Array of pseudo-tags 481534dc5bSAndreas Gohr public $_content = array(); 49fdb8d77bSTom N Harris 50fdb8d77bSTom N Harris /** 51fdb8d77bSTom N Harris * Constructor 52fdb8d77bSTom N Harris * 53e351c80dSAdrian Lang * Sets parameters and autoadds a security token. The old calling convention 54e351c80dSAdrian Lang * with up to four parameters is deprecated, instead the first parameter 55e351c80dSAdrian Lang * should be an array with parameters. 561b2a85e8SAndreas Gohr * 575f0071ebSGerrit Uitslag * @param mixed $params Parameters for the HTML form element; Using the deprecated 585f0071ebSGerrit Uitslag * calling convention this is the ID attribute of the form 595f0071ebSGerrit Uitslag * @param bool|string $action (optional, deprecated) submit URL, defaults to current page 605f0071ebSGerrit Uitslag * @param bool|string $method (optional, deprecated) 'POST' or 'GET', default is POST 615f0071ebSGerrit Uitslag * @param bool|string $enctype (optional, deprecated) Encoding type of the data 6242ea7f44SGerrit Uitslag * 63fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 64fdb8d77bSTom N Harris */ 65*9d01c1d9SSatoshi Sahara public function __construct($params, $action=false, $method=false, $enctype=false) 66*9d01c1d9SSatoshi Sahara { 67e351c80dSAdrian Lang if (!is_array($params)) { 68e351c80dSAdrian Lang $this->params = array('id' => $params); 69e351c80dSAdrian Lang if ($action !== false) $this->params['action'] = $action; 70b4033556SMichael Klier if ($method !== false) $this->params['method'] = strtolower($method); 71e351c80dSAdrian Lang if ($enctype !== false) $this->params['enctype'] = $enctype; 72e351c80dSAdrian Lang } else { 73e351c80dSAdrian Lang $this->params = $params; 74e351c80dSAdrian Lang } 75804e2f2fSAdrian Lang 76e351c80dSAdrian Lang if (!isset($this->params['method'])) { 77b4033556SMichael Klier $this->params['method'] = 'post'; 78b4033556SMichael Klier } else { 79b4033556SMichael Klier $this->params['method'] = strtolower($this->params['method']); 80b4033556SMichael Klier } 81b4033556SMichael Klier 82b4033556SMichael Klier if (!isset($this->params['action'])) { 83b4033556SMichael Klier $this->params['action'] = ''; 84e351c80dSAdrian Lang } 851b2a85e8SAndreas Gohr 861b2a85e8SAndreas Gohr $this->addHidden('sectok', getSecurityToken()); 87fdb8d77bSTom N Harris } 88fdb8d77bSTom N Harris 89fdb8d77bSTom N Harris /** 90fdb8d77bSTom N Harris * startFieldset 91fdb8d77bSTom N Harris * 92fdb8d77bSTom N Harris * Add <fieldset></fieldset> tags around fields. 93fdb8d77bSTom N Harris * Usually results in a border drawn around the form. 94fdb8d77bSTom N Harris * 95fdb8d77bSTom N Harris * @param string $legend Label that will be printed with the border. 9642ea7f44SGerrit Uitslag * 97fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 98fdb8d77bSTom N Harris */ 99*9d01c1d9SSatoshi Sahara public function startFieldset($legend) 100*9d01c1d9SSatoshi Sahara { 101fdb8d77bSTom N Harris if ($this->_infieldset) { 102fdb8d77bSTom N Harris $this->addElement(array('_elem'=>'closefieldset')); 103fdb8d77bSTom N Harris } 104fdb8d77bSTom N Harris $this->addElement(array('_elem'=>'openfieldset', '_legend'=>$legend)); 105fdb8d77bSTom N Harris $this->_infieldset = true; 106fdb8d77bSTom N Harris } 107fdb8d77bSTom N Harris 108fdb8d77bSTom N Harris /** 109fdb8d77bSTom N Harris * endFieldset 110fdb8d77bSTom N Harris * 111fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 112fdb8d77bSTom N Harris */ 113*9d01c1d9SSatoshi Sahara public function endFieldset() 114*9d01c1d9SSatoshi Sahara { 115fdb8d77bSTom N Harris if ($this->_infieldset) { 116fdb8d77bSTom N Harris $this->addElement(array('_elem'=>'closefieldset')); 117fdb8d77bSTom N Harris } 118fdb8d77bSTom N Harris $this->_infieldset = false; 119fdb8d77bSTom N Harris } 120fdb8d77bSTom N Harris 121fdb8d77bSTom N Harris /** 122fdb8d77bSTom N Harris * addHidden 123fdb8d77bSTom N Harris * 124fdb8d77bSTom N Harris * Adds a name/value pair as a hidden field. 125fdb8d77bSTom N Harris * The value of the field (but not the name) will be passed to 126fdb8d77bSTom N Harris * formText() before printing. 127fdb8d77bSTom N Harris * 128fdb8d77bSTom N Harris * @param string $name Field name. 129fdb8d77bSTom N Harris * @param string $value Field value. If null, remove a previously added field. 13042ea7f44SGerrit Uitslag * 131fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 132fdb8d77bSTom N Harris */ 133*9d01c1d9SSatoshi Sahara public function addHidden($name, $value) 134*9d01c1d9SSatoshi Sahara { 135fdb8d77bSTom N Harris if (is_null($value)) 136fdb8d77bSTom N Harris unset($this->_hidden[$name]); 137fdb8d77bSTom N Harris else 138fdb8d77bSTom N Harris $this->_hidden[$name] = $value; 139fdb8d77bSTom N Harris } 140fdb8d77bSTom N Harris 141fdb8d77bSTom N Harris /** 142fdb8d77bSTom N Harris * addElement 143fdb8d77bSTom N Harris * 144fdb8d77bSTom N Harris * Appends a content element to the form. 145fdb8d77bSTom N Harris * The element can be either a pseudo-tag or string. 146fdb8d77bSTom N Harris * If string, it is printed without escaping special chars. * 147fdb8d77bSTom N Harris * 1484f0bc4b2SAndreas Gohr * @param string|array $elem Pseudo-tag or string to add to the form. 14942ea7f44SGerrit Uitslag * 150fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 151fdb8d77bSTom N Harris */ 152*9d01c1d9SSatoshi Sahara public function addElement($elem) 153*9d01c1d9SSatoshi Sahara { 154fdb8d77bSTom N Harris $this->_content[] = $elem; 155fdb8d77bSTom N Harris } 156fdb8d77bSTom N Harris 157fdb8d77bSTom N Harris /** 158fdb8d77bSTom N Harris * insertElement 159fdb8d77bSTom N Harris * 160fdb8d77bSTom N Harris * Inserts a content element at a position. 161fdb8d77bSTom N Harris * 162fdb8d77bSTom N Harris * @param string $pos 0-based index where the element will be inserted. 1634f0bc4b2SAndreas Gohr * @param string|array $elem Pseudo-tag or string to add to the form. 16442ea7f44SGerrit Uitslag * 165fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 166fdb8d77bSTom N Harris */ 167*9d01c1d9SSatoshi Sahara public function insertElement($pos, $elem) 168*9d01c1d9SSatoshi Sahara { 169fdb8d77bSTom N Harris array_splice($this->_content, $pos, 0, array($elem)); 170fdb8d77bSTom N Harris } 171fdb8d77bSTom N Harris 172fdb8d77bSTom N Harris /** 173fdb8d77bSTom N Harris * replaceElement 174fdb8d77bSTom N Harris * 175fdb8d77bSTom N Harris * Replace with NULL to remove an element. 176fdb8d77bSTom N Harris * 177fdb8d77bSTom N Harris * @param int $pos 0-based index the element will be placed at. 1784f0bc4b2SAndreas Gohr * @param string|array $elem Pseudo-tag or string to add to the form. 17942ea7f44SGerrit Uitslag * 180fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 181fdb8d77bSTom N Harris */ 182*9d01c1d9SSatoshi Sahara public function replaceElement($pos, $elem) 183*9d01c1d9SSatoshi Sahara { 184fdb8d77bSTom N Harris $rep = array(); 185fdb8d77bSTom N Harris if (!is_null($elem)) $rep[] = $elem; 186fdb8d77bSTom N Harris array_splice($this->_content, $pos, 1, $rep); 187fdb8d77bSTom N Harris } 188fdb8d77bSTom N Harris 189fdb8d77bSTom N Harris /** 190fdb8d77bSTom N Harris * findElementByType 191fdb8d77bSTom N Harris * 192fdb8d77bSTom N Harris * Gets the position of the first of a type of element. 193fdb8d77bSTom N Harris * 194fdb8d77bSTom N Harris * @param string $type Element type to look for. 19542ea7f44SGerrit Uitslag * @return int|false position of element if found, otherwise false 19642ea7f44SGerrit Uitslag * 197fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 198fdb8d77bSTom N Harris */ 199*9d01c1d9SSatoshi Sahara public function findElementByType($type) 200*9d01c1d9SSatoshi Sahara { 201fdb8d77bSTom N Harris foreach ($this->_content as $pos => $elem) { 202fdb8d77bSTom N Harris if (is_array($elem) && $elem['_elem'] == $type) 203fdb8d77bSTom N Harris return $pos; 204fdb8d77bSTom N Harris } 205fdb8d77bSTom N Harris return false; 206fdb8d77bSTom N Harris } 207fdb8d77bSTom N Harris 208fdb8d77bSTom N Harris /** 209fdb8d77bSTom N Harris * findElementById 210fdb8d77bSTom N Harris * 211fdb8d77bSTom N Harris * Gets the position of the element with an ID attribute. 212fdb8d77bSTom N Harris * 213fdb8d77bSTom N Harris * @param string $id ID of the element to find. 21442ea7f44SGerrit Uitslag * @return int|false position of element if found, otherwise false 21542ea7f44SGerrit Uitslag * 216fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 217fdb8d77bSTom N Harris */ 218*9d01c1d9SSatoshi Sahara public function findElementById($id) 219*9d01c1d9SSatoshi Sahara { 220fdb8d77bSTom N Harris foreach ($this->_content as $pos => $elem) { 221fdb8d77bSTom N Harris if (is_array($elem) && isset($elem['id']) && $elem['id'] == $id) 222fdb8d77bSTom N Harris return $pos; 223fdb8d77bSTom N Harris } 224fdb8d77bSTom N Harris return false; 225fdb8d77bSTom N Harris } 226fdb8d77bSTom N Harris 227fdb8d77bSTom N Harris /** 228fdb8d77bSTom N Harris * findElementByAttribute 229fdb8d77bSTom N Harris * 230fdb8d77bSTom N Harris * Gets the position of the first element with a matching attribute value. 231fdb8d77bSTom N Harris * 232fdb8d77bSTom N Harris * @param string $name Attribute name. 233fdb8d77bSTom N Harris * @param string $value Attribute value. 23442ea7f44SGerrit Uitslag * @return int|false position of element if found, otherwise false 23542ea7f44SGerrit Uitslag * 236fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 237fdb8d77bSTom N Harris */ 238*9d01c1d9SSatoshi Sahara public function findElementByAttribute($name, $value) 239*9d01c1d9SSatoshi Sahara { 240fdb8d77bSTom N Harris foreach ($this->_content as $pos => $elem) { 241fdb8d77bSTom N Harris if (is_array($elem) && isset($elem[$name]) && $elem[$name] == $value) 242fdb8d77bSTom N Harris return $pos; 243fdb8d77bSTom N Harris } 244fdb8d77bSTom N Harris return false; 245fdb8d77bSTom N Harris } 246fdb8d77bSTom N Harris 247fdb8d77bSTom N Harris /** 248fdb8d77bSTom N Harris * getElementAt 249fdb8d77bSTom N Harris * 250fdb8d77bSTom N Harris * Returns a reference to the element at a position. 251fdb8d77bSTom N Harris * A position out-of-bounds will return either the 252fdb8d77bSTom N Harris * first (underflow) or last (overflow) element. 253fdb8d77bSTom N Harris * 254fdb8d77bSTom N Harris * @param int $pos 0-based index 255fdb8d77bSTom N Harris * @return array reference pseudo-element 25642ea7f44SGerrit Uitslag * 257fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 258fdb8d77bSTom N Harris */ 259*9d01c1d9SSatoshi Sahara public function &getElementAt($pos) 260*9d01c1d9SSatoshi Sahara { 261fdb8d77bSTom N Harris if ($pos < 0) $pos = count($this->_content) + $pos; 262fdb8d77bSTom N Harris if ($pos < 0) $pos = 0; 263fdb8d77bSTom N Harris if ($pos >= count($this->_content)) $pos = count($this->_content) - 1; 264fdb8d77bSTom N Harris return $this->_content[$pos]; 265fdb8d77bSTom N Harris } 266fdb8d77bSTom N Harris 267fdb8d77bSTom N Harris /** 268b81b193eSAndreas Gohr * Return the assembled HTML for the form. 269fdb8d77bSTom N Harris * 270fdb8d77bSTom N Harris * Each element in the form will be passed to a function named 271fdb8d77bSTom N Harris * 'form_$type'. The function should return the HTML to be printed. 272fdb8d77bSTom N Harris * 273fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 27442ea7f44SGerrit Uitslag * 27542ea7f44SGerrit Uitslag * @return string html of the form 276fdb8d77bSTom N Harris */ 277*9d01c1d9SSatoshi Sahara public function getForm() 278*9d01c1d9SSatoshi Sahara { 279fdb8d77bSTom N Harris global $lang; 280b81b193eSAndreas Gohr $form = ''; 281e351c80dSAdrian Lang $this->params['accept-charset'] = $lang['encoding']; 2829f09385fSAndreas Gohr $form .= '<form '. buildAttributes($this->params,false) .'><div class="no">'. DOKU_LF; 283fdb8d77bSTom N Harris if (!empty($this->_hidden)) { 284fdb8d77bSTom N Harris foreach ($this->_hidden as $name => $value) 285b81b193eSAndreas Gohr $form .= form_hidden(array('name'=>$name, 'value'=>$value)); 286fdb8d77bSTom N Harris } 287fdb8d77bSTom N Harris foreach ($this->_content as $element) { 288fdb8d77bSTom N Harris if (is_array($element)) { 289fdb8d77bSTom N Harris $elem_type = $element['_elem']; 290fdb8d77bSTom N Harris if (function_exists('form_'.$elem_type)) { 291b81b193eSAndreas Gohr $form .= call_user_func('form_'.$elem_type, $element).DOKU_LF; 292fdb8d77bSTom N Harris } 293fdb8d77bSTom N Harris } else { 294b81b193eSAndreas Gohr $form .= $element; 295fdb8d77bSTom N Harris } 296fdb8d77bSTom N Harris } 297b81b193eSAndreas Gohr if ($this->_infieldset) $form .= form_closefieldset().DOKU_LF; 298b81b193eSAndreas Gohr $form .= '</div></form>'.DOKU_LF; 299b81b193eSAndreas Gohr 300b81b193eSAndreas Gohr return $form; 301b81b193eSAndreas Gohr } 302b81b193eSAndreas Gohr 303b81b193eSAndreas Gohr /** 304b81b193eSAndreas Gohr * Print the assembled form 305b81b193eSAndreas Gohr * 306b81b193eSAndreas Gohr * wraps around getForm() 307b81b193eSAndreas Gohr */ 308*9d01c1d9SSatoshi Sahara public function printForm() 309*9d01c1d9SSatoshi Sahara { 310b81b193eSAndreas Gohr echo $this->getForm(); 311fdb8d77bSTom N Harris } 312fdb8d77bSTom N Harris 3135b75cd1fSAdrian Lang /** 3145b75cd1fSAdrian Lang * Add a radio set 3155b75cd1fSAdrian Lang * 3165b75cd1fSAdrian Lang * This function adds a set of radio buttons to the form. If $_POST[$name] 3175b75cd1fSAdrian Lang * is set, this radio is preselected, else the first radio button. 3185b75cd1fSAdrian Lang * 3195b75cd1fSAdrian Lang * @param string $name The HTML field name 3205b75cd1fSAdrian Lang * @param array $entries An array of entries $value => $caption 3215b75cd1fSAdrian Lang * 3225b75cd1fSAdrian Lang * @author Adrian Lang <lang@cosmocode.de> 3235b75cd1fSAdrian Lang */ 3245b75cd1fSAdrian Lang 325*9d01c1d9SSatoshi Sahara public function addRadioSet($name, $entries) 326*9d01c1d9SSatoshi Sahara { 327f0859d4bSTom N Harris global $INPUT; 328f0859d4bSTom N Harris $value = (array_key_exists($INPUT->post->str($name), $entries)) ? 329f0859d4bSTom N Harris $INPUT->str($name) : key($entries); 3305b75cd1fSAdrian Lang foreach($entries as $val => $cap) { 3315b75cd1fSAdrian Lang $data = ($value === $val) ? array('checked' => 'checked') : array(); 3325b75cd1fSAdrian Lang $this->addElement(form_makeRadioField($name, $val, $cap, '', '', $data)); 3335b75cd1fSAdrian Lang } 3345b75cd1fSAdrian Lang } 3355b75cd1fSAdrian Lang 336fdb8d77bSTom N Harris} 337fdb8d77bSTom N Harris 338fdb8d77bSTom N Harris/** 339fdb8d77bSTom N Harris * form_makeTag 340fdb8d77bSTom N Harris * 341fdb8d77bSTom N Harris * Create a form element for a non-specific empty tag. 342fdb8d77bSTom N Harris * 343fdb8d77bSTom N Harris * @param string $tag Tag name. 344fdb8d77bSTom N Harris * @param array $attrs Optional attributes. 345fdb8d77bSTom N Harris * @return array pseudo-tag 34642ea7f44SGerrit Uitslag * 347fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 348fdb8d77bSTom N Harris */ 349fdb8d77bSTom N Harrisfunction form_makeTag($tag, $attrs=array()) { 350fdb8d77bSTom N Harris $elem = array('_elem'=>'tag', '_tag'=>$tag); 351fdb8d77bSTom N Harris return array_merge($elem, $attrs); 352fdb8d77bSTom N Harris} 353fdb8d77bSTom N Harris 354fdb8d77bSTom N Harris/** 355fdb8d77bSTom N Harris * form_makeOpenTag 356fdb8d77bSTom N Harris * 357fdb8d77bSTom N Harris * Create a form element for a non-specific opening tag. 358fdb8d77bSTom N Harris * Remember to put a matching close tag after this as well. 359fdb8d77bSTom N Harris * 360fdb8d77bSTom N Harris * @param string $tag Tag name. 361fdb8d77bSTom N Harris * @param array $attrs Optional attributes. 362fdb8d77bSTom N Harris * @return array pseudo-tag 36342ea7f44SGerrit Uitslag * 364fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 365fdb8d77bSTom N Harris */ 366fdb8d77bSTom N Harrisfunction form_makeOpenTag($tag, $attrs=array()) { 367fdb8d77bSTom N Harris $elem = array('_elem'=>'opentag', '_tag'=>$tag); 368fdb8d77bSTom N Harris return array_merge($elem, $attrs); 369fdb8d77bSTom N Harris} 370fdb8d77bSTom N Harris 371fdb8d77bSTom N Harris/** 372fdb8d77bSTom N Harris * form_makeCloseTag 373fdb8d77bSTom N Harris * 374fdb8d77bSTom N Harris * Create a form element for a non-specific closing tag. 375fdb8d77bSTom N Harris * Careless use of this will result in invalid XHTML. 376fdb8d77bSTom N Harris * 377fdb8d77bSTom N Harris * @param string $tag Tag name. 378fdb8d77bSTom N Harris * @return array pseudo-tag 37942ea7f44SGerrit Uitslag * 380fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 381fdb8d77bSTom N Harris */ 382fdb8d77bSTom N Harrisfunction form_makeCloseTag($tag) { 383fdb8d77bSTom N Harris return array('_elem'=>'closetag', '_tag'=>$tag); 384fdb8d77bSTom N Harris} 385fdb8d77bSTom N Harris 386fdb8d77bSTom N Harris/** 387fdb8d77bSTom N Harris * form_makeWikiText 388fdb8d77bSTom N Harris * 389fdb8d77bSTom N Harris * Create a form element for a textarea containing wiki text. 390fdb8d77bSTom N Harris * Only one wikitext element is allowed on a page. It will have 391fdb8d77bSTom N Harris * a name of 'wikitext' and id 'wiki__text'. The text will 392fdb8d77bSTom N Harris * be passed to formText() before printing. 393fdb8d77bSTom N Harris * 394fdb8d77bSTom N Harris * @param string $text Text to fill the field with. 395fdb8d77bSTom N Harris * @param array $attrs Optional attributes. 396fdb8d77bSTom N Harris * @return array pseudo-tag 39742ea7f44SGerrit Uitslag * 398fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 399fdb8d77bSTom N Harris */ 400fdb8d77bSTom N Harrisfunction form_makeWikiText($text, $attrs=array()) { 401b2bc77d5STom N Harris $elem = array('_elem'=>'wikitext', '_text'=>$text, 402b2bc77d5STom N Harris 'class'=>'edit', 'cols'=>'80', 'rows'=>'10'); 403fdb8d77bSTom N Harris return array_merge($elem, $attrs); 404fdb8d77bSTom N Harris} 405fdb8d77bSTom N Harris 406fdb8d77bSTom N Harris/** 407fdb8d77bSTom N Harris * form_makeButton 408fdb8d77bSTom N Harris * 409fdb8d77bSTom N Harris * Create a form element for an action button. 410fdb8d77bSTom N Harris * A title will automatically be generated using the value and 411fdb8d77bSTom N Harris * accesskey attributes, unless you provide one. 412fdb8d77bSTom N Harris * 413fdb8d77bSTom N Harris * @param string $type Type attribute. 'submit' or 'cancel' 414fdb8d77bSTom N Harris * @param string $act Wiki action of the button, will be used as the do= parameter 415fdb8d77bSTom N Harris * @param string $value (optional) Displayed label. Uses $act if not provided. 416fdb8d77bSTom N Harris * @param array $attrs Optional attributes. 417fdb8d77bSTom N Harris * @return array pseudo-tag 41842ea7f44SGerrit Uitslag * 419fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 420fdb8d77bSTom N Harris */ 421fdb8d77bSTom N Harrisfunction form_makeButton($type, $act, $value='', $attrs=array()) { 422fdb8d77bSTom N Harris if ($value == '') $value = $act; 423b2bc77d5STom N Harris $elem = array('_elem'=>'button', 'type'=>$type, '_action'=>$act, 424ae614416SAnika Henke 'value'=>$value); 425fdb8d77bSTom N Harris if (!empty($attrs['accesskey']) && empty($attrs['title'])) { 42607493d05SAnika Henke $attrs['title'] = $value .' ['. strtoupper($attrs['accesskey']) .']'; 427fdb8d77bSTom N Harris } 428fdb8d77bSTom N Harris return array_merge($elem, $attrs); 429fdb8d77bSTom N Harris} 430fdb8d77bSTom N Harris 431fdb8d77bSTom N Harris/** 432fdb8d77bSTom N Harris * form_makeField 433fdb8d77bSTom N Harris * 434fdb8d77bSTom N Harris * Create a form element for a labelled input element. 435fdb8d77bSTom N Harris * The label text will be printed before the input. 436fdb8d77bSTom N Harris * 437fdb8d77bSTom N Harris * @param string $type Type attribute of input. 438fdb8d77bSTom N Harris * @param string $name Name attribute of the input. 439fdb8d77bSTom N Harris * @param string $value (optional) Default value. 440fdb8d77bSTom N Harris * @param string $class Class attribute of the label. If this is 'block', 441fdb8d77bSTom N Harris * then a line break will be added after the field. 442fdb8d77bSTom N Harris * @param string $label Label that will be printed before the input. 443fdb8d77bSTom N Harris * @param string $id ID attribute of the input. If set, the label will 444fdb8d77bSTom N Harris * reference it with a 'for' attribute. 445fdb8d77bSTom N Harris * @param array $attrs Optional attributes. 446fdb8d77bSTom N Harris * @return array pseudo-tag 44742ea7f44SGerrit Uitslag * 448fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 449fdb8d77bSTom N Harris */ 450fdb8d77bSTom N Harrisfunction form_makeField($type, $name, $value='', $label=null, $id='', $class='', $attrs=array()) { 451fdb8d77bSTom N Harris if (is_null($label)) $label = $name; 452fdb8d77bSTom N Harris $elem = array('_elem'=>'field', '_text'=>$label, '_class'=>$class, 453fdb8d77bSTom N Harris 'type'=>$type, 'id'=>$id, 'name'=>$name, 'value'=>$value); 454fdb8d77bSTom N Harris return array_merge($elem, $attrs); 455fdb8d77bSTom N Harris} 456fdb8d77bSTom N Harris 457fdb8d77bSTom N Harris/** 458fdb8d77bSTom N Harris * form_makeFieldRight 459fdb8d77bSTom N Harris * 460fdb8d77bSTom N Harris * Create a form element for a labelled input element. 461fdb8d77bSTom N Harris * The label text will be printed after the input. 462fdb8d77bSTom N Harris * 463fdb8d77bSTom N Harris * @see form_makeField 464fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 465f50a239bSTakamura * 466f50a239bSTakamura * @param string $type 467f50a239bSTakamura * @param string $name 468f50a239bSTakamura * @param string $value 469f50a239bSTakamura * @param null|string $label 470f50a239bSTakamura * @param string $id 471f50a239bSTakamura * @param string $class 472f50a239bSTakamura * @param array $attrs 473f50a239bSTakamura * 474f50a239bSTakamura * @return array 475fdb8d77bSTom N Harris */ 476fdb8d77bSTom N Harrisfunction form_makeFieldRight($type, $name, $value='', $label=null, $id='', $class='', $attrs=array()) { 477fdb8d77bSTom N Harris if (is_null($label)) $label = $name; 478fdb8d77bSTom N Harris $elem = array('_elem'=>'fieldright', '_text'=>$label, '_class'=>$class, 479fdb8d77bSTom N Harris 'type'=>$type, 'id'=>$id, 'name'=>$name, 'value'=>$value); 480fdb8d77bSTom N Harris return array_merge($elem, $attrs); 481fdb8d77bSTom N Harris} 482fdb8d77bSTom N Harris 483fdb8d77bSTom N Harris/** 484fdb8d77bSTom N Harris * form_makeTextField 485fdb8d77bSTom N Harris * 486fdb8d77bSTom N Harris * Create a form element for a text input element with label. 487fdb8d77bSTom N Harris * 488fdb8d77bSTom N Harris * @see form_makeField 489fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 490f50a239bSTakamura * 491f50a239bSTakamura * @param string $name 492f50a239bSTakamura * @param string $value 493f50a239bSTakamura * @param null|string $label 494f50a239bSTakamura * @param string $id 495f50a239bSTakamura * @param string $class 496f50a239bSTakamura * @param array $attrs 497f50a239bSTakamura * 498f50a239bSTakamura * @return array 499fdb8d77bSTom N Harris */ 500fdb8d77bSTom N Harrisfunction form_makeTextField($name, $value='', $label=null, $id='', $class='', $attrs=array()) { 501fdb8d77bSTom N Harris if (is_null($label)) $label = $name; 502fdb8d77bSTom N Harris $elem = array('_elem'=>'textfield', '_text'=>$label, '_class'=>$class, 503b2bc77d5STom N Harris 'id'=>$id, 'name'=>$name, 'value'=>$value, 'class'=>'edit'); 504fdb8d77bSTom N Harris return array_merge($elem, $attrs); 505fdb8d77bSTom N Harris} 506fdb8d77bSTom N Harris 507fdb8d77bSTom N Harris/** 508fdb8d77bSTom N Harris * form_makePasswordField 509fdb8d77bSTom N Harris * 510fdb8d77bSTom N Harris * Create a form element for a password input element with label. 511fdb8d77bSTom N Harris * Password elements have no default value, for obvious reasons. 512fdb8d77bSTom N Harris * 513fdb8d77bSTom N Harris * @see form_makeField 514fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 515f50a239bSTakamura * 516f50a239bSTakamura * @param string $name 517f50a239bSTakamura * @param null|string $label 518f50a239bSTakamura * @param string $id 519f50a239bSTakamura * @param string $class 520f50a239bSTakamura * @param array $attrs 521f50a239bSTakamura * 522f50a239bSTakamura * @return array 523fdb8d77bSTom N Harris */ 524fdb8d77bSTom N Harrisfunction form_makePasswordField($name, $label=null, $id='', $class='', $attrs=array()) { 525fdb8d77bSTom N Harris if (is_null($label)) $label = $name; 526fdb8d77bSTom N Harris $elem = array('_elem'=>'passwordfield', '_text'=>$label, '_class'=>$class, 527b2bc77d5STom N Harris 'id'=>$id, 'name'=>$name, 'class'=>'edit'); 528fdb8d77bSTom N Harris return array_merge($elem, $attrs); 529fdb8d77bSTom N Harris} 530fdb8d77bSTom N Harris 531fdb8d77bSTom N Harris/** 53212bbca2eSMichael Klier * form_makeFileField 53312bbca2eSMichael Klier * 53412bbca2eSMichael Klier * Create a form element for a file input element with label 53512bbca2eSMichael Klier * 53612bbca2eSMichael Klier * @see form_makeField 53712bbca2eSMichael Klier * @author Michael Klier <chi@chimeric.de> 538f50a239bSTakamura * 539f50a239bSTakamura * @param string $name 540f50a239bSTakamura * @param null|string $label 541f50a239bSTakamura * @param string $id 542f50a239bSTakamura * @param string $class 543f50a239bSTakamura * @param array $attrs 544f50a239bSTakamura * 545f50a239bSTakamura * @return array 54612bbca2eSMichael Klier */ 54712bbca2eSMichael Klierfunction form_makeFileField($name, $label=null, $id='', $class='', $attrs=array()) { 54812bbca2eSMichael Klier if (is_null($label)) $label = $name; 54912bbca2eSMichael Klier $elem = array('_elem'=>'filefield', '_text'=>$label, '_class'=>$class, 55012bbca2eSMichael Klier 'id'=>$id, 'name'=>$name, 'class'=>'edit'); 55112bbca2eSMichael Klier return array_merge($elem, $attrs); 55212bbca2eSMichael Klier} 55312bbca2eSMichael Klier 55412bbca2eSMichael Klier/** 555fdb8d77bSTom N Harris * form_makeCheckboxField 556fdb8d77bSTom N Harris * 557fdb8d77bSTom N Harris * Create a form element for a checkbox input element with label. 5582f10258cSAdrian Lang * If $value is an array, a hidden field with the same name and the value 5592f10258cSAdrian Lang * $value[1] is constructed as well. 560fdb8d77bSTom N Harris * 561fdb8d77bSTom N Harris * @see form_makeFieldRight 562fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 563f50a239bSTakamura * 564f50a239bSTakamura * @param string $name 565f50a239bSTakamura * @param string $value 566f50a239bSTakamura * @param null|string $label 567f50a239bSTakamura * @param string $id 568f50a239bSTakamura * @param string $class 569f50a239bSTakamura * @param array $attrs 570f50a239bSTakamura * 571f50a239bSTakamura * @return array 572fdb8d77bSTom N Harris */ 573fdb8d77bSTom N Harrisfunction form_makeCheckboxField($name, $value='1', $label=null, $id='', $class='', $attrs=array()) { 574fdb8d77bSTom N Harris if (is_null($label)) $label = $name; 575fdb8d77bSTom N Harris if (is_null($value) || $value=='') $value='0'; 576fdb8d77bSTom N Harris $elem = array('_elem'=>'checkboxfield', '_text'=>$label, '_class'=>$class, 577fdb8d77bSTom N Harris 'id'=>$id, 'name'=>$name, 'value'=>$value); 578fdb8d77bSTom N Harris return array_merge($elem, $attrs); 579fdb8d77bSTom N Harris} 580fdb8d77bSTom N Harris 581fdb8d77bSTom N Harris/** 582fdb8d77bSTom N Harris * form_makeRadioField 583fdb8d77bSTom N Harris * 584fdb8d77bSTom N Harris * Create a form element for a radio button input element with label. 585fdb8d77bSTom N Harris * 586fdb8d77bSTom N Harris * @see form_makeFieldRight 587fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 588f50a239bSTakamura * 589f50a239bSTakamura * @param string $name 590f50a239bSTakamura * @param string $value 591f50a239bSTakamura * @param null|string $label 592f50a239bSTakamura * @param string $id 593f50a239bSTakamura * @param string $class 594f50a239bSTakamura * @param array $attrs 595f50a239bSTakamura * 596f50a239bSTakamura * @return array 597fdb8d77bSTom N Harris */ 598fdb8d77bSTom N Harrisfunction form_makeRadioField($name, $value='1', $label=null, $id='', $class='', $attrs=array()) { 599fdb8d77bSTom N Harris if (is_null($label)) $label = $name; 600fdb8d77bSTom N Harris if (is_null($value) || $value=='') $value='0'; 601fdb8d77bSTom N Harris $elem = array('_elem'=>'radiofield', '_text'=>$label, '_class'=>$class, 602fdb8d77bSTom N Harris 'id'=>$id, 'name'=>$name, 'value'=>$value); 603fdb8d77bSTom N Harris return array_merge($elem, $attrs); 604fdb8d77bSTom N Harris} 605fdb8d77bSTom N Harris 606fdb8d77bSTom N Harris/** 607fdb8d77bSTom N Harris * form_makeMenuField 608fdb8d77bSTom N Harris * 609fdb8d77bSTom N Harris * Create a form element for a drop-down menu with label. 610fdb8d77bSTom N Harris * The list of values can be strings, arrays of (value,text), 611fdb8d77bSTom N Harris * or an associative array with the values as keys and labels as values. 612fdb8d77bSTom N Harris * An item is selected by supplying its value or integer index. 613fdb8d77bSTom N Harris * If the list of values is an associative array, the selected item must be 614fdb8d77bSTom N Harris * a string. 615fdb8d77bSTom N Harris * 616fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 61742ea7f44SGerrit Uitslag * 61842ea7f44SGerrit Uitslag * @param string $name Name attribute of the input. 61942ea7f44SGerrit Uitslag * @param string[]|array[] $values The list of values can be strings, arrays of (value,text), 62042ea7f44SGerrit Uitslag * or an associative array with the values as keys and labels as values. 62142ea7f44SGerrit Uitslag * @param string|int $selected default selected value, string or index number 62242ea7f44SGerrit Uitslag * @param string $class Class attribute of the label. If this is 'block', 62342ea7f44SGerrit Uitslag * then a line break will be added after the field. 62442ea7f44SGerrit Uitslag * @param string $label Label that will be printed before the input. 62542ea7f44SGerrit Uitslag * @param string $id ID attribute of the input. If set, the label will 62642ea7f44SGerrit Uitslag * reference it with a 'for' attribute. 62742ea7f44SGerrit Uitslag * @param array $attrs Optional attributes. 62842ea7f44SGerrit Uitslag * @return array pseudo-tag 629fdb8d77bSTom N Harris */ 630fdb8d77bSTom N Harrisfunction form_makeMenuField($name, $values, $selected='', $label=null, $id='', $class='', $attrs=array()) { 631fdb8d77bSTom N Harris if (is_null($label)) $label = $name; 632fdb8d77bSTom N Harris $options = array(); 633fdb8d77bSTom N Harris reset($values); 634fdb8d77bSTom N Harris // FIXME: php doesn't know the difference between a string and an integer 635fdb8d77bSTom N Harris if (is_string(key($values))) { 636fdb8d77bSTom N Harris foreach ($values as $val => $text) { 637fdb8d77bSTom N Harris $options[] = array($val, $text, (!is_null($selected) && $val==$selected)); 638fdb8d77bSTom N Harris } 639fdb8d77bSTom N Harris } else { 640fdb8d77bSTom N Harris if (is_integer($selected)) $selected = $values[$selected]; 641fdb8d77bSTom N Harris foreach ($values as $val) { 642fdb8d77bSTom N Harris if (is_array($val)) 643fdb8d77bSTom N Harris @list($val, $text) = $val; 644fdb8d77bSTom N Harris else 645fdb8d77bSTom N Harris $text = null; 646fdb8d77bSTom N Harris $options[] = array($val, $text, $val===$selected); 647fdb8d77bSTom N Harris } 648fdb8d77bSTom N Harris } 649fdb8d77bSTom N Harris $elem = array('_elem'=>'menufield', '_options'=>$options, '_text'=>$label, '_class'=>$class, 650fdb8d77bSTom N Harris 'id'=>$id, 'name'=>$name); 651fdb8d77bSTom N Harris return array_merge($elem, $attrs); 652fdb8d77bSTom N Harris} 653fdb8d77bSTom N Harris 654fdb8d77bSTom N Harris/** 655fdb8d77bSTom N Harris * form_makeListboxField 656fdb8d77bSTom N Harris * 657fdb8d77bSTom N Harris * Create a form element for a list box with label. 658fdb8d77bSTom N Harris * The list of values can be strings, arrays of (value,text), 659fdb8d77bSTom N Harris * or an associative array with the values as keys and labels as values. 660fdb8d77bSTom N Harris * Items are selected by supplying its value or an array of values. 661fdb8d77bSTom N Harris * 662fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 66342ea7f44SGerrit Uitslag * 66442ea7f44SGerrit Uitslag * @param string $name Name attribute of the input. 66542ea7f44SGerrit Uitslag * @param string[]|array[] $values The list of values can be strings, arrays of (value,text), 66642ea7f44SGerrit Uitslag * or an associative array with the values as keys and labels as values. 66742ea7f44SGerrit Uitslag * @param array|string $selected value or array of values of the items that need to be selected 66842ea7f44SGerrit Uitslag * @param string $class Class attribute of the label. If this is 'block', 66942ea7f44SGerrit Uitslag * then a line break will be added after the field. 67042ea7f44SGerrit Uitslag * @param string $label Label that will be printed before the input. 67142ea7f44SGerrit Uitslag * @param string $id ID attribute of the input. If set, the label will 67242ea7f44SGerrit Uitslag * reference it with a 'for' attribute. 67342ea7f44SGerrit Uitslag * @param array $attrs Optional attributes. 67442ea7f44SGerrit Uitslag * @return array pseudo-tag 675fdb8d77bSTom N Harris */ 676fdb8d77bSTom N Harrisfunction form_makeListboxField($name, $values, $selected='', $label=null, $id='', $class='', $attrs=array()) { 677fdb8d77bSTom N Harris if (is_null($label)) $label = $name; 678fdb8d77bSTom N Harris $options = array(); 679fdb8d77bSTom N Harris reset($values); 680eeb8f429SGerrit Uitslag if (is_null($selected) || $selected == '') { 681fdb8d77bSTom N Harris $selected = array(); 682eeb8f429SGerrit Uitslag } elseif (!is_array($selected)) { 683fdb8d77bSTom N Harris $selected = array($selected); 684eeb8f429SGerrit Uitslag } 685fdb8d77bSTom N Harris // FIXME: php doesn't know the difference between a string and an integer 686fdb8d77bSTom N Harris if (is_string(key($values))) { 687fdb8d77bSTom N Harris foreach ($values as $val => $text) { 688fdb8d77bSTom N Harris $options[] = array($val, $text, in_array($val,$selected)); 689fdb8d77bSTom N Harris } 690fdb8d77bSTom N Harris } else { 691fdb8d77bSTom N Harris foreach ($values as $val) { 692eeb8f429SGerrit Uitslag $disabled = false; 693eeb8f429SGerrit Uitslag if (is_array($val)) { 694eeb8f429SGerrit Uitslag @list($val, $text, $disabled) = $val; 695eeb8f429SGerrit Uitslag } else { 696fdb8d77bSTom N Harris $text = null; 697eeb8f429SGerrit Uitslag } 698eeb8f429SGerrit Uitslag $options[] = array($val, $text, in_array($val, $selected), $disabled); 699fdb8d77bSTom N Harris } 700fdb8d77bSTom N Harris } 701fdb8d77bSTom N Harris $elem = array('_elem'=>'listboxfield', '_options'=>$options, '_text'=>$label, '_class'=>$class, 702fdb8d77bSTom N Harris 'id'=>$id, 'name'=>$name); 703fdb8d77bSTom N Harris return array_merge($elem, $attrs); 704fdb8d77bSTom N Harris} 705fdb8d77bSTom N Harris 706fdb8d77bSTom N Harris/** 707fdb8d77bSTom N Harris * form_tag 708fdb8d77bSTom N Harris * 709fdb8d77bSTom N Harris * Print the HTML for a generic empty tag. 710fdb8d77bSTom N Harris * Requires '_tag' key with name of the tag. 711fdb8d77bSTom N Harris * Attributes are passed to buildAttributes() 712fdb8d77bSTom N Harris * 713fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 71442ea7f44SGerrit Uitslag * 71542ea7f44SGerrit Uitslag * @param array $attrs attributes 71642ea7f44SGerrit Uitslag * @return string html of tag 717fdb8d77bSTom N Harris */ 718fdb8d77bSTom N Harrisfunction form_tag($attrs) { 719c277a6bdSTom N Harris return '<'.$attrs['_tag'].' '. buildAttributes($attrs,true) .'/>'; 720fdb8d77bSTom N Harris} 721fdb8d77bSTom N Harris 722fdb8d77bSTom N Harris/** 723fdb8d77bSTom N Harris * form_opentag 724fdb8d77bSTom N Harris * 725fdb8d77bSTom N Harris * Print the HTML for a generic opening tag. 726fdb8d77bSTom N Harris * Requires '_tag' key with name of the tag. 727fdb8d77bSTom N Harris * Attributes are passed to buildAttributes() 728fdb8d77bSTom N Harris * 729fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 73042ea7f44SGerrit Uitslag * 73142ea7f44SGerrit Uitslag * @param array $attrs attributes 73242ea7f44SGerrit Uitslag * @return string html of tag 733fdb8d77bSTom N Harris */ 734fdb8d77bSTom N Harrisfunction form_opentag($attrs) { 735fdb8d77bSTom N Harris return '<'.$attrs['_tag'].' '. buildAttributes($attrs,true) .'>'; 736fdb8d77bSTom N Harris} 737fdb8d77bSTom N Harris 738fdb8d77bSTom N Harris/** 739fdb8d77bSTom N Harris * form_closetag 740fdb8d77bSTom N Harris * 741fdb8d77bSTom N Harris * Print the HTML for a generic closing tag. 742fdb8d77bSTom N Harris * Requires '_tag' key with name of the tag. 743fdb8d77bSTom N Harris * There are no attributes. 744fdb8d77bSTom N Harris * 745fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 74642ea7f44SGerrit Uitslag * 74742ea7f44SGerrit Uitslag * @param array $attrs attributes 74842ea7f44SGerrit Uitslag * @return string html of tag 749fdb8d77bSTom N Harris */ 750fdb8d77bSTom N Harrisfunction form_closetag($attrs) { 751fdb8d77bSTom N Harris return '</'.$attrs['_tag'].'>'; 752fdb8d77bSTom N Harris} 753fdb8d77bSTom N Harris 754fdb8d77bSTom N Harris/** 755fdb8d77bSTom N Harris * form_openfieldset 756fdb8d77bSTom N Harris * 757fdb8d77bSTom N Harris * Print the HTML for an opening fieldset tag. 758fdb8d77bSTom N Harris * Uses the '_legend' key. 759fdb8d77bSTom N Harris * Attributes are passed to buildAttributes() 760fdb8d77bSTom N Harris * 761fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 76242ea7f44SGerrit Uitslag * 76342ea7f44SGerrit Uitslag * @param array $attrs attributes 76442ea7f44SGerrit Uitslag * @return string html 765fdb8d77bSTom N Harris */ 766fdb8d77bSTom N Harrisfunction form_openfieldset($attrs) { 767fdb8d77bSTom N Harris $s = '<fieldset '. buildAttributes($attrs,true) .'>'; 768fdb8d77bSTom N Harris if (!is_null($attrs['_legend'])) $s .= '<legend>'.$attrs['_legend'].'</legend>'; 769fdb8d77bSTom N Harris return $s; 770fdb8d77bSTom N Harris} 771fdb8d77bSTom N Harris 772fdb8d77bSTom N Harris/** 773fdb8d77bSTom N Harris * form_closefieldset 774fdb8d77bSTom N Harris * 775fdb8d77bSTom N Harris * Print the HTML for a closing fieldset tag. 776fdb8d77bSTom N Harris * There are no attributes. 777fdb8d77bSTom N Harris * 778fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 77942ea7f44SGerrit Uitslag * 78042ea7f44SGerrit Uitslag * @return string html 781fdb8d77bSTom N Harris */ 782fdb8d77bSTom N Harrisfunction form_closefieldset() { 783fdb8d77bSTom N Harris return '</fieldset>'; 784fdb8d77bSTom N Harris} 785fdb8d77bSTom N Harris 786fdb8d77bSTom N Harris/** 787fdb8d77bSTom N Harris * form_hidden 788fdb8d77bSTom N Harris * 789fdb8d77bSTom N Harris * Print the HTML for a hidden input element. 790fdb8d77bSTom N Harris * Uses only 'name' and 'value' attributes. 791fdb8d77bSTom N Harris * Value is passed to formText() 792fdb8d77bSTom N Harris * 793fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 79442ea7f44SGerrit Uitslag * 79542ea7f44SGerrit Uitslag * @param array $attrs attributes 79642ea7f44SGerrit Uitslag * @return string html 797fdb8d77bSTom N Harris */ 798fdb8d77bSTom N Harrisfunction form_hidden($attrs) { 799fdb8d77bSTom N Harris return '<input type="hidden" name="'.$attrs['name'].'" value="'. formText($attrs['value']) .'" />'; 800fdb8d77bSTom N Harris} 801fdb8d77bSTom N Harris 802fdb8d77bSTom N Harris/** 803fdb8d77bSTom N Harris * form_wikitext 804fdb8d77bSTom N Harris * 805fdb8d77bSTom N Harris * Print the HTML for the wiki textarea. 806fdb8d77bSTom N Harris * Requires '_text' with default text of the field. 807fdb8d77bSTom N Harris * Text will be passed to formText(), attributes to buildAttributes() 808fdb8d77bSTom N Harris * 809fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 81042ea7f44SGerrit Uitslag * 81142ea7f44SGerrit Uitslag * @param array $attrs attributes 81242ea7f44SGerrit Uitslag * @return string html 813fdb8d77bSTom N Harris */ 814fdb8d77bSTom N Harrisfunction form_wikitext($attrs) { 815b2bc77d5STom N Harris // mandatory attributes 816b2bc77d5STom N Harris unset($attrs['name']); 817b2bc77d5STom N Harris unset($attrs['id']); 8180d39ad11SAnika Henke return '<textarea name="wikitext" id="wiki__text" dir="auto" ' 819804e2f2fSAdrian Lang . buildAttributes($attrs,true).'>'.DOKU_LF 820fdb8d77bSTom N Harris . formText($attrs['_text']) 821fdb8d77bSTom N Harris .'</textarea>'; 822fdb8d77bSTom N Harris} 823fdb8d77bSTom N Harris 824fdb8d77bSTom N Harris/** 825fdb8d77bSTom N Harris * form_button 826fdb8d77bSTom N Harris * 827fdb8d77bSTom N Harris * Print the HTML for a form button. 828fdb8d77bSTom N Harris * If '_action' is set, the button name will be "do[_action]". 829fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() 830fdb8d77bSTom N Harris * 831fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 83242ea7f44SGerrit Uitslag * 83342ea7f44SGerrit Uitslag * @param array $attrs attributes 83442ea7f44SGerrit Uitslag * @return string html 835fdb8d77bSTom N Harris */ 836fdb8d77bSTom N Harrisfunction form_button($attrs) { 837fdb8d77bSTom N Harris $p = (!empty($attrs['_action'])) ? 'name="do['.$attrs['_action'].']" ' : ''; 838ae614416SAnika Henke $value = $attrs['value']; 839ae614416SAnika Henke unset($attrs['value']); 840ae614416SAnika Henke return '<button '.$p. buildAttributes($attrs,true) .'>'.$value.'</button>'; 841fdb8d77bSTom N Harris} 842fdb8d77bSTom N Harris 843fdb8d77bSTom N Harris/** 844fdb8d77bSTom N Harris * form_field 845fdb8d77bSTom N Harris * 846fdb8d77bSTom N Harris * Print the HTML for a form input field. 847fdb8d77bSTom N Harris * _class : class attribute used on the label tag 848fdb8d77bSTom N Harris * _text : Text to display before the input. Not escaped. 849fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() for the input tag. 850fdb8d77bSTom N Harris * 851fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 85242ea7f44SGerrit Uitslag * 85342ea7f44SGerrit Uitslag * @param array $attrs attributes 85442ea7f44SGerrit Uitslag * @return string html 855fdb8d77bSTom N Harris */ 856fdb8d77bSTom N Harrisfunction form_field($attrs) { 857a57c7cafSAnika Henke $s = '<label'; 858a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 859fdb8d77bSTom N Harris if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 860fdb8d77bSTom N Harris $s .= '><span>'.$attrs['_text'].'</span>'; 861fdb8d77bSTom N Harris $s .= ' <input '. buildAttributes($attrs,true) .' /></label>'; 862fdb8d77bSTom N Harris if (preg_match('/(^| )block($| )/', $attrs['_class'])) 863fdb8d77bSTom N Harris $s .= '<br />'; 864fdb8d77bSTom N Harris return $s; 865fdb8d77bSTom N Harris} 866fdb8d77bSTom N Harris 867fdb8d77bSTom N Harris/** 868fdb8d77bSTom N Harris * form_fieldright 869fdb8d77bSTom N Harris * 870fdb8d77bSTom N Harris * Print the HTML for a form input field. (right-aligned) 871fdb8d77bSTom N Harris * _class : class attribute used on the label tag 872fdb8d77bSTom N Harris * _text : Text to display after the input. Not escaped. 873fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() for the input tag. 874fdb8d77bSTom N Harris * 875fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 87642ea7f44SGerrit Uitslag * 87742ea7f44SGerrit Uitslag * @param array $attrs attributes 87842ea7f44SGerrit Uitslag * @return string html 879fdb8d77bSTom N Harris */ 880fdb8d77bSTom N Harrisfunction form_fieldright($attrs) { 881a57c7cafSAnika Henke $s = '<label'; 882a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 883fdb8d77bSTom N Harris if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 884fdb8d77bSTom N Harris $s .= '><input '. buildAttributes($attrs,true) .' />'; 885fdb8d77bSTom N Harris $s .= ' <span>'.$attrs['_text'].'</span></label>'; 886fdb8d77bSTom N Harris if (preg_match('/(^| )block($| )/', $attrs['_class'])) 887fdb8d77bSTom N Harris $s .= '<br />'; 888fdb8d77bSTom N Harris return $s; 889fdb8d77bSTom N Harris} 890fdb8d77bSTom N Harris 891fdb8d77bSTom N Harris/** 892fdb8d77bSTom N Harris * form_textfield 893fdb8d77bSTom N Harris * 894fdb8d77bSTom N Harris * Print the HTML for a text input field. 895fdb8d77bSTom N Harris * _class : class attribute used on the label tag 896fdb8d77bSTom N Harris * _text : Text to display before the input. Not escaped. 897fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() for the input tag. 898fdb8d77bSTom N Harris * 899fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 90042ea7f44SGerrit Uitslag * 90142ea7f44SGerrit Uitslag * @param array $attrs attributes 90242ea7f44SGerrit Uitslag * @return string html 903fdb8d77bSTom N Harris */ 904fdb8d77bSTom N Harrisfunction form_textfield($attrs) { 905b2bc77d5STom N Harris // mandatory attributes 906b2bc77d5STom N Harris unset($attrs['type']); 907a57c7cafSAnika Henke $s = '<label'; 908a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 909fdb8d77bSTom N Harris if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 910fdb8d77bSTom N Harris $s .= '><span>'.$attrs['_text'].'</span> '; 911b2bc77d5STom N Harris $s .= '<input type="text" '. buildAttributes($attrs,true) .' /></label>'; 912fdb8d77bSTom N Harris if (preg_match('/(^| )block($| )/', $attrs['_class'])) 913fdb8d77bSTom N Harris $s .= '<br />'; 914fdb8d77bSTom N Harris return $s; 915fdb8d77bSTom N Harris} 916fdb8d77bSTom N Harris 917fdb8d77bSTom N Harris/** 918fdb8d77bSTom N Harris * form_passwordfield 919fdb8d77bSTom N Harris * 920fdb8d77bSTom N Harris * Print the HTML for a password input field. 921fdb8d77bSTom N Harris * _class : class attribute used on the label tag 922fdb8d77bSTom N Harris * _text : Text to display before the input. Not escaped. 923fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() for the input tag. 924fdb8d77bSTom N Harris * 925fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 92642ea7f44SGerrit Uitslag * 92742ea7f44SGerrit Uitslag * @param array $attrs attributes 92842ea7f44SGerrit Uitslag * @return string html 929fdb8d77bSTom N Harris */ 930fdb8d77bSTom N Harrisfunction form_passwordfield($attrs) { 931b2bc77d5STom N Harris // mandatory attributes 932b2bc77d5STom N Harris unset($attrs['type']); 933a57c7cafSAnika Henke $s = '<label'; 934a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 935fdb8d77bSTom N Harris if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 936fdb8d77bSTom N Harris $s .= '><span>'.$attrs['_text'].'</span> '; 937b2bc77d5STom N Harris $s .= '<input type="password" '. buildAttributes($attrs,true) .' /></label>'; 938fdb8d77bSTom N Harris if (preg_match('/(^| )block($| )/', $attrs['_class'])) 939fdb8d77bSTom N Harris $s .= '<br />'; 940fdb8d77bSTom N Harris return $s; 941fdb8d77bSTom N Harris} 942fdb8d77bSTom N Harris 943fdb8d77bSTom N Harris/** 94412bbca2eSMichael Klier * form_filefield 94512bbca2eSMichael Klier * 94612bbca2eSMichael Klier * Print the HTML for a file input field. 94712bbca2eSMichael Klier * _class : class attribute used on the label tag 94812bbca2eSMichael Klier * _text : Text to display before the input. Not escaped 94912bbca2eSMichael Klier * _maxlength : Allowed size in byte 95012bbca2eSMichael Klier * _accept : Accepted mime-type 95112bbca2eSMichael Klier * Other attributes are passed to buildAttributes() for the input tag 95212bbca2eSMichael Klier * 95312bbca2eSMichael Klier * @author Michael Klier <chi@chimeric.de> 95442ea7f44SGerrit Uitslag * 95542ea7f44SGerrit Uitslag * @param array $attrs attributes 95642ea7f44SGerrit Uitslag * @return string html 95712bbca2eSMichael Klier */ 95812bbca2eSMichael Klierfunction form_filefield($attrs) { 959a57c7cafSAnika Henke $s = '<label'; 960a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 96112bbca2eSMichael Klier if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 96212bbca2eSMichael Klier $s .= '><span>'.$attrs['_text'].'</span> '; 96312bbca2eSMichael Klier $s .= '<input type="file" '. buildAttributes($attrs,true); 96412bbca2eSMichael Klier if (!empty($attrs['_maxlength'])) $s .= ' maxlength="'.$attrs['_maxlength'].'"'; 96512bbca2eSMichael Klier if (!empty($attrs['_accept'])) $s .= ' accept="'.$attrs['_accept'].'"'; 96612bbca2eSMichael Klier $s .= ' /></label>'; 96712bbca2eSMichael Klier if (preg_match('/(^| )block($| )/', $attrs['_class'])) 96812bbca2eSMichael Klier $s .= '<br />'; 96912bbca2eSMichael Klier return $s; 97012bbca2eSMichael Klier} 97112bbca2eSMichael Klier 97212bbca2eSMichael Klier/** 973fdb8d77bSTom N Harris * form_checkboxfield 974fdb8d77bSTom N Harris * 975fdb8d77bSTom N Harris * Print the HTML for a checkbox input field. 976fdb8d77bSTom N Harris * _class : class attribute used on the label tag 977fdb8d77bSTom N Harris * _text : Text to display after the input. Not escaped. 978fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() for the input tag. 9792f10258cSAdrian Lang * If value is an array, a hidden field with the same name and the value 9802f10258cSAdrian Lang * $attrs['value'][1] is constructed as well. 981fdb8d77bSTom N Harris * 982fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 98342ea7f44SGerrit Uitslag * 98442ea7f44SGerrit Uitslag * @param array $attrs attributes 98542ea7f44SGerrit Uitslag * @return string html 986fdb8d77bSTom N Harris */ 987fdb8d77bSTom N Harrisfunction form_checkboxfield($attrs) { 988b2bc77d5STom N Harris // mandatory attributes 989b2bc77d5STom N Harris unset($attrs['type']); 990a57c7cafSAnika Henke $s = '<label'; 991a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 992fdb8d77bSTom N Harris if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 9932f10258cSAdrian Lang $s .= '>'; 9942f10258cSAdrian Lang if (is_array($attrs['value'])) { 9952f10258cSAdrian Lang echo '<input type="hidden" name="'. hsc($attrs['name']) .'"' 9962f10258cSAdrian Lang .' value="'. hsc($attrs['value'][1]) .'" />'; 9972f10258cSAdrian Lang $attrs['value'] = $attrs['value'][0]; 9982f10258cSAdrian Lang } 9992f10258cSAdrian Lang $s .= '<input type="checkbox" '. buildAttributes($attrs,true) .' />'; 1000fdb8d77bSTom N Harris $s .= ' <span>'.$attrs['_text'].'</span></label>'; 1001fdb8d77bSTom N Harris if (preg_match('/(^| )block($| )/', $attrs['_class'])) 1002fdb8d77bSTom N Harris $s .= '<br />'; 1003fdb8d77bSTom N Harris return $s; 1004fdb8d77bSTom N Harris} 1005fdb8d77bSTom N Harris 1006fdb8d77bSTom N Harris/** 1007fdb8d77bSTom N Harris * form_radiofield 1008fdb8d77bSTom N Harris * 1009fdb8d77bSTom N Harris * Print the HTML for a radio button input field. 1010fdb8d77bSTom N Harris * _class : class attribute used on the label tag 1011fdb8d77bSTom N Harris * _text : Text to display after the input. Not escaped. 1012fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() for the input tag. 1013fdb8d77bSTom N Harris * 1014fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 101542ea7f44SGerrit Uitslag * 101642ea7f44SGerrit Uitslag * @param array $attrs attributes 101742ea7f44SGerrit Uitslag * @return string html 1018fdb8d77bSTom N Harris */ 1019fdb8d77bSTom N Harrisfunction form_radiofield($attrs) { 1020b2bc77d5STom N Harris // mandatory attributes 1021b2bc77d5STom N Harris unset($attrs['type']); 1022a57c7cafSAnika Henke $s = '<label'; 1023a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 1024fdb8d77bSTom N Harris if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 1025fdb8d77bSTom N Harris $s .= '><input type="radio" '. buildAttributes($attrs,true) .' />'; 1026fdb8d77bSTom N Harris $s .= ' <span>'.$attrs['_text'].'</span></label>'; 1027fdb8d77bSTom N Harris if (preg_match('/(^| )block($| )/', $attrs['_class'])) 1028fdb8d77bSTom N Harris $s .= '<br />'; 1029fdb8d77bSTom N Harris return $s; 1030fdb8d77bSTom N Harris} 1031fdb8d77bSTom N Harris 1032fdb8d77bSTom N Harris/** 1033fdb8d77bSTom N Harris * form_menufield 1034fdb8d77bSTom N Harris * 1035fdb8d77bSTom N Harris * Print the HTML for a drop-down menu. 1036fdb8d77bSTom N Harris * _options : Array of (value,text,selected) for the menu. 1037fdb8d77bSTom N Harris * Text can be omitted. Text and value are passed to formText() 1038fdb8d77bSTom N Harris * Only one item can be selected. 1039fdb8d77bSTom N Harris * _class : class attribute used on the label tag 1040fdb8d77bSTom N Harris * _text : Text to display before the menu. Not escaped. 1041fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() for the input tag. 1042fdb8d77bSTom N Harris * 1043fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 104442ea7f44SGerrit Uitslag * 104542ea7f44SGerrit Uitslag * @param array $attrs attributes 104642ea7f44SGerrit Uitslag * @return string html 1047fdb8d77bSTom N Harris */ 1048fdb8d77bSTom N Harrisfunction form_menufield($attrs) { 1049fdb8d77bSTom N Harris $attrs['size'] = '1'; 1050a57c7cafSAnika Henke $s = '<label'; 1051a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 1052fdb8d77bSTom N Harris if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 1053fdb8d77bSTom N Harris $s .= '><span>'.$attrs['_text'].'</span>'; 1054804e2f2fSAdrian Lang $s .= ' <select '. buildAttributes($attrs,true) .'>'.DOKU_LF; 1055fdb8d77bSTom N Harris if (!empty($attrs['_options'])) { 1056fdb8d77bSTom N Harris $selected = false; 105749eb6e38SAndreas Gohr 105849eb6e38SAndreas Gohr $cnt = count($attrs['_options']); 105949eb6e38SAndreas Gohr for($n=0; $n < $cnt; $n++){ 1060fdb8d77bSTom N Harris @list($value,$text,$select) = $attrs['_options'][$n]; 1061fdb8d77bSTom N Harris $p = ''; 1062fdb8d77bSTom N Harris if (!is_null($text)) 1063fdb8d77bSTom N Harris $p .= ' value="'. formText($value) .'"'; 1064fdb8d77bSTom N Harris else 1065fdb8d77bSTom N Harris $text = $value; 1066fdb8d77bSTom N Harris if (!empty($select) && !$selected) { 1067fdb8d77bSTom N Harris $p .= ' selected="selected"'; 1068fdb8d77bSTom N Harris $selected = true; 1069fdb8d77bSTom N Harris } 1070fdb8d77bSTom N Harris $s .= '<option'.$p.'>'. formText($text) .'</option>'; 1071fdb8d77bSTom N Harris } 1072fdb8d77bSTom N Harris } else { 1073fdb8d77bSTom N Harris $s .= '<option></option>'; 1074fdb8d77bSTom N Harris } 1075804e2f2fSAdrian Lang $s .= DOKU_LF.'</select></label>'; 1076fdb8d77bSTom N Harris if (preg_match('/(^| )block($| )/', $attrs['_class'])) 1077fdb8d77bSTom N Harris $s .= '<br />'; 1078fdb8d77bSTom N Harris return $s; 1079fdb8d77bSTom N Harris} 1080fdb8d77bSTom N Harris 1081fdb8d77bSTom N Harris/** 1082fdb8d77bSTom N Harris * form_listboxfield 1083fdb8d77bSTom N Harris * 1084fdb8d77bSTom N Harris * Print the HTML for a list box. 1085fdb8d77bSTom N Harris * _options : Array of (value,text,selected) for the list. 1086fdb8d77bSTom N Harris * Text can be omitted. Text and value are passed to formText() 1087fdb8d77bSTom N Harris * _class : class attribute used on the label tag 1088fdb8d77bSTom N Harris * _text : Text to display before the menu. Not escaped. 1089fdb8d77bSTom N Harris * Other attributes are passed to buildAttributes() for the input tag. 1090fdb8d77bSTom N Harris * 1091fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 109242ea7f44SGerrit Uitslag * 109342ea7f44SGerrit Uitslag * @param array $attrs attributes 109442ea7f44SGerrit Uitslag * @return string html 1095fdb8d77bSTom N Harris */ 1096fdb8d77bSTom N Harrisfunction form_listboxfield($attrs) { 1097a57c7cafSAnika Henke $s = '<label'; 1098a57c7cafSAnika Henke if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"'; 1099fdb8d77bSTom N Harris if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"'; 1100fdb8d77bSTom N Harris $s .= '><span>'.$attrs['_text'].'</span> '; 1101804e2f2fSAdrian Lang $s .= '<select '. buildAttributes($attrs,true) .'>'.DOKU_LF; 1102fdb8d77bSTom N Harris if (!empty($attrs['_options'])) { 1103fdb8d77bSTom N Harris foreach ($attrs['_options'] as $opt) { 1104eeb8f429SGerrit Uitslag @list($value, $text, $select, $disabled) = $opt; 1105fdb8d77bSTom N Harris $p = ''; 1106a0fe6e28SAdrian Lang if (is_null($text)) $text = $value; 1107fdb8d77bSTom N Harris $p .= ' value="'. formText($value) .'"'; 1108fdb8d77bSTom N Harris if (!empty($select)) $p .= ' selected="selected"'; 1109eeb8f429SGerrit Uitslag if ($disabled) $p .= ' disabled="disabled"'; 1110fdb8d77bSTom N Harris $s .= '<option'.$p.'>'. formText($text) .'</option>'; 1111fdb8d77bSTom N Harris } 1112fdb8d77bSTom N Harris } else { 1113fdb8d77bSTom N Harris $s .= '<option></option>'; 1114fdb8d77bSTom N Harris } 1115804e2f2fSAdrian Lang $s .= DOKU_LF.'</select></label>'; 1116fdb8d77bSTom N Harris if (preg_match('/(^| )block($| )/', $attrs['_class'])) 1117fdb8d77bSTom N Harris $s .= '<br />'; 1118fdb8d77bSTom N Harris return $s; 1119fdb8d77bSTom N Harris} 1120