Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.5.0 compatibility #102

Merged
merged 11 commits into from
Feb 7, 2025
Merged
4 changes: 2 additions & 2 deletions .github/actions/tests.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash

set -e
npx cypress run --spec "cypress/tests/data/10-ApplicationSetup/*.cy.js,cypress/tests/data/60-content/VkarbasizaedSubmission.cy.js"
npx cypress run --config specPattern=plugins/themes/immersion/cypress/tests/functional

echo "Run cypress tests"
npx cypress run --config '{"specPattern":["plugins/themes/immersion/cypress/tests/functional/*.cy.js"]}'
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ jobs:
branch: main
repository: pkp
plugin: true

dataset_inject: true
157 changes: 83 additions & 74 deletions ImmersionThemePlugin.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
/**
* @file plugins/themes/immersion/ImmersionThemePlugin.inc.php
*
* Copyright (c) 2014-2020 Simon Fraser University
* Copyright (c) 2003-2020 John Willinsky
* Copyright (c) 2014-2025 Simon Fraser University
* Copyright (c) 2003-2025 John Willinsky
* Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
*
* @class ImmersionThemePlugin
Expand All @@ -15,14 +15,18 @@

use APP\core\Request;
use APP\facades\Repo;
use APP\issue\Issue;
use APP\section\Section;
use APP\template\TemplateManager;
use PKP\config\Config;
use PKP\context\Context;
use PKP\db\DAORegistry;
use PKP\facades\Locale;
use PKP\plugins\ThemePlugin;
use PKP\plugins\PluginSettingsDAO;
use APP\journal\SectionDAO;

class ImmersionThemePlugin extends ThemePlugin
{

public function init()
{

Expand All @@ -31,20 +35,20 @@ public function init()
$this->addStyle('less', 'resources/less/import.less');

// Styles for HTML galleys
$this->addStyle('htmlGalley', 'templates/plugins/generic/htmlArticleGalley/css/default.less', array('contexts' => 'htmlGalley'));
$this->addStyle('htmlGalley', 'templates/plugins/generic/htmlArticleGalley/css/default.less', ['contexts' => 'htmlGalley']);

// Adding scripts (JQuery, Popper, Bootstrap, JQuery UI, Tag-it, Theme's JS)
$this->addScript('app-js', 'resources/dist/app.min.js');

// Add navigation menu areas for this theme
$this->addMenuArea(array('primary', 'user'));
$this->addMenuArea(['primary', 'user']);

// Option to show section description on the journal's homepage; turned off by default
$this->addOption('sectionDescriptionSetting', 'FieldOptions', array(
$this->addOption('sectionDescriptionSetting', 'FieldOptions', [
'label' => __('plugins.themes.immersion.options.sectionDescription.label'),
'description' => __('plugins.themes.immersion.options.sectionDescription.description'),
'type' => 'radio',
'options' => array(
'options' => [
[
'value' => 'disable',
'label' => __('plugins.themes.immersion.options.sectionDescription.disable'),
Expand All @@ -53,14 +57,14 @@ public function init()
'value' => 'enable',
'label' => __('plugins.themes.immersion.options.sectionDescription.enable'),
],
)
));
]
]);

$this->addOption('journalDescription', 'FieldOptions', array(
$this->addOption('journalDescription', 'FieldOptions', [
'label' => __('plugins.themes.immersion.options.journalDescription.label'),
'description' => __('plugins.themes.immersion.options.journalDescription.description'),
'type' => 'radio',
'options' => array(
'options' => [
[
'value' => 0,
'label' => __('plugins.themes.immersion.options.journalDescription.disable'),
Expand All @@ -69,56 +73,56 @@ public function init()
'value' => 1,
'label' => __('plugins.themes.immersion.options.journalDescription.enable'),
],
)
));
]
]);

$this->addOption('journalDescriptionColour', 'FieldColor', array(
$this->addOption('journalDescriptionColour', 'FieldColor', [
'label' => __('plugins.themes.immersion.options.journalDescriptionColour.label'),
'description' => __('plugins.themes.immersion.options.journalDescriptionColour.description'),
'default' => '#000',
));
]);

$this->addOption('immersionAnnouncementsColor', 'FieldColor', array(
$this->addOption('immersionAnnouncementsColor', 'FieldColor', [
'label' => __('plugins.themes.immersion.announcements.colorPick'),
'default' => '#000',
));
]);

// Add usage stats display options
$this->addOption('displayStats', 'FieldOptions', [
'type' => 'radio',
'label' => __('plugins.themes.immersion.option.displayStats.label'),
'options' => [
[
'value' => 'none',
'label' => __('plugins.themes.immersion.option.displayStats.none'),
],
[
'value' => 'bar',
'label' => __('plugins.themes.immersion.option.displayStats.bar'),
],
[
'value' => 'line',
'label' => __('plugins.themes.immersion.option.displayStats.line'),
],
],
'default' => 'none',
]);
'options' => [
[
'value' => 'none',
'label' => __('plugins.themes.immersion.option.displayStats.none'),
],
[
'value' => 'bar',
'label' => __('plugins.themes.immersion.option.displayStats.bar'),
],
[
'value' => 'line',
'label' => __('plugins.themes.immersion.option.displayStats.line'),
],
],
'default' => 'none',
]);

// Additional data to the templates
HookRegistry::add('TemplateManager::display', array($this, 'addIssueTemplateData'));
HookRegistry::add('TemplateManager::display', array($this, 'addSiteWideData'));
HookRegistry::add('TemplateManager::display', array($this, 'homepageAnnouncements'));
HookRegistry::add('TemplateManager::display', array($this, 'homepageJournalDescription'));
HookRegistry::add('issueform::display', array($this, 'addToIssueForm'));
HookRegistry::add('TemplateManager::display', [$this, 'addIssueTemplateData']);
HookRegistry::add('TemplateManager::display', [$this, 'addSiteWideData']);
HookRegistry::add('TemplateManager::display', [$this, 'homepageAnnouncements']);
HookRegistry::add('TemplateManager::display', [$this, 'homepageJournalDescription']);
HookRegistry::add('issueform::display', [$this, 'addToIssueForm']);

// Additional variable for the issue form
HookRegistry::register('Schema::get::issue', array($this, 'addToSchema'));
HookRegistry::add('issueform::initdata', array($this, 'initDataIssueFormFields'));
HookRegistry::add('issueform::readuservars', array($this, 'readIssueFormFields'));
HookRegistry::add('issueform::execute', array($this, 'executeIssueFormFields'));
HookRegistry::add('Schema::get::issue', [$this, 'addToSchema']);
HookRegistry::add('issueform::initdata', [$this, 'initDataIssueFormFields']);
HookRegistry::add('issueform::readuservars', [$this, 'readIssueFormFields']);
HookRegistry::add('issueform::execute', [$this, 'executeIssueFormFields']);
HookRegistry::add(
'Templates::Editor::Issues::IssueData::AdditionalMetadata',
array($this, 'callbackTemplateIssueForm')
[$this, 'callbackTemplateIssueForm']
);

// Load colorpicker on issue management page
Expand All @@ -132,18 +136,16 @@ public function init()

/**
* Get the display name of this theme
* @return string
*/
public function getDisplayName()
public function getDisplayName(): string
{
return __('plugins.themes.immersion.name');
}

/**
* Get the description of this plugin
* @return string
*/
public function getDescription()
public function getDescription(): string
{
return __('plugins.themes.immersion.description');
}
Expand All @@ -163,27 +165,33 @@ public function addIssueTemplateData($hookname, $args)
$template = $args[1];
$request = $this->getRequest(); /** @var Request $request */

if ($template !== 'frontend/pages/issue.tpl' && $template !== 'frontend/pages/indexJournal.tpl') return false;
if ($template !== 'frontend/pages/issue.tpl' && $template !== 'frontend/pages/indexJournal.tpl') {
return false;
}

$context = $request->getContext(); /** @var Context $context */
$contextId = $context->getId();

/** @var Issue $issue */
if ($template === 'frontend/pages/indexJournal.tpl') {
$issue = Repo::issue()->getCurrent($contextId, true);
$issue = Repo::issue()->getCurrent($contextId);
} else {
$issue = $templateMgr->getTemplateVars('issue');
}

if (!$issue) return false;
if (!$issue) {
return false;
}

$publishedSubmissionsInSection = $templateMgr->getTemplateVars('publishedSubmissions');

// Section color
$immersionSectionColors = $issue->getData('immersionSectionColor');
if (empty($immersionSectionColors)) return false; // Section background colors aren't set
if (empty($immersionSectionColors)) {
return false;
} // Section background colors aren't set

$sections = Repo::section()->getByIssueId($issue->getId()); /** @var \Illuminate\Support\LazyCollection $sections */
$sections = Repo::section()->getByIssueId($issue->getId());
$lastSectionColor = null;

// Section description; check if this option and BrowseBySection plugin is enabled
Expand All @@ -197,7 +205,7 @@ public function addIssueTemplateData($hookname, $args)

$locale = Locale::getLocale();
foreach ($publishedSubmissionsInSection as $sectionId => $publishedArticlesBySection) {
foreach ($sections as $section) { /** @var \APP\section\Section $section */
foreach ($sections as $section) { /** @var Section $section */
if ($section->getId() == $sectionId) {
// Set section and its background color
$publishedSubmissionsInSection[$sectionId]['section'] = $section;
Expand All @@ -223,10 +231,10 @@ public function addIssueTemplateData($hookname, $args)
}
}

$templateMgr->assign(array(
$templateMgr->assign([
'publishedSubmissions' => $publishedSubmissionsInSection,
'lastSectionColor' => $lastSectionColor
));
]);
}

/**
Expand All @@ -244,7 +252,9 @@ public function homepageAnnouncements($hookname, $args)
$templateMgr = $args[0];
$template = $args[1];

if ($template !== 'frontend/pages/indexJournal.tpl') return false;
if ($template !== 'frontend/pages/indexJournal.tpl') {
return false;
}

$request = $this->getRequest();
$journal = $request->getJournal();
Expand All @@ -258,11 +268,11 @@ public function homepageAnnouncements($hookname, $args)
$isAnnouncementDark = true;
}

$templateMgr->assign(array(
$templateMgr->assign([
'announcementsIntroduction' => $announcementsIntro,
'isAnnouncementDark' => $isAnnouncementDark,
'immersionAnnouncementsColor' => $immersionAnnouncementsColor
));
]);
}

/**
Expand All @@ -282,7 +292,6 @@ public function addSiteWideData($hookname, $args)
$journal = $request->getJournal();

if (!defined('SESSION_DISABLE_INIT')) {

// Check locales
if ($journal) {
$locales = $journal->getSupportedLocaleNames();
Expand All @@ -293,20 +302,17 @@ public function addSiteWideData($hookname, $args)
// Load login form
$loginUrl = $request->url(null, 'login', 'signIn');
if (Config::getVar('security', 'force_login_ssl')) {
$loginUrl = PKPString::regexp_replace('/^http:/', 'https:', $loginUrl);
$loginUrl = preg_replace('/^http:/u', 'https:', $loginUrl);
}

$orcidImageUrl = $this->getPluginPath() . '/templates/images/orcid.png';

if ($request->getContext()) {
$templateMgr->assign('immersionHomepageImage', $journal->getLocalizedSetting('homepageImage'));
$templateMgr->assign('immersionHomepageImage', $journal->getLocalizedData('homepageImage'));
}

$templateMgr->assign(array(
$templateMgr->assign([
'languageToggleLocales' => $locales,
'loginUrl' => $loginUrl,
'orcidImageUrl' => $orcidImageUrl
));
'loginUrl' => $loginUrl
]);
}
}

Expand All @@ -324,19 +330,21 @@ public function homepageJournalDescription($hookName, $args)
$templateMgr = $args[0];
$template = $args[1];

if ($template != "frontend/pages/indexJournal.tpl") return false;
if ($template != "frontend/pages/indexJournal.tpl") {
return false;
}

$journalDescriptionColour = $this->getOption('journalDescriptionColour');
$isJournalDescriptionDark = false;
if ($journalDescriptionColour && $this->isColourDark($journalDescriptionColour)) {
$isJournalDescriptionDark = true;
}

$templateMgr->assign(array(
$templateMgr->assign([
'showJournalDescription' => $this->getOption('journalDescription'),
'journalDescriptionColour' => $journalDescriptionColour,
'isJournalDescriptionDark' => $isJournalDescriptionDark
));
]);
}

/**
Expand Down Expand Up @@ -380,7 +388,7 @@ public function initDataIssueFormFields($hookName, $args)
$issueForm->setData('immersionSectionColor', $issueForm->issue->getData('immersionSectionColor'));
}

/**$$
/**
* Read user input from additional fields in the issue editing form
*
* @param $hookName string `issueform::readUserVars`
Expand All @@ -391,7 +399,7 @@ public function initDataIssueFormFields($hookName, $args)
*/
public function readIssueFormFields($hookName, $args)
{
$issueForm =& $args[0];
$issueForm = & $args[0];
$request = $this->getRequest();

$issueForm->setData('immersionSectionColor', $request->getUserVar('immersionSectionColor'));
Expand Down Expand Up @@ -438,7 +446,8 @@ public function addToIssueForm($hookName, $args)
if ($issueForm->issue) {
$request = $this->getRequest();

$sections = Repo::section()->getByIssueId($issueForm->issue->getId())->all(); /** @var \APP\section\Section[] $sections */
/** @var Section[] $sections */
$sections = Repo::section()->getByIssueId($issueForm->issue->getId())->all();

$templateMgr = TemplateManager::getManager($request);

Expand Down
Loading