%PDF- %PDF-
| Direktori : /home1/lightco1/www/lightingrepublic.com.au/libraries/koowa/template/helper/ |
| Current File : //home1/lightco1/www/lightingrepublic.com.au/libraries/koowa/template/helper/listbox.php |
<?php
/**
* @version $Id$
* @package Koowa_Template
* @subpackage Helper
* @copyright Copyright (C) 2007 - 2012 Johan Janssens. All rights reserved.
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html>
* @link http://www.nooku.org
*/
/**
* Template Listbox Helper
*
* @author Johan Janssens <johan@nooku.org>
* @package Koowa_Template
* @subpackage Helper
*/
class KTemplateHelperListbox extends KTemplateHelperSelect
{
/**
* Generates an HTML optionlist based on the distinct data from a model column.
*
* The column used will be defined by the name -> value => column options in
* cascading order.
*
* If no 'model' name is specified the model identifier will be created using
* the helper identifier. The model name will be the pluralised package name.
*
* If no 'value' option is specified the 'name' option will be used instead.
* If no 'text' option is specified the 'value' option will be used instead.
*
* @param array An optional array with configuration options
* @return string Html
* @see __call()
*/
protected function _render($config = array())
{
$config = new KConfig($config);
$config->append(array(
'autocomplete' => false
));
if($config->autocomplete) {
$result = $this->_autocomplete($config);
} else {
$result = $this->_listbox($config);
}
return $result;
}
/**
* Generates an HTML optionlist based on the distinct data from a model column.
*
* The column used will be defined by the name -> value => column options in
* cascading order.
*
* If no 'model' name is specified the model identifier will be created using
* the helper identifier. The model name will be the pluralised package name.
*
* If no 'value' option is specified the 'name' option will be used instead.
* If no 'text' option is specified the 'value' option will be used instead.
*
* @param array An optional array with configuration options
* @return string Html
* @see __call()
*/
protected function _listbox($config = array())
{
$config = new KConfig($config);
$config->append(array(
'name' => '',
'attribs' => array(),
'model' => KInflector::pluralize($this->getIdentifier()->package),
'deselect' => true,
'prompt' => '- Select -',
'unique' => true
))->append(array(
'value' => $config->name,
'selected' => $config->{$config->name},
'identifier' => 'com://'.$this->getIdentifier()->application.'/'.$this->getIdentifier()->package.'.model.'.KInflector::pluralize($config->model)
))->append(array(
'text' => $config->value,
))->append(array(
'filter' => array('sort' => $config->text),
));
$list = $this->getService($config->identifier)->set($config->filter)->getList();
//Get the list of items
$items = $list->getColumn($config->value);
if($config->unique) {
$items = array_unique($items);
}
//Compose the options array
$options = array();
if($config->deselect) {
$options[] = $this->option(array('text' => $this->translate($config->prompt)));
}
foreach($items as $key => $value)
{
$item = $list->find($key);
$options[] = $this->option(array('text' => $item->{$config->text}, 'value' => $item->{$config->value}));
}
//Add the options to the config object
$config->options = $options;
return $this->optionlist($config);
}
/**
* Renders a listbox with autocomplete behavior
*
* @see KTemplateHelperBehavior::autocomplete
* @return string The html output
*/
protected function _autocomplete($config = array())
{
$config = new KConfig($config);
$config->append(array(
'name' => '',
'attribs' => array(),
'model' => KInflector::pluralize($this->getIdentifier()->package),
'validate' => true,
))->append(array(
'value' => $config->name,
'selected' => $config->{$config->name},
'identifier' => 'com://'.$this->getIdentifier()->application.'/'.$this->getIdentifier()->package.'.model.'.KInflector::pluralize($config->model)
))->append(array(
'text' => $config->value,
))->append(array(
'filter' => array(),
));
//For the autocomplete behavior
$config->element = $config->value;
$config->path = $config->text;
$html = $this->getTemplate()->getHelper('behavior')->autocomplete($config);
return $html;
}
/**
* Search the mixin method map and call the method or trigger an error
*
* This function check to see if the method exists in the mixing map if not
* it will call the 'listbox' function. The method name will become the 'name'
* in the config array.
*
* This can be used to auto-magically create select filters based on the
* function name.
*
* @param string The function name
* @param array The function arguments
* @throws BadMethodCallException If method could not be found
* @return mixed The result of the function
*/
public function __call($method, $arguments)
{
if(!in_array($method, $this->getMethods()))
{
$config = $arguments[0];
$config['name'] = KInflector::singularize(strtolower($method));
return $this->_render($config);
}
return parent::__call($method, $arguments);
}
}