Open Journal Systems  3.3.0
TocGridHandler.inc.php
1 <?php
2 
16 import('lib.pkp.classes.controllers.grid.CategoryGridHandler');
17 import('controllers.grid.toc.TocGridCategoryRow');
18 import('controllers.grid.toc.TocGridRow');
19 
22 
26  function __construct() {
27  parent::__construct();
28  $this->addRoleAssignment(
29  array(ROLE_ID_MANAGER),
30  array('fetchGrid', 'fetchCategory', 'fetchRow', 'saveSequence', 'removeArticle', 'setAccessStatus')
31  );
32  $this->submissionsBySectionId = array();
33  }
34 
35 
36  //
37  // Implement template methods from PKPHandler.
38  //
42  function authorize($request, &$args, $roleAssignments) {
43  import('lib.pkp.classes.security.authorization.ContextAccessPolicy');
44  $this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
45 
46  import('classes.security.authorization.OjsIssueRequiredPolicy');
47  $this->addPolicy(new OjsIssueRequiredPolicy($request, $args));
48 
49  return parent::authorize($request, $args, $roleAssignments);
50  }
51 
55  function initialize($request, $args = null) {
56  parent::initialize($request, $args);
57 
58  AppLocale::requireComponents(LOCALE_COMPONENT_APP_EDITOR, LOCALE_COMPONENT_PKP_SUBMISSION, LOCALE_COMPONENT_APP_SUBMISSION);
59 
60  //
61  // Grid columns.
62  //
63  import('controllers.grid.toc.TocGridCellProvider');
64  $tocGridCellProvider = new TocGridCellProvider();
65 
66  // Article title
67  $this->addColumn(
68  new GridColumn(
69  'title',
70  'article.title',
71  null,
72  null,
73  $tocGridCellProvider
74  )
75  );
76 
77  $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
78  if ($request->getJournal()->getData('publishingMode') == PUBLISHING_MODE_SUBSCRIPTION && $issue->getAccessStatus() == ISSUE_ACCESS_SUBSCRIPTION) {
79  // Article access status
80  $this->addColumn(
81  new GridColumn(
82  'access',
83  'reader.openAccess',
84  null,
85  'controllers/grid/common/cell/selectStatusCell.tpl',
86  $tocGridCellProvider,
87  array('width' => 20, 'alignment' => COLUMN_ALIGNMENT_CENTER)
88  )
89  );
90  }
91  }
92 
96  function initFeatures($request, $args) {
97  return array(new OrderCategoryGridItemsFeature(ORDER_CATEGORY_GRID_CATEGORIES_AND_ROWS, true, $this));
98  }
99 
104  return 'sectionId';
105  }
106 
110  function getRequestArgs() {
111  $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
112  return array_merge(
113  parent::getRequestArgs(),
114  array('issueId' => $issue->getId())
115  );
116  }
117 
122  protected function getRowInstance() {
123  $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
124  return new TocGridRow($issue->getId());
125  }
126 
130  protected function getCategoryRowInstance() {
131  return new TocGridCategoryRow();
132  }
133 
137  function loadCategoryData($request, &$section, $filter = null) {
138  return $this->submissionsBySectionId[$section->getId()];
139  }
140 
144  protected function loadData($request, $filter) {
145  $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
146  import('lib.pkp.classes.submission.PKPSubmission'); // STATUS_...
147  $submissionsInSections = Services::get('submission')->getInSections($issue->getId(), $request->getContext()->getId());
148  foreach ($submissionsInSections as $sectionId => $articles) {
149  foreach($articles['articles'] as $article) {
150  $this->submissionsBySectionId[$sectionId][$article->getId()] = $article;
151  }
152  }
153  $sections = Application::get()->getSectionDao()->getByIssueId($issue->getId());
154  $arrayKeySections = [];
155  foreach ($sections as $section) {
156  $arrayKeySections[$section->getId()] = $section;
157  }
158  return $arrayKeySections;
159  }
160 
166  function getDataElementSequence($object) {
167  if (is_a($object, 'Submission')) {
168  return $object->getCurrentPublication()->getData('seq');
169  } else { // section
170  $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
171  $sectionDao = DAORegistry::getDAO('SectionDAO'); /* @var $sectionDao SectionDAO */
172  $customOrdering = $sectionDao->getCustomSectionOrder($issue->getId(), $object->getId());
173  if ($customOrdering === null) { // No custom ordering specified; use default section ordering
174  return $object->getSequence();
175  } else { // Custom ordering specified.
176  return $customOrdering;
177  }
178  }
179  }
180 
184  function setDataElementSequence($request, $sectionId, $gridDataElement, $newSequence) {
185  $sectionDao = DAORegistry::getDAO('SectionDAO'); /* @var $sectionDao SectionDAO */
186  $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
187  if (!$sectionDao->customSectionOrderingExists($issue->getId())) {
188  $sectionDao->setDefaultCustomSectionOrders($issue->getId());
189  }
190  $sectionDao->updateCustomSectionOrder($issue->getId(), $sectionId, $newSequence);
191  }
192 
196  function getDataElementInCategorySequence($categoryId, &$submission) {
197  return $submission->getCurrentPublication()->getData('seq');
198  }
199 
203  function setDataElementInCategorySequence($sectionId, &$submission, $newSequence) {
204  $publication = $submission->getCurrentPublication();
205  $params = ['seq' => $newSequence];
206  if ($sectionId != $publication->getData('sectionId')) {
207  $params['sectionId'] = $sectionId;
208  }
209  $publication = Services::get('publication')->edit($publication, $params, Application::get()->getRequest());
210  }
211 
212  //
213  // Public handler functions
214  //
221  function removeArticle($args, $request) {
222  $journal = $request->getJournal();
223  $submission = Services::get('submission')->get((int) $request->getUserVar('articleId'));
224  $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
225  import('classes.article.ArticleTombstoneManager');
226  $articleTombstoneManager = new ArticleTombstoneManager();
227  if ($submission && $request->checkCSRF()) {
228  if ($issue->getPublished() && $submission->getCurrentPublication()->getData('issueId') == $issue->getId()) {
229  $articleTombstoneManager->insertArticleTombstone($submission, $journal);
230  }
231  foreach ((array) $submission->getData('publications') as $publication) {
232  if ($publication->getData('issueId') === (int) $issue->getId()
233  && in_array($publication->getData('status'), [STATUS_SCHEDULED, STATUS_PUBLISHED])) {
234  $publication = Services::get('publication')->unpublish($publication);
235  $publication = Services::get('publication')->edit(
236  $publication,
237  ['seq' => ''],
238  $request
239  );
240  }
241  }
242  // If the article is the only one in the section, delete the section from custom issue ordering
243  $sectionId = $submission->getCurrentPublication()->getData('sectionId');
244  $submissionsInSections = Services::get('submission')->getInSections($issue->getId(), $issue->getJournalId());
245  if (!empty($submissionsInSections[$sectionId]) && count($submissionsInSections[$sectionId]) === 1) {
246  $sectionDao = DAORegistry::getDAO('SectionDAO'); /* @var $sectionDao SectionDAO */
247  $sectionDao->deleteCustomSection($issue->getId(), $sectionId);
248  }
249  return DAO::getDataChangedEvent();
250  }
251 
252  // If we've fallen through, it must be a badly-specified article
253  return new JSONMessage(false);
254  }
255 
262  function setAccessStatus($args, $request) {
263  $articleId = (int) $request->getUserVar('articleId');
264  $issue = $this->getAuthorizedContextObject(ASSOC_TYPE_ISSUE);
265  $submission = Services::get('submission')->get($articleId);
266  $publication = $submission ? $submission->getCurrentPublication() : null;
267  if ($publication && $publication->getData('issueId') == $issue->getId() && $request->checkCSRF()) {
268  $publication = Services::get('publication')->edit($publication, ['accessStatus' => $request->getUserVar('status')], $request);
269  return DAO::getDataChangedEvent();
270  }
271 
272  // If we've fallen through, it must be a badly-specified article
273  return new JSONMessage(false);
274  }
275 }
276 
277 
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
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
TocGridHandler\getCategoryRowIdParameterName
getCategoryRowIdParameterName()
Definition: TocGridHandler.inc.php:103
ContextAccessPolicy
Class to control access to PKP applications' setup components.
Definition: ContextAccessPolicy.inc.php:17
TocGridHandler\getRequestArgs
getRequestArgs()
Definition: TocGridHandler.inc.php:110
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
OjsIssueRequiredPolicy
Policy that ensures that the request contains a valid issue.
Definition: OjsIssueRequiredPolicy.inc.php:17
TocGridRow
Handle issue grid row requests.
Definition: TocGridRow.inc.php:18
TocGridCellProvider
Grid cell provider for the TOC (Table of Contents) category grid.
Definition: TocGridCellProvider.inc.php:18
TocGridHandler\loadData
loadData($request, $filter)
Definition: TocGridHandler.inc.php:144
TocGridHandler\getDataElementInCategorySequence
getDataElementInCategorySequence($categoryId, &$submission)
Definition: TocGridHandler.inc.php:196
TocGridHandler\getCategoryRowInstance
getCategoryRowInstance()
Definition: TocGridHandler.inc.php:130
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
TocGridHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: TocGridHandler.inc.php:42
ArticleTombstoneManager
Class defining basic operations for article tombstones.
Definition: ArticleTombstoneManager.inc.php:17
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
TocGridHandler\setAccessStatus
setAccessStatus($args, $request)
Definition: TocGridHandler.inc.php:262
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
TocGridHandler\setDataElementInCategorySequence
setDataElementInCategorySequence($sectionId, &$submission, $newSequence)
Definition: TocGridHandler.inc.php:203
CategoryGridHandler
Class defining basic operations for handling HTML grids with categories.
Definition: CategoryGridHandler.inc.php:23
TocGridHandler\setDataElementSequence
setDataElementSequence($request, $sectionId, $gridDataElement, $newSequence)
Definition: TocGridHandler.inc.php:184
PKPHandler\getAuthorizedContextObject
& getAuthorizedContextObject($assocType)
Definition: PKPHandler.inc.php:174
TocGridHandler
Handle TOC (table of contents) grid requests.
Definition: TocGridHandler.inc.php:20
TocGridHandler\__construct
__construct()
Definition: TocGridHandler.inc.php:26
TocGridHandler\loadCategoryData
loadCategoryData($request, &$section, $filter=null)
Definition: TocGridHandler.inc.php:137
TocGridHandler\removeArticle
removeArticle($args, $request)
Definition: TocGridHandler.inc.php:221
TocGridHandler\getDataElementSequence
getDataElementSequence($object)
Definition: TocGridHandler.inc.php:166
TocGridCategoryRow
System Info grid category row definition.
Definition: TocGridCategoryRow.inc.php:18
TocGridHandler\initialize
initialize($request, $args=null)
Definition: TocGridHandler.inc.php:55
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
OrderCategoryGridItemsFeature
Implements category grid ordering functionality.
Definition: OrderCategoryGridItemsFeature.inc.php:23
TocGridHandler\getRowInstance
getRowInstance()
Definition: TocGridHandler.inc.php:122
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
TocGridHandler\initFeatures
initFeatures($request, $args)
Definition: TocGridHandler.inc.php:96
TocGridHandler\$submissionsBySectionId
$submissionsBySectionId
Definition: TocGridHandler.inc.php:21