Open Monograph Press  3.3.0
MarketsGridHandler.inc.php
1 <?php
2 
16 // import grid base classes
17 import('lib.pkp.classes.controllers.grid.GridHandler');
18 
19 // import format grid specific classes
20 import('controllers.grid.catalogEntry.MarketsGridCellProvider');
21 import('controllers.grid.catalogEntry.MarketsGridRow');
22 
23 // Link action & modal classes
24 import('lib.pkp.classes.linkAction.request.AjaxModal');
25 
28  var $_submission;
29 
32 
35 
39  function __construct() {
40  parent::__construct();
41  $this->addRoleAssignment(
42  array(ROLE_ID_MANAGER),
43  array('fetchGrid', 'fetchRow', 'addMarket', 'editMarket',
44  'updateMarket', 'deleteMarket'));
45  }
46 
47 
48  //
49  // Getters/Setters
50  //
55  function getSubmission() {
56  return $this->_submission;
57  }
58 
63  function setSubmission($submission) {
64  $this->_submission = $submission;
65  }
66 
71  function getPublication() {
73  }
74 
79  function setPublication($publication) {
80  $this->_publication = $publication;
81  }
82 
87  function getPublicationFormat() {
89  }
90 
95  function setPublicationFormat($publicationFormat) {
96  $this->_publicationFormat = $publicationFormat;
97  }
98 
99  //
100  // Overridden methods from PKPHandler
101  //
108  function authorize($request, &$args, $roleAssignments) {
109  import('lib.pkp.classes.security.authorization.PublicationAccessPolicy');
110  $this->addPolicy(new PublicationAccessPolicy($request, $args, $roleAssignments));
111  return parent::authorize($request, $args, $roleAssignments);
112  }
113 
117  function initialize($request, $args = null) {
118  parent::initialize($request, $args);
119 
120  // Retrieve the authorized submission.
121  $submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION);
122  $this->setPublication($this->getAuthorizedContextObject(ASSOC_TYPE_PUBLICATION));
123  $this->setSubmission($submission);
124  $publicationFormatDao = DAORegistry::getDAO('PublicationFormatDAO'); /* @var $publicationFormatDao PublicationFormatDAO */
125  $representationId = null;
126 
127  // Retrieve the associated publication format for this grid.
128  $marketId = (int) $request->getUserVar('marketId'); // set if editing or deleting a market entry
129 
130  if ($marketId != '') {
131  $marketDao = DAORegistry::getDAO('MarketDAO'); /* @var $marketDao MarketDAO */
132  $market = $marketDao->getById($marketId, $this->getPublication()->getId());
133  if ($market) {
134  $representationId = $market->getPublicationFormatId();
135  }
136  } else { // empty form for new Market
137  $representationId = (int) $request->getUserVar('representationId');
138  }
139 
140  $publicationFormat = $publicationFormatDao->getById($representationId, $this->getPublication()->getId());
141 
142  if ($publicationFormat) {
143  $this->setPublicationFormat($publicationFormat);
144  } else {
145  fatalError('The publication format is not assigned to authorized submission!');
146  }
147 
148  // Load submission-specific translations
150  LOCALE_COMPONENT_APP_SUBMISSION,
151  LOCALE_COMPONENT_PKP_SUBMISSION,
152  LOCALE_COMPONENT_PKP_USER,
153  LOCALE_COMPONENT_APP_DEFAULT,
154  LOCALE_COMPONENT_PKP_DEFAULT
155  );
156 
157  // Basic grid configuration
158  $this->setTitle('grid.catalogEntry.markets');
159 
160  // Grid actions
161  $router = $request->getRouter();
162  $actionArgs = $this->getRequestArgs();
163  $this->addAction(
164  new LinkAction(
165  'addMarket',
166  new AjaxModal(
167  $router->url($request, null, null, 'addMarket', null, $actionArgs),
168  __('grid.action.addMarket'),
169  'modal_add_item'
170  ),
171  __('grid.action.addMarket'),
172  'add_item'
173  )
174  );
175 
176  // Columns
177  $cellProvider = new MarketsGridCellProvider();
178  $this->addColumn(
179  new GridColumn(
180  'territory',
181  'grid.catalogEntry.marketTerritory',
182  null,
183  null,
184  $cellProvider
185  )
186  );
187  $this->addColumn(
188  new GridColumn(
189  'rep',
190  'grid.catalogEntry.representatives',
191  null,
192  null,
193  $cellProvider
194  )
195  );
196  $this->addColumn(
197  new GridColumn(
198  'price',
199  'submission.publicationFormat.price',
200  null,
201  null,
202  $cellProvider
203  )
204  );
205  }
206 
207 
208  //
209  // Overridden methods from GridHandler
210  //
215  function getRowInstance() {
216  return new MarketsGridRow($this->getSubmission());
217  }
218 
224  function getRequestArgs() {
225  return [
226  'submissionId' => $this->getSubmission()->getId(),
227  'publicationId' => $this->getPublication()->getId(),
228  'representationId' => $this->getPublicationFormat()->getId()
229  ];
230  }
231 
235  function loadData($request, $filter = null) {
236  $publicationFormat = $this->getPublicationFormat();
237  $marketDao = DAORegistry::getDAO('MarketDAO'); /* @var $marketDao MarketDAO */
238  $data = $marketDao->getByPublicationFormatId($publicationFormat->getId());
239  return $data->toArray();
240  }
241 
242 
243  //
244  // Public Market Grid Actions
245  //
251  function addMarket($args, $request) {
252  return $this->editMarket($args, $request);
253  }
254 
261  function editMarket($args, $request) {
262  // Identify the market entry to be updated
263  $marketId = (int) $request->getUserVar('marketId');
264  $submission = $this->getSubmission();
265 
266  $marketDao = DAORegistry::getDAO('MarketDAO'); /* @var $marketDao MarketDAO */
267  $market = $marketDao->getById($marketId, $this->getPublication()->getId());
268 
269  // Form handling
270  import('controllers.grid.catalogEntry.form.MarketForm');
271  $marketForm = new MarketForm($submission, $this->getPublication(), $market);
272  $marketForm->initData();
273 
274  return new JSONMessage(true, $marketForm->fetch($request));
275  }
276 
283  function updateMarket($args, $request) {
284  // Identify the market entry to be updated
285  $marketId = $request->getUserVar('marketId');
286  $submission = $this->getSubmission();
287 
288  $marketDao = DAORegistry::getDAO('MarketDAO'); /* @var $marketDao MarketDAO */
289  $market = $marketDao->getById($marketId, $this->getPublication()->getId());
290 
291  // Form handling
292  import('controllers.grid.catalogEntry.form.MarketForm');
293  $marketForm = new MarketForm($submission, $this->getPublication(), $market);
294  $marketForm->readInputData();
295  if ($marketForm->validate()) {
296  $marketId = $marketForm->execute();
297 
298  if(!isset($market)) {
299  // This is a new entry
300  $market = $marketDao->getById($marketId, $this->getPublication()->getId());
301  // New added entry action notification content.
302  $notificationContent = __('notification.addedMarket');
303  } else {
304  // entry edit action notification content.
305  $notificationContent = __('notification.editedMarket');
306  }
307 
308  // Create trivial notification.
309  $currentUser = $request->getUser();
310  $notificationMgr = new NotificationManager();
311  $notificationMgr->createTrivialNotification($currentUser->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => $notificationContent));
312 
313  // Prepare the grid row data
314  $row = $this->getRowInstance();
315  $row->setGridId($this->getId());
316  $row->setId($marketId);
317  $row->setData($market);
318  $row->initialize($request);
319 
320  // Render the row into a JSON response
321  return DAO::getDataChangedEvent();
322 
323  } else {
324  return new JSONMessage(true, $marketForm->fetch($request));
325  }
326  }
327 
334  function deleteMarket($args, $request) {
335 
336  // Identify the markets entry to be deleted
337  $marketId = $request->getUserVar('marketId');
338 
339  $marketDao = DAORegistry::getDAO('MarketDAO'); /* @var $marketDao MarketDAO */
340  $market = $marketDao->getById($marketId, $this->getPublication()->getId());
341  if ($market != null) { // authorized
342 
343  $result = $marketDao->deleteObject($market);
344 
345  if ($result) {
346  $currentUser = $request->getUser();
347  $notificationMgr = new NotificationManager();
348  $notificationMgr->createTrivialNotification($currentUser->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.removedMarket')));
349  return DAO::getDataChangedEvent();
350  } else {
351  return new JSONMessage(false, __('manager.setup.errorDeletingItem'));
352  }
353  }
354  }
355 }
356 
357 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
GridColumn
The GridColumn class represents a column within a grid. It is used to format the data presented in a ...
Definition: GridColumn.inc.php:27
PublicationAccessPolicy
Class to control access to a publication.
Definition: PublicationAccessPolicy.inc.php:20
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
MarketsGridHandler\initialize
initialize($request, $args=null)
Definition: MarketsGridHandler.inc.php:126
MarketsGridHandler\addMarket
addMarket($args, $request)
Definition: MarketsGridHandler.inc.php:260
MarketsGridHandler\getRowInstance
getRowInstance()
Definition: MarketsGridHandler.inc.php:224
MarketsGridHandler\editMarket
editMarket($args, $request)
Definition: MarketsGridHandler.inc.php:270
MarketsGridHandler\__construct
__construct()
Definition: MarketsGridHandler.inc.php:48
MarketsGridHandler\getPublicationFormat
getPublicationFormat()
Definition: MarketsGridHandler.inc.php:96
MarketsGridHandler\updateMarket
updateMarket($args, $request)
Definition: MarketsGridHandler.inc.php:292
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
MarketsGridHandler\getSubmission
getSubmission()
Definition: MarketsGridHandler.inc.php:64
MarketsGridHandler\setPublicationFormat
setPublicationFormat($publicationFormat)
Definition: MarketsGridHandler.inc.php:104
PKPHandler\getId
getId()
Definition: PKPHandler.inc.php:107
MarketsGridHandler\getRequestArgs
getRequestArgs()
Definition: MarketsGridHandler.inc.php:233
MarketsGridHandler\setSubmission
setSubmission($submission)
Definition: MarketsGridHandler.inc.php:72
MarketsGridHandler\getPublication
getPublication()
Definition: MarketsGridHandler.inc.php:80
MarketsGridHandler\loadData
loadData($request, $filter=null)
Definition: MarketsGridHandler.inc.php:244
GridHandler\addAction
addAction($action, $position=GRID_ACTION_POSITION_ABOVE)
Definition: GridHandler.inc.php:266
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
MarketForm
Form for adding/editing a market region entry.
Definition: MarketForm.inc.php:18
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
MarketsGridHandler\deleteMarket
deleteMarket($args, $request)
Definition: MarketsGridHandler.inc.php:343
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
MarketsGridHandler\$_publication
$_publication
Definition: MarketsGridHandler.inc.php:37
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
MarketsGridRow
Markets grid row definition.
Definition: MarketsGridRow.inc.php:18
PKPHandler\getAuthorizedContextObject
& getAuthorizedContextObject($assocType)
Definition: PKPHandler.inc.php:174
GridHandler
This class defines basic operations for handling HTML grids. Grids are used to implement a standardiz...
Definition: GridHandler.inc.php:58
MarketsGridHandler\setPublication
setPublication($publication)
Definition: MarketsGridHandler.inc.php:88
MarketsGridHandler
Handle publication format grid requests for markets.
Definition: MarketsGridHandler.inc.php:26
NotificationManager
Definition: NotificationManager.inc.php:19
MarketsGridHandler\$_submission
$_submission
Definition: MarketsGridHandler.inc.php:31
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
MarketsGridCellProvider
Base class for a cell provider that can retrieve labels for market regions.
Definition: MarketsGridCellProvider.inc.php:18
MarketsGridHandler\$_publicationFormat
$_publicationFormat
Definition: MarketsGridHandler.inc.php:43
MarketsGridHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: MarketsGridHandler.inc.php:117