14 import(
'classes.handler.Handler');
21 function authorize($request, &$args, $roleAssignments) {
22 import(
'lib.pkp.classes.security.authorization.ContextRequiredPolicy');
25 import(
'classes.security.authorization.OjsJournalMustPublishPolicy');
28 return parent::authorize($request, $args, $roleAssignments);
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;
49 if (isset($args[1]) && (!ctype_digit((
string) $args[1]) || $args[1] == 1)) {
50 $request->getDispatcher()->handle404();
54 if (!$sectionPath || !$contextId) {
55 $request->getDispatcher()->handle404();
60 $sections = $sectionDao->getByContextId($contextId);
62 $sectionExists =
false;
63 while ($section = $sections->next()) {
64 if ($section->getData(
'browseByEnabled') && $section->getData(
'browseByPath') === $sectionPath) {
65 $sectionExists =
true;
70 if (!$sectionExists) {
71 $request->getDispatcher()->handle404();
75 $browseByPerPage = $section->getData(
'browseByPerPage');
76 if (empty($browseByPerPage)) {
77 $browseByPerPage = BROWSEBYSECTION_DEFAULT_PER_PAGE;
80 import(
'classes.submission.Submission');
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,
91 $submissionsIterator =
Services::get(
'submission')->getMany($params);
94 if ($page > 1 && !count($submissionsIterator)) {
95 $request->getDispatcher()->handle404();
101 foreach ($submissionsIterator as $submission) {
102 $submissions[] = $submission;
103 if ($submission->getCurrentPublication()->getData(
'issueId')) {
104 $issueIds[] = $submission->getCurrentPublication()->getData(
'issueId');
109 'contextId' => $contextId,
110 'isPublished' =>
true,
111 'issueIds' => array_unique($issueIds),
113 $issues = iterator_to_array($issuesIterator);
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;
121 $templateMgr->assign(array(
122 'section' => $section,
123 'sectionPath' => $sectionPath,
124 'sectionDescription' => $section->getLocalizedData(
'browseByDescription'),
125 'articles' => $submissions,
127 'showingStart' => $showingStart,
128 'showingEnd' => $showingEnd,
130 'nextPage' => $nextPage,
131 'prevPage' => $prevPage,
136 return $templateMgr->display($plugin->getTemplateResource(
'frontend/pages/section.tpl'));