%PDF- %PDF-
Direktori : /home1/lightco1/www/plugins/system/jsnframework/libraries/joomlashine/itemlist/ |
Current File : //home1/lightco1/www/plugins/system/jsnframework/libraries/joomlashine/itemlist/generator.php |
<?php /** * @version $Id$ * @package JSN_Framework * @author JoomlaShine Team <support@joomlashine.com> * @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * Websites: http://www.joomlashine.com * Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html */ // No direct access to this file defined('_JEXEC') or die('Restricted access'); /** * Helper class for Item lists Generate * * @package JSN_Framework * @since 1.0.0 */ class JSNItemlistGenerator { /** * JModelList * @var $_model */ protected $_model; /** * The model state * @var object */ protected $_state; /** * The items to list * @var array */ protected $_items; /** * The pagination object * @var object */ protected $_pagination; /** * The ordering filtering fields white list * @var string */ protected $_listOrder; /** * An optional direction (asc|desc). * @var string */ protected $_listDirn; /** * The component name * @var string */ protected $_component; /** * The view name * @var string */ protected $_view; /** * The list options * @var array */ protected $_options; /** * The list column * @var array */ protected $_column; /** * add JModelList * * @param JModelList $model Model class for handling lists of items */ public function __construct(JModelList $model) { // Get input object $input = JFactory::getApplication()->input; $this->_model = $model; $this->_state = $this->_model->getState(); $this->_items = $this->_model->getItems(); $this->_pagination = $this->_model->getPagination(); $this->_listOrder = $this->_state->get('list.ordering'); $this->_listDirn = $this->_state->get('list.direction'); $this->_component = $input->getCmd('option'); $this->_view = $input->getCmd('view'); } /** * Add column to item lists * * @param type $title Title header column * @param type $field filed name * @param type $type type column * @param type $options options column * * @return void */ public function addColumn($title, $field, $type, $options = null) { $this->_column[] = array( 'title' => $title, 'field' => $field, 'type' => $type, 'options' => $options ); } /** * Generate html code for a filter * * @return html code filter */ public function generateFilter() { $this->_filterForm = new JForm('Item Filter'); $this->_filterForm->loadFile(JPATH_COMPONENT_ADMINISTRATOR . '/views/' . $this->_view . '/filter.xml', true, '/filter'); $fieldSet = $this->_filterForm->getFieldSet('filters'); $positionRight = ''; $positionLeft = ''; foreach ($fieldSet AS $object) { if ($this->_filterForm->getFieldAttribute($object->name, 'position') == "right") { $positionRight .= $object->input; } else { $positionLeft .= $object->input; } } return "<div class=\"jsn-fieldset-filter\"><fieldset> <div class=\"pull-left jsn-fieldset-search\">{$positionLeft}</div> <div class=\"pull-right jsn-fieldset-select\">{$positionRight}</div> <div class=\"clearbreak\"></div> </fieldset></div>"; } /** * Generate html code for a table which includes all the required column * * @return html code */ public function generate() { $thead = ''; $tbody = ''; $thead .= "<th width=\"2%\">#</th>"; if (is_array($this->_column) && count($this->_column) > 0) { foreach ($this->_column as $column) { $thead .= $this->getColumnHeader($column); } } if ( ! empty($this->_items) && count($this->_items) > 0) { foreach ($this->_items as $index => $items) { $tbody .= $this->getColumnItems($items, $index); } } $countColumn = count($this->_column) + 2; $html = "<table class=\"table table-bordered table-striped jsn-table-centered\"> <thead>{$thead}</thead> <tbody>{$tbody}</tbody> <tfoot><tr><td colspan=\"{$countColumn}\">{$this->_pagination->getListFooter()}</td></tr></tfoot> </table> <input type=\"hidden\" name=\"option\" value=\"{$this->_component}\" /> <input type=\"hidden\" name=\"task\" value=\"\" /> <input type=\"hidden\" name=\"view\" value=\"{$this->_view}\" /> <input type=\"hidden\" name=\"boxchecked\" value=\"0\" /> <input type=\"hidden\" name=\"filter_order\" value=\"{$this->_listOrder}\" /> <input type=\"hidden\" name=\"filter_order_Dir\" value=\"{$this->_listDirn}\" />"; return $html; } /** * Generate html code for a columns header * * @param array $column options column * * @return html code */ public function getColumnHeader($column) { $customSort = isset($column['options']['sortTable']) ? $column['options']['sortTable'] : ''; $type = isset($column['type']) ? $column['type'] : ''; $fieldTitle = isset($column['title']) ? $column['title'] : ''; $checAll = isset($column['options']['checkall']) ? $column['options']['checkall'] : ''; $classDefault = !empty($type) ? 'header-' . $type . ' ' : ''; $class = isset($column['options']['classHeader']) ? ' class="' . $classDefault . $column['options']['classHeader'] . '"' : 'class="' . $classDefault . '"'; $html = "<th nowrap=\"nowrap\"{$class}>"; if ( ! empty($customSort)) { if ($customSort && $type == 'ordering') { $html .= JHtml::_('grid.sort', strtoupper($fieldTitle), $customSort, $this->_listDirn, $this->_listOrder); $html .= JHtml::_('grid.order', $this->_items, 'filesave.png', $this->_view . '.saveorder'); } else { $html .= JHtml::_('grid.sort', strtoupper($fieldTitle), $customSort, $this->_listDirn, $this->_listOrder); } } else { if ($type == 'checkbox' && $checAll) { $countItems = count($this->_items); $html .= "<input type=\"checkbox\" name=\"toggle\" value=\"\" onclick=\"Joomla.checkAll(this);\" />"; } else { $html .= JText::_(strtoupper($fieldTitle)); } } $html .= "</th>"; return $html; } /** * Generate html code for a columns items * * @param array $items items to list * @param int $index Index number * * @return html code */ public function getColumnItems($items, $index) { $html = ''; $html .= "<td>{$this->_pagination->getRowOffset($index)}</td>"; foreach ($this->_column AS $column) { $type = isset($column['type']) ? $column['type'] : ''; $optionType = preg_replace('/[^a-zA-Z]/i', '', $type); $filed = isset($column['field']) ? $column['field'] : ''; $dataCoulumn = isset($items->$filed) ? $items->$filed : ''; $method = "columnType{$optionType}"; $options = array('option' => $column['options'], 'items' => $items, 'title' => $column['title'], 'index' => $index, 'dataColumn' => $dataCoulumn); $class = isset($column['options']['class']) ? ' class="' . $column['options']['class'] . '"' : ''; if (method_exists('JSNItemlistGenerator', $method)) { $html .= "<td{$class}>{$this->$method($options)}</td>"; } else { $html .= "<td{$class}>{$this->columnTypeText($options)}</td>"; } } return "<tr>{$html}</tr>"; } /** * Generate html code for colum type "Checkbox" * * @param type $options array('dataColumn'=>(Object Data),'name'=>'name checkbox','index') * * @return html code */ public function columnTypeCheckbox($options) { $value = isset($options['dataColumn']) ? $options['dataColumn'] : ''; $name = isset($options['option']['name']) ? $options['option']['name'] : ''; $eventClick = isset($options['option']['onclick']) ? 'onclick="' . $options['option']['onclick'] . '"' : ''; $html = "<input type=\"checkbox\" title=\"Checkbox for row {$options['index']}\" {$eventClick} value=\"{$value}\" name=\"{$name}\" id=\"cb{$options['index']}\">"; return $html; } /** * Generate html code for colum type "Custom" * * @param type $options $options array('option object','method','items') * * @return html code */ public function columnTypeCustom($options) { if (is_object($options['option']['obj']) && method_exists($options['option']['obj'], $options['option']['method'])) { return call_user_func_array(array($options['option']['obj'], $options['option']['method']), array($options['items'])); } return ''; } /** * Generate html code for colum type "Link" * * @param type $options array('dataColumn'=>(Object Data),'link'=>(href link)) * * @return html code */ public function columnTypeLink($options) { $link = isset($options['option']['link']) ? $options['option']['link'] : ''; $dataColumn = isset($options['dataColumn']) ? $options['dataColumn'] : ''; if (preg_match_all('/\{\$([^\}]+)\}/', $link, $matches, PREG_SET_ORDER)) { foreach ($matches AS $match) { $link = str_replace($match[0], @$options["items"]->{$match[1]}, $link); } } return "<a href=\"{$link}\">{$dataColumn}</a>"; } /** * Generate html code for colum type "Images" * * @param type $options array('dataColumn'=>(Object Data),'srcRoot'=>(path root images)) * * @return html code */ public function columnTypeImages($options) { $srcRoot = isset($options['option']['srcRoot']) ? $options['option']['srcRoot'] : ''; $images = isset($options['dataColumn']) ? "<img src=\"{$srcRoot}{$options['dataColumn']}\" />" : ''; return $images; } /** * Generate html code for colum type "Text" * * @param type $options array('dataColumn'=>(Object Data)) * * @return html code */ public function columnTypeText($options) { $dataColumn = isset($options['dataColumn']) ? $options['dataColumn'] : ''; return $dataColumn; } /** * Generate html code for colum type "Published" * * @param type $options array('dataColumn'=>(Object Data),'index') * * @return html code */ public function columnTypePublished($options) { $dataColumn = isset($options['dataColumn']) ? $options['dataColumn'] : ''; $published = JHtml::_('jgrid.published', $dataColumn, $options['index'], $this->_view . '.'); return $published; } /** * Generate html code for colum type "Ordering" * * @param type $options array('dataColumn'=>(Object Data),'changeOrder'=>(true or false),index) * * @return html code */ public function columnTypeOrdering($options) { $dataColumn = isset($options['dataColumn']) ? $options['dataColumn'] : ''; if (isset($options['option']['changeOrder']) && $options['option']['changeOrder'] == "disabled") { $disabled = 'disabled="disabled"'; $changeOrdering = false; } else { $disabled = ''; $changeOrdering = true; } $ordering = "<div class=\"input-prepend\">"; $ordering .= "<span class=\"add-on\">{$this->_pagination->orderUpIcon($options['index'], true, $this->_view . '.orderup', 'Move Up', $changeOrdering)}</span>"; $ordering .= "<span class=\"add-on\">{$this->_pagination->orderDownIcon($options['index'], count($this->_items), true, $this->_view . '.orderdown', 'Move Down', $changeOrdering)}</span><input type=\"text\" name=\"order[]\" value=\"{$dataColumn}\" {$disabled} class=\"jsn-input-small-fluid jsn-input-ordering\" />"; $ordering .= "</div >"; return $ordering; } }