17 define(
'CRITICAL_TIMES_MAX_GROUPS', 6);
18 import(
'lib.pkp.classes.plugins.ThemePlugin');
27 $this->
addOption(
'spotlightItem',
'text', array(
28 'label' =>
'plugins.themes.criticalTimes.spotlight.item'
31 $this->
addOption(
'spotlightIntro',
'text', array(
32 'label' =>
'plugins.themes.criticalTimes.spotlight.intro',
33 'description' =>
'plugins.themes.criticalTimes.spotlight.intro.description'
39 $userGroupsResult = $userGroupDao->getByRoleId($context->getId(), ROLE_ID_AUTHOR);
41 while ($userGroup = $userGroupsResult->next()) {
42 $options[$userGroup->getId()] = $userGroup->getLocalizedName();
44 $this->
addOption(
'translatorUserGroupId',
'radio', array(
45 'label' =>
'plugins.themes.criticalTimes.article.translatorGroup',
46 'description' =>
'plugins.themes.criticalTimes.article.translatorGroup.description',
53 '//fonts.googleapis.com/css?family=Source+Serif+Pro:400,700',
54 array(
'baseUrl' =>
'')
59 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css',
60 array(
'baseUrl' =>
'')
63 $this->
addStyle(
'stylesheet',
'styles/index.less');
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');
87 return __(
'plugins.themes.criticalTimes.name');
95 return __(
'plugins.themes.criticalTimes.description');
113 $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
114 $templateMgr = $args[0];
115 $template = $args[1];
118 $result = $sectionDao->getByContextId($contextId);
119 $browseableSections = array();
120 while ($section = $result->next()) {
121 if ($section->getData(
'browseByEnabled')) {
122 $browseableSections[] = $section;
125 $templateMgr->assign(
'ctSections', $browseableSections);
127 $templateMgr->assign(
'ctThemePath',
$request->getBaseUrl() .
'/' . $this->getPluginPath());
128 $templateMgr->assign(
'ctThemePlugin', $this);
130 if ($template ===
'frontend/pages/article.tpl') {
134 if ($template ===
'frontend/pages/issue.tpl' || $template ===
'frontend/pages/indexJournal.tpl') {
138 if ($template ===
'frontend/pages/indexJournal.tpl') {
151 $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
152 $dispatcher =
$request->getDispatcher();
153 $templateMgr = $args[0];
154 $article = $templateMgr->getTemplateVars(
'article');
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')) {
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()) {
173 $groupArticle = $publishedArticleDao->getById($item);
175 $groupArticles[] = $groupArticle;
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,
190 $templateMgr->assign(array(
191 'specialSection' => $specialSection,
203 $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
204 $templateMgr = $args[0];
205 $issue = $templateMgr->getTemplateVars(
'issue');
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));
218 foreach ($items as $item) {
219 if (!ctype_digit((
string) $item)) {
222 $article = $publishedArticleDao->getByArticleId($item);
224 $articles[] = $article;
228 if (!empty($articles)) {
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'),
239 $templateMgr->assign(array(
252 $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
253 $templateMgr = $args[0];
255 $spotlightItem = $this->
getOption(
'spotlightItem');
257 if (!$spotlightItem || !ctype_digit((
string) $spotlightItem)) {
262 $spotlightArticle = $publishedArticleDao->getByArticleId($spotlightItem, $contextId);
264 if (!$spotlightArticle) {
269 $spotlightIssue = $issueDao->getById($spotlightArticle->getIssueId(), $contextId);
271 $templateMgr->assign(array(
272 'spotlightArticle' => $spotlightArticle,
273 'spotlightIntro' => $this->
getOption(
'spotlightIntro'),
274 'spotlightIssue' => $spotlightIssue,
286 $translatorUserGroupId = $this->
getOption(
'translatorUserGroupId');
288 if (empty($authors)) {
292 $authorNames = array();
293 foreach ($authors as $author) {
294 if ($author->getUserGroupId() != $translatorUserGroupId) {
295 $authorNames[] = $author->getFullName();
299 if (empty($authorNames)) {
303 return join(__(
'common.listSeparator'), $authorNames);
314 $translatorUserGroupId = $this->
getOption(
'translatorUserGroupId');
316 if (!$translatorUserGroupId || empty($authors)) {
320 $translators = array();
321 foreach ($authors as $author) {
322 if ($author->getUserGroupId() == $translatorUserGroupId) {
323 $translators[] = $author->getFullName();
327 if (empty($translators)) {
331 $translatorsString = join(__(
'common.listSeparator'), $translators);
333 return __(
'plugins.themes.criticalTimes.article.translatedBy', array(
'translators' => $translatorsString));
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(),
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';
405 $component = $args[0];
407 if ($component ===
'plugins.themes.criticalTimes.controllers.CriticalTimesIssueTocHandler') {
409 $this->
import(
'controllers.CriticalTimesIssueTocHandler');
411 $handler->_plugin = $this;
412 if (method_exists($handler,
$op)) {
415 $serviceEndpoint = array($handler,
$op);
416 $router->_authorizeInitializeAndCallRequest($serviceEndpoint,
$request, $args);
435 $templateMgr =& $args[0];
436 $template = $args[1];
438 if ($template ===
'controllers/grid/issues/issueToc.tpl') {
439 $this->
import(
'controllers.CriticalTimesIssueTocFormHandler');
442 $templateMgr->assign($issueTocForm->_data);