Open Journal Systems  3.3.0
PKPCatalogHandler.inc.php
1 <?php
2 
16 import('classes.handler.Handler');
17 
18 // import UI base classes
19 import('lib.pkp.classes.linkAction.LinkAction');
20 import('lib.pkp.classes.core.JSONMessage');
21 
22 class PKPCatalogHandler extends Handler {
23  //
24  // Overridden methods from Handler
25  //
29  function authorize($request, &$args, $roleAssignments) {
30  import('lib.pkp.classes.security.authorization.ContextRequiredPolicy');
31  $this->addPolicy(new ContextRequiredPolicy($request));
32  return parent::authorize($request, $args, $roleAssignments);
33  }
34 
44  function category($args, $request) {
45  $page = isset($args[1]) ? (int) $args[1] : 1;
46  $templateMgr = TemplateManager::getManager($request);
47  $context = $request->getContext();
48 
49  // Get the category
50  $categoryDao = DAORegistry::getDAO('CategoryDAO'); /* @var $categoryDao CategoryDAO */
51  $category = $categoryDao->getByPath($args[0], $context->getId());
52  if (!$category) $this->getDispatcher()->handle404();
53 
54  $this->setupTemplate($request);
55  import('lib.pkp.classes.submission.PKPSubmission'); // STATUS_ constants
56 
57  $orderOption = $category->getSortOption() ? $category->getSortOption() : ORDERBY_DATE_PUBLISHED . '-' . SORT_DIRECTION_DESC;
58  list($orderBy, $orderDir) = explode('-', $orderOption);
59 
60  $count = $context->getData('itemsPerPage') ? $context->getData('itemsPerPage') : Config::getVar('interface', 'items_per_page');
61  $offset = $page > 1 ? ($page - 1) * $count : 0;
62 
63  import('classes.core.Services');
64  $params = array(
65  'contextId' => $context->getId(),
66  'categoryIds' => $category->getId(),
67  'orderByFeatured' => true,
68  'orderBy' => $orderBy,
69  'orderDirection' => $orderDir == SORT_DIRECTION_ASC ? 'ASC' : 'DESC',
70  'count' => $count,
71  'offset' => $offset,
72  'status' => STATUS_PUBLISHED,
73  );
74  $submissionsIterator = Services::get('submission')->getMany($params);
75  $total = Services::get('submission')->getMax($params);
76 
77  // Provide the parent category and a list of subcategories
78  $parentCategory = $categoryDao->getById($category->getParentId());
79  $subcategories = $categoryDao->getByParentId($category->getId());
80 
81  $this->_setupPaginationTemplate($request, count($submissionsIterator), $page, $count, $offset, $total);
82 
83  $templateMgr->assign(array(
84  'category' => $category,
85  'parentCategory' => $parentCategory,
86  'subcategories' => $subcategories,
87  'publishedSubmissions' => iterator_to_array($submissionsIterator),
88  ));
89 
90  return $templateMgr->display('frontend/pages/catalogCategory.tpl');
91  }
92 
98  function fullSize($args, $request) {
99  switch ($request->getUserVar('type')) {
100  case 'category':
101  $context = $request->getContext();
102  $categoryDao = DAORegistry::getDAO('CategoryDAO'); /* @var $categoryDao CategoryDAO */
103  $category = $categoryDao->getById($request->getUserVar('id'), $context->getId());
104  if (!$category) $this->getDispatcher()->handle404();
105  $imageInfo = $category->getImage();
106  import('lib.pkp.classes.file.ContextFileManager');
107  $contextFileManager = new ContextFileManager($context->getId());
108  $contextFileManager->downloadByPath($contextFileManager->getBasePath() . '/categories/' . $imageInfo['name'], null, true);
109  break;
110  default:
111  fatalError('invalid type specified');
112  }
113  }
114 
120  function thumbnail($args, $request) {
121  switch ($request->getUserVar('type')) {
122  case 'category':
123  $context = $request->getContext();
124  $categoryDao = DAORegistry::getDAO('CategoryDAO'); /* @var $categoryDao CategoryDAO */
125  $category = $categoryDao->getById($request->getUserVar('id'), $context->getId());
126  if (!$category) $this->getDispatcher()->handle404();
127  $imageInfo = $category->getImage();
128  import('lib.pkp.classes.file.ContextFileManager');
129  $contextFileManager = new ContextFileManager($context->getId());
130  $contextFileManager->downloadByPath($contextFileManager->getBasePath() . '/categories/' . $imageInfo['thumbnailName'], null, true);
131  break;
132  default:
133  fatalError('invalid type specified');
134  }
135  }
136 
140  function setupTemplate($request) {
141  AppLocale::requireComponents(LOCALE_COMPONENT_PKP_SUBMISSION, LOCALE_COMPONENT_APP_SUBMISSION);
142  parent::setupTemplate($request);
143  }
144 
154  protected function _setupPaginationTemplate($request, $submissionsCount, $page, $count, $offset, $total) {
155  $showingStart = $offset + 1;
156  $showingEnd = min($offset + $count, $offset + $submissionsCount);
157  $nextPage = $total > $showingEnd ? $page + 1 : null;
158  $prevPage = $showingStart > 1 ? $page - 1 : null;
159 
160  $templateMgr = TemplateManager::getManager($request);
161  $templateMgr->assign(array(
162  'showingStart' => $showingStart,
163  'showingEnd' => $showingEnd,
164  'total' => $total,
165  'nextPage' => $nextPage,
166  'prevPage' => $prevPage,
167  ));
168  }
169 }
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPCatalogHandler\_setupPaginationTemplate
_setupPaginationTemplate($request, $submissionsCount, $page, $count, $offset, $total)
Definition: PKPCatalogHandler.inc.php:154
PKPCatalogHandler\fullSize
fullSize($args, $request)
Definition: PKPCatalogHandler.inc.php:98
PKPCatalogHandler\thumbnail
thumbnail($args, $request)
Definition: PKPCatalogHandler.inc.php:120
ContextFileManager
Class defining operations for private context file management.
Definition: ContextFileManager.inc.php:19
PKPCatalogHandler\category
category($args, $request)
Definition: PKPCatalogHandler.inc.php:44
PKPCatalogHandler\setupTemplate
setupTemplate($request)
Definition: PKPCatalogHandler.inc.php:140
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PKPHandler\getDispatcher
& getDispatcher()
Definition: PKPHandler.inc.php:120
PKPCatalogHandler
Handle requests for the public-facing catalog.
Definition: PKPCatalogHandler.inc.php:22
PKPCatalogHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: PKPCatalogHandler.inc.php:29
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
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
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49