Open Monograph Press  3.3.0
ReviewFormElementsGridHandler.inc.php
1 <?php
2 
16 import('lib.pkp.classes.controllers.grid.GridHandler');
17 import('lib.pkp.controllers.grid.settings.reviewForms.ReviewFormElementGridRow');
18 import('lib.pkp.controllers.grid.settings.reviewForms.form.ReviewFormElementForm');
19 
22  var $reviewFormId;
23 
27  function __construct() {
28  parent::__construct();
29  $this->addRoleAssignment(array(
30  ROLE_ID_MANAGER),
31  array('fetchGrid', 'fetchRow', 'saveSequence',
32  'createReviewFormElement', 'editReviewFormElement', 'deleteReviewFormElement', 'updateReviewFormElement')
33  );
34  }
35 
36  //
37  // Implement template methods from PKPHandler.
38  //
42  function authorize($request, &$args, $roleAssignments) {
43  import('lib.pkp.classes.security.authorization.PolicySet');
44  $rolePolicy = new PolicySet(COMBINING_PERMIT_OVERRIDES);
45 
46  import('lib.pkp.classes.security.authorization.RoleBasedHandlerOperationPolicy');
47  foreach($roleAssignments as $role => $operations) {
48  $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, $role, $operations));
49  }
50  $this->addPolicy($rolePolicy);
51 
52  $this->reviewFormId = (int) $request->getUserVar('reviewFormId');
53  $reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); /* @var $reviewFormDao ReviewFormDAO */
54  if (!$reviewFormDao->reviewFormExists($this->reviewFormId, Application::getContextAssocType(), $request->getContext()->getId())) return false;
55 
56  return parent::authorize($request, $args, $roleAssignments);
57  }
58 
62  function initialize($request, $args = null) {
63  parent::initialize($request, $args);
64 
65  // Load user-related translations.
67  LOCALE_COMPONENT_APP_ADMIN,
68  LOCALE_COMPONENT_APP_MANAGER,
69  LOCALE_COMPONENT_APP_COMMON,
70  LOCALE_COMPONENT_PKP_MANAGER,
71  LOCALE_COMPONENT_PKP_USER
72  );
73 
74  // Grid actions.
75  $router = $request->getRouter();
76 
77  import('lib.pkp.classes.linkAction.request.AjaxModal');
78 
79  // Create Review Form Element link
80  $this->addAction(
81  new LinkAction(
82  'createReviewFormElement',
83  new AjaxModal(
84  $router->url($request, null, null, 'createReviewFormElement', null, array('reviewFormId' => $this->reviewFormId)),
85  __('manager.reviewFormElements.create'),
86  'modal_add_item',
87  true
88  ),
89  __('manager.reviewFormElements.create'),
90  'add_item'
91  )
92  );
93 
94 
95  //
96  // Grid columns.
97  //
98  import('lib.pkp.controllers.grid.settings.reviewForms.ReviewFormElementGridCellProvider');
99  $reviewFormElementGridCellProvider = new ReviewFormElementGridCellProvider();
100 
101  // Review form element name.
102  $this->addColumn(
103  new GridColumn(
104  'question',
105  'manager.reviewFormElements.question',
106  null,
107  null,
108  $reviewFormElementGridCellProvider,
109  array('html' => true, 'maxLength' => 220)
110  )
111  );
112 
113  // Basic grid configuration.
114  $this->setTitle('manager.reviewFormElements');
115  }
116 
117  //
118  // Implement methods from GridHandler.
119  //
123  function initFeatures($request, $args) {
124  import('lib.pkp.classes.controllers.grid.feature.OrderGridItemsFeature');
125  return array(new OrderGridItemsFeature());
126  }
127 
132  protected function getRowInstance() {
133  return new ReviewFormElementGridRow();
134  }
135 
139  protected function loadData($request, $filter = null) {
140  // Get review form elements.
141  //$rangeInfo = $this->getRangeInfo('reviewFormElements');
142  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
143  $reviewFormElements = $reviewFormElementDao->getByReviewFormId($this->reviewFormId, null); //FIXME add range info?
144 
145  return $reviewFormElements->toAssociativeArray();
146  }
147 
151  function getRequestArgs() {
152  return array_merge(array('reviewFormId' => $this->reviewFormId), parent::getRequestArgs());
153  }
154 
158  function getDataElementSequence($gridDataElement) {
159  return $gridDataElement->getSequence();
160  }
161 
165  function setDataElementSequence($request, $rowId, $gridDataElement, $newSequence) {
166  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
167  $gridDataElement->setSequence($newSequence);
168  $reviewFormElementDao->updateObject($gridDataElement);
169  }
170 
171 
172  //
173  // Public grid actions.
174  //
181  function createReviewFormElement($args, $request) {
182  // Form handling
183  $reviewFormElementForm = new ReviewFormElementForm($this->reviewFormId);
184  $reviewFormElementForm->initData();
185  return new JSONMessage(true, $reviewFormElementForm->fetch($request));
186  }
187 
194  function editReviewFormElement($args, $request) {
195  // Identify the review form element Id
196  $reviewFormElementId = (int) $request->getUserVar('rowId');
197 
198  // Display form
199  $reviewFormElementForm = new ReviewFormElementForm($this->reviewFormId, $reviewFormElementId);
200  $reviewFormElementForm->initData();
201  return new JSONMessage(true, $reviewFormElementForm->fetch($request));
202  }
203 
210  function updateReviewFormElement($args, $request) {
211  $reviewFormElementId = (int) $request->getUserVar('reviewFormElementId');
212 
213  $context = $request->getContext();
214  $reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); /* @var $reviewFormDao ReviewFormDAO */
215  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
216 
217  $reviewForm = $reviewFormDao->getById($this->reviewFormId, Application::getContextAssocType(), $context->getId());
218 
219  if (!$reviewFormDao->unusedReviewFormExists($this->reviewFormId, Application::getContextAssocType(), $context->getId()) || ($reviewFormElementId && !$reviewFormElementDao->reviewFormElementExists($reviewFormElementId, $this->reviewFormId))) {
220  fatalError('Invalid review form information!');
221  }
222 
223  import('lib.pkp.controllers.grid.settings.reviewForms.form.ReviewFormElementForm');
224  $reviewFormElementForm = new ReviewFormElementForm($this->reviewFormId, $reviewFormElementId);
225  $reviewFormElementForm->readInputData();
226 
227  if ($reviewFormElementForm->validate()) {
228  $reviewFormElementId = $reviewFormElementForm->execute();
229 
230  // Create the notification.
231  $notificationMgr = new NotificationManager();
232  $user = $request->getUser();
233  $notificationMgr->createTrivialNotification($user->getId());
234 
235  return DAO::getDataChangedEvent($reviewFormElementId);
236  }
237 
238  return new JSONMessage(false);
239  }
240 
247  function deleteReviewFormElement($args, $request) {
248  $reviewFormElementId = (int) $request->getUserVar('rowId');
249 
250  $context = $request->getContext();
251  $reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); /* @var $reviewFormDao ReviewFormDAO */
252 
253  if ($request->checkCSRF() && $reviewFormDao->unusedReviewFormExists($this->reviewFormId, Application::getContextAssocType(), $context->getId())) {
254  $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /* @var $reviewFormElementDao ReviewFormElementDAO */
255  $reviewFormElementDao->deleteById($reviewFormElementId);
256  return DAO::getDataChangedEvent($reviewFormElementId);
257  }
258 
259  return new JSONMessage(false);
260  }
261 }
262 
263 
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
ReviewFormElementsGridHandler\getRowInstance
getRowInstance()
Definition: ReviewFormElementsGridHandler.inc.php:135
ReviewFormElementsGridHandler\loadData
loadData($request, $filter=null)
Definition: ReviewFormElementsGridHandler.inc.php:142
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
ReviewFormElementsGridHandler\updateReviewFormElement
updateReviewFormElement($args, $request)
Definition: ReviewFormElementsGridHandler.inc.php:213
ReviewFormElementsGridHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: ReviewFormElementsGridHandler.inc.php:45
ReviewFormElementsGridHandler\setDataElementSequence
setDataElementSequence($request, $rowId, $gridDataElement, $newSequence)
Definition: ReviewFormElementsGridHandler.inc.php:168
GridHandler\addAction
addAction($action, $position=GRID_ACTION_POSITION_ABOVE)
Definition: GridHandler.inc.php:266
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
ReviewFormElementGridRow
ReviewFormElements grid row definition.
Definition: ReviewFormElementGridRow.inc.php:18
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
Application\getContextAssocType
static getContextAssocType()
Definition: Application.inc.php:203
ReviewFormElementsGridHandler\getDataElementSequence
getDataElementSequence($gridDataElement)
Definition: ReviewFormElementsGridHandler.inc.php:161
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
ReviewFormElementForm
Form for creating and modifying review form elements.
Definition: ReviewFormElementForm.inc.php:21
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
OrderGridItemsFeature
Implements grid ordering functionality.
Definition: OrderGridItemsFeature.inc.php:19
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
ReviewFormElementsGridHandler\getRequestArgs
getRequestArgs()
Definition: ReviewFormElementsGridHandler.inc.php:154
ReviewFormElementsGridHandler\$reviewFormId
$reviewFormId
Definition: ReviewFormElementsGridHandler.inc.php:25
ReviewFormElementsGridHandler\createReviewFormElement
createReviewFormElement($args, $request)
Definition: ReviewFormElementsGridHandler.inc.php:184
ReviewFormElementsGridHandler\initialize
initialize($request, $args=null)
Definition: ReviewFormElementsGridHandler.inc.php:65
ReviewFormElementsGridHandler\__construct
__construct()
Definition: ReviewFormElementsGridHandler.inc.php:30
ReviewFormElementsGridHandler\editReviewFormElement
editReviewFormElement($args, $request)
Definition: ReviewFormElementsGridHandler.inc.php:197
GridHandler
This class defines basic operations for handling HTML grids. Grids are used to implement a standardiz...
Definition: GridHandler.inc.php:58
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
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
ReviewFormElementsGridHandler\deleteReviewFormElement
deleteReviewFormElement($args, $request)
Definition: ReviewFormElementsGridHandler.inc.php:250
ReviewFormElementsGridHandler
Handle review form element grid requests.
Definition: ReviewFormElementsGridHandler.inc.php:20
ReviewFormElementsGridHandler\initFeatures
initFeatures($request, $args)
Definition: ReviewFormElementsGridHandler.inc.php:126
PolicySet
An ordered list of policies. Policy sets can be added to decision managers like policies....
Definition: PolicySet.inc.php:26
ReviewFormElementGridCellProvider
Subclass for review form element column's cell provider.
Definition: ReviewFormElementGridCellProvider.inc.php:16