17 import(
'lib.pkp.classes.controllers.grid.GridHandler');
18 import(
'lib.pkp.classes.controllers.grid.GridCategoryRow');
21 define(
'GRID_CATEGORY_NONE',
'NONE');
39 parent::__construct($dataProvider);
41 import(
'lib.pkp.classes.controllers.grid.NullGridCellProvider');
63 $this->_emptyCategoryRowText = $translationKey;
119 $categoryElementId = array_search($categoryElement, $categories);
120 assert($categoryElementId !==
false);
123 if (!is_array($this->_categoryData) || !array_key_exists($categoryElementId, $this->_categoryData)) {
126 if (is_null($data)) {
134 return $this->_categoryData[$categoryElementId];
146 assert (is_array($data));
147 return (
boolean)
count($data);
158 assert(is_array($data));
169 if (!is_array($this->_categoryData)) {
170 $this->_categoryData = array();
175 if (is_array($data)) {
176 $this->_categoryData[$categoryElementId] = $data;
177 } elseif(is_a($data,
'DAOResultFactory')) {
178 $this->_categoryData[$categoryElementId] = $data->toAssociativeArray();
179 } elseif(is_a($data,
'ItemIterator')) {
180 $this->_categoryData[$categoryElementId] = $data->toArray();
205 $json->setAdditionalAttributes(array(
'elementNotFound' => (
int)$args[
'rowId']));
209 $json->setContent($this->_renderCategoryInternally($request, $row));
222 parent::initialize($request, $args);
224 if (!is_null($request->getUserVar(
'rowCategoryId'))) {
225 $this->_currentCategoryId = (string) $request->getUserVar(
'rowCategoryId');
233 $args = parent::getRequestArgs();
238 if (!is_null($this->_currentCategoryId)) {
252 return '$.pkp.controllers.grid.CategoryGridHandler';
258 function setUrls($request, $extraUrls = array()) {
259 $router = $request->getRouter();
260 $extraUrls[
'fetchCategoryUrl'] = $router->url($request,
null,
null,
'fetchCategory',
null, $this->
getRequestArgs());
261 parent::setUrls($request, $extraUrls);
276 $gridBodyParts = $this->_renderCategoriesInternally($request);
277 $templateMgr->assign(
'gridBodyParts', $gridBodyParts);
284 $rowData = parent::getRowDataElement($request, $rowId);
285 $rowCategoryId = $request->getUserVar(
'rowCategoryId');
287 if (is_null($rowData) && !is_null($rowCategoryId)) {
289 $categoryRowData = parent::getRowDataElement($request, $rowCategoryId);
290 if (!is_null($categoryRowData)) {
293 assert(is_array($categoryElements));
294 if (!isset($categoryElements[$rowId]))
return null;
298 $this->_currentCategoryId = $rowCategoryId;
300 return $categoryElements[$rowId];
315 $secondColumn =
next($columns);
316 $secondColumn->addFlag(
'firstColumn',
true);
326 $templateMgr->assign(
'categoryId', $param);
329 return parent::renderRowInternally($request, $row);
344 if (isset($args[
'rowId'])) {
346 $elementId = $args[
'rowId'];
351 if (is_null($dataElement)) {
362 return $this->_getInitializedCategoryRowInstance($request, $elementId, $dataElement);
396 protected function loadCategoryData($request, &$categoryDataElement, $filter =
null) {
399 if (is_a($dataProvider,
'CategoryGridDataProvider')) {
402 $gridData = $dataProvider->loadCategoryData($request, $categoryDataElement, $filter);
419 private function _getInitializedCategoryRowInstance($request, $elementId, $element) {
422 $row->setGridId($this->
getId());
423 $row->setId($elementId);
424 $row->setData($element);
428 $row->initialize($request);
430 array(
'request' => $request,
432 'categoryId' => $this->_currentCategoryId,
441 private function _renderCategoriesInternally($request) {
444 $renderedCategories = array();
447 foreach($elements as $key => $element) {
450 $categoryRow = $this->_getInitializedCategoryRowInstance($request, $key, $element);
453 $renderedCategories[] = $this->_renderCategoryInternally($request, $categoryRow);
456 return $renderedCategories;
465 private function _renderCategoryInternally($request, $categoryRow) {
468 $templateMgr->assign(
'grid', $this);
470 $templateMgr->assign(
'columns', $columns);
472 $categoryDataElement = $categoryRow->getData();
476 $templateMgr->assign(
'categoryRow', $categoryRow);
480 $this->_currentCategoryId = $categoryRow->getId();
483 $templateMgr->assign(
'rows', $renderedRows);
488 $this->_currentCategoryId =
null;
490 $templateMgr->assign(
'renderedCategoryRow', $renderedCategoryRow);
491 return $templateMgr->fetch(
'controllers/grid/gridBodyPartWithCategory.tpl');