From 092dd0a1061f3be2e80919a481390205efb43f40 Mon Sep 17 00:00:00 2001 From: Chuck Hagenbuch Date: Sun, 22 Mar 2009 22:12:13 -0400 Subject: [PATCH] helper fixes, duck@obala.net, #8044 --- framework/Rdo/www/Form_Helper.php | 108 ++++++++++++++------------- framework/Rdo/www/Table_Helper.php | 125 ++++++++++++++++---------------- framework/Rdo/www/Table_Helper_Lens.php | 5 +- 3 files changed, 123 insertions(+), 115 deletions(-) diff --git a/framework/Rdo/www/Form_Helper.php b/framework/Rdo/www/Form_Helper.php index e65213e57..c7e79c259 100644 --- a/framework/Rdo/www/Form_Helper.php +++ b/framework/Rdo/www/Form_Helper.php @@ -22,14 +22,14 @@ class Horde_Rdo_Form_Helper extends Horde_Form * * @var string */ - protected $primaryKey; + protected $_primaryKey; /** * Rdo_Mapper object that we display. * * @var Horde_Rdo_Mapper $mapper */ - protected $mapper; + protected $_mapper; /** * Extends Horde_Form for general purposes and prepare initial form. @@ -39,10 +39,10 @@ class Horde_Rdo_Form_Helper extends Horde_Form parent::__construct($vars, $title, $name); if (is_array($params)) { - $this->mapper = $params['mapper']; + $this->_mapper = $params['mapper']; unset($params['mapper']); } else { - $this->mapper = $params; + $this->_mapper = $params; $params = array(); } @@ -68,15 +68,15 @@ class Horde_Rdo_Form_Helper extends Horde_Form } $i = 0; - $this->getPrimaryKey(); - $allFields = $this->getFields($vars->get('action')); + $this->_getPrimaryKey(); + $allFields = $this->_getFields($vars->get('action')); /* Determine what to display */ if ($vars->get('action') == 'search_active') { if ($vars->get('fields')) { $fields = explode('|', $vars->get('fields')); } else { - $fields = $this->primaryKey; + $fields = $this->_primaryKey; } if ($vars->get('horde_helper_add')) { $fields[] = $vars->get('horde_helper_add'); @@ -92,7 +92,7 @@ class Horde_Rdo_Form_Helper extends Horde_Form continue; } - $params = $this->formMeta($vars->get('action'), $key); + $params = $this->_formMeta($vars->get('action'), $key); if (is_object($params)) { return $params; } @@ -107,7 +107,7 @@ class Horde_Rdo_Form_Helper extends Horde_Form break; case 'update': - if (in_array($key, $this->primaryKey)) { + if (in_array($key, $this->_primaryKey)) { $this->addHidden('', $key, $params['type'], true); $params['readonly'] = true; } @@ -119,7 +119,7 @@ class Horde_Rdo_Form_Helper extends Horde_Form $params['readonly'] = false; $params['required'] = false; if (!$params['hidden']) { - $this->addCase($params['humanName'], $key); + $this->_addCase($params['humanName'], $key); } break; } @@ -168,7 +168,7 @@ class Horde_Rdo_Form_Helper extends Horde_Form /** * Add a comparison operator selection */ - protected function addCase($humanName, $key) + protected function _addCase($humanName, $key) { $this->addVariable($humanName, 'cases_' . $key, 'enum', false, false, 'cases', array(array('=' => '=', '>' => '>', '<' => '<', @@ -187,7 +187,7 @@ class Horde_Rdo_Form_Helper extends Horde_Form * - description * - params */ - protected function formMeta($action, $column, $key = false) + protected function _formMeta($action, $column, $key = false) { static $map; @@ -203,7 +203,7 @@ class Horde_Rdo_Form_Helper extends Horde_Form unset($map['__sections']); } - foreach ($this->getFields($action) as $id) { + foreach ($this->_getFields($action) as $id) { if (!isset($map[$id])) { $map[$id] = array(); } @@ -226,9 +226,9 @@ class Horde_Rdo_Form_Helper extends Horde_Form $map[$id]['description'] = ''; } if (!isset($map[$id]['required'])) { - $map[$id]['required'] = in_array($id, $this->primaryKey); + $map[$id]['required'] = in_array($id, $this->_primaryKey); } - if ($action == 'update' && in_array($id, $this->primaryKey)) { + if ($action == 'update' && in_array($id, $this->_primaryKey)) { $map[$id]['readonly'] = true; } @@ -280,22 +280,39 @@ class Horde_Rdo_Form_Helper extends Horde_Form */ public function getSelected() { - static $params; + static $selected; - if (is_null($params)) { - foreach ($this->primaryKey as $key) { - if ($this->_vars->$key) { - $params[$key] = $this->_vars->$key; - } + if ($selected !== null) { + return $selected; + } + + foreach ($this->_primaryKey as $key) { + if ($this->_vars->$key) { + $params[$key] = $this->_vars->$key; } } - return $params; + $selected = $this->_mapper->findOne($params); + + if ($selected === null) { + return PEAR::raiseError(_("Does not exists")); + } + + return $selected; } + /** + * Get the renderer for this form, either a custom renderer or the + * standard one. + * + * @param array $params A hash of renderer-specific parameters. + * + * @return object Horde_Form_Renderer The form renderer. + */ function getRenderer($params = array()) { if ($this->_vars->action == 'search' || $this->_vars->action == 'search_active') { + require_once dirname(__FILE__) . '/Form_Renderer_Helper.php'; $renderer = new Horde_Form_Renderer_Form_Helper($params); } else { $renderer = new Horde_Form_Renderer($params); @@ -322,7 +339,7 @@ class Horde_Rdo_Form_Helper extends Horde_Form /* Add test cases and filter not existing filters */ if ($this->_vars->action == 'search' || $this->_vars->action == 'search_active') { - $fields = $this->getFields('search'); + $fields = $this->_getFields('search'); foreach ($info as $key => $value) { $name = substr($key, 0, strrpos($key, '_')); if (empty($value) || !in_array($name, $fields)) { @@ -360,30 +377,21 @@ class Horde_Rdo_Form_Helper extends Horde_Form } /** - * Return the selected object or false if none. - */ - public function getSelected() - { - return $this->mapper->find(Horde_Rdo::FIND_FIRST, - parent::getSelected()); - } - - /** * Return the form meta data */ public function formMetaData($action) { - if (method_exists($this->mapper, 'formMeta')) { - return $this->mapper->formMeta($action); + if (method_exists($this->_mapper, 'formMeta')) { + return $this->_mapper->formMeta($action); } else { - return $this->mapper->model->getFields(); + return $this->_mapper->fields; } } /** * Array of field name. */ - protected function getFields($action) + protected function _getFields($action) { static $fields; @@ -391,10 +399,10 @@ class Horde_Rdo_Form_Helper extends Horde_Form return $fields; } - if (method_exists($this->mapper, 'formFields')) { - $fields = $this->mapper->formFields($action); + if (method_exists($this->_mapper, 'formFields')) { + $fields = $this->_mapper->formFields($action); } else { - $fields = $this->mapper->model->listFields(); + $fields = $this->_mapper->fields; } return $fields; @@ -403,16 +411,14 @@ class Horde_Rdo_Form_Helper extends Horde_Form /** * Get primary key. */ - protected function getPrimaryKey() + protected function _getPrimaryKey() { - if ($this->primaryKey !== null) { - return $this->primaryKey; - } - - if (method_exists($this->mapper, 'getPrimaryKey')) { - $this->primaryKey = $this->mapper->getPrimaryKey(); - } else { - $this->primaryKey = array($this->mapper->model->key); + if ($this->_primaryKey === null) { + if (method_exists($this->_mapper, 'getPrimaryKey')) { + $this->_primaryKey = $this->_mapper->getPrimaryKey(); + } else { + $this->_primaryKey = $this->_mapper->tableDefinition->getPrimaryKey()->columns; + } } } @@ -434,14 +440,14 @@ class Horde_Rdo_Form_Helper extends Horde_Form public function create($params) { foreach ($params as $key => $value) { - $meta = $this->formMeta('update', $key); + $meta = $this->_formMeta('update', $key); if ($meta['type'] == 'set') { $params[$key] = implode('|', $value); } } try { - $this->mapper->create($params); + $this->_mapper->create($params); } catch (Exception $e) { return PEAR::raiseError($e->getMessage()); } @@ -453,7 +459,7 @@ class Horde_Rdo_Form_Helper extends Horde_Form public function update($params) { foreach ($params as $key => $value) { - $meta = $this->formMeta('update', $key); + $meta = $this->_formMeta('update', $key); if ($meta['type'] == 'set' && is_array($value)) { $params[$key] = implode('|', $value); } diff --git a/framework/Rdo/www/Table_Helper.php b/framework/Rdo/www/Table_Helper.php index 8cf957292..41a99bf7d 100644 --- a/framework/Rdo/www/Table_Helper.php +++ b/framework/Rdo/www/Table_Helper.php @@ -1,15 +1,11 @@ * @since Horde 4.0 * @package Horde_Rdo @@ -21,14 +17,14 @@ class Horde_Rdo_Table_Helper extends Horde_Template * * @var array */ - protected $params = array(); + protected $_params = array(); /** * Mapper object that we display. * * @var Horde_Rdo_Mapper $object */ - protected $object; + protected $_mapper; /** * Constructor @@ -38,9 +34,10 @@ class Horde_Rdo_Table_Helper extends Horde_Template */ public function __construct($params = array(), $object) { - $this->object = $object; - $params['name'] = $object->model->table; - $params['id'] = $object->model->table; + $this->_mapper = $object; + + $params['name'] = $object->table; + $params['id'] = $object->table; $defaults = array( 'delete' => true, @@ -55,7 +52,7 @@ class Horde_Rdo_Table_Helper extends Horde_Template 'filter' => array(), ); - $this->params = array_merge($defaults, $params); + $this->_params = array_merge($defaults, $params); parent::Horde_Template(); $this->setOption('gettext', true); @@ -66,18 +63,18 @@ class Horde_Rdo_Table_Helper extends Horde_Template */ public function getRows() { - $query = $this->prepareQuery(); - if (!empty($this->params['perpage'])) { - $limit = $this->params['perpage']; - $offset = $this->params['page'] * $this->params['perpage']; + $query = $this->_prepareQuery(); + if (!empty($this->_params['perpage'])) { + $limit = $this->_params['perpage']; + $offset = $this->_params['page'] * $this->_params['perpage']; $query->limit($limit, $offset); } $rows = new Horde_Rdo_List($query); - if (!empty($this->params['decorator'])) { - $decorator = $this->params['decorator']; - $rows = new Horde_Lens_Iterator($rows, new $decorator()); + if (!empty($this->_params['decorator'])) { + $decorator = $this->_params['decorator']; + // $rows = new Horde_Lens_Iterator($rows, new $decorator()); } return $rows; @@ -90,18 +87,18 @@ class Horde_Rdo_Table_Helper extends Horde_Template */ public function count() { - return $this->object->count($this->prepareQuery()); + return $this->_mapper->count($this->_prepareQuery()); } /** * Prepares Rdo query. */ - private function prepareQuery() + private function _prepareQuery() { - $query = new Horde_Rdo_Query($this->object); + $query = new Horde_Rdo_Query($this->_mapper); - if (!empty($this->params['filter'])) { - foreach ($this->params['filter'] as $key => $val) { + if (!empty($this->_params['filter'])) { + foreach ($this->_params['filter'] as $key => $val) { if (is_array($val)) { $query->addTest($val['field'], $val['test'], $val['value']); } else { @@ -110,11 +107,11 @@ class Horde_Rdo_Table_Helper extends Horde_Template } } - if (!empty($this->params['sort'])) { - if (!is_array($this->params['sort'])) { - $this->params['sort'] = array($this->params['sort']); + if (!empty($this->_params['sort'])) { + if (!is_array($this->_params['sort'])) { + $this->_params['sort'] = array($this->_params['sort']); } - foreach ($this->params['sort'] as $sort) { + foreach ($this->_params['sort'] as $sort) { if (is_array($sort)) { $query->sortBy($sort[0], $sort[1]); } else { @@ -129,31 +126,31 @@ class Horde_Rdo_Table_Helper extends Horde_Template /** * Return field information. */ - protected function getFields() + protected function _getFields() { - if ($this->params['columns']) { - return $this->params['columns']; - } elseif (!empty($this->params['relationships'])) { - $fields = $this->object->model->listFields(); - foreach ($this->object->relationships as $r) { + if ($this->_params['columns']) { + return $this->_params['columns']; + } elseif (!empty($this->_params['relationships'])) { + $fields = $this->_mapper->fields; + foreach ($this->_mapper->relationships as $r) { $mapper_name = $r['mapper']; $mapper = new $mapper_name(); - $fields = array_merge($fields, $mapper->model->listFields()); + $fields = array_merge($fields, $mapper->fields); } return $fields; } else { - return $this->object->model->listFields(); + return $this->_mapper->fields; } } /** * Return field names. */ - protected function listFields() + protected function _listFields() { $meta = array(); - if (method_exists($this->object, 'formMeta')) { - $meta = $this->object->formMeta('table'); + if (method_exists($this->_mapper, 'formMeta')) { + $meta = $this->_mapper->formMeta('table'); if ($meta instanceof PEAR_Error) { return $meta; } @@ -161,7 +158,7 @@ class Horde_Rdo_Table_Helper extends Horde_Template $columns = array(); - $keys = $this->getFields(); + $keys = $this->_getFields(); foreach ($keys as $key) { if (isset($meta[$key]['humanName'])) { $columns[$key] = $meta[$key]['humanName']; @@ -180,16 +177,16 @@ class Horde_Rdo_Table_Helper extends Horde_Template /** * Get primary key. */ - protected function getPrimaryKey() + protected function _getPrimaryKey() { - if (method_exists($this->object, 'getPrimaryKey')) { - $keys = $this->object->getPrimaryKey(); + if (method_exists($this->_mapper, 'getPrimaryKey')) { + $keys = $this->_mapper->getPrimaryKey(); } else { - $keys = array($this->object->model->key); + $keys = $this->_mapper->tableDefinition->getPrimaryKey()->columns; } - if (!$keys) { - $keys = $this->getFields(); + if (empty($keys)) { + $keys = $this->fields; } return $keys; @@ -203,11 +200,13 @@ class Horde_Rdo_Table_Helper extends Horde_Template public function fetch($template = null) { if ($template === null) { - $template = $this->getTemplateFile(); + $template = $this->_getTemplateFile(); } + if ($template) { return parent::fetch($template); } + return parent::parse($this->getTemplate()); } @@ -224,11 +223,11 @@ class Horde_Rdo_Table_Helper extends Horde_Template $this->set('rows', $this->getRows()); if (empty($this->_scalars['img_dir'])) { - $this->set('img_dir', $this->params['img_dir']); + $this->set('img_dir', $this->_params['img_dir']); } if (empty($this->_scalars['url'])) { - $this->set('url', $this->params['url']); + $this->set('url', $this->_params['url']); } } @@ -237,14 +236,14 @@ class Horde_Rdo_Table_Helper extends Horde_Template * * @return string Template filename. */ - protected function getTemplateFile() + protected function _getTemplateFile() { - $filename = $GLOBALS['registry']->get('templates') . DIRECTORY_SEPARATOR . $this->params['name'] . '.html'; + $filename = $GLOBALS['registry']->get('templates') . DIRECTORY_SEPARATOR . $this->_params['name'] . '.html'; if (file_exists($filename)) { return $filename; } - $filename = $GLOBALS['registry']->get('templates', 'horde') . DIRECTORY_SEPARATOR . $this->params['name'] . '.html'; + $filename = $GLOBALS['registry']->get('templates', 'horde') . DIRECTORY_SEPARATOR . $this->_params['name'] . '.html'; if (file_exists($filename)) { return $filename; } @@ -260,22 +259,22 @@ class Horde_Rdo_Table_Helper extends Horde_Template public function getTemplate() { $url = ''; - $columns = $this->listFields(); + $columns = $this->_listFields(); $keys = array(); - $primaryKeys = $this->getPrimaryKey(); + $primaryKeys = $this->_getPrimaryKey(); foreach ($primaryKeys as $key) { $keys[] = $key . '='; } $keys = implode('&', $keys); - $content = '' . "\n" . + $content = '
' . "\n" . '' . "\n" . '' . "\n"; - if ($this->params['update'] || $this->params['delete']) { + if ($this->_params['update'] || $this->_params['delete']) { $content .= '' . "\n"; } foreach ($columns as $key => $name) { - if (in_array($key, $this->params['sort'])) { + if (in_array($key, $this->_params['sort'])) { $content .= '' . "\n"; } else { $content .= '' . "\n"; @@ -285,14 +284,14 @@ class Horde_Rdo_Table_Helper extends Horde_Template '' . "\n"; /* Actions. */ - if ($this->params['update'] || $this->params['delete']) { + if ($this->_params['update'] || $this->_params['delete']) { $content .= '' . "\n"; diff --git a/framework/Rdo/www/Table_Helper_Lens.php b/framework/Rdo/www/Table_Helper_Lens.php index 3e2cf8894..bb28838a7 100644 --- a/framework/Rdo/www/Table_Helper_Lens.php +++ b/framework/Rdo/www/Table_Helper_Lens.php @@ -2,7 +2,7 @@ /** * @package Horde_Rdo */ -class Horde_Rdo_Table_Helper_Lens extends Horde_Rdo_Lens +class Horde_Rdo_Table_Helper_Lens extends Horde_Lens { /** */ @@ -27,6 +27,7 @@ class Horde_Rdo_Table_Helper_Lens extends Horde_Rdo_Lens if (!is_object($target)) { $target = (object)$target; } + return parent::decorate($target); } @@ -35,9 +36,11 @@ class Horde_Rdo_Table_Helper_Lens extends Horde_Rdo_Lens public function __get($key) { $value = parent::__get($key); + if ($key == 'updated' || $key == 'created') { return strftime($this->date_format, $value) . ' ' . date($this->time_format , $value); } + return htmlspecialchars($value); } -- 2.11.0
Actions' . htmlspecialchars($name) . '' . htmlspecialchars($name) . '
' . "\n"; - if ($this->params['update']) { - $content .= '' . + if ($this->_params['update']) { + $content .= '' . '<gettext>Edit</gettext> ' . "\n"; } - if ($this->params['delete']) { - $content .= '' . + if ($this->_params['delete']) { + $content .= '' . '<gettext>Delete</gettext> ' . "\n"; } $content .= '