*
* @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.
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();
}
}
$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');
continue;
}
- $params = $this->formMeta($vars->get('action'), $key);
+ $params = $this->_formMeta($vars->get('action'), $key);
if (is_object($params)) {
return $params;
}
break;
case 'update':
- if (in_array($key, $this->primaryKey)) {
+ if (in_array($key, $this->_primaryKey)) {
$this->addHidden('', $key, $params['type'], true);
$params['readonly'] = true;
}
$params['readonly'] = false;
$params['required'] = false;
if (!$params['hidden']) {
- $this->addCase($params['humanName'], $key);
+ $this->_addCase($params['humanName'], $key);
}
break;
}
/**
* 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('=' => '=', '>' => '>', '<' => '<',
* - description
* - params
*/
- protected function formMeta($action, $column, $key = false)
+ protected function _formMeta($action, $column, $key = false)
{
static $map;
unset($map['__sections']);
}
- foreach ($this->getFields($action) as $id) {
+ foreach ($this->_getFields($action) as $id) {
if (!isset($map[$id])) {
$map[$id] = array();
}
$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;
}
*/
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);
/* 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)) {
}
/**
- * 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;
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;
/**
* 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;
+ }
}
}
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());
}
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);
}
<?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
*
* @var array
*/
- protected $params = array();
+ protected $_params = array();
/**
* Mapper object that we display.
*
* @var Horde_Rdo_Mapper $object
*/
- protected $object;
+ protected $_mapper;
/**
* Constructor
*/
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,
'filter' => array(),
);
- $this->params = array_merge($defaults, $params);
+ $this->_params = array_merge($defaults, $params);
parent::Horde_Template();
$this->setOption('gettext', true);
*/
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;
*/
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 {
}
}
- 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 {
/**
* 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;
}
$columns = array();
- $keys = $this->getFields();
+ $keys = $this->_getFields();
foreach ($keys as $key) {
if (isset($meta[$key]['humanName'])) {
$columns[$key] = $meta[$key]['humanName'];
/**
* 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;
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());
}
$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']);
}
}
*
* @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;
}
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";
'<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";