about summary refs log tree commit diff stats
path: root/wiki/inc/Form/Form.php
diff options
context:
space:
mode:
Diffstat (limited to 'wiki/inc/Form/Form.php')
-rw-r--r--wiki/inc/Form/Form.php456
1 files changed, 0 insertions, 456 deletions
diff --git a/wiki/inc/Form/Form.php b/wiki/inc/Form/Form.php
deleted file mode 100644
index 92bbd30..0000000
--- a/wiki/inc/Form/Form.php
+++ /dev/null
@@ -1,456 +0,0 @@
-<?php
-namespace dokuwiki\Form;
-
-/**
- * Class Form
- *
- * Represents the whole Form. This is what you work on, and add Elements to
- *
- * @package dokuwiki\Form
- */
-class Form extends Element {
-
-    /**
-     * @var array name value pairs for hidden values
-     */
-    protected $hidden = array();
-
-    /**
-     * @var Element[] the elements of the form
-     */
-    protected $elements = array();
-
-    /**
-     * Creates a new, empty form with some default attributes
-     *
-     * @param array $attributes
-     * @param bool  $unsafe     if true, then the security token is ommited
-     */
-    public function __construct($attributes = array(), $unsafe = false) {
-        global $ID;
-
-        parent::__construct('form', $attributes);
-
-        // use the current URL as default action
-        if(!$this->attr('action')) {
-            $get = $_GET;
-            if(isset($get['id'])) unset($get['id']);
-            $self = wl($ID, $get, false, '&'); //attributes are escaped later
-            $this->attr('action', $self);
-        }
-
-        // post is default
-        if(!$this->attr('method')) {
-            $this->attr('method', 'post');
-        }
-
-        // we like UTF-8
-        if(!$this->attr('accept-charset')) {
-            $this->attr('accept-charset', 'utf-8');
-        }
-
-        // add the security token by default
-        if (!$unsafe) {
-            $this->setHiddenField('sectok', getSecurityToken());
-        }
-
-        // identify this as a new form based form in HTML
-        $this->addClass('doku_form');
-    }
-
-    /**
-     * Sets a hidden field
-     *
-     * @param string $name
-     * @param string $value
-     * @return $this
-     */
-    public function setHiddenField($name, $value) {
-        $this->hidden[$name] = $value;
-        return $this;
-    }
-
-    #region element query function
-
-    /**
-     * Returns the numbers of elements in the form
-     *
-     * @return int
-     */
-    public function elementCount() {
-        return count($this->elements);
-    }
-
-    /**
-     * Get the position of the element in the form or false if it is not in the form
-     *
-     * Warning: This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
-     *
-     * @param Element $element
-     *
-     * @return false|int
-     */
-    public function getElementPosition(Element $element)
-    {
-        return array_search($element, $this->elements, true);
-    }
-
-    /**
-     * Returns a reference to the element at a position.
-     * A position out-of-bounds will return either the
-     * first (underflow) or last (overflow) element.
-     *
-     * @param int $pos
-     * @return Element
-     */
-    public function getElementAt($pos) {
-        if($pos < 0) $pos = count($this->elements) + $pos;
-        if($pos < 0) $pos = 0;
-        if($pos >= count($this->elements)) $pos = count($this->elements) - 1;
-        return $this->elements[$pos];
-    }
-
-    /**
-     * Gets the position of the first of a type of element
-     *
-     * @param string $type Element type to look for.
-     * @param int $offset search from this position onward
-     * @return false|int position of element if found, otherwise false
-     */
-    public function findPositionByType($type, $offset = 0) {
-        $len = $this->elementCount();
-        for($pos = $offset; $pos < $len; $pos++) {
-            if($this->elements[$pos]->getType() == $type) {
-                return $pos;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Gets the position of the first element matching the attribute
-     *
-     * @param string $name Name of the attribute
-     * @param string $value Value the attribute should have
-     * @param int $offset search from this position onward
-     * @return false|int position of element if found, otherwise false
-     */
-    public function findPositionByAttribute($name, $value, $offset = 0) {
-        $len = $this->elementCount();
-        for($pos = $offset; $pos < $len; $pos++) {
-            if($this->elements[$pos]->attr($name) == $value) {
-                return $pos;
-            }
-        }
-        return false;
-    }
-
-    #endregion
-
-    #region Element positioning functions
-
-    /**
-     * Adds or inserts an element to the form
-     *
-     * @param Element $element
-     * @param int $pos 0-based position in the form, -1 for at the end
-     * @return Element
-     */
-    public function addElement(Element $element, $pos = -1) {
-        if(is_a($element, '\dokuwiki\Form\Form')) throw new \InvalidArgumentException('You can\'t add a form to a form');
-        if($pos < 0) {
-            $this->elements[] = $element;
-        } else {
-            array_splice($this->elements, $pos, 0, array($element));
-        }
-        return $element;
-    }
-
-    /**
-     * Replaces an existing element with a new one
-     *
-     * @param Element $element the new element
-     * @param int $pos 0-based position of the element to replace
-     */
-    public function replaceElement(Element $element, $pos) {
-        if(is_a($element, '\dokuwiki\Form\Form')) throw new \InvalidArgumentException('You can\'t add a form to a form');
-        array_splice($this->elements, $pos, 1, array($element));
-    }
-
-    /**
-     * Remove an element from the form completely
-     *
-     * @param int $pos 0-based position of the element to remove
-     */
-    public function removeElement($pos) {
-        array_splice($this->elements, $pos, 1);
-    }
-
-    #endregion
-
-    #region Element adding functions
-
-    /**
-     * Adds a text input field
-     *
-     * @param string $name
-     * @param string $label
-     * @param int $pos
-     * @return InputElement
-     */
-    public function addTextInput($name, $label = '', $pos = -1) {
-        return $this->addElement(new InputElement('text', $name, $label), $pos);
-    }
-
-    /**
-     * Adds a password input field
-     *
-     * @param string $name
-     * @param string $label
-     * @param int $pos
-     * @return InputElement
-     */
-    public function addPasswordInput($name, $label = '', $pos = -1) {
-        return $this->addElement(new InputElement('password', $name, $label), $pos);
-    }
-
-    /**
-     * Adds a radio button field
-     *
-     * @param string $name
-     * @param string $label
-     * @param int $pos
-     * @return CheckableElement
-     */
-    public function addRadioButton($name, $label = '', $pos = -1) {
-        return $this->addElement(new CheckableElement('radio', $name, $label), $pos);
-    }
-
-    /**
-     * Adds a checkbox field
-     *
-     * @param string $name
-     * @param string $label
-     * @param int $pos
-     * @return CheckableElement
-     */
-    public function addCheckbox($name, $label = '', $pos = -1) {
-        return $this->addElement(new CheckableElement('checkbox', $name, $label), $pos);
-    }
-
-    /**
-     * Adds a dropdown field
-     *
-     * @param string $name
-     * @param array $options
-     * @param string $label
-     * @param int $pos
-     * @return DropdownElement
-     */
-    public function addDropdown($name, $options, $label = '', $pos = -1) {
-        return $this->addElement(new DropdownElement($name, $options, $label), $pos);
-    }
-
-    /**
-     * Adds a textarea field
-     *
-     * @param string $name
-     * @param string $label
-     * @param int $pos
-     * @return TextareaElement
-     */
-    public function addTextarea($name, $label = '', $pos = -1) {
-        return $this->addElement(new TextareaElement($name, $label), $pos);
-    }
-
-    /**
-     * Adds a simple button, escapes the content for you
-     *
-     * @param string $name
-     * @param string $content
-     * @param int $pos
-     * @return Element
-     */
-    public function addButton($name, $content, $pos = -1) {
-        return $this->addElement(new ButtonElement($name, hsc($content)), $pos);
-    }
-
-    /**
-     * Adds a simple button, allows HTML for content
-     *
-     * @param string $name
-     * @param string $html
-     * @param int $pos
-     * @return Element
-     */
-    public function addButtonHTML($name, $html, $pos = -1) {
-        return $this->addElement(new ButtonElement($name, $html), $pos);
-    }
-
-    /**
-     * Adds a label referencing another input element, escapes the label for you
-     *
-     * @param string $label
-     * @param string $for
-     * @param int $pos
-     * @return Element
-     */
-    public function addLabel($label, $for='', $pos = -1) {
-        return $this->addLabelHTML(hsc($label), $for, $pos);
-    }
-
-    /**
-     * Adds a label referencing another input element, allows HTML for content
-     *
-     * @param string $content
-     * @param string|Element $for
-     * @param int $pos
-     * @return Element
-     */
-    public function addLabelHTML($content, $for='', $pos = -1) {
-        $element = new LabelElement(hsc($content));
-
-        if(is_a($for, '\dokuwiki\Form\Element')) {
-            /** @var Element $for */
-            $for = $for->id();
-        }
-        $for = (string) $for;
-        if($for !== '') {
-            $element->attr('for', $for);
-        }
-
-        return $this->addElement($element, $pos);
-    }
-
-    /**
-     * Add fixed HTML to the form
-     *
-     * @param string $html
-     * @param int $pos
-     * @return HTMLElement
-     */
-    public function addHTML($html, $pos = -1) {
-        return $this->addElement(new HTMLElement($html), $pos);
-    }
-
-    /**
-     * Add a closed HTML tag to the form
-     *
-     * @param string $tag
-     * @param int $pos
-     * @return TagElement
-     */
-    public function addTag($tag, $pos = -1) {
-        return $this->addElement(new TagElement($tag), $pos);
-    }
-
-    /**
-     * Add an open HTML tag to the form
-     *
-     * Be sure to close it again!
-     *
-     * @param string $tag
-     * @param int $pos
-     * @return TagOpenElement
-     */
-    public function addTagOpen($tag, $pos = -1) {
-        return $this->addElement(new TagOpenElement($tag), $pos);
-    }
-
-    /**
-     * Add a closing HTML tag to the form
-     *
-     * Be sure it had been opened before
-     *
-     * @param string $tag
-     * @param int $pos
-     * @return TagCloseElement
-     */
-    public function addTagClose($tag, $pos = -1) {
-        return $this->addElement(new TagCloseElement($tag), $pos);
-    }
-
-    /**
-     * Open a Fieldset
-     *
-     * @param string $legend
-     * @param int $pos
-     * @return FieldsetOpenElement
-     */
-    public function addFieldsetOpen($legend = '', $pos = -1) {
-        return $this->addElement(new FieldsetOpenElement($legend), $pos);
-    }
-
-    /**
-     * Close a fieldset
-     *
-     * @param int $pos
-     * @return TagCloseElement
-     */
-    public function addFieldsetClose($pos = -1) {
-        return $this->addElement(new FieldsetCloseElement(), $pos);
-    }
-
-    #endregion
-
-    /**
-     * Adjust the elements so that fieldset open and closes are matching
-     */
-    protected function balanceFieldsets() {
-        $lastclose = 0;
-        $isopen = false;
-        $len = count($this->elements);
-
-        for($pos = 0; $pos < $len; $pos++) {
-            $type = $this->elements[$pos]->getType();
-            if($type == 'fieldsetopen') {
-                if($isopen) {
-                    //close previous fieldset
-                    $this->addFieldsetClose($pos);
-                    $lastclose = $pos + 1;
-                    $pos++;
-                    $len++;
-                }
-                $isopen = true;
-            } else if($type == 'fieldsetclose') {
-                if(!$isopen) {
-                    // make sure there was a fieldsetopen
-                    // either right after the last close or at the begining
-                    $this->addFieldsetOpen('', $lastclose);
-                    $len++;
-                    $pos++;
-                }
-                $lastclose = $pos;
-                $isopen = false;
-            }
-        }
-
-        // close open fieldset at the end
-        if($isopen) {
-            $this->addFieldsetClose();
-        }
-    }
-
-    /**
-     * The HTML representation of the whole form
-     *
-     * @return string
-     */
-    public function toHTML() {
-        $this->balanceFieldsets();
-
-        $html = '<form ' . buildAttributes($this->attrs()) . '>';
-
-        foreach($this->hidden as $name => $value) {
-            $html .= '<input type="hidden" name="' . $name . '" value="' . formText($value) . '" />';
-        }
-
-        foreach($this->elements as $element) {
-            $html .= $element->toHTML();
-        }
-
-        $html .= '</form>';
-
-        return $html;
-    }
-}