Open Journal Systems  3.3.0
BrowseBySectionHandler.inc.php
1 <?php
2 
14 import('classes.handler.Handler');
15 
17 
21  function authorize($request, &$args, $roleAssignments) {
22  import('lib.pkp.classes.security.authorization.ContextRequiredPolicy');
23  $this->addPolicy(new ContextRequiredPolicy($request));
24 
25  import('classes.security.authorization.OjsJournalMustPublishPolicy');
26  $this->addPolicy(new OjsJournalMustPublishPolicy($request));
27 
28  return parent::authorize($request, $args, $roleAssignments);
29  }
30 
41  public function view($args, $request) {
42  $sectionPath = isset($args[0]) ? $args[0] : null;
43  $page = isset($args[1]) && ctype_digit((string) $args[1]) ? (int) $args[1] : 1;
44  $context = $request->getContext();
45  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
46 
47  // The page $arg can only contain an integer that's not 1. The first page
48  // URL does not include page $arg
49  if (isset($args[1]) && (!ctype_digit((string) $args[1]) || $args[1] == 1)) {
50  $request->getDispatcher()->handle404();
51  exit;
52  }
53 
54  if (!$sectionPath || !$contextId) {
55  $request->getDispatcher()->handle404();
56  exit;
57  }
58 
59  $sectionDao = DAORegistry::getDAO('SectionDAO');
60  $sections = $sectionDao->getByContextId($contextId);
61 
62  $sectionExists = false;
63  while ($section = $sections->next()) {
64  if ($section->getData('browseByEnabled') && $section->getData('browseByPath') === $sectionPath) {
65  $sectionExists = true;
66  break;
67  }
68  }
69 
70  if (!$sectionExists) {
71  $request->getDispatcher()->handle404();
72  exit;
73  }
74 
75  $browseByPerPage = $section->getData('browseByPerPage');
76  if (empty($browseByPerPage)) {
77  $browseByPerPage = BROWSEBYSECTION_DEFAULT_PER_PAGE;
78  }
79 
80  import('classes.submission.Submission'); // Import status constants
81 
82  $params = [
83  'contextId' => $contextId,
84  'count' => $browseByPerPage,
85  'offset' => $page ? ($page - 1) * $browseByPerPage : 0,
86  'orderBy' => 'datePublished',
87  'sectionIds' => [(int) $section->getId()],
88  'status' => STATUS_PUBLISHED,
89  ];
90 
91  $submissionsIterator = Services::get('submission')->getMany($params);
92  $total = Services::get('submission')->getMax($params);
93 
94  if ($page > 1 && !count($submissionsIterator)) {
95  $request->getDispatcher()->handle404();
96  exit;
97  }
98 
99  $submissions = [];
100  $issueIds = [];
101  foreach ($submissionsIterator as $submission) {
102  $submissions[] = $submission;
103  if ($submission->getCurrentPublication()->getData('issueId')) {
104  $issueIds[] = $submission->getCurrentPublication()->getData('issueId');
105  }
106  }
107 
108  $issuesIterator = Services::get('issue')->getMany([
109  'contextId' => $contextId,
110  'isPublished' => true,
111  'issueIds' => array_unique($issueIds),
112  ]);
113  $issues = iterator_to_array($issuesIterator);
114 
115  $showingStart = $params['offset'] + 1;
116  $showingEnd = min($params['offset'] + $params['count'], $params['offset'] + count($submissions));
117  $nextPage = $total > $showingEnd ? $page + 1 : null;
118  $prevPage = $showingStart > 1 ? $page - 1 : null;
119 
120  $templateMgr = TemplateManager::getManager($request);
121  $templateMgr->assign(array(
122  'section' => $section,
123  'sectionPath' => $sectionPath,
124  'sectionDescription' => $section->getLocalizedData('browseByDescription'),
125  'articles' => $submissions,
126  'issues' => $issues,
127  'showingStart' => $showingStart,
128  'showingEnd' => $showingEnd,
129  'total' => $total,
130  'nextPage' => $nextPage,
131  'prevPage' => $prevPage,
132  ));
133 
134  $plugin = PluginRegistry::getPlugin('generic', 'browsebysectionplugin');
135 
136  return $templateMgr->display($plugin->getTemplateResource('frontend/pages/section.tpl'));
137  }
138 }
139 
BrowseBySectionHandler
Handle reader-facing router requests for the browse by section plugin.
Definition: BrowseBySectionHandler.inc.php:16
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
BrowseBySectionHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: BrowseBySectionHandler.inc.php:21
OjsJournalMustPublishPolicy
Access policy to limit access to journals that do not publish online.
Definition: OjsJournalMustPublishPolicy.inc.php:18
PluginRegistry\getPlugin
static getPlugin($category, $name)
Definition: PluginRegistry.inc.php:85
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
Handler
Base request handler application class.
Definition: Handler.inc.php:18
ContextRequiredPolicy
Policy to deny access if a context cannot be found in the request.
Definition: ContextRequiredPolicy.inc.php:17
BrowseBySectionHandler\view
view($args, $request)
Definition: BrowseBySectionHandler.inc.php:41
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49