Here’s the plugin.inc.php file for my theme. Adding the “Publ” label as well as the textbox under it through addToForm()
seems to work fine, but I cannot seem to call it on my index site with the testPublisher
property from addToSchema()
. I’ve only been looking at how ojs works for a few days so far so maybe I’m doing something very wrong here.
Also, $journal->getData('publisherInstitution')
works well and solves what I needed, though it would still be nice to know how I could add (working) fields in the journal masthead that I can get information from.
Edit: I’m currently on OJS 3.3.0.3 and may upgrade to 3.3.0.4 once I’m done editing this plugin.
/**
* @file plugins/themes/default/DefaultManuscriptChildThemePlugin.inc.php
*
* Copyright (c) 2014-2020 Simon Fraser University
* Copyright (c) 2003-2020 John Willinsky
* Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
*
* @class DefaultManuscriptChildThemePlugin
* @ingroup plugins_themes_default_manuscript
*
* @brief Default theme
*/
import('lib.pkp.classes.plugins.ThemePlugin');
class DefaultManuscriptChildThemePlugin extends ThemePlugin {
/**
* Initialize the theme's styles, scripts and hooks. This is only run for
* the currently active theme.
*
* @return null
*/
public function init() {
HookRegistry::register ('TemplateManager::display', array($this, 'loadTemplateData'));
// Initialize the parent theme
$this->setParent('defaultthemeplugin');
// Add custom styles
$this->modifyStyle('stylesheet', array('addLess' => array('styles/index.less')));
// Remove the typography options of the parent theme.
$this->removeOption('typography');
$this->removeOption('useHomepageImageAsHeader');
// Add the option for an accent color
$this->addOption('accentColour', 'FieldColor', [
'label' => __('plugins.themes.defaultManuscript.option.accentColour.label'),
'description' => __('plugins.themes.default.option.colour.description'),
'default' => '#F7BC4A',
]);
// Dequeue any fonts loaded by parent theme
if (method_exists($this, 'removeStyle')) {
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
$this->removeStyle('font');
}
$this->addOption('journalExtra', 'FieldText', [
'type' => 'text',
'label' => __('plugins.themes.defaultManuscript.options.journalExtra.label'),
]);
$journalExtra= $this->getOption('journalExtra');
// Start with a fresh array of additionalLessVariables so that we can
// ignore those added by the parent theme. This gets rid of @font
// variable overrides from the typography option
$additionalLessVariables = array();
// Update colour based on theme option from parent theme
if ($this->getOption('baseColour') !== '#1E6292') {
$additionalLessVariables[] = '@bg-base:' . $this->getOption('baseColour') . ';';
if (!$this->isColourDark($this->getOption('baseColour'))) {
$additionalLessVariables[] = '@text-bg-base:rgba(0,0,0,0.84);';
}
}
// Update accent colour based on theme option
if ($this->getOption('accentColour') !== '#F7BC4A') {
$additionalLessVariables[] = '@accent:' . $this->getOption('accentColour') . ';';
}
if ($this->getOption('baseColour') && $this->getOption('accentColour')) {
$this->modifyStyle('stylesheet', array('addLessVariables' => join('', $additionalLessVariables)));
}
}
public function register($category, $path, $mainContextId = null) {
$success = parent::register($category, $path);
if ($success && $this->getEnabled()) {
// Use a hook to extend the context entity's schema
// HookRegistry::register('Schema::get::context', array($this, 'addToSchema'));
// Use a hook to add a field to the masthead form in the journal/press settings.
HookRegistry::register('Form::config::before', array($this, 'addToForm'));
}
return $success;
}
public function addToSchema($hookName, $args) {
$schema = $args[0];
$schema->properties->testPublisher = (object) [
'type' => 'string',
'apiSummary' => true,
'multilingual' => true,
'validation' => ['nullable']
];
return false;
}
/**
* Extend the masthead form to add an institutionalHome input field
* in the journal/press settings
*/
public function addtoForm($hookName, $form) {
// Only modify the masthead form
if (!defined('FORM_MASTHEAD') || $form->id !== FORM_MASTHEAD) {
return;
}
// Don't do anything at the site-wide level
$context = Application::get()->getRequest()->getContext();
if (!$context) {
return;
}
// Add a field to the form
$form->addField(new \PKP\components\forms\FieldText('testPublisher', [
'label' => 'Publ',
'groupId' => 'publishing',
'value' => $context->getData('testPublisher'),
]));
return false;
}
public function loadTemplateData($hookName, $args) {
// Retrieve the TemplateManager
$templateMgr = $args[0];
// Attach a custom piece of data to the TemplateManager
if($this->getOption('journalExtra')) {
$templateMgr->assign('journalExtra', $this->getOption('journalExtra'));
}
return false;
}
/**
* Get the display name of this plugin
* @return string
*/
function getDisplayName() {
return __('plugins.themes.defaultManuscript.name');
}
/**
* Get the description of this plugin
* @return string
*/
function getDescription() {
return __('plugins.themes.defaultManuscript.description');
}
}