Open Monograph Press  3.3.0
NavigationMenusGridHandler.inc.php
1 <?php
2 
16 import('lib.pkp.classes.controllers.grid.GridHandler');
17 import('lib.pkp.controllers.grid.navigationMenus.form.NavigationMenuForm');
18 
23  function __construct() {
24  parent::__construct();
25  $this->addRoleAssignment(
26  ROLE_ID_MANAGER,
27  $ops = array(
28  'fetchGrid', 'fetchRow',
29  'addNavigationMenu', 'editNavigationMenu',
30  'updateNavigationMenu',
31  'deleteNavigationMenu'
32  )
33  );
34  $this->addRoleAssignment(ROLE_ID_SITE_ADMIN, $ops);
35  }
36 
37  //
38  // Overridden template methods
39  //
43  function authorize($request, &$args, $roleAssignments) {
44  $context = $request->getContext();
45  $contextId = $context?$context->getId():CONTEXT_ID_NONE;
46 
47  import('lib.pkp.classes.security.authorization.PolicySet');
48  $rolePolicy = new PolicySet(COMBINING_PERMIT_OVERRIDES);
49 
50  import('lib.pkp.classes.security.authorization.RoleBasedHandlerOperationPolicy');
51  foreach($roleAssignments as $role => $operations) {
52  $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, $role, $operations));
53  }
54  $this->addPolicy($rolePolicy);
55 
56 
57  $navigationMenuId = $request->getUserVar('navigationMenuId');
58  if ($navigationMenuId) {
59  // Ensure NavigationMenus is valid and for this context
60  $navigationMenuDao = DAORegistry::getDAO('NavigationMenuDAO'); /* @var $navigationMenuDao NavigationMenuDAO */
61  $navigationMenu = $navigationMenuDao->getById($navigationMenuId);
62  if (!$navigationMenu || $navigationMenu->getContextId() != $contextId) {
63  return false;
64  }
65  }
66  return parent::authorize($request, $args, $roleAssignments);
67  }
68 
72  function initialize($request, $args = null) {
73  parent::initialize($request, $args);
74 
75  // Basic grid configuration
76  $this->setTitle('manager.navigationMenus');
77 
78  // Set the no items row text
79  $this->setEmptyRowText('grid.navigationMenus.navigationMenu.noneExist');
80 
81  // Columns
82  import('lib.pkp.controllers.grid.navigationMenus.NavigationMenusGridCellProvider');
83  $navigationMenuCellProvider = new NavigationMenusGridCellProvider();
84 
85  $this->addColumn(
86  new GridColumn('title',
87  'common.title',
88  null,
89  null,
90  $navigationMenuCellProvider
91  )
92  );
93 
94  $this->addColumn(
95  new GridColumn('nmis',
96  'manager.navigationMenuItems',
97  null,
98  null,
99  $navigationMenuCellProvider
100  )
101  );
102 
103  // Load language components
104  AppLocale::requireComponents(LOCALE_COMPONENT_PKP_MANAGER);
105 
106  // Add grid action.
107  $router = $request->getRouter();
108 
109  import('lib.pkp.classes.linkAction.request.AjaxModal');
110  $this->addAction(
111  new LinkAction(
112  'addNavigationMenu',
113  new AjaxModal(
114  $router->url($request, null, null, 'addNavigationMenu', null, null),
115  __('grid.action.addNavigationMenu'),
116  'modal_add_item',
117  true
118  ),
119  __('grid.action.addNavigationMenu'),
120  'add_item'
121  )
122  );
123  }
124 
128  protected function loadData($request, $filter) {
129  $context = $request->getContext();
130 
131  $contextId = CONTEXT_ID_NONE;
132  if ($context) {
133  $contextId = $context->getId();
134  }
135 
136  $navigationMenuDao = DAORegistry::getDAO('NavigationMenuDAO'); /* @var $navigationMenuDao NavigationMenuDAO */
137  return $navigationMenuDao->getByContextId($contextId);
138  }
139 
143  protected function getRowInstance() {
144  import('lib.pkp.controllers.grid.navigationMenus.NavigationMenusGridRow');
145  return new NavigationMenusGridRow();
146  }
147 
148  //
149  // Public grid actions.
150  //
157  function addNavigationMenu($args, $request) {
158  return $this->editNavigationMenu($args, $request);
159  }
160 
167  function editNavigationMenu($args, $request) {
168  $navigationMenuId = (int)$request->getUserVar('navigationMenuId');
169  $context = $request->getContext();
170  $contextId = CONTEXT_ID_NONE;
171  if ($context) {
172  $contextId = $context->getId();
173  }
174 
175  $navigationMenuForm = new NavigationMenuForm($contextId, $navigationMenuId);
176  $navigationMenuForm->initData();
177 
178  return new JSONMessage(true, $navigationMenuForm->fetch($request));
179  }
180 
187  function updateNavigationMenu($args, $request) {
188  // Identify the NavigationMenu id.
189  $navigationMenuId = $request->getUserVar('navigationMenuId');
190  $context = $request->getContext();
191  $contextId = CONTEXT_ID_NONE;
192  if ($context) {
193  $contextId = $context->getId();
194  }
195 
196  // Form handling.
197  $navigationMenusForm = new NavigationMenuForm($contextId, $navigationMenuId);
198  $navigationMenusForm->readInputData();
199 
200  if ($navigationMenusForm->validate()) {
201  $navigationMenusForm->execute();
202 
203  if ($navigationMenuId) {
204  // Successful edit of an existing NavigationMenu.
205  $notificationLocaleKey = 'notification.editedNavigationMenu';
206  } else {
207  // Successful added a new NavigationMenu.
208  $notificationLocaleKey = 'notification.addedNavigationMenu';
209  }
210 
211  // Record the notification to user.
212  $notificationManager = new NotificationManager();
213  $user = $request->getUser();
214  $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __($notificationLocaleKey)));
215 
216  // Prepare the grid row data.
217  return DAO::getDataChangedEvent($navigationMenuId);
218  } else {
219  return new JSONMessage(false);
220  }
221  }
222 
229  function deleteNavigationMenu($args, $request) {
230  $navigationMenuId = (int) $request->getUserVar('navigationMenuId');
231  $context = $request->getContext();
232 
233  $navigationMenuDao = DAORegistry::getDAO('NavigationMenuDAO'); /* @var $navigationMenuDao NavigationMenuDAO */
234  $navigationMenu = $navigationMenuDao->getById($navigationMenuId, $context?$context->getId():CONTEXT_SITE);
235  if ($navigationMenu && $request->checkCSRF()) {
236  $navigationMenuDao->deleteObject($navigationMenu);
237 
238  // Create notification.
239  $notificationManager = new NotificationManager();
240  $user = $request->getUser();
241  $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.removedNavigationMenu')));
242 
243  return DAO::getDataChangedEvent($navigationMenuId);
244  }
245 
246  return new JSONMessage(false);
247  }
248 
249 
250 }
251 
252 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
GridHandler\setEmptyRowText
setEmptyRowText($emptyRowText)
Definition: GridHandler.inc.php:231
NavigationMenusGridHandler\getRowInstance
getRowInstance()
Definition: NavigationMenusGridHandler.inc.php:143
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
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
NavigationMenusGridHandler\editNavigationMenu
editNavigationMenu($args, $request)
Definition: NavigationMenusGridHandler.inc.php:167
NavigationMenusGridHandler\__construct
__construct()
Definition: NavigationMenusGridHandler.inc.php:23
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
NavigationMenusGridRow
NavigationMenu grid row definition.
Definition: NavigationMenusGridRow.inc.php:19
NavigationMenusGridHandler\deleteNavigationMenu
deleteNavigationMenu($args, $request)
Definition: NavigationMenusGridHandler.inc.php:229
NavigationMenusGridHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: NavigationMenusGridHandler.inc.php:43
GridHandler\addAction
addAction($action, $position=GRID_ACTION_POSITION_ABOVE)
Definition: GridHandler.inc.php:266
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
NavigationMenuForm
Form for manager to create/edit NavigationMenus.
Definition: NavigationMenuForm.inc.php:20
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
NavigationMenusGridHandler\updateNavigationMenu
updateNavigationMenu($args, $request)
Definition: NavigationMenusGridHandler.inc.php:187
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
NavigationMenusGridCellProvider
Cell provider for title column of a NavigationMenu grid.
Definition: NavigationMenusGridCellProvider.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
NavigationMenusGridHandler\initialize
initialize($request, $args=null)
Definition: NavigationMenusGridHandler.inc.php:72
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
NavigationMenusGridHandler\loadData
loadData($request, $filter)
Definition: NavigationMenusGridHandler.inc.php:128
GridHandler
This class defines basic operations for handling HTML grids. Grids are used to implement a standardiz...
Definition: GridHandler.inc.php:58
NavigationMenusGridHandler
Handle NavigationMenus grid requests.
Definition: NavigationMenusGridHandler.inc.php:19
NotificationManager
Definition: NotificationManager.inc.php:19
RoleBasedHandlerOperationPolicy
Class to control access to handler operations via role based access control.
Definition: RoleBasedHandlerOperationPolicy.inc.php:18
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
PolicySet
An ordered list of policies. Policy sets can be added to decision managers like policies....
Definition: PolicySet.inc.php:26
NavigationMenusGridHandler\addNavigationMenu
addNavigationMenu($args, $request)
Definition: NavigationMenusGridHandler.inc.php:157