diff --git a/lam/lib/html.inc b/lam/lib/html.inc index a51368d2..55688c02 100644 --- a/lam/lib/html.inc +++ b/lam/lib/html.inc @@ -68,14 +68,16 @@ abstract class htmlElement { class htmlTable extends htmlElement { /** table header */ - const header = "\n\n"; + const header = "
\n"; /** table footer */ - const footer = "\n
\n"; + const footer = "\n"; /** new line */ const newLine = "\n"; /** list of subelements */ private $elements = array(); + /** specifies if currently a row is open */ + private $rowOpen = false; /** * Adds an element to the table. The element may be a htmlElement object or a simple String. @@ -85,7 +87,22 @@ class htmlTable extends htmlElement { * @param array $options list of options (e.g. htmlElement::OPTION_ALIGN => htmlElement::ALIGN_TOP) */ public function addElement($element, $newLine = false) { - if ($element instanceof htmlElement) { + // add row element + if ($element instanceof htmlTableRow) { + // check if a row needs to be closed + if ($this->rowOpen) { + $this->elements[] = "\n"; + $this->rowOpen = false; + } + $this->elements[] = $element; + } + // add cell element + elseif ($element instanceof htmlElement) { + // check if a row needs to be opened + if (!$this->rowOpen) { + $this->elements[] = "\n"; + $this->rowOpen = true; + } // check if alignment option was given $align = ''; if ($element->alignment !== null) { @@ -120,7 +137,12 @@ class htmlTable extends htmlElement { * Adds another line to the table. */ public function addNewLine() { - $this->elements[] = htmlTable::newLine; + if (!$this->rowOpen) { + $this->elements[] = "\n"; + } + else { + $this->elements[] = htmlTable::newLine; + } } /** @@ -151,12 +173,60 @@ class htmlTable extends htmlElement { } } } + if ($this->rowOpen) { + echo "\n"; + } echo htmlTable::footer; return $return; } } +/** + * A row inside a htmlTable. + * + * @see htmlTable + * @package metaHTML + */ +class htmlTableRow extends htmlElement { + + private $cells; + + /** + * Constructor + * + * @param array $cells list of htmlElements + * @see htmlElement + */ + function __construct($cells) { + $this->cells = $cells; + } + + /** + * 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) { + $types = array(); + echo "\n"; + for ($i = 0; $i < sizeof($this->cells); $i++) { + echo "\n"; + $types = array_merge($types, $this->cells[$i]->generateHTML($module, $input, $values, $restricted, $tabindex, $scope)); + echo "\n"; + } + echo ""; + return $types; + } + +} + /** * An extended input field that combines label, input field and help. * @@ -695,6 +765,7 @@ class htmlTableExtendedInputCheckbox extends htmlInputCheckbox { * @param boolean $checked checked * @param String $label descriptive label * @param String $helpID help ID + * @param boolean $labelFirst specifies if the label is at the beginning or at the end (optional, default beginning) */ function __construct($name, $checked, $label, $helpID = null, $labelFirst = true) { parent::__construct($name, $checked); @@ -736,6 +807,96 @@ class htmlTableExtendedInputCheckbox extends htmlInputCheckbox { } +/** + * Prints the HTML code for a file upload field. + * + * @package metaHTML + */ +class htmlInputFileUpload extends htmlElement { + + /** unique name of input element */ + private $name; + + /** + * Constructor. + * + * @param String $name unique name + */ + function __construct($name) { + $this->name = htmlspecialchars($name); + } + + /** + * 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) { + $tabindexValue = ' tabindex="' . $tabindex . '"'; + $tabindex++; + echo ''; + return array($this->name => 'file'); + } + +} + +/** + * File upload with descriptive label and help link. + * + * @package metaHTML + */ +class htmlTableExtendedInputFileUpload extends htmlInputFileUpload { + + /** descriptive label */ + private $label; + /** help ID */ + private $helpID; + + /** + * Constructor. + * + * @param String $name unique name + * @param String $label descriptive label + * @param String $helpID help ID + */ + function __construct($name, $label, $helpID = null) { + parent::__construct($name); + $this->label = htmlspecialchars($label); + $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) { + echo $this->label; + echo "\n\n\n"; + $return = parent::generateHTML($module, $input, $values, $restricted, $tabindex, $scope); + // 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 $return; + } + +} + /** * Prints the HTML code for a textarea. * diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc index b419cc7c..2d866053 100644 --- a/lam/lib/modules/inetOrgPerson.inc +++ b/lam/lib/modules/inetOrgPerson.inc @@ -1005,17 +1005,13 @@ class inetOrgPerson extends baseModule implements passwordService { * @return array meta HTML code */ function display_html_photo() { - $return[] = array( - array('kind' => 'text', 'text' => _('Photo file (JPG format)') ), - array('kind' => 'input', 'name' => 'photoFile', 'type' => 'file'), - array('kind' => 'help', 'value' => 'photoUpload')); - $return[] = array( - array('kind' => 'table', 'value' => array( - array( - array('kind' => 'input', 'type' => 'submit', 'value' => _('Add photo'), 'name' => 'form_subpage_' . get_class($this) . '_attributes_submit'), - array('kind' => 'input', 'type' => 'submit', 'value' => _('Back'), 'name' => 'form_subpage_' . get_class($this) . '_attributes_back'), - array('kind' => 'text'))))); - return $return; + $container = new htmlTable(); + $container->addElement(new htmlTableExtendedInputFileUpload('photoFile', _('Photo file (JPG format)'), 'photoUpload'), true); + $buttonContainer = new htmlTable(); + $buttonContainer->addElement(new htmlAccountPageButton(get_class($this), 'attributes', 'submit', _('Add photo'))); + $buttonContainer->addElement(new htmlAccountPageButton(get_class($this), 'attributes', 'back', _('Back'))); + $container->addElement($buttonContainer); + return $container; } /** @@ -1377,10 +1373,9 @@ class inetOrgPerson extends baseModule implements passwordService { if (in_array('firstName', $fields)) { $firstName = ''; if (isset($attributes['givenName'][0])) $firstName = $attributes['givenName'][0]; - $return['firstName'] = array( - array('kind' => 'text', 'text' => _('First name')), - array('kind' => 'input', 'name' => 'inetOrgPerson_firstName', 'type' => 'text', 'size' => '30', - 'maxlength' => '255', 'value' => $firstName)); + $return['firstName'] = new htmlTableRow(array( + new htmlTableExtendedInputField(_('First name'), 'inetOrgPerson_firstName', $firstName) + )); } if (in_array('lastName', $fields)) { $lastName = ''; diff --git a/lam/lib/selfService.inc b/lam/lib/selfService.inc index dd10d17d..51476771 100644 --- a/lam/lib/selfService.inc +++ b/lam/lib/selfService.inc @@ -90,7 +90,7 @@ function getSelfServiceFieldSettings($scope) { * @param string $scope account type * @param array $fields input fields (array( => array(, , ...))) * @param array $attributes LDAP attributes (attribute names in lower case) - * @return array meta HTML code (array( => array( => array()))) + * @return array meta HTML code (array( => htmlTableRow)) */ function getSelfServiceOptions($scope, $fields, $attributes) { $return = array();