199 lines
7.4 KiB
PHP
199 lines
7.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file controllers/grid/settings/sections/form/SectionForm.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2003-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class SectionForm
|
|
*
|
|
* @ingroup controllers_grid_settings_section_form
|
|
*
|
|
* @brief Form for adding/editing a section
|
|
*/
|
|
|
|
namespace APP\controllers\grid\settings\sections\form;
|
|
|
|
use APP\core\Application;
|
|
use APP\core\Request;
|
|
use APP\facades\Repo;
|
|
use APP\template\TemplateManager;
|
|
use PKP\controllers\grid\settings\sections\form\PKPSectionForm;
|
|
use PKP\db\DAORegistry;
|
|
use PKP\reviewForm\ReviewFormDAO;
|
|
|
|
class SectionForm extends PKPSectionForm
|
|
{
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param Request $request
|
|
* @param int $sectionId optional
|
|
*/
|
|
public function __construct($request, $sectionId = null)
|
|
{
|
|
parent::__construct(
|
|
$request,
|
|
'controllers/grid/settings/sections/form/sectionForm.tpl',
|
|
$sectionId
|
|
);
|
|
|
|
// Validation checks for this form
|
|
$this->addCheck(new \PKP\form\validation\FormValidatorLocale($this, 'title', 'required', 'manager.setup.form.section.nameRequired'));
|
|
$this->addCheck(new \PKP\form\validation\FormValidatorLocale($this, 'abbrev', 'required', 'manager.sections.form.abbrevRequired'));
|
|
$journal = $request->getJournal();
|
|
$this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'reviewFormId', 'optional', 'manager.sections.form.reviewFormId', [DAORegistry::getDAO('ReviewFormDAO'), 'reviewFormExists'], [Application::ASSOC_TYPE_JOURNAL, $journal->getId()]));
|
|
}
|
|
|
|
/**
|
|
* Initialize form data from current settings.
|
|
*/
|
|
public function initData()
|
|
{
|
|
$request = Application::get()->getRequest();
|
|
$journal = $request->getJournal();
|
|
|
|
$sectionId = $this->getSectionId();
|
|
if ($sectionId) {
|
|
$this->section = Repo::section()->get($sectionId, $journal->getId());
|
|
}
|
|
|
|
if (isset($this->section)) {
|
|
$this->setData([
|
|
'title' => $this->section->getTitle(null), // Localized
|
|
'abbrev' => $this->section->getAbbrev(null), // Localized
|
|
'reviewFormId' => $this->section->getReviewFormId(),
|
|
'isInactive' => $this->section->getIsInactive(),
|
|
'metaIndexed' => !$this->section->getMetaIndexed(), // #2066: Inverted
|
|
'metaReviewed' => !$this->section->getMetaReviewed(), // #2066: Inverted
|
|
'abstractsNotRequired' => $this->section->getAbstractsNotRequired(),
|
|
'identifyType' => $this->section->getIdentifyType(null), // Localized
|
|
'editorRestricted' => $this->section->getEditorRestricted(),
|
|
'hideTitle' => $this->section->getHideTitle(),
|
|
'hideAuthor' => $this->section->getHideAuthor(),
|
|
'policy' => $this->section->getPolicy(null), // Localized
|
|
'wordCount' => $this->section->getAbstractWordCount(),
|
|
]);
|
|
}
|
|
|
|
parent::initData();
|
|
}
|
|
|
|
/**
|
|
* @see Form::validate()
|
|
*/
|
|
public function validate($callHooks = true)
|
|
{
|
|
// Validate if it can be inactive
|
|
if ($this->getData('isInactive')) {
|
|
$request = Application::get()->getRequest();
|
|
$context = $request->getContext();
|
|
$sectionId = $this->getSectionId();
|
|
|
|
$activeSections = Repo::section()->getCollector()->filterByContextIds([$context->getId()])->excludeInactive()->getMany();
|
|
$otherActiveSections = $activeSections->filter(function ($activeSection) use ($sectionId) {
|
|
return $activeSection->getId() != $sectionId;
|
|
});
|
|
if ($otherActiveSections->count() < 1) {
|
|
$this->addError('isInactive', __('manager.sections.confirmDeactivateSection.error'));
|
|
}
|
|
}
|
|
|
|
return parent::validate($callHooks);
|
|
}
|
|
|
|
/**
|
|
* @copydoc Form::fetch()
|
|
*
|
|
* @param null|mixed $template
|
|
*/
|
|
public function fetch($request, $template = null, $display = false)
|
|
{
|
|
$templateMgr = TemplateManager::getManager($request);
|
|
$templateMgr->assign('sectionId', $this->getSectionId());
|
|
|
|
$journal = $request->getContext();
|
|
|
|
$reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); /** @var ReviewFormDAO $reviewFormDao */
|
|
$reviewForms = $reviewFormDao->getActiveByAssocId(Application::ASSOC_TYPE_JOURNAL, $journal->getId());
|
|
$reviewFormOptions = [];
|
|
while ($reviewForm = $reviewForms->next()) {
|
|
$reviewFormOptions[$reviewForm->getId()] = $reviewForm->getLocalizedTitle();
|
|
}
|
|
$templateMgr->assign('reviewFormOptions', $reviewFormOptions);
|
|
|
|
return parent::fetch($request, $template, $display);
|
|
}
|
|
|
|
/**
|
|
* @copydoc Form::readInputData()
|
|
*/
|
|
public function readInputData()
|
|
{
|
|
parent::readInputData();
|
|
$this->readUserVars(['abbrev', 'policy', 'reviewFormId', 'identifyType', 'isInactive', 'metaIndexed', 'metaReviewed', 'abstractsNotRequired', 'editorRestricted', 'hideTitle', 'hideAuthor', 'wordCount']);
|
|
}
|
|
|
|
/**
|
|
* Get the names of fields for which localized data is allowed.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getLocaleFieldNames()
|
|
{
|
|
return ['title', 'policy', 'abbrev', 'identifyType'];
|
|
}
|
|
|
|
/**
|
|
* Save section.
|
|
*/
|
|
public function execute(...$functionArgs)
|
|
{
|
|
$request = Application::get()->getRequest();
|
|
$journal = $request->getJournal();
|
|
|
|
// Get or create the section object
|
|
if ($this->getSectionId()) {
|
|
$section = Repo::section()->get($this->getSectionId(), $journal->getId());
|
|
} else {
|
|
$section = Repo::section()->newDataObject();
|
|
$section->setContextId($journal->getId());
|
|
}
|
|
|
|
// Populate/update the section object from the form
|
|
$section->setTitle($this->getData('title'), null); // Localized
|
|
$section->setAbbrev($this->getData('abbrev'), null); // Localized
|
|
|
|
$reviewFormId = $this->getData('reviewFormId');
|
|
if (!$reviewFormId) {
|
|
$reviewFormId = null;
|
|
}
|
|
|
|
$section->setReviewFormId($reviewFormId);
|
|
$section->setIsInactive($this->getData('isInactive') ? 1 : 0);
|
|
$section->setMetaIndexed($this->getData('metaIndexed') ? 0 : 1); // #2066: Inverted
|
|
$section->setMetaReviewed($this->getData('metaReviewed') ? 0 : 1); // #2066: Inverted
|
|
$section->setAbstractsNotRequired($this->getData('abstractsNotRequired') ? 1 : 0);
|
|
$section->setIdentifyType($this->getData('identifyType'), null); // Localized
|
|
$section->setEditorRestricted($this->getData('editorRestricted') ? 1 : 0);
|
|
$section->setHideTitle($this->getData('hideTitle') ? 1 : 0);
|
|
$section->setHideAuthor($this->getData('hideAuthor') ? 1 : 0);
|
|
$section->setPolicy($this->getData('policy'), null); // Localized
|
|
$section->setAbstractWordCount((int) $this->getData('wordCount'));
|
|
|
|
// Insert or update the section in the DB
|
|
if ($this->getSectionId()) {
|
|
Repo::section()->edit($section, []);
|
|
} else {
|
|
$section->setSequence(REALLY_BIG_NUMBER);
|
|
$sectionId = Repo::section()->add($section);
|
|
$this->setSectionId($sectionId);
|
|
Repo::section()->resequence($journal->getId());
|
|
}
|
|
|
|
return parent::execute(...$functionArgs);
|
|
}
|
|
}
|