/admincrud/widgets/grid/AcGridView.php
PHP | 142 lines | 98 code | 17 blank | 27 comment | 13 complexity | 956412106f575af597ead89f99b7bd6d MD5 | raw file
Possible License(s): LGPL-2.1, BSD-3-Clause
- <?php
- Yii::import('admincrud.widgets.grid.AcButtonColumn');
- Yii::import('admincrud.widgets.grid.AcStatusColumn');
- Yii::import('admincrud.widgets.grid.AcRelationColumn');
- Yii::import('admincrud.widgets.grid.AcDateTimeColumn');
- Yii::import('bootstrap.widgets.TbGridView');
- /**
- * AcGridView class file
- * Грид для отображения списка объектов
- *
- * @package admincrud.widgets.grid
- * @author Maxim Rautkin <mrautkin@gmail.com>
- * @copyright Copyright © Maxim Rautkin
- * @license [New BSD License](http://www.opensource.org/licenses/bsd-license.php)
- */
- class AcGridView extends TbGridView
- {
- /**
- * @var AcGridRegistry Регистр с настройками грида
- */
- public $gridRegistry;
- /**
- * @var bool Грид связан с другой сущностью
- */
- public $isRelation = false;
- /**
- * @var bool обновление через AJAX
- */
- public $ajaxUpdate = false;
- /**
- * Инициализация виджета
- */
- public function init()
- {
- if( $this->gridRegistry !== null )
- {
- if($this->dataProvider instanceof CActiveDataProvider)
- {
- if( $this->gridRegistry->pageSize )
- {
- $pagination = array('pageSize' => $this->gridRegistry->pageSize);
- $this->dataProvider->setPagination($pagination);
- }
- }
- }
- parent::init();
- }
- /**
- * Creates column objects and initializes them.
- */
- protected function initColumns()
- {
- if( $this->gridRegistry === null )
- parent::initColumns();
- else
- {
- $this->gridRegistry->columnsLabel = array();
- $columnsCount = count($this->gridRegistry->columns);
- $columnsUnVisible = array();
- foreach ($this->columns as $i => $column)
- {
- if( isset($column['visible']) && $column['visible'] === false )
- {
- $this->columns[$i]['visible'] = true;
- $columnsUnVisible[] = $i;
- }
- }
- parent::initColumns();
- foreach ($this->columns as $i => $column)
- {
- ob_start();
- $column->renderHeaderCell();
- $header = strip_tags(ob_get_clean());
- $header = trim(str_replace(' ', '', $header));
- if( !$header )
- $header = get_class($column);
- $this->gridRegistry->columnsLabel[$i] = $header;
- if( $columnsCount == 0 && in_array($i, $columnsUnVisible) )
- unset($this->columns[$i]);
- }
- if( $columnsCount )
- {
- $columns = array_flip($this->gridRegistry->columns);
- foreach($columns as $i => $column)
- {
- if( isset($this->columns[$i]) )
- $columns[$i] = $this->columns[$i];
- else
- unset($columns[$i]);
- }
- $this->columns = $columns;
- }
- else
- $this->gridRegistry->columns = array_keys($this->columns);
- $this->gridRegistry->save(false);
- }
- }
- /**
- * Registers necessary client scripts.
- */
- public function registerClientScript()
- {
- parent::registerClientScript();
- if( $this->isRelation )
- {
- $dialogId = AcStringHelper::getUniqueId();
- $options = array(
- 'title' => 'Редактирование',
- 'autoOpen' => false,
- 'height' => "auto",
- 'width' => '80%',
- 'modal' => true,
- 'position' => array(null, 50)
- );
- $this->getController()->widget('zii.widgets.jui.CJuiDialog',array(
- 'id' => $dialogId,
- 'options' => $options,
- 'htmlOptions' => array('style' => 'display: none;', 'data-type' => 'relation')
- ));
- $id = $this->getId();
- $js = "jQuery('#{$id}').yiiAcGridView({dialogId: '#{$dialogId}'});";
- Yii::app()->getClientScript()->registerScript(__CLASS__ . '#' . $id, $js);
- }
- }
- }