From 2131269e0b5a391748ff7a52f1d301ba0a30353c Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sun, 6 Jun 2010 18:15:35 +0000 Subject: [PATCH] added several meta HTML classes --- lam/lib/html.inc | 437 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 435 insertions(+), 2 deletions(-) diff --git a/lam/lib/html.inc b/lam/lib/html.inc index 42b52297..dcfe78e6 100644 --- a/lam/lib/html.inc +++ b/lam/lib/html.inc @@ -24,7 +24,7 @@ $Id$ /** * Interface between modules and other parts of LAM. * -* @package modules +* @package metaHTML * @author Roland Gruber */ @@ -32,9 +32,14 @@ $Id$ * Represents a HTML element. * This is used to build HTML code by using objects. * - * @package modules + * @package metaHTML */ interface htmlElement { + + const ALIGN_TOP = 0; + const ALIGN_LEFT = 1; + const ALIGN_RIGHT = 2; + const ALIGN_BOTTOM = 3; /** * Prints the HTML code for this element. @@ -51,5 +56,433 @@ interface htmlElement { } +/** + * Structures elements using a table. + * + * @package metaHTML + */ +class htmlTable implements htmlElement { + + /** table header */ + const header = "\n\n"; + /** table footer */ + const footer = "\n
\n"; + + private $elements = array(); + + /** + * Adds an element to the table. The element may be a htmlElement object or a simple String. + * + * @param mixed $element htmlElement object or a simple String + */ + public function addElement($element) { + if ($element instanceof htmlElement) { + $this->elements[] = "\n"; + $this->elements[] = $element; + $this->elements[] = "\n"; + } + elseif(is_string($element)) { + $this->elements[] = "\n"; + $this->elements[] = htmlspecialchars($element); + $this->elements[] = "\n"; + } + else { + StatusMessage('ERROR', 'Invalid element', print_r($element, true)); + } + } + + /** + * Adds another line to the table. + */ + public function addNewLine() { + $this->elements[] = "\n"; + } + + /** + * Prints the HTML code for this element. + * + * @param string $module Name of account module + * @param array $input List of meta-HTML elements + * @param array $values List of values which override the defaults in $input (name => value) + * @param boolean $restricted If true then no buttons will be displayed + * @param integer $tabindex Start value of tabulator index for input fields + * @param string $scope Account type + * @return array List of input field names and their type (name => type) + */ + function generateHTML($module, $input, $values, $restricted, &$tabindex, $scope) { + $return = array(); + echo htmlTable::header; + // print all contained elements + for ($i = 0; $i < sizeof($this->elements); $i++) { + // print htmlElement objects + if ($this->elements[$i] instanceof htmlElement) { + $fields = $this->elements[$i]->generateHTML($module, $input, $values, $restricted, $tabindex, $scope); + $return = array_merge($return, $fields); + } + // print simple Strings + else { + echo $this->elements[$i]; + } + } + echo htmlTable::footer; + return $return; + } + +} + +/** + * An extended input field that combines label, input field and help. + * + * @package metaHTML + */ +class htmlTableExtendedInputField implements htmlElement { + + /** Descriptive label */ + private $label; + /** unique field name */ + private $fieldName; + /** field value */ + private $fieldValue; + /** field size (default 30) */ + private $fieldSize = 30; + /** field max length (default 255) */ + private $fieldMaxLength = 255; + /** help ID */ + private $helpID; + /** required field */ + private $required = false; + + /** + * Constructor + * + * @param String $label descriptive label + * @param String $fieldName unique field name + * @param String $fieldValue value of input field (optional) + * @param String $helpID help ID (optional) + */ + function __construct($label, $fieldName, $fieldValue = null, $helpID = null) { + $this->label = htmlspecialchars($label); + $this->fieldName = htmlspecialchars($fieldName); + $this->fieldValue = htmlspecialchars($fieldValue); + $this->helpID = $helpID; + } + + /** + * Prints the HTML code for this element. + * + * @param string $module Name of account module + * @param array $input List of meta-HTML elements + * @param array $values List of values which override the defaults in $input (name => value) + * @param boolean $restricted If true then no buttons will be displayed + * @param integer $tabindex Start value of tabulator index for input fields + * @param string $scope Account type + * @return array List of input field names and their type (name => type) + */ + function generateHTML($module, $input, $values, $restricted, &$tabindex, $scope) { + // print label text + echo $this->label; + if ($this->required) { + echo '*'; + } + echo "\n\n\n"; + // print input field + $name = ' name="' . $this->fieldName . '"'; + $value = ''; + if ($this->fieldValue != null) { + $value = ' value="' . $this->fieldValue . '"'; + } + $maxLength = ''; + if ($this->fieldMaxLength != null) { + $maxLength = ' maxlength="' . $this->fieldMaxLength . '"'; + } + $size = ' size="' . $this->fieldSize . '"'; + $fieldTabIndex = ' tabindex="' . $tabindex . '"'; + $tabindex++; + echo ''; + // print help link + if ($this->helpID != null) { + echo "\n\n\n"; + $helpLink = new htmlHelpLink($this->helpID); + $helpLink->generateHTML($module, $input, $values, $restricted, $tabindex, $scope); + } + return array($this->fieldName => 'text'); + } + + /** + * Sets the maximum field length. + * + * @param int $fieldMaxLength length + */ + public function setFieldMaxLength($fieldMaxLength) { + $this->fieldMaxLength = $fieldMaxLength; + } + + /** + * Sets the field size. + * + * @param int $fieldSize size + */ + public function setFieldSize($fieldSize) { + $this->fieldSize = $fieldSize; + } + + /** + * Specifies if this input field must be filled. + * + * @param boolean $required required or not + */ + public function setRequired($required) { + $this->required = $required; + } + +} + +/** + * Renders a help link. + * + * @package metaHTML + */ +class htmlHelpLink implements htmlElement { + + /** help ID */ + private $helpID; + + /** + * Constructor + * + * @param String $helpID help ID + */ + function __construct($helpID) { + $this->helpID = $helpID; + } + + /** + * Prints the HTML code for this element. + * + * @param string $module Name of account module + * @param array $input List of meta-HTML elements + * @param array $values List of values which override the defaults in $input (name => value) + * @param boolean $restricted If true then no buttons will be displayed + * @param integer $tabindex Start value of tabulator index for input fields + * @param string $scope Account type + * @return array List of input field names and their type (name => type) + */ + function generateHTML($module, $input, $values, $restricted, &$tabindex, $scope) { + $helpEntry = getHelp($module, $this->helpID, $scope); + printHelpLink($helpEntry, $this->helpID, $module, $scope); + return array(); + } + +} + +/** + * Simple button. + * + * @package metaHTML + */ +class htmlButton implements htmlElement { + + /** button name */ + protected $name; + /** button text or image */ + protected $value; + /** image button or text button */ + protected $isImageButton; + + /** + * Constructor. + * + * @param String $name button name + * @param String $value button text or image (16x16px, relative to graphics folder) + * @param String $isImageButton image or text button (default text) + */ + function __construct($name, $value, $isImageButton = false) { + $this->name = htmlspecialchars($name); + $this->value = htmlspecialchars($value); + $this->isImageButton = $isImageButton; + } + + /** + * Prints the HTML code for this element. + * + * @param string $module Name of account module + * @param array $input List of meta-HTML elements + * @param array $values List of values which override the defaults in $input (name => value) + * @param boolean $restricted If true then no buttons will be displayed + * @param integer $tabindex Start value of tabulator index for input fields + * @param string $scope Account type + * @return array List of input field names and their type (name => type) + */ + function generateHTML($module, $input, $values, $restricted, &$tabindex, $scope) { + $value = ''; + $style = ''; + $class = ''; + $name = ' name="' . $this->name . '"'; + // image button + if ($this->isImageButton) { + $value = ' value=" "'; + } + // text button + else { + if ($this->value != null) { + $value = ' value="' . $this->value . '"'; + } + $class = ' class="smallImageButton"'; + $style = ' style="background-image: url(../../graphics/' . $this->value . ');"'; + } + echo ''; + return array($this->name, 'submit'); + } + +} + +/** + * Prints a button for the account pages. + * + * @package metaHTML + */ +class htmlAccountPageButton extends htmlButton implements htmlElement { + + /** + * Constructor + * + * @param String $targetModule module name which renders next page + * @param String $targetPage name of next page + * @param String $identifier identifier for button + * @param String $value button text or image (16x16px, relative to graphics folder) + * @param String $isImageButton image or text button (default text) + */ + function __construct($targetModule, $targetPage, $identifier, $value, $isImageButton = false) { + $this->name = htmlspecialchars('form_subpage_' . $targetModule . '_' . $targetPage . '_' . $identifier); + $this->value = $value; + $this->isImageButton = $isImageButton; + } + +} + +/** + * Represents a select box. + * + * @package metaHTML + */ +class htmlSelect implements htmlElement { + + /** name of select field */ + private $name; + /** size */ + private $size; + /** allows multi-selection */ + private $multiSelect = false; + /** elements */ + private $elements; + /** selected elements */ + private $selectedElements; + /** descriptive elements */ + private $hasDescriptiveElements = false; + /** sorting enabled */ + private $sortElements = true; + + /** + * Constructor. + * + * @param String $name element name + * @param array $elements list of elememts + * @param array $selectedElements list of selected elements + * @param int $size size (optional, default = 1) + */ + function __construct($name, $elements, $selectedElements, $size=1) { + $this->name = htmlspecialchars($name); + $this->elements = $elements; + $this->selectedElements = $selectedElements; + $this->size = htmlspecialchars($size); + } + + /** + * Prints the HTML code for this element. + * + * @param string $module Name of account module + * @param array $input List of meta-HTML elements + * @param array $values List of values which override the defaults in $input (name => value) + * @param boolean $restricted If true then no buttons will be displayed + * @param integer $tabindex Start value of tabulator index for input fields + * @param string $scope Account type + * @return array List of input field names and their type (name => type) + */ + function generateHTML($module, $input, $values, $restricted, &$tabindex, $scope) { + $name = ' name="' . $this->name . '"'; + $size = ' size="' . $this->size . '"'; + $multi = ''; + if ($this->multiSelect) { + $multi = ' multiple'; + } + echo '\n"; + $tabindex++; + // sorting + if ($this->sortElements) { + if ($this->hasDescriptiveElements) { + $labels = array_keys($this->elements); + natcasesort($labels); + $newElements = array(); + foreach ($labels as $label) { + $newElements[$label] = $this->elements[$label]; + } + $this->elements = $newElements; + } + else { + natcasesort($this->elements); + } + } + foreach ($this->elements as $key => $value) { + $selected = ''; + if ($this->hasDescriptiveElements) { + if (in_array($value, $this->selectedElements)) { + $selected = ' selected'; + } + echo "\n"; + } + else { + if (in_array($value, $this->selectedElements)) { + $selected = ' selected'; + } + echo "" . htmlspecialchars($value) . "\n"; + } + } + echo "\n"; + if ($this->multiSelect) { + return array($this->name, 'multiselect'); + } + else { + return array($this->name, 'select'); + } + } + + /** + * Specifies if the elements are just a simple list or an assoziative array (default: simple list). + * + * @param boolean $hasDescriptiveElements activates descriptive elements + */ + public function setHasDescriptiveElements($hasDescriptiveElements) { + $this->hasDescriptiveElements = $hasDescriptiveElements; + } + + /** + * Specifies if multi-selection is enabled (default: disabled). + * + * @param boolean $multiSelect allows multi-selection + */ + public function setMultiSelect($multiSelect) { + $this->multiSelect = $multiSelect; + } + + /** + * Specifies if the elemets should be sorted (default: sort). + * + * @param boolean $sortElements + */ + public function setSortElements($sortElements) { + $this->sortElements = $sortElements; + } + +} ?> \ No newline at end of file