Open Monograph Press  3.3.0
CatalogHandler.inc.php
1 <?php
2 
17 import('lib.pkp.pages.catalog.PKPCatalogHandler');
18 
20  //
21  // Public handler methods
22  //
28  function index($args, $request) {
29  return $this->page($args, $request, true);
30  }
31 
40  public function page($args, $request, $isFirstPage = false) {
41  $page = null;
42  if ($isFirstPage) {
43  $page = 1;
44  } elseif ($args[0]) {
45  $page = (int) $args[0];
46  }
47 
48  if (!$isFirstPage && (empty($page) || $page < 2)) {
49  $request->getDispatcher()->handle404();
50  }
51 
52  $templateMgr = TemplateManager::getManager($request);
53  $this->setupTemplate($request);
54  $context = $request->getContext();
55 
56  import('classes.submission.Submission'); // STATUS_ constants
57  import('classes.submission.SubmissionDAO'); // ORDERBY_ constants
58 
59  $orderOption = $context->getData('catalogSortOption') ? $context->getData('catalogSortOption') : ORDERBY_DATE_PUBLISHED . '-' . SORT_DIRECTION_DESC;
60  list($orderBy, $orderDir) = explode('-', $orderOption);
61 
62  $count = $context->getData('itemsPerPage') ? $context->getData('itemsPerPage') : Config::getVar('interface', 'items_per_page');
63  $offset = $page > 1 ? ($page - 1) * $count : 0;
64 
65  import('classes.core.Services');
66  $submissionService = Services::get('submission');
67 
68  $params = array(
69  'contextId' => $context->getId(),
70  'orderByFeatured' => true,
71  'orderBy' => $orderBy,
72  'orderDirection' => $orderDir == SORT_DIRECTION_ASC ? 'ASC' : 'DESC',
73  'count' => $count,
74  'offset' => $offset,
75  'status' => STATUS_PUBLISHED,
76  );
77  $submissionsIterator = $submissionService->getMany($params);
78  $total = $submissionService->getMax($params);
79 
80  $featureDao = DAORegistry::getDAO('FeatureDAO'); /* @var $featureDao FeatureDAO */
81  $featuredMonographIds = $featureDao->getSequencesByAssoc(ASSOC_TYPE_PRESS, $context->getId());
82 
83  $this->_setupPaginationTemplate($request, count($submissionsIterator), $page, $count, $offset, $total);
84 
85  $templateMgr->assign(array(
86  'publishedSubmissions' => iterator_to_array($submissionsIterator),
87  'featuredMonographIds' => $featuredMonographIds,
88  ));
89 
90  $templateMgr->display('frontend/pages/catalog.tpl');
91  }
92 
98  function newReleases($args, $request) {
99  $templateMgr = TemplateManager::getManager($request);
100  $this->setupTemplate($request);
101  $press = $request->getPress();
102 
103  // Provide a list of new releases to browse
104  $newReleaseDao = DAORegistry::getDAO('NewReleaseDAO'); /* @var $newReleaseDao NewReleaseDAO */
105  $newReleases = $newReleaseDao->getMonographsByAssoc(ASSOC_TYPE_PRESS, $press->getId());
106  $templateMgr->assign('publishedSubmissions', $newReleases);
107 
108  // Display
109  $templateMgr->display('frontend/pages/catalogNewReleases.tpl');
110  }
111 
121  function series($args, $request) {
122  $seriesPath = $args[0];
123  $page = isset($args[1]) ? (int) $args[1] : 1;
124  $templateMgr = TemplateManager::getManager($request);
125  $context = $request->getContext();
126 
127  // Get the series
128  $seriesDao = DAORegistry::getDAO('SeriesDAO'); /* @var $seriesDao SeriesDAO */
129  $series = $seriesDao->getByPath($seriesPath, $context->getId());
130 
131  if (!$series) {
132  $request->redirect(null, 'catalog');
133  }
134 
135  $this->setupTemplate($request);
136  import('classes.submission.Submission'); // STATUS_ constants
137  import('classes.submission.SubmissionDAO'); // ORDERBY_ constants
138 
139  $orderOption = $series->getSortOption() ? $series->getSortOption() : ORDERBY_DATE_PUBLISHED . '-' . SORT_DIRECTION_DESC;
140  list($orderBy, $orderDir) = explode('-', $orderOption);
141 
142  $count = $context->getData('itemsPerPage') ? $context->getData('itemsPerPage') : Config::getVar('interface', 'items_per_page');
143  $offset = $page > 1 ? ($page - 1) * $count : 0;
144 
145  import('classes.core.Services');
146  $submissionService = Services::get('submission');
147 
148  $params = array(
149  'contextId' => $context->getId(),
150  'seriesIds' => $series->getId(),
151  'orderByFeatured' => true,
152  'orderBy' => $orderBy,
153  'orderDirection' => $orderDir == SORT_DIRECTION_ASC ? 'ASC' : 'DESC',
154  'count' => $count,
155  'offset' => $offset,
156  'status' => STATUS_PUBLISHED,
157  );
158  $submissionsIterator = $submissionService->getMany($params);
159  $total = $submissionService->getMax($params);
160 
161  $featureDao = DAORegistry::getDAO('FeatureDAO'); /* @var $featureDao FeatureDAO */
162  $featuredMonographIds = $featureDao->getSequencesByAssoc(ASSOC_TYPE_SERIES, $series->getId());
163 
164  // Provide a list of new releases to browse
165  $newReleases = array();
166  if ($page === 1) {
167  $newReleaseDao = DAORegistry::getDAO('NewReleaseDAO'); /* @var $newReleaseDao NewReleaseDAO */
168  $newReleases = $newReleaseDao->getMonographsByAssoc(ASSOC_TYPE_SERIES, $series->getId());
169  }
170 
171  $this->_setupPaginationTemplate($request, count($submissionsIterator), $page, $count, $offset, $total);
172 
173  $templateMgr->assign(array(
174  'series' => $series,
175  'publishedSubmissions' => iterator_to_array($submissionsIterator),
176  'featuredMonographIds' => $featuredMonographIds,
177  'newReleasesMonographs' => $newReleases,
178  ));
179 
180  return $templateMgr->display('frontend/pages/catalogSeries.tpl');
181  }
182 
189  function results($args, $request) {
190  $request->redirect(null, 'search');
191  }
192 
196  function fullSize($args, $request) {
197 
198  $press = $request->getPress();
199  $type = $request->getUserVar('type');
200  $id = $request->getUserVar('id');
201  $imageInfo = array();
202  $path = null;
203 
204  switch ($type) {
205  case 'category':
206  $path = '/categories/';
207  $categoryDao = DAORegistry::getDAO('CategoryDAO'); /* @var $categoryDao CategoryDAO */
208  $category = $categoryDao->getById($id, $press->getId());
209  if ($category) {
210  $imageInfo = $category->getImage();
211  }
212  break;
213  case 'series':
214  $path = '/series/';
215  $seriesDao = DAORegistry::getDAO('SeriesDAO'); /* @var $seriesDao SeriesDAO */
216  $series = $seriesDao->getById($id, $press->getId());
217  if ($series) {
218  $imageInfo = $series->getImage();
219  }
220  break;
221  default:
222  fatalError('invalid type specified');
223  break;
224  }
225 
226  if ($imageInfo) {
227  import('lib.pkp.classes.file.ContextFileManager');
228  $pressFileManager = new ContextFileManager($press->getId());
229  $pressFileManager->downloadByPath($pressFileManager->getBasePath() . $path . $imageInfo['name'], null, true);
230  }
231  }
232 
236  function thumbnail($args, $request) {
237  $press = $request->getPress();
238  $type = $request->getUserVar('type');
239  $id = $request->getUserVar('id');
240  $imageInfo = array();
241  $path = null; // Scrutinizer
242 
243  switch ($type) {
244  case 'category':
245  $path = '/categories/';
246  $categoryDao = DAORegistry::getDAO('CategoryDAO'); /* @var $categoryDao CategoryDAO */
247  $category = $categoryDao->getById($id, $press->getId());
248  if ($category) {
249  $imageInfo = $category->getImage();
250  }
251  break;
252  case 'series':
253  $path = '/series/';
254  $seriesDao = DAORegistry::getDAO('SeriesDAO'); /* @var $seriesDao SeriesDAO */
255  $series = $seriesDao->getById($id, $press->getId());
256  if ($series) {
257  $imageInfo = $series->getImage();
258  }
259  break;
260  default:
261  fatalError('invalid type specified');
262  break;
263  }
264 
265  if ($imageInfo) {
266  import('lib.pkp.classes.file.ContextFileManager');
267  $pressFileManager = new ContextFileManager($press->getId());
268  $pressFileManager->downloadByPath($pressFileManager->getBasePath() . $path . $imageInfo['thumbnailName'], null, true);
269  }
270  }
271 
275  function setupTemplate($request) {
276  $templateMgr = TemplateManager::getManager($request);
277  $press = $request->getPress();
278  if ($press) {
279  $templateMgr->assign('currency', $press->getSetting('currency'));
280  }
281  parent::setupTemplate($request);
282  }
283 
293  public function _setupPaginationTemplate($request, $submissionsCount, $page, $count, $offset, $total) {
294  $showingStart = $offset + 1;
295  $showingEnd = min($offset + $count, $offset + $submissionsCount);
296  $nextPage = $total > $showingEnd ? $page + 1 : null;
297  $prevPage = $showingStart > 1 ? $page - 1 : null;
298 
299  $templateMgr = TemplateManager::getManager($request);
300  $templateMgr->assign(array(
301  'showingStart' => $showingStart,
302  'showingEnd' => $showingEnd,
303  'total' => $total,
304  'nextPage' => $nextPage,
305  'prevPage' => $prevPage,
306  ));
307  }
308 }
CatalogHandler\series
series($args, $request)
Definition: CatalogHandler.inc.php:121
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
CatalogHandler\index
index($args, $request)
Definition: CatalogHandler.inc.php:28
CatalogHandler\results
results($args, $request)
Definition: CatalogHandler.inc.php:189
CatalogHandler\page
page($args, $request, $isFirstPage=false)
Definition: CatalogHandler.inc.php:40
ContextFileManager
Class defining operations for private context file management.
Definition: ContextFileManager.inc.php:19
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
CatalogHandler\_setupPaginationTemplate
_setupPaginationTemplate($request, $submissionsCount, $page, $count, $offset, $total)
Definition: CatalogHandler.inc.php:293
CatalogHandler
Handle requests for the press-specific part of the public-facing catalog.
Definition: CatalogHandler.inc.php:19
PKPCatalogHandler
Handle requests for the public-facing catalog.
Definition: PKPCatalogHandler.inc.php:22
CatalogHandler\fullSize
fullSize($args, $request)
Definition: CatalogHandler.inc.php:196
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
CatalogHandler\newReleases
newReleases($args, $request)
Definition: CatalogHandler.inc.php:98
CatalogHandler\setupTemplate
setupTemplate($request)
Definition: CatalogHandler.inc.php:275
CatalogHandler\thumbnail
thumbnail($args, $request)
Definition: CatalogHandler.inc.php:236
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49