' . htmlspecialchars($tokenError) . '
';
}
/* Check for a form secret error. */
if (($secretError = $form->getError('_formSecret')) !== null) {
echo '' . htmlspecialchars($secretError) . '
';
}
if (count($form->_sections)) {
$this->_renderSectionTabs($form);
}
$error_section = null;
foreach ($variables as $section_id => $section) {
$this->_renderSectionBegin($form, $section_id);
foreach ($section as $var) {
$type = $var->getTypeName();
switch ($type) {
case 'header':
$this->_renderHeader($var->getHumanName(), $form->getError($var->getVarName()));
break;
case 'description':
$this->_renderDescription($var->getHumanName());
break;
case 'spacer':
$this->_renderSpacer();
break;
default:
$isInput = ($active && !$var->isReadonly());
$format = $isInput ? 'Input' : 'Display';
$begin = "_renderVar${format}Begin";
$end = "_renderVar${format}End";
$this->$begin($form, $var, $vars);
echo $this->_varRenderer->render($form, $var, $vars, $isInput);
/* Print any javascript if actions present. */
if ($var->hasAction()) {
$var->_action->printJavaScript();
}
$this->$end($form, $var, $vars);
/* Keep first field. */
if ($active && empty($this->_firstField) && !$var->isReadonly() && !$var->isHidden()) {
$this->_firstField = $var->getVarName();
}
/* Keep section with first error. */
if (is_null($error_section) && $form->getError($var)) {
$error_section = $section_id;
}
}
}
$this->_renderSectionEnd();
}
$page = $GLOBALS['injector']->getInstance('Horde_PageOutput');
if (!is_null($error_section) && $form->_sections) {
$page->addInlineScript(sprintf('sections_%s.toggle(\'%s\');',
$form->getName(),
$error_section));
}
}
function submit($submit = null, $reset = false)
{
if (is_null($submit) || empty($submit)) {
$submit = Horde_Form_Translation::t("Submit");
}
if ($reset === true) {
$reset = Horde_Form_Translation::t("Reset");
}
$this->_renderSubmit($submit, $reset);
}
/**
* Implementation specific begin function.
*/
function _renderBeginActive($name, $extra)
{
echo '';
if ($this->_showHeader) {
$this->_sectionHeader($name, $extra);
}
if ($this->_requiredLegend) {
echo '
' . $this->_requiredMarker . ' = ' . Horde_Form_Translation::t("Required Field");
}
}
/**
* Implementation specific begin function.
*/
function _renderBeginInactive($name, $extra)
{
echo '
';
if ($this->_showHeader) {
$this->_sectionHeader($name, $extra);
}
}
/**
* Implementation specific end function.
*/
function _renderEnd()
{
echo '
' . $this->_varRenderer->renderEnd();
}
function _renderHeader($header, $error = '')
{
?>
|
|
|
$first ? 'horde-default' : 'horde-button',
'name' => 'submitbutton',
'type' => 'submit',
);
if (is_array($submitbutton)) {
$submitbutton = array_merge($default,
$submitbutton);
} else {
$submitbutton = array_merge($default,
array('value' => $submitbutton));
}
array_walk($submitbutton, $buildAttribute);
$submitbutton = implode(' ', $submitbutton);
$first = false;
}
?>
/>
getError($var);
$isvalid = empty($message);
echo "
\n";
printf(' %s%s%s%s | ' . "\n",
empty($this->_attrColumnWidth) ? '' : ' width="' . $this->_attrColumnWidth . '"',
$isvalid ? '' : '',
$var->isRequired() ? '' . $this->_requiredMarker . ' ' : '',
$var->getHumanName(),
$isvalid ? '' : '
' . $message . '');
printf(' ',
((!$var->hasHelp() && $form->hasHelp()) ? ' colspan="2"' : ''),
($var->isDisabled() ? ' class="horde-form-disabled"' : ''));
}
function _renderVarInputEnd(&$form, &$var, &$vars)
{
/* Display any description for the field. */
if ($var->hasDescription()) {
echo ' ' . $var->getDescription();
}
/* Display any help for the field. */
if ($var->hasHelp()) {
global $registry;
if (isset($registry) && $registry instanceof Horde_Registry) {
$link = Horde_Help::link($GLOBALS['registry']->getApp(), $var->getHelp());
} else {
$link = '' . $this->_helpMarker . '';
}
echo " | \n $link ";
}
echo " | \n
\n";
}
// Implementation specifics -- display variables.
function _renderVarDisplayBegin(&$form, &$var, &$vars)
{
$message = $form->getError($var);
$isvalid = empty($message);
echo "
\n";
printf(' %s%s%s | ' . "\n",
empty($this->_attrColumnWidth) ? '' : ' width="' . $this->_attrColumnWidth . '"',
$isvalid ? '' : '',
$var->getHumanName(),
$isvalid ? '' : '
' . $message . '');
echo ' ';
}
function _renderVarDisplayEnd(&$form, &$var, &$vars)
{
if ($var->hasHelp()) {
echo ' | ';
}
echo " | \n
\n";
}
function _sectionHeader($title, $extra = '')
{
if (strlen($title)) {
echo '';
}
}
/**
* Attempts to return a concrete Horde_Form_Renderer instance based on
* $renderer.
*
* @param mixed $renderer The type of concrete Horde_Form_Renderer
* subclass to return. The code is dynamically
* included. If $renderer is an array, then we will
* look in $renderer[0]/lib/Form/Renderer/ for the
* subclass implementation named $renderer[1].php.
* @param array $params A hash containing any additional configuration a
* form might need.
*
* @return Horde_Form_Renderer The concrete Horde_Form_Renderer reference,
* or false on an error.
*/
function factory($renderer = '', $params = null)
{
if (is_array($renderer)) {
$app = $renderer[0];
$renderer = $renderer[1];
}
/* Return a base Horde_Form_Renderer object if no driver is
* specified. */
$renderer = basename($renderer);
if (!empty($renderer) && $renderer != 'none') {
$class = 'Horde_Form_Renderer_' . $renderer;
} else {
$class = 'Horde_Form_Renderer';
}
if (!class_exists($class)) {
if (!empty($app)) {
include $GLOBALS['registry']->get('fileroot', $app) . '/lib/Form/Renderer/' . $renderer . '.php';
} else {
include 'Horde/Form/Renderer/' . $renderer . '.php';
}
}
if (class_exists($class)) {
return new $class($params);
} else {
return PEAR::raiseError('Class definition of ' . $class . ' not found.');
}
}
/**
* Attempts to return a reference to a concrete Horde_Form_Renderer
* instance based on $renderer. It will only create a new instance if no
* Horde_Form_Renderer instance with the same parameters currently exists.
*
* This should be used if multiple types of form renderers (and,
* thus, multiple Horde_Form_Renderer instances) are required.
*
* This method must be invoked as: $var = &Horde_Form_Renderer::singleton()
*
* @param mixed $renderer The type of concrete Horde_Form_Renderer
* subclass to return. The code is dynamically
* included. If $renderer is an array, then we will
* look in $renderer[0]/lib/Form/Renderer/ for the
* subclass implementation named $renderer[1].php.
* @param array $params A hash containing any additional configuration a
* form might need.
*
* @return Horde_Form_Renderer The concrete Horde_Form_Renderer reference,
* or false on an error.
*/
function &singleton($renderer, $params = null)
{
static $instances = array();
$signature = serialize(array($renderer, $params));
if (!isset($instances[$signature])) {
$instances[$signature] = Horde_Form_Renderer::factory($renderer, $params);
}
return $instances[$signature];
}
}