use new meta HTML for self service

This commit is contained in:
Roland Gruber 2010-06-21 16:23:44 +00:00
parent c85e718178
commit f865f365f6
3 changed files with 176 additions and 20 deletions

View File

@ -68,14 +68,16 @@ abstract class htmlElement {
class htmlTable extends htmlElement {
/** table header */
const header = "<table>\n<tr>\n";
const header = "<table>\n";
/** table footer */
const footer = "</tr>\n</table>\n";
const footer = "</table>\n";
/** new line */
const newLine = "</tr><tr>\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[] = "</tr>\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[] = "<tr>\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[] = "<tr>\n";
}
else {
$this->elements[] = htmlTable::newLine;
}
}
/**
@ -151,12 +173,60 @@ class htmlTable extends htmlElement {
}
}
}
if ($this->rowOpen) {
echo "</tr>\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 "<tr>\n";
for ($i = 0; $i < sizeof($this->cells); $i++) {
echo "<td>\n";
$types = array_merge($types, $this->cells[$i]->generateHTML($module, $input, $values, $restricted, $tabindex, $scope));
echo "</td>\n";
}
echo "</tr>";
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 '<input type="file" name="' . $this->name . '"' . $tabindexValue . '>';
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</td>\n<td>\n";
$return = parent::generateHTML($module, $input, $values, $restricted, $tabindex, $scope);
// print help link
if ($this->helpID != null) {
echo "\n</td>\n<td>\n";
$helpLink = new htmlHelpLink($this->helpID);
$helpLink->generateHTML($module, $input, $values, $restricted, $tabindex, $scope);
}
return $return;
}
}
/**
* Prints the HTML code for a textarea.
*

View File

@ -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 = '';

View File

@ -90,7 +90,7 @@ function getSelfServiceFieldSettings($scope) {
* @param string $scope account type
* @param array $fields input fields (array(<moduleName> => array(<field1>, <field2>, ...)))
* @param array $attributes LDAP attributes (attribute names in lower case)
* @return array meta HTML code (array(<moduleName> => array(<field1> => array(<meta HTML>))))
* @return array meta HTML code (array(<moduleName> => htmlTableRow))
*/
function getSelfServiceOptions($scope, $fields, $attributes) {
$return = array();