1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
<?php
/**
* Class for setting up Horde Blocks using the Horde_Form:: classes.
*
* Copyright 2004-2006 Marko Djukic <marko@oblo.com>
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* $Horde: framework/Block/Block/UI.php,v 1.8.10.5 2006/01/02 17:46:35 jan Exp $
*
* @author Marko Djukic <marko@oblo.com>
* @since Horde 3.0
* @package Horde_Block
*/
class Horde_Block_UI {
var $_blocks = array();
var $_form = null;
var $_vars = null;
function Horde_Block_UI()
{
require_once 'Horde/Block.php';
require_once 'Horde/Block/Collection.php';
$this->_blocks = &Horde_Block_Collection::singleton();
}
function setForm(&$form)
{
$this->_form = &$form;
}
function setVars(&$vars)
{
$this->_vars = &$vars;
}
function setupEditForm($field = 'block')
{
if (is_null($this->_vars)) {
/* No existing vars set, get them now. */
require_once 'Horde/Variables.php';
$this->_vars = &Variables::getDefaultVariables();
}
if (!is_a($this->_form, 'Horde_Form')) {
/* No existing valid form object set so set up a new one. */
require_once 'Horde/Form.php';
$this->_form = &Horde_Form::singleton('', $this->_vars, _("Edit Block"));
}
/* Get the current value of the block selection. */
$value = $this->_vars->get($field);
/* Field to select apps. */
$apps = $this->_blocks->getBlocksList();
$v = &$this->_form->addVariable(_("Application"), $field . '[app]', 'enum', true, false, null, array($apps));
$v->setOption('trackchange', true);
if (empty($value['app'])) {
return;
}
/* If a block has been selected, output any options input. */
list($app, $block) = explode(':', $value['app']);
/* Get the options for the requested block. */
$options = $this->_blocks->getParams($app, $block);
/* Go through the options for this block and set up any required
* extra input. */
foreach ($options as $option) {
$name = $this->_blocks->getParamName($app, $block, $option);
$type = $this->_blocks->getOptionType($app, $block, $option);
$required = $this->_blocks->getOptionRequired($app, $block, $option);
$values = $this->_blocks->getOptionValues($app, $block, $option);
/* TODO: the setting 'string' should be changed in all blocks
* to 'text' so that it conforms with Horde_Form syntax. */
if ($type == 'string') {
$type = 'text';
}
$params = array();
if ($type == 'enum' || $type == 'mlenum') {
$params = array($values, true);
}
$this->_form->addVariable($name, $field . '[options][' . $option . ']', $type, $required, false, null, $params);
}
}
}
|