Open Journal Systems  3.3.0
LibraryFileGridHandler.inc.php
1 <?php
2 
16 import('lib.pkp.classes.controllers.grid.CategoryGridHandler');
17 import('lib.pkp.controllers.grid.files.LibraryFileGridRow');
18 import('lib.pkp.controllers.grid.files.LibraryFileGridCategoryRow');
19 import('classes.file.LibraryFileManager');
20 import('lib.pkp.classes.context.LibraryFile');
21 
22 // Link action & modal classes
23 import('lib.pkp.classes.linkAction.request.AjaxModal');
24 
27  var $_context;
28 
30  var $_canEdit;
31 
35  function __construct($dataProvider) {
36  parent::__construct($dataProvider);
37  $this->addRoleAssignment(
38  array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR),
39  array(
40  'fetchGrid', 'fetchCategory', 'fetchRow', // Parent grid-level actions
41  )
42  );
43  }
44 
45 
46  //
47  // Getters/Setters
48  //
53  function getContext() {
54  return $this->_context;
55  }
56 
61  function canEdit() {
62  return $this->_canEdit;
63  }
64 
69  function setCanEdit($canEdit) {
70  $this->_canEdit = $canEdit;
71  }
72 
73  //
74  // Overridden template methods
75  //
76 
77  /*
78  * Configure the grid
79  * @see CategoryGridHandler::initialize
80  */
81  function initialize($request, $args = null) {
82  parent::initialize($request, $args);
83 
84  $router = $request->getRouter();
85  $this->_context = $router->getContext($request);
86 
87  // Set name
88  $this->setTitle('manager.publication.library');
89 
91  LOCALE_COMPONENT_PKP_COMMON,
92  LOCALE_COMPONENT_APP_COMMON,
93  LOCALE_COMPONENT_PKP_SUBMISSION,
94  LOCALE_COMPONENT_APP_SUBMISSION,
95  LOCALE_COMPONENT_PKP_MANAGER,
96  LOCALE_COMPONENT_APP_MANAGER
97  );
98 
99  // Columns
100  // Basic grid row configuration
101  $this->addColumn($this->getFileNameColumn());
102 
103  $router = $request->getRouter();
104 
105  // Add grid-level actions
106  if ($this->canEdit()) {
107  $this->addAction(
108  new LinkAction(
109  'addFile',
110  new AjaxModal(
111  $router->url($request, null, null, 'addFile', null, $this->getActionArgs()),
112  __('grid.action.addFile'),
113  'modal_add_file'
114  ),
115  __('grid.action.addFile'),
116  'add'
117  )
118  );
119  }
120  }
121 
122  //
123  // Implement template methods from CategoryGridHandler
124  //
128  protected function getCategoryRowInstance() {
129  return new LibraryFileGridCategoryRow($this->getContext());
130  }
131 
135  protected function loadData($request, $filter) {
136 
137  $context = $this->getContext();
138  $libraryFileManager = new LibraryFileManager($context->getId());
139  $fileTypeKeys = $libraryFileManager->getTypeSuffixMap();
140  foreach (array_keys($fileTypeKeys) as $key) {
141  $data[$key] = $key;
142  }
143  return $data;
144  }
145 
146  //
147  // Overridden methods from GridHandler
148  //
153  protected function getRowInstance() {
154  return new LibraryFileGridRow($this->canEdit());
155  }
156 
161  function getFileNameColumn() {
162  import('lib.pkp.controllers.grid.files.LibraryFileGridCellProvider');
163  return new GridColumn(
164  'files',
165  'grid.libraryFiles.column.files',
166  null,
167  null,
169  );
170  }
171 
172  //
173  // Public File Grid Actions
174  //
181  function addFile($args, $request) {
182  $this->initialize($request);
183  $router = $request->getRouter();
184  $context = $request->getContext();
185 
186  $fileForm = $this->_getNewFileForm($context);
187  $fileForm->initData();
188 
189  return new JSONMessage(true, $fileForm->fetch($request));
190  }
191 
198  function saveFile($args, $request) {
199  $router = $request->getRouter();
200  $context = $request->getContext();
201 
202  $fileForm = $this->_getNewFileForm($context);
203  $fileForm->readInputData();
204 
205  if ($fileForm->validate()) {
206  $fileId = $fileForm->execute();
207 
208  // Let the calling grid reload itself
209  return DAO::getDataChangedEvent();
210  }
211 
212  return new JSONMessage(false);
213  }
214 
221  function editFile($args, $request) {
222  $this->initialize($request);
223  assert(isset($args['fileId']));
224  $fileId = (int) $args['fileId'];
225 
226  $router = $request->getRouter();
227  $context = $request->getContext();
228 
229  $fileForm = $this->_getEditFileForm($context, $fileId);
230  $fileForm->initData();
231 
232  return new JSONMessage(true, $fileForm->fetch($request));
233  }
234 
241  function updateFile($args, $request) {
242  assert(isset($args['fileId']));
243  $fileId = (int) $args['fileId'];
244 
245  $router = $request->getRouter();
246  $context = $request->getContext();
247 
248  $fileForm = $this->_getEditFileForm($context, $fileId);
249  $fileForm->readInputData();
250 
251  if ($fileForm->validate()) {
252  $fileForm->execute();
253 
254  // Let the calling grid reload itself
255  return DAO::getDataChangedEvent();
256  }
257 
258  return new JSONMessage(false);
259  }
260 
267  function deleteFile($args, $request) {
268  $fileId = isset($args['fileId']) ? $args['fileId'] : null;
269  $router = $request->getRouter();
270  $context = $router->getContext($request);
271 
272  if ($request->checkCSRF() && $fileId) {
273  $libraryFileManager = new LibraryFileManager($context->getId());
274  $libraryFileManager->deleteById($fileId);
275 
276  return DAO::getDataChangedEvent();
277  }
278 
279  return new JSONMessage(false);
280  }
281 
288  function uploadFile($args, $request) {
289  $router = $request->getRouter();
290  $context = $request->getContext();
291  $user = $request->getUser();
292 
293  import('lib.pkp.classes.file.TemporaryFileManager');
294  $temporaryFileManager = new TemporaryFileManager();
295  $temporaryFile = $temporaryFileManager->handleUpload('uploadedFile', $user->getId());
296  if ($temporaryFile) {
297  $json = new JSONMessage(true);
298  $json->setAdditionalAttributes(array(
299  'temporaryFileId' => $temporaryFile->getId()
300  ));
301  return $json;
302  } else {
303  return new JSONMessage(false, __('common.uploadFailed'));
304  }
305  }
306 
312  function _getNewFileForm($context){
313  assert(false);
314  }
315 
322  function _getEditFileForm($context, $fileId){
323  assert(false);
324  }
325 
330  function getActionArgs() {
331  return array();
332  }
333 }
334 
335 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
LibraryFileGridHandler\$_canEdit
$_canEdit
Definition: LibraryFileGridHandler.inc.php:30
TemporaryFileManager
Definition: TemporaryFileManager.inc.php:19
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
LibraryFileGridHandler\initialize
initialize($request, $args=null)
Definition: LibraryFileGridHandler.inc.php:81
LibraryFileGridHandler\editFile
editFile($args, $request)
Definition: LibraryFileGridHandler.inc.php:221
LibraryFileGridHandler\deleteFile
deleteFile($args, $request)
Definition: LibraryFileGridHandler.inc.php:267
LibraryFileGridCategoryRow
Library file grid category row definition.
Definition: LibraryFileGridCategoryRow.inc.php:19
LibraryFileGridHandler
Base class for handling library file grid requests.
Definition: LibraryFileGridHandler.inc.php:25
LibraryFileGridHandler\_getEditFileForm
_getEditFileForm($context, $fileId)
Definition: LibraryFileGridHandler.inc.php:322
LibraryFileGridHandler\__construct
__construct($dataProvider)
Definition: LibraryFileGridHandler.inc.php:35
LibraryFileGridHandler\getFileNameColumn
getFileNameColumn()
Definition: LibraryFileGridHandler.inc.php:161
LibraryFileGridCellProvider
Subclass for a LibraryFile grid column's cell provider.
Definition: LibraryFileGridCellProvider.inc.php:18
LibraryFileGridHandler\addFile
addFile($args, $request)
Definition: LibraryFileGridHandler.inc.php:181
LibraryFileGridHandler\saveFile
saveFile($args, $request)
Definition: LibraryFileGridHandler.inc.php:198
GridHandler\addAction
addAction($action, $position=GRID_ACTION_POSITION_ABOVE)
Definition: GridHandler.inc.php:266
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
LibraryFileGridHandler\updateFile
updateFile($args, $request)
Definition: LibraryFileGridHandler.inc.php:241
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
LibraryFileGridHandler\uploadFile
uploadFile($args, $request)
Definition: LibraryFileGridHandler.inc.php:288
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
LibraryFileGridHandler\$_context
$_context
Definition: LibraryFileGridHandler.inc.php:27
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
CategoryGridHandler
Class defining basic operations for handling HTML grids with categories.
Definition: CategoryGridHandler.inc.php:23
LibraryFileManager
Wrapper class for uploading files to a site/context' library directory.
Definition: LibraryFileManager.inc.php:18
LibraryFileGridRow
Handle library file grid row requests.
Definition: LibraryFileGridRow.inc.php:22
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
LibraryFileGridHandler\getRowInstance
getRowInstance()
Definition: LibraryFileGridHandler.inc.php:153
LibraryFileGridHandler\getContext
getContext()
Definition: LibraryFileGridHandler.inc.php:53
LibraryFileGridHandler\setCanEdit
setCanEdit($canEdit)
Definition: LibraryFileGridHandler.inc.php:69
LibraryFileGridHandler\getCategoryRowInstance
getCategoryRowInstance()
Definition: LibraryFileGridHandler.inc.php:128
LibraryFileGridHandler\_getNewFileForm
_getNewFileForm($context)
Definition: LibraryFileGridHandler.inc.php:312
LibraryFileGridHandler\canEdit
canEdit()
Definition: LibraryFileGridHandler.inc.php:61
LibraryFileGridHandler\getActionArgs
getActionArgs()
Definition: LibraryFileGridHandler.inc.php:330
LibraryFileGridHandler\loadData
loadData($request, $filter)
Definition: LibraryFileGridHandler.inc.php:135