42 protected $controllerId;
46 protected $dataProvider;
52 protected $renderViewToolBarDuringRenderContent =
true;
83 private $resolvedMetadata;
85 protected $emptyText = null;
87 private $listAttributesSelector;
103 $listAttributesSelector = null,
107 assert(
'is_array($selectedIds)');
108 assert(
'is_string($modelClassName)');
109 assert(
'is_array($this->gridViewPagerParams)');
110 assert(
'$listAttributesSelector == null || $listAttributesSelector instanceof ListAttributesSelector');
111 assert(
'$kanbanBoard === null || $kanbanBoard instanceof $kanbanBoard');
112 $this->controllerId = $controllerId;
113 $this->moduleId = $moduleId;
114 $this->modelClassName = $modelClassName;
115 $this->dataProvider = $dataProvider;
116 $this->rowsAreSelectable =
true;
120 $this->gridId =
'list-view';
121 $this->listAttributesSelector = $listAttributesSelector;
122 $this->kanbanBoard = $kanbanBoard;
125 protected function getKanbanBoard()
127 return $this->kanbanBoard;
130 protected function setKanbanBoard($kanbanBoard)
132 assert(
'$kanbanBoard === null || $kanbanBoard instanceof $kanbanBoard');
133 $this->kanbanBoard = $kanbanBoard;
144 $cClipWidget =
new CClipWidget();
145 $cClipWidget->beginClip(
"ListView");
146 $cClipWidget->widget($this->getGridViewWidgetPath(), $this->getCGridViewParams());
147 $cClipWidget->endClip();
149 if ($this->renderViewToolBarDuringRenderContent)
153 $content .= $cClipWidget->getController()->clips[
'ListView'] .
"\n";
156 $content .= ZurmoHtml::hiddenField($this->gridId . $this->gridIdSuffix .
'-selectedIds', implode(
",", $this->selectedIds)) .
"\n";
158 $this->renderScripts();
162 protected function getGridViewWidgetPath()
164 if (Yii::app()->userInterface->isMobile())
166 $widget =
'application.core.widgets.StackedExtendedGridView';
168 elseif ($this->kanbanBoard === null || !$this->kanbanBoard->getIsActive())
170 $widget =
'application.core.widgets.ExtendedGridView';
172 elseif ($this->kanbanBoard->getIsActive())
174 $widget = $this->kanbanBoard->getGridViewWidgetPath();
189 if ($this->kanbanBoard != null && $this->kanbanBoard->getIsActive())
196 public function setRowsAreSelectable($value)
198 $this->rowsAreSelectable = (boolean)$value;
201 protected function getCGridViewParams()
204 assert(
'is_array($columns)');
206 'id' => $this->getGridViewId(),
207 'htmlOptions' => array(
208 'class' =>
'cgrid-view ' . $this->getTypeCssClassForCGridView() . $this->getKanbanCssClassForCGridView()
210 'loadingCssClass' =>
'loading',
211 'dataProvider' => $this->getDataProvider(),
212 'selectableRows' => $this->getCGridViewSelectableRowsCount(),
213 'pager' => $this->getCGridViewPagerParams(),
214 'beforeAjaxUpdate' => $this->getCGridViewBeforeAjaxUpdate(),
215 'afterAjaxUpdate' => $this->getCGridViewAfterAjaxUpdate(),
216 'ajaxUrl' => $this->getCGridViewAjaxUrl(),
217 'columns' => $columns,
218 'nullDisplay' =>
' ',
219 'pagerCssClass' => static::getPagerCssClass(),
220 'showTableOnEmpty' => $this->getShowTableOnEmpty(),
221 'emptyText' => $this->getEmptyText(),
222 'template' => static::getGridTemplate(),
223 'summaryText' => static::getSummaryText(),
224 'summaryCssClass' => static::getSummaryCssClass(),
225 'summaryCloneId' => $this->getSummaryCloneId(),
226 'tableColumnGroup' => $this->getTableColumnGroup(),
229 return $this->resolveCGridViewParamsForKanbanBoard($params);
232 protected function getTypeCssClassForCGridView()
234 return 'type-' . $this->moduleId;
237 protected function getKanbanCssClassForCGridView()
239 if ($this->kanbanBoard != null && $this->kanbanBoard->getIsActive())
241 return ' type-kanban-' . $this->moduleId;
249 protected static function getGridTemplate()
251 $preloader =
'<div class="list-preloader"><span class="z-spinner"></span></div>';
252 $items =
'<div class="items-wrapper">{items}{pager}</div>';
253 return "{summary}" . $items . $preloader;
256 protected static function getPagerCssClass()
258 return 'pager vertical';
261 protected static function getSummaryText()
263 return Zurmo::t(
'Core',
'{count} result(s)');
266 protected static function getSummaryCssClass()
271 public function getSummaryCloneId()
273 return $this->getGridViewId() .
"-summary-clone";
276 public function getTableColumnGroup()
281 protected function getCGridViewPagerParams()
283 $defaultGridViewPagerParams = array(
284 'prevPageLabel' =>
'<span>previous</span>',
285 'nextPageLabel' =>
'<span>next</span>',
286 'class' =>
'EndlessListLinkPager',
287 'paginationParams' => GetUtil::getData(),
288 'route' => $this->getGridViewActionRoute($this->getListActionId(), $this->moduleId),
290 if (empty($this->gridViewPagerParams))
292 return $defaultGridViewPagerParams;
296 return array_merge($defaultGridViewPagerParams, $this->gridViewPagerParams);
300 protected function getShowTableOnEmpty()
305 protected function getEmptyText()
307 return $this->emptyText;
310 public function setEmptyText($text)
312 $this->emptyText = $text;
315 public function getGridViewId()
320 protected function getCGridViewFirstColumn()
322 $checked =
'in_array($data->id, array(' . implode(
',', $this->selectedIds) .
'))';
323 $checkBoxHtmlOptions = array();
324 $firstColumn = array(
325 'class' =>
'CheckBoxColumn',
326 'checked' => $checked,
327 'id' => $this->gridId . $this->gridIdSuffix .
'-rowSelector',
328 'checkBoxHtmlOptions' => $checkBoxHtmlOptions,
342 $firstColumn = $this->getCGridViewFirstColumn();
343 array_push($columns, $firstColumn);
346 $metadata = $this->getResolvedMetadata();
347 foreach ($metadata[
'global'][
'panels'] as $panel)
349 foreach ($panel[
'rows'] as $row)
351 foreach ($row[
'cells'] as $cell)
353 foreach ($cell[
'elements'] as $columnInformation)
356 array_push($columns, $column);
361 $menuColumn = $this->getGridViewMenuColumn();
362 if ($menuColumn == null)
364 $lastColumn = $this->getCGridViewLastColumn();
365 if (!empty($lastColumn))
367 array_push($columns, $lastColumn);
372 array_push($columns, $menuColumn);
377 protected function resolveMetadata()
379 if ($this->listAttributesSelector != null)
381 return $this->listAttributesSelector->getResolvedMetadata();
383 return self::getMetadata();
386 protected function getResolvedMetadata()
388 if ($this->resolvedMetadata != null)
390 return $this->resolvedMetadata;
392 $this->resolvedMetadata = $this->resolveMetadata();
393 return $this->resolvedMetadata;
396 protected function getCGridViewBeforeAjaxUpdate()
400 return 'js:function(id, options) { $(this).makeSmallLoadingSpinner(true, "#" + id); addListViewSelectedIdsToUrl(id, options); }';
404 return 'js:function(id, options) { $(this).makeSmallLoadingSpinner(true, "#" + id); }';
408 protected function getCGridViewAfterAjaxUpdate()
411 return 'js:function(id, data) {
412 processAjaxSuccessError(id, data);
414 jQuery.globalEval($data.filter("script").last().text());
419 protected function getCGridViewAjaxUrl()
467 protected function getCGridViewSelectableRowsCount()
479 protected function getCGridViewLastColumn()
481 $url =
'Yii::app()->createUrl("' . $this->getGridViewActionRoute(
'edit');
482 $url .=
'", array("id" => $data->id))';
484 'class' =>
'ButtonColumn',
485 'template' =>
'{update}',
490 'options' => array(
'class' =>
'pencil',
'title' =>
'Update'),
497 protected function getGridViewMenuColumn()
499 $metadata = $this::getMetadata();
501 if (isset($metadata[
'global'][
'rowMenu']) && is_array($metadata[
'global'][
'rowMenu'][
'elements']))
505 'rowMenu' => $metadata[
'global'][
'rowMenu'],
508 'modelClassName' => $this->modelClassName
514 protected function getGridViewActionRoute($action, $moduleId = null)
516 if ($moduleId == null)
518 $moduleId = $this->moduleId;
520 return '/' . $moduleId .
'/' . $this->controllerId .
'/' . $action;
523 protected function getListActionId()
528 public function getLinkString($attributeString, $attribute)
530 $string =
'ZurmoHtml::link(';
531 $string .= $attributeString .
', ';
532 $string .=
'Yii::app()->createUrl("' .
533 $this->getGridViewActionRoute(
'details') .
'", array("id" => $data->id))';
538 public function getRelatedLinkString($attributeString, $attributeName, $moduleId)
540 $string =
'ListView::resolveRelatedListStringContent($data->' . $attributeName .
'->id, ZurmoHtml::link(';
541 $string .= $attributeString .
', ';
542 $string .=
'Yii::app()->createUrl("' .
543 $this->getGridViewActionRoute(
'details', $moduleId) .
'",
544 array("id" => $data->' . $attributeName .
'->id))';
549 public static function resolveRelatedListStringContent($modelId, $linkStringContent)
553 return $linkStringContent;
557 public static function getDesignerRulesType()
567 return get_class(Yii::app()->getModule($this->moduleId));
570 protected function getDataProvider()
572 return $this->dataProvider;
575 protected function renderScripts()
577 Yii::app()->clientScript->registerScriptFile(
578 Yii::app()->getAssetManager()->publish(
579 Yii::getPathOfAlias(
'application.core.views.assets')) .
'/ListViewUtils.js');
582 public function getModuleId()
584 return $this->moduleId;
587 public function getControllerId()
589 return $this->controllerId;
592 private function resolveCGridViewParamsForKanbanBoard(array $params)
594 if (Yii::app()->userInterface->isMobile() || $this->kanbanBoard === null || !$this->kanbanBoard->getIsActive())
598 $params = array_merge($params, $this->kanbanBoard->getGridViewParams());
599 return array_merge($params, $this->resolveExtraParamsForKanbanBoard());
607 $columnClassName = ucfirst($columnInformation[
'type']) .
'ListViewColumnAdapter';
608 $columnAdapter =
new $columnClassName($columnInformation[
'attributeName'], $this, array_slice($columnInformation, 1));
609 $column = $columnAdapter->renderGridViewData();
610 if (!isset($column[
'class']))
612 $column[
'class'] =
'DataColumn';
632 return 'RowMenuColumn';
resolveRowMenuColumnClass()
static getDefaultMetadata()
static getArrayValue($array, $element, $defaultValue=null)
__construct($controllerId, $moduleId, $modelClassName, $dataProvider, $selectedIds, $gridIdSuffix=null, $gridViewPagerParams=array(), $listAttributesSelector=null, $kanbanBoard=null)
processColumnInfoToFetchColumnData($columnInformation)
getActionModuleClassName()
static canRenderRowMenuColumnByElementAndData($element, $data)