Open Journal Systems  3.3.0
OrderCategoryGridItemsFeature.inc.php
1 <?php
2 
17 import('lib.pkp.classes.controllers.grid.feature.OrderItemsFeature');
18 
19 define('ORDER_CATEGORY_GRID_CATEGORIES_ONLY', 0x01);
20 define('ORDER_CATEGORY_GRID_CATEGORIES_ROWS_ONLY', 0x02);
21 define('ORDER_CATEGORY_GRID_CATEGORIES_AND_ROWS', 0x03);
22 
24 
35  function __construct($typeOption = ORDER_CATEGORY_GRID_CATEGORIES_AND_ROWS, $overrideRowTemplate = true, $grid = null) {
36  parent::__construct($overrideRowTemplate);
37 
38  if ($grid) {
39  $grid->_constants['ORDER_CATEGORY_GRID_CATEGORIES_ONLY'] = ORDER_CATEGORY_GRID_CATEGORIES_ONLY;
40  $grid->_constants['ORDER_CATEGORY_GRID_CATEGORIES_ROWS_ONLY'] = ORDER_CATEGORY_GRID_CATEGORIES_ROWS_ONLY;
41  $grid->_constants['ORDER_CATEGORY_GRID_CATEGORIES_AND_ROWS'] = ORDER_CATEGORY_GRID_CATEGORIES_AND_ROWS;
42  }
43 
44  $this->addOptions(array('type' => $typeOption));
45  }
46 
47 
48  //
49  // Getters and setters.
50  //
55  function getType() {
56  $options = $this->getOptions();
57  return $options['type'];
58  }
59 
60 
61  //
62  // Extended methods from GridFeature.
63  //
67  function getJSClass() {
68  return '$.pkp.classes.features.OrderCategoryGridItemsFeature';
69  }
70 
71 
72  //
73  // Hooks implementation.
74  //
78  function getInitializedRowInstance($args) {
79  if ($this->getType() != ORDER_CATEGORY_GRID_CATEGORIES_ONLY) {
80  parent::getInitializedRowInstance($args);
81  }
82  }
83 
88  if ($this->getType() != ORDER_CATEGORY_GRID_CATEGORIES_ROWS_ONLY) {
89  $row =& $args['row'];
90  $this->addRowOrderAction($row);
91  }
92  }
93 
97  function saveSequence($args) {
98  $request =& $args['request'];
99  $grid =& $args['grid'];
100 
101  $data = json_decode($request->getUserVar('data'));
102  $gridCategoryElements = $grid->getGridDataElements($request);
103 
104  if ($this->getType() != ORDER_CATEGORY_GRID_CATEGORIES_ROWS_ONLY) {
105  $categoriesData = array();
106  foreach($data as $categoryData) {
107  $categoriesData[] = $categoryData->categoryId;
108  }
109 
110  // Save categories sequence.
111  $firstSeqValue = $grid->getDataElementSequence(reset($gridCategoryElements));
112  foreach ($gridCategoryElements as $rowId => $element) {
113  $rowPosition = array_search($rowId, $categoriesData);
114  $newSequence = $firstSeqValue + $rowPosition;
115  $currentSequence = $grid->getDataElementSequence($element);
116  if ($newSequence != $currentSequence) {
117  $grid->setDataElementSequence($request, $rowId, $element, $newSequence);
118  }
119  }
120  }
121 
122  // Save rows sequence, if this grid has also orderable rows inside each category.
123  $this->_saveRowsInCategoriesSequence($request, $grid, $gridCategoryElements, $data);
124  }
125 
126 
127  //
128  // Private helper methods.
129  //
137  function _saveRowsInCategoriesSequence($request, &$grid, $gridCategoryElements, $data) {
138  if ($this->getType() != ORDER_CATEGORY_GRID_CATEGORIES_ONLY) {
139  foreach($gridCategoryElements as $categoryId => $element) {
140  $gridRowElements = $grid->getGridCategoryDataElements($request, $element);
141  if (!$gridRowElements) continue;
142 
143  // Get the correct rows sequence data.
144  $rowsData = null;
145  foreach ($data as $categoryData) {
146  if ($categoryData->categoryId == $categoryId) {
147  $rowsData = $categoryData->rowsId;
148  break;
149  }
150  }
151 
152  unset($rowsData[0]); // remove the first element, it is always the parent category ID
153  $firstSeqValue = $grid->getDataElementInCategorySequence($categoryId, reset($gridRowElements));
154  foreach ($gridRowElements as $rowId => $element) {
155  $newSequence = array_search($rowId, $rowsData);
156  $currentSequence = $grid->getDataElementInCategorySequence($categoryId, $element);
157  if ($newSequence != $currentSequence) {
158  $grid->setDataElementInCategorySequence($categoryId, $element, $newSequence);
159  }
160  }
161  }
162  }
163  }
164 }
165 
166 
OrderCategoryGridItemsFeature\saveSequence
saveSequence($args)
Definition: OrderCategoryGridItemsFeature.inc.php:97
OrderCategoryGridItemsFeature\__construct
__construct($typeOption=ORDER_CATEGORY_GRID_CATEGORIES_AND_ROWS, $overrideRowTemplate=true, $grid=null)
Definition: OrderCategoryGridItemsFeature.inc.php:35
OrderItemsFeature
Base class for grid widgets ordering functionality.
Definition: OrderItemsFeature.inc.php:19
OrderCategoryGridItemsFeature\getJSClass
getJSClass()
Definition: OrderCategoryGridItemsFeature.inc.php:67
OrderCategoryGridItemsFeature\getType
getType()
Definition: OrderCategoryGridItemsFeature.inc.php:55
OrderItemsFeature\addRowOrderAction
addRowOrderAction($row)
Definition: OrderItemsFeature.inc.php:169
OrderCategoryGridItemsFeature\getInitializedCategoryRowInstance
getInitializedCategoryRowInstance($args)
Definition: OrderCategoryGridItemsFeature.inc.php:87
GridFeature\addOptions
addOptions($options)
Definition: GridFeature.inc.php:74
OrderCategoryGridItemsFeature\_saveRowsInCategoriesSequence
_saveRowsInCategoriesSequence($request, &$grid, $gridCategoryElements, $data)
Definition: OrderCategoryGridItemsFeature.inc.php:137
OrderCategoryGridItemsFeature\getInitializedRowInstance
getInitializedRowInstance($args)
Definition: OrderCategoryGridItemsFeature.inc.php:78
GridFeature\getOptions
getOptions()
Definition: GridFeature.inc.php:66
OrderCategoryGridItemsFeature
Implements category grid ordering functionality.
Definition: OrderCategoryGridItemsFeature.inc.php:23