Open Journal Systems  3.3.0
CriticalTimesThemePlugin.inc.php
1 <?php
2 
17 define('CRITICAL_TIMES_MAX_GROUPS', 6);
18 import('lib.pkp.classes.plugins.ThemePlugin');
19 
21 
25  public function init() {
26 
27  $this->addOption('spotlightItem', 'text', array(
28  'label' => 'plugins.themes.criticalTimes.spotlight.item'
29  ));
30 
31  $this->addOption('spotlightIntro', 'text', array(
32  'label' => 'plugins.themes.criticalTimes.spotlight.intro',
33  'description' => 'plugins.themes.criticalTimes.spotlight.intro.description'
34  ));
35 
36  $context = Application::get()->getRequest()->getContext();
37  if ($context) {
38  $userGroupDao = DAORegistry::getDAO('UserGroupDAO');
39  $userGroupsResult = $userGroupDao->getByRoleId($context->getId(), ROLE_ID_AUTHOR);
40  $options = array();
41  while ($userGroup = $userGroupsResult->next()) {
42  $options[$userGroup->getId()] = $userGroup->getLocalizedName();
43  }
44  $this->addOption('translatorUserGroupId', 'radio', array(
45  'label' => 'plugins.themes.criticalTimes.article.translatorGroup',
46  'description' => 'plugins.themes.criticalTimes.article.translatorGroup.description',
47  'options' => $options,
48  ));
49  }
50 
51  $this->addStyle(
52  'fontSourceSerifPro',
53  '//fonts.googleapis.com/css?family=Source+Serif+Pro:400,700',
54  array('baseUrl' => '')
55  );
56 
57  $this->addStyle(
58  'fontAwesome',
59  'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css',
60  array('baseUrl' => '')
61  );
62 
63  $this->addStyle('stylesheet', 'styles/index.less');
64 
65  $this->addScript('jQuery', '//code.jquery.com/jquery-3.1.1.slim.min.js', array('baseUrl' => ''));
66  $this->addScript('popper', 'js/lib/popper/popper.js');
67  $this->addScript('bsUtil', 'js/lib/bootstrap/util.js');
68  $this->addScript('bsDropdown', 'js/lib/bootstrap/dropdown.js');
69  $this->addScript('criticalTimes', 'js/main.js');
70 
71  $this->addMenuArea(array('primary', 'footer'));
72 
73  // Get extra data for templates
74  HookRegistry::register ('TemplateManager::display', array($this, 'loadTemplateData'));
75 
76  // Add custom settings to issues
77  HookRegistry::register('issuedao::getAdditionalFieldNames', array($this, 'addIssueDaoFields'));
78  HookRegistry::register('LoadComponentHandler', array($this, 'loadIssueTocHandler'));
79  HookRegistry::register ('TemplateManager::fetch', array($this, 'loadIssueTocTemplateData'));
80  }
81 
86  public function getDisplayName() {
87  return __('plugins.themes.criticalTimes.name');
88  }
89 
94  public function getDescription() {
95  return __('plugins.themes.criticalTimes.description');
96  }
97 
110  public function loadTemplateData($hookName, $args) {
111  $request = Application::get()->getRequest();
112  $context = $request->getContext();
113  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
114  $templateMgr = $args[0];
115  $template = $args[1];
116 
117  $sectionDao = DAORegistry::getDAO('SectionDAO');
118  $result = $sectionDao->getByContextId($contextId);
119  $browseableSections = array();
120  while ($section = $result->next()) {
121  if ($section->getData('browseByEnabled')) {
122  $browseableSections[] = $section;
123  }
124  }
125  $templateMgr->assign('ctSections', $browseableSections);
126 
127  $templateMgr->assign('ctThemePath', $request->getBaseUrl() . '/' . $this->getPluginPath());
128  $templateMgr->assign('ctThemePlugin', $this);
129 
130  if ($template === 'frontend/pages/article.tpl') {
131  $this->loadArticleTemplateData($hookName, $args);
132  }
133 
134  if ($template === 'frontend/pages/issue.tpl' || $template === 'frontend/pages/indexJournal.tpl') {
135  $this->loadIssueTemplateData($hookName, $args);
136  }
137 
138  if ($template === 'frontend/pages/indexJournal.tpl') {
139  $this->loadSpotlightTemplateData($hookName, $args);
140  }
141  }
142 
148  public function loadArticleTemplateData($hookName, $args) {
149  $request = Application::get()->getRequest();
150  $context = $request->getContext();
151  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
152  $dispatcher = $request->getDispatcher();
153  $templateMgr = $args[0];
154  $article = $templateMgr->getTemplateVars('article');
155 
156  // Determine if this article was published as part of a special section
157  $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
158  $issueDao = DAORegistry::getDAO('IssueDAO');
159  $issue = $issueDao->getById($article->getIssueId(), $contextId);
160  $specialSection = null;
161  for ($i = 1; $i < (CRITICAL_TIMES_MAX_GROUPS + 1); $i++) {
162  if (!$issue->getData('group' . $i . 'IsSpecial')) {
163  continue;
164  }
165  $items = explode(',', trim($issue->getData('group' . $i . 'Items')));
166  $items = array_values(array_unique($items));
167  if (in_array($article->getId(), $items)) {
168  $groupArticles = array();
169  foreach ($items as $item) {
170  if (!ctype_digit((string) $item) || $item == $article->getId()) {
171  continue;
172  }
173  $groupArticle = $publishedArticleDao->getById($item);
174  if ($groupArticle) {
175  $groupArticles[] = $groupArticle;
176  }
177  }
178  }
179  if (count($groupArticles)) {
180  $specialSection = array(
181  'name' => $issue->getData('group' . $i . 'Name'),
182  'description' => $issue->getData('group' . $i . 'Description'),
183  'editor' => $issue->getData('group' . $i . 'Editor'),
184  'articles' => $groupArticles,
185  );
186  }
187  break;
188  }
189 
190  $templateMgr->assign(array(
191  'specialSection' => $specialSection,
192  ));
193  }
194 
200  public function loadIssueTemplateData($hookName, $args) {
201  $request = Application::get()->getRequest();
202  $context = $request->getContext();
203  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
204  $templateMgr = $args[0];
205  $issue = $templateMgr->getTemplateVars('issue');
206 
207  if (!$issue) {
208  return;
209  }
210 
211  // Get data for grouped issue table of contents
212  $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
213  $toc = array();
214  for ($i = 1; $i < (CRITICAL_TIMES_MAX_GROUPS + 1); $i++) {
215  $items = explode(',', trim($issue->getData('group' . $i . 'Items')));
216  $items = array_values(array_unique($items));
217  $articles = array();
218  foreach ($items as $item) {
219  if (!ctype_digit((string) $item)) {
220  continue;
221  }
222  $article = $publishedArticleDao->getByArticleId($item);
223  if ($article) {
224  $articles[] = $article;
225  }
226  }
227 
228  if (!empty($articles)) {
229  $toc[] = array(
230  'name' => $issue->getData('group' . $i . 'Name'),
231  'description' => $issue->getData('group' . $i . 'Description'),
232  'articles' => $articles,
233  'isSpecial' => $issue->getData('group' . $i . 'IsSpecial'),
234  'editor' => $issue->getData('group' . $i . 'Editor'),
235  );
236  }
237  }
238 
239  $templateMgr->assign(array(
240  'ctToc' => $toc,
241  ));
242  }
243 
249  public function loadSpotlightTemplateData($hookName, $args) {
250  $request = Application::get()->getRequest();
251  $context = $request->getContext();
252  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
253  $templateMgr = $args[0];
254 
255  $spotlightItem = $this->getOption('spotlightItem');
256 
257  if (!$spotlightItem || !ctype_digit((string) $spotlightItem)) {
258  return;
259  }
260 
261  $publishedArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
262  $spotlightArticle = $publishedArticleDao->getByArticleId($spotlightItem, $contextId);
263 
264  if (!$spotlightArticle) {
265  return;
266  }
267 
268  $issueDao = DAORegistry::getDAO('IssueDAO');
269  $spotlightIssue = $issueDao->getById($spotlightArticle->getIssueId(), $contextId);
270 
271  $templateMgr->assign(array(
272  'spotlightArticle' => $spotlightArticle,
273  'spotlightIntro' => $this->getOption('spotlightIntro'),
274  'spotlightIssue' => $spotlightIssue,
275  ));
276  }
277 
285  public function getAuthorString($authors) {
286  $translatorUserGroupId = $this->getOption('translatorUserGroupId');
287 
288  if (empty($authors)) {
289  return '';
290  }
291 
292  $authorNames = array();
293  foreach ($authors as $author) {
294  if ($author->getUserGroupId() != $translatorUserGroupId) {
295  $authorNames[] = $author->getFullName();
296  }
297  }
298 
299  if (empty($authorNames)) {
300  return '';
301  }
302 
303  return join(__('common.listSeparator'), $authorNames);
304  }
305 
313  public function getTranslatorString($authors) {
314  $translatorUserGroupId = $this->getOption('translatorUserGroupId');
315 
316  if (!$translatorUserGroupId || empty($authors)) {
317  return '';
318  }
319 
320  $translators = array();
321  foreach ($authors as $author) {
322  if ($author->getUserGroupId() == $translatorUserGroupId) {
323  $translators[] = $author->getFullName();
324  }
325  }
326 
327  if (empty($translators)) {
328  return '';
329  }
330 
331  $translatorsString = join(__('common.listSeparator'), $translators);
332 
333  return __('plugins.themes.criticalTimes.article.translatedBy', array('translators' => $translatorsString));
334  }
335 
343  public function getIssueIdentification($issue) {
344  return __('plugins.themes.criticalTimes.issue.identification', array(
345  'vol' => $issue->getData('volume'),
346  'num' => $issue->getData('number'),
347  'year' => $issue->getData('year'),
348  'title' => $issue->getLocalizedTitle(),
349  ));
350  }
351 
352 
362  public function addIssueDaoFields($hookName, $args) {
363  $fields =& $args[1];
364  $fields[] = 'group1Items';
365  $fields[] = 'group1IsSpecial';
366  $fields[] = 'group1Editor';
367  $fields[] = 'group2Name';
368  $fields[] = 'group2Description';
369  $fields[] = 'group2Items';
370  $fields[] = 'group2IsSpecial';
371  $fields[] = 'group2Editor';
372  $fields[] = 'group3Name';
373  $fields[] = 'group3Description';
374  $fields[] = 'group3Items';
375  $fields[] = 'group3IsSpecial';
376  $fields[] = 'group3Editor';
377  $fields[] = 'group4Name';
378  $fields[] = 'group4Description';
379  $fields[] = 'group4Items';
380  $fields[] = 'group4IsSpecial';
381  $fields[] = 'group4Editor';
382  $fields[] = 'group5Name';
383  $fields[] = 'group5Description';
384  $fields[] = 'group5Items';
385  $fields[] = 'group5IsSpecial';
386  $fields[] = 'group5Editor';
387  $fields[] = 'group6Name';
388  $fields[] = 'group6Description';
389  $fields[] = 'group6Items';
390  $fields[] = 'group6IsSpecial';
391  $fields[] = 'group6Editor';
392  }
393 
404  public function loadIssueTocHandler($hookName, $args) {
405  $component = $args[0];
406 
407  if ($component === 'plugins.themes.criticalTimes.controllers.CriticalTimesIssueTocHandler') {
408  $op = $args[1];
409  $this->import('controllers.CriticalTimesIssueTocHandler');
410  $handler = new CriticalTimesIssueTocHandler();
411  $handler->_plugin = $this;
412  if (method_exists($handler, $op)) {
413  $request = Application::get()->getRequest();
414  $router = $request->getRouter();
415  $serviceEndpoint = array($handler, $op);
416  $router->_authorizeInitializeAndCallRequest($serviceEndpoint, $request, $args);
417  exit;
418  }
419  }
420  }
421 
434  public function loadIssueTocTemplateData($hookName, $args) {
435  $templateMgr =& $args[0];
436  $template = $args[1];
437 
438  if ($template === 'controllers/grid/issues/issueToc.tpl') {
439  $this->import('controllers.CriticalTimesIssueTocFormHandler');
440  $issueTocForm = new CriticalTimesIssueTocFormHandler($templateMgr->getTemplateVars('issue'));
441  $issueTocForm->initData($request);
442  $templateMgr->assign($issueTocForm->_data);
443  }
444  }
445 
446 }
447 
448 ?>
$op
$op
Definition: lib/pkp/pages/help/index.php:18
ThemePlugin
Abstract class for theme plugins.
Definition: ThemePlugin.inc.php:21
ThemePlugin\addMenuArea
addMenuArea($menuAreas)
Definition: ThemePlugin.inc.php:662
CriticalTimesThemePlugin\loadArticleTemplateData
loadArticleTemplateData($hookName, $args)
Definition: CriticalTimesThemePlugin.inc.php:148
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
CriticalTimesThemePlugin\getDisplayName
getDisplayName()
Definition: CriticalTimesThemePlugin.inc.php:86
CriticalTimesThemePlugin\loadIssueTocTemplateData
loadIssueTocTemplateData($hookName, $args)
Definition: CriticalTimesThemePlugin.inc.php:434
ThemePlugin\getOption
getOption($name)
Definition: ThemePlugin.inc.php:454
ThemePlugin\addScript
addScript($name, $script, $args=array())
Definition: ThemePlugin.inc.php:304
ThemePlugin\addOption
addOption($name, $type, $args=array())
Definition: ThemePlugin.inc.php:393
CriticalTimesThemePlugin\loadIssueTocHandler
loadIssueTocHandler($hookName, $args)
Definition: CriticalTimesThemePlugin.inc.php:404
CriticalTimesThemePlugin\getIssueIdentification
getIssueIdentification($issue)
Definition: CriticalTimesThemePlugin.inc.php:343
CriticalTimesThemePlugin\loadIssueTemplateData
loadIssueTemplateData($hookName, $args)
Definition: CriticalTimesThemePlugin.inc.php:200
CriticalTimesThemePlugin\getTranslatorString
getTranslatorString($authors)
Definition: CriticalTimesThemePlugin.inc.php:313
CriticalTimesThemePlugin
OJS 3 theme for Critical Times, a journal run by the International Consortium of Critical Theory.
Definition: CriticalTimesThemePlugin.inc.php:20
CriticalTimesThemePlugin\addIssueDaoFields
addIssueDaoFields($hookName, $args)
Definition: CriticalTimesThemePlugin.inc.php:362
CriticalTimesThemePlugin\loadTemplateData
loadTemplateData($hookName, $args)
Definition: CriticalTimesThemePlugin.inc.php:110
Plugin\$request
$request
Definition: Plugin.inc.php:68
CriticalTimesThemePlugin\getAuthorString
getAuthorString($authors)
Definition: CriticalTimesThemePlugin.inc.php:285
CriticalTimesThemePlugin\init
init()
Definition: CriticalTimesThemePlugin.inc.php:25
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
CriticalTimesThemePlugin\getDescription
getDescription()
Definition: CriticalTimesThemePlugin.inc.php:94
ThemePlugin\addStyle
addStyle($name, $style, $args=array())
Definition: ThemePlugin.inc.php:191
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
CriticalTimesIssueTocFormHandler
Definition: CriticalTimesIssueTocFormHandler.inc.php:13
ThemePlugin\$options
$options
Definition: ThemePlugin.inc.php:52
CriticalTimesIssueTocHandler
Definition: CriticalTimesIssueTocHandler.inc.php:14
CriticalTimesThemePlugin\loadSpotlightTemplateData
loadSpotlightTemplateData($hookName, $args)
Definition: CriticalTimesThemePlugin.inc.php:249