/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Array/Abstract.php
PHP | 208 lines | 92 code | 15 blank | 101 comment | 11 complexity | 00b2060b40a561793444e9b3e3012bbc MD5 | raw file
Possible License(s): CC-BY-SA-3.0, LGPL-2.1, GPL-2.0, WTFPL
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magentocommerce.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magentocommerce.com for more information.
- *
- * @category Mage
- * @package Mage_Adminhtml
- * @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Adminhtml system config array field renderer
- *
- * @category Mage
- * @package Mage_Adminhtml
- * @author Magento Core Team <core@magentocommerce.com>
- */
- abstract class Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract extends Mage_Adminhtml_Block_System_Config_Form_Field
- {
- /**
- * Grid columns
- *
- * @var array
- */
- protected $_columns = array();
- /**
- * Enable the "Add after" button or not
- *
- * @var bool
- */
- protected $_addAfter = true;
- /**
- * Label of add button
- *
- * @var unknown_type
- */
- protected $_addButtonLabel;
- /**
- * Rows cache
- *
- * @var array|null
- */
- private $_arrayRowsCache;
- /**
- * Indication whether block is prepared to render or no
- *
- * @var bool
- */
- protected $_isPreparedToRender = false;
- /**
- * Check if columns are defined, set template
- *
- */
- public function __construct()
- {
- if (!$this->_addButtonLabel) {
- $this->_addButtonLabel = Mage::helper('adminhtml')->__('Add');
- }
- parent::__construct();
- if (!$this->getTemplate()) {
- $this->setTemplate('system/config/form/field/array.phtml');
- }
- }
- /**
- * Add a column to array-grid
- *
- * @param string $name
- * @param array $params
- */
- public function addColumn($name, $params)
- {
- $this->_columns[$name] = array(
- 'label' => empty($params['label']) ? 'Column' : $params['label'],
- 'size' => empty($params['size']) ? false : $params['size'],
- 'style' => empty($params['style']) ? null : $params['style'],
- 'class' => empty($params['class']) ? null : $params['class'],
- 'renderer' => false,
- );
- if ((!empty($params['renderer'])) && ($params['renderer'] instanceof Mage_Core_Block_Abstract)) {
- $this->_columns[$name]['renderer'] = $params['renderer'];
- }
- }
- /**
- * Get the grid and scripts contents
- *
- * @param Varien_Data_Form_Element_Abstract $element
- * @return string
- */
- protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
- {
- $this->setElement($element);
- $html = $this->_toHtml();
- $this->_arrayRowsCache = null; // doh, the object is used as singleton!
- return $html;
- }
- /**
- * Prepare existing row data object
- *
- * @param Varien_Object
- */
- protected function _prepareArrayRow(Varien_Object $row)
- {
- // override in descendants
- }
- /**
- * Obtain existing data from form element
- *
- * Each row will be instance of Varien_Object
- *
- * @return array
- */
- public function getArrayRows()
- {
- if (null !== $this->_arrayRowsCache) {
- return $this->_arrayRowsCache;
- }
- $result = array();
- /** @var Varien_Data_Form_Element_Abstract */
- $element = $this->getElement();
- if ($element->getValue() && is_array($element->getValue())) {
- foreach ($element->getValue() as $rowId => $row) {
- foreach ($row as $key => $value) {
- $row[$key] = $this->htmlEscape($value);
- }
- $row['_id'] = $rowId;
- $result[$rowId] = new Varien_Object($row);
- $this->_prepareArrayRow($result[$rowId]);
- }
- }
- $this->_arrayRowsCache = $result;
- return $this->_arrayRowsCache;
- }
- /**
- * Render array cell for prototypeJS template
- *
- * @param string $columnName
- * @return string
- */
- protected function _renderCellTemplate($columnName)
- {
- if (empty($this->_columns[$columnName])) {
- throw new Exception('Wrong column name specified.');
- }
- $column = $this->_columns[$columnName];
- $inputName = $this->getElement()->getName() . '[#{_id}][' . $columnName . ']';
- if ($column['renderer']) {
- return $column['renderer']->setInputName($inputName)->setColumnName($columnName)->setColumn($column)
- ->toHtml();
- }
- return '<input type="text" name="' . $inputName . '" value="#{' . $columnName . '}" ' .
- ($column['size'] ? 'size="' . $column['size'] . '"' : '') . ' class="' .
- (isset($column['class']) ? $column['class'] : 'input-text') . '"'.
- (isset($column['style']) ? ' style="'.$column['style'] . '"' : '') . '/>';
- }
- /**
- * Prepare to render
- */
- protected function _prepareToRender()
- {
- // Override in descendants to add columns, change add button label etc
- }
- /**
- * Render block HTML
- *
- * @return string
- */
- protected function _toHtml()
- {
- if (!$this->_isPreparedToRender) {
- $this->_prepareToRender();
- $this->_isPreparedToRender = true;
- }
- if (empty($this->_columns)) {
- throw new Exception('At least one column must be defined.');
- }
- return parent::_toHtml();
- }
- }