17 import(
'lib.pkp.classes.controllers.grid.feature.OrderItemsFeature');
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);
35 function __construct($typeOption = ORDER_CATEGORY_GRID_CATEGORIES_AND_ROWS, $overrideRowTemplate =
true, $grid =
null) {
36 parent::__construct($overrideRowTemplate);
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;
44 $this->
addOptions(array(
'type' => $typeOption));
57 return $options[
'type'];
68 return '$.pkp.classes.features.OrderCategoryGridItemsFeature';
79 if ($this->
getType() != ORDER_CATEGORY_GRID_CATEGORIES_ONLY) {
80 parent::getInitializedRowInstance($args);
88 if ($this->
getType() != ORDER_CATEGORY_GRID_CATEGORIES_ROWS_ONLY) {
98 $request =& $args[
'request'];
99 $grid =& $args[
'grid'];
101 $data = json_decode($request->getUserVar(
'data'));
102 $gridCategoryElements = $grid->getGridDataElements($request);
104 if ($this->
getType() != ORDER_CATEGORY_GRID_CATEGORIES_ROWS_ONLY) {
105 $categoriesData = array();
106 foreach($data as $categoryData) {
107 $categoriesData[] = $categoryData->categoryId;
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);
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;
145 foreach ($data as $categoryData) {
146 if ($categoryData->categoryId == $categoryId) {
147 $rowsData = $categoryData->rowsId;
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);