diff options
Diffstat (limited to 'src/usr/local/www/classes/Form.class.php')
-rw-r--r-- | src/usr/local/www/classes/Form.class.php | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/usr/local/www/classes/Form.class.php b/src/usr/local/www/classes/Form.class.php new file mode 100644 index 0000000..b489a72 --- /dev/null +++ b/src/usr/local/www/classes/Form.class.php @@ -0,0 +1,126 @@ +<?php +/* + Form.class.php + + Copyright (C) 2015 Sjon Hortensius + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +require_once('classes/Form/Element.class.php'); +require_once('classes/Form/Input.class.php'); +foreach (glob('classes/Form/*.class.php') as $file) + require_once($file); + +class Form extends Form_Element +{ + const LABEL_WIDTH = 2; + const MAX_INPUT_WIDTH = 10; + protected $_tagName = 'form'; + protected $_attributes = array( + 'class' => array('form-horizontal' => true), + 'method' => 'post', + // Empty is interpreted by all browsers to submit to the current URI + 'action' => '', + ); + protected $_sections = array(); + protected $_global = array(); + + public function __construct($submit = null) + { + if (!isset($submit)) + $submit = 'Save'; + + if (gettype($submit) == 'string') + $submit = new Form_Button( + 'save', + $submit + ); + + if (false !== $submit) + $this->addGlobal($submit); + } + + public function add(Form_Section $section) + { + array_push($this->_sections, $section); + $section->_setParent($this); + + return $section; + } + + public function setAction($url) + { + $this->_attributes['action'] = $url; + + return $this; + } + + public function addGlobal(Form_Input $input) + { + array_push($this->_global, $input); + + return $input; + } + + public function setMultipartEncoding() + { + $this->_attributes['enctype'] = 'multipart/form-data'; + + return $this; + } + + protected function _setParent() + { + throw new Exception('Form does not have a parent'); + } + + public function __toString() + { + $element = parent::__toString(); + $html = implode('', $this->_sections); + $buttons = ''; + + foreach ($this->_global as $global) + { + if ($global instanceof Form_Button) + $buttons .= $global; + else + $html .= $global; + } + + if (!empty($buttons)) + { + $group = new Form_Element; + $group->addClass('col-sm-'. Form::MAX_INPUT_WIDTH, 'col-sm-offset-'. Form::LABEL_WIDTH); + + $html .= $group . $buttons .'</div>'; + } + + return <<<EOT + {$element} + {$html} + </form> +EOT; + } +}
\ No newline at end of file |