helper fixes, duck@obala.net, #8044
authorChuck Hagenbuch <chuck@horde.org>
Mon, 23 Mar 2009 02:12:13 +0000 (22:12 -0400)
committerChuck Hagenbuch <chuck@horde.org>
Mon, 23 Mar 2009 02:12:21 +0000 (22:12 -0400)
framework/Rdo/www/Form_Helper.php
framework/Rdo/www/Table_Helper.php
framework/Rdo/www/Table_Helper_Lens.php

index e65213e..c7e79c2 100644 (file)
@@ -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);
             }
index 8cf9572..41a99bf 100644 (file)
@@ -1,15 +1,11 @@
 <?php
 /**
- * See the enclosed file COPYING for license information (LGPL). If you
- * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
- *
- * @package Horde_Rdo
- */
-
-/**
  * The Horde_Rdo_Table_Helper class provides an Rdo extension to Horde_Template
  * used to generate browsing lists for different backends.
  *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
  * @author  Duck <duck@obala.net>
  * @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 = '<tag:url />';
-        $columns = $this->listFields();
+        $columns = $this->_listFields();
 
         $keys = array();
-        $primaryKeys = $this->getPrimaryKey();
+        $primaryKeys = $this->_getPrimaryKey();
         foreach ($primaryKeys as $key) {
             $keys[] = $key . '=<tag:rows.' . $key . ' />';
         }
         $keys = implode('&', $keys);
 
-        $content = '<table id="' . $this->params['id'] . '" class="striped sortable">' . "\n" .
+        $content = '<table id="' . $this->_params['id'] . '" class="striped sortable" style="width: 100%;">' . "\n" .
             '<thead>' . "\n" . '<tr>' . "\n";
-        if ($this->params['update'] || $this->params['delete']) {
+        if ($this->_params['update'] || $this->_params['delete']) {
             $content .= '<th class="nosort"><gettext>Actions</gettext></th>' . "\n";
         }
         foreach ($columns as $key => $name) {
-            if (in_array($key, $this->params['sort'])) {
+            if (in_array($key, $this->_params['sort'])) {
                 $content .= '<th class="sortdown">' . htmlspecialchars($name) . '</th>' . "\n";
             } else {
                 $content .= '<th>' . htmlspecialchars($name) . '</th>' . "\n";
@@ -285,14 +284,14 @@ class Horde_Rdo_Table_Helper extends Horde_Template
             '<loop:rows><tr>' . "\n";
 
         /* Actions. */
-        if ($this->params['update'] || $this->params['delete']) {
+        if ($this->_params['update'] || $this->_params['delete']) {
             $content .= '<td class="nowrap">' . "\n";
-            if ($this->params['update']) {
-                $content .= '<a class="update" href="' . $url . '&action=update&' . $keys . '">' .
+            if ($this->_params['update']) {
+                $content .= '<a class="update" href="' . Util::addParameter($url, 'action', 'update') . '&' . $keys . '">' .
                     '<img src="<tag:img_dir />/edit.png" alt="<gettext>Edit</gettext>" title="<gettext>Edit</gettext>" /></a> ' . "\n";
             }
-            if ($this->params['delete']) {
-                $content .= '<a class="delete" href="' . $url . '&action=delete&' . $keys . '">' .
+            if ($this->_params['delete']) {
+                $content .= '<a class="delete" href="' . Util::addParameter($url, 'action', 'delete') . '&' . $keys . '">' .
                     '<img src="<tag:img_dir />/delete.png" alt="<gettext>Delete</gettext>" title="<gettext>Delete</gettext>" /></a> ' . "\n";
             }
             $content .= '</td>' . "\n";
index 3e2cf88..bb28838 100644 (file)
@@ -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);
     }