Open Journal Systems  3.3.0
GeneralPagingFeature.inc.php
1 <?php
2 
18 import('lib.pkp.classes.controllers.grid.feature.GridFeature');
19 
21 
23  private $_itemIterator;
24 
26  private $_itemsPerPage;
27 
35  function __construct($id, $itemsPerPage = null) {
36  $this->_itemsPerPage = $itemsPerPage;
37  parent::__construct($id);
38  }
39 
40 
41  //
42  // Getters and setters.
43  //
48  function getItemIterator() {
49  return $this->_itemIterator;
50  }
51 
52 
53  //
54  // Extended GridFeature methods.
55  //
59  function setOptions($request, $grid) {
60  // Get the default items per page setting value.
61  $rangeInfo = PKPHandler::getRangeInfo($request, $grid->getId());
62  $iterator = $this->getItemIterator();
63  $defaultItemsPerPage = $rangeInfo->getCount();
64 
65  // Check for a component level items per page setting.
66  $componentItemsPerPage = $request->getUserVar($this->_getItemsPerPageParamName($grid->getId()));
67  if (!$componentItemsPerPage) $componentItemsPerPage = $this->_itemsPerPage;
68 
69  if ($componentItemsPerPage) {
70  $currentItemsPerPage = $componentItemsPerPage;
71  } else {
72  $currentItemsPerPage = $defaultItemsPerPage;
73  }
74 
75  $options = array(
76  'itemsPerPageParamName' => $this->_getItemsPerPageParamName($grid->getId()),
77  'defaultItemsPerPage' => $defaultItemsPerPage,
78  'currentItemsPerPage' => $currentItemsPerPage,
79  'itemsTotal' => $iterator->getCount(),
80  'pageParamName' => PKPHandler::getPageParamName($grid->getId()),
81  'currentPage' => $iterator->getPage()
82  );
83 
84  $this->addOptions($options);
85 
86  parent::setOptions($request, $grid);
87  }
88 
89 
90  //
91  // Hooks implementation.
92  //
93  /*
94  * @copydoc GridFeature::gridInitialize()
95  * The feature will know about the current filter
96  * value so it can request grid refreshes keeping
97  * the filter.
98  */
99  function getGridDataElements($args) {
100  $filter = $args['filter'];
101 
102  if (is_array($filter) && !empty($filter)) {
103  $this->addOptions(array('filter' => json_encode($filter)));
104  }
105  }
106 
107 
111  function setGridDataElements($args) {
112  $grid =& $args['grid'];
113  $data =& $args['data'];
114 
115  if (is_array($data)) {
116  import('lib.pkp.classes.core.ArrayItemIterator');
117  $request = Application::get()->getRequest();
118  $rangeInfo = $grid->getGridRangeInfo($request, $grid->getId());
119  $itemIterator = new ArrayItemIterator($data, $rangeInfo->getPage(), $rangeInfo->getCount());
120  $this->_itemIterator = $itemIterator;
121  $data = $itemIterator->toArray();
122  } elseif (is_a($data, 'ItemIterator')) {
123  $this->_itemIterator = $data;
124  }
125  }
126 
130  function getRequestArgs($args) {
131  $grid = $args['grid'];
132  $requestArgs =& $args['requestArgs'];
133 
134  // Add paging info so grid actions will not loose paging context.
135  // Only works if grid link actions use the getRequestArgs
136  // returned content.
137  $request = Application::get()->getRequest();
138  $rangeInfo = $grid->getGridRangeInfo($request, $grid->getId());
139  $requestArgs[GridHandler::getPageParamName($grid->getId())] = $rangeInfo->getPage();
140  $requestArgs[$this->_getItemsPerPageParamName($grid->getId())] = $rangeInfo->getCount();
141  }
142 
146  function getGridRangeInfo($args) {
147  $request = $args['request'];
148  $grid = $args['grid'];
149  $rangeInfo = $args['rangeInfo'];
150 
151  // Add grid level items per page setting, if any.
152  $itemsPerPage = $request->getUserVar($this->_getItemsPerPageParamName($grid->getId()));
153  if ($this->_itemsPerPage) $itemsPerPage = $this->_itemsPerPage; // Feature config overrides.
154  if ($itemsPerPage) {
155  $rangeInfo->setCount($itemsPerPage);
156  }
157  }
158 
159 
160  //
161  // Private helper methods.
162  //
168  private function _getItemsPerPageParamName($rangeName) {
169  return $rangeName . 'ItemsPerPage';
170  }
171 }
172 
173 
PKPHandler\getPageParamName
static getPageParamName($rangeName)
Definition: PKPHandler.inc.php:458
GeneralPagingFeature
Base class that implements common functionality for paging features.
Definition: GeneralPagingFeature.inc.php:20
GeneralPagingFeature\getItemIterator
getItemIterator()
Definition: GeneralPagingFeature.inc.php:54
GeneralPagingFeature\getRequestArgs
getRequestArgs($args)
Definition: GeneralPagingFeature.inc.php:136
PKPHandler\getRangeInfo
static getRangeInfo($request, $rangeName, $contextData=null)
Definition: PKPHandler.inc.php:417
GeneralPagingFeature\getGridDataElements
getGridDataElements($args)
Definition: GeneralPagingFeature.inc.php:105
ArrayItemIterator
Provides paging and iteration for arrays.
Definition: ArrayItemIterator.inc.php:19
GeneralPagingFeature\__construct
__construct($id, $itemsPerPage=null)
Definition: GeneralPagingFeature.inc.php:41
GridFeature\addOptions
addOptions($options)
Definition: GridFeature.inc.php:74
GridFeature
Base grid feature class. A feature is a type of plugin specific to the grid widgets....
Definition: GridFeature.inc.php:20
GeneralPagingFeature\setGridDataElements
setGridDataElements($args)
Definition: GeneralPagingFeature.inc.php:117
GeneralPagingFeature\getGridRangeInfo
getGridRangeInfo($args)
Definition: GeneralPagingFeature.inc.php:152
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
GeneralPagingFeature\setOptions
setOptions($request, $grid)
Definition: GeneralPagingFeature.inc.php:65
GuzzleHttp\json_encode
json_encode($value, $options=0, $depth=512)
Definition: guzzlehttp/guzzle/src/functions.php:324