[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
baru
/
controllers
/
grid
/
issues
/
form
/
[
Home
]
File: IssueGalleyForm.php
<?php /** * @file controllers/grid/issues/form/IssueGalleyForm.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 IssueGalleyForm * * @ingroup issue_galley * * @see IssueGalley * * @brief Issue galley editing form. */ namespace APP\controllers\grid\issues\form; use APP\core\Application; use APP\core\Request; use APP\file\IssueFileManager; use APP\issue\Issue; use APP\issue\IssueGalley; use APP\issue\IssueGalleyDAO; use APP\journal\JournalDAO; use APP\template\TemplateManager; use PKP\db\DAORegistry; use PKP\file\TemporaryFileDAO; use PKP\form\Form; class IssueGalleyForm extends Form { /** @var Issue the issue the galley belongs to */ public $_issue = null; /** @var IssueGalley current galley */ public $_issueGalley = null; /** * Constructor. * * @param Request $request * @param Issue $issue * @param IssueGalley $issueGalley (optional) */ public function __construct($request, $issue, $issueGalley = null) { parent::__construct('controllers/grid/issueGalleys/form/issueGalleyForm.tpl'); $this->_issue = $issue; $this->_issueGalley = $issueGalley; $this->addCheck(new \PKP\form\validation\FormValidator($this, 'label', 'required', 'editor.issues.galleyLabelRequired')); $this->addCheck(new \PKP\form\validation\FormValidatorRegExp($this, 'urlPath', 'optional', 'validator.alpha_dash_period', '/^[a-zA-Z0-9]+([\\.\\-_][a-zA-Z0-9]+)*$/')); $this->addCheck(new \PKP\form\validation\FormValidatorPost($this)); $this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this)); // Ensure a locale is provided and valid $journal = $request->getJournal(); $this->addCheck(new \PKP\form\validation\FormValidatorCustom( $this, 'galleyLocale', 'required', 'editor.issues.galleyLocaleRequired', function ($galleyLocale) use ($journal) { return in_array($galleyLocale, $journal->getSupportedFormLocales()); } )); if (!$issueGalley) { // A file must be uploaded with a newly-created issue galley. $this->addCheck(new \PKP\form\validation\FormValidator($this, 'temporaryFileId', 'required', 'form.fileRequired')); } } /** * @copydoc Form::fetch() * * @param Request $request * @param null|mixed $template */ public function fetch($request, $template = null, $display = false) { $journal = $request->getJournal(); $templateMgr = TemplateManager::getManager($request); $templateMgr->assign([ 'issueId' => $this->_issue->getId(), 'supportedLocales' => $journal->getSupportedLocaleNames(), 'enablePublisherId' => in_array('issueGalley', (array) $request->getContext()->getData('enablePublisherId')), ]); if ($this->_issueGalley) { $templateMgr->assign([ 'issueGalleyId' => $this->_issueGalley->getId(), 'issueGalley' => $this->_issueGalley, ]); } return parent::fetch($request, $template, $display); } /** * @copydoc Form::validate */ public function validate($callHooks = true) { // Check if public galley ID is already being used $request = Application::get()->getRequest(); $journal = $request->getJournal(); $journalDao = DAORegistry::getDAO('JournalDAO'); /** @var JournalDAO $journalDao */ $publicGalleyId = $this->getData('publicGalleyId'); if ($publicGalleyId) { if (ctype_digit((string) $publicGalleyId)) { $this->addError('publicGalleyId', __('editor.publicIdentificationNumericNotAllowed', ['publicIdentifier' => $publicGalleyId])); $this->addErrorField('publicGalleyId'); } elseif ($journalDao->anyPubIdExists($journal->getId(), 'publisher-id', $publicGalleyId, Application::ASSOC_TYPE_ISSUE_GALLEY, $this->_issueGalley ? $this->_issueGalley->getId() : null, true)) { $this->addError('publicGalleyId', __('editor.publicIdentificationExistsForTheSameType', ['publicIdentifier' => $publicGalleyId])); $this->addErrorField('publicGalleyId'); } } if (strlen((string) $this->getData('urlPath'))) { if (ctype_digit((string) $this->getData('urlPath'))) { $this->addError('urlPath', __('publication.urlPath.numberInvalid')); $this->addErrorField('urlPath'); } else { $issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO'); /** @var IssueGalleyDAO $issueGalleyDao */ $issueGalley = $issueGalleyDao->getByBestId($this->getData('urlPath'), $this->_issue->getId()); if ($issueGalley && $this->_issueGalley?->getId() !== $issueGalley->getId()) { $this->addError('urlPath', __('publication.urlPath.duplicate')); $this->addErrorField('urlPath'); } } } return parent::validate($callHooks); } /** * Initialize form data from current galley (if applicable). */ public function initData() { if ($this->_issueGalley) { $this->_data = [ 'label' => $this->_issueGalley->getLabel(), 'publicGalleyId' => $this->_issueGalley->getStoredPubId('publisher-id'), 'galleyLocale' => $this->_issueGalley->getLocale(), 'urlPath' => $this->_issueGalley->getData('urlPath'), ]; } else { $this->_data = []; } } /** * Assign form data to user-submitted data. */ public function readInputData() { $this->readUserVars( [ 'label', 'publicGalleyId', 'galleyLocale', 'temporaryFileId', 'urlPath', ] ); } /** * @copydoc Form::execute() */ public function execute(...$functionArgs) { $issueFileManager = new IssueFileManager($this->_issue->getId()); $request = Application::get()->getRequest(); $user = $request->getUser(); $issueGalley = $this->_issueGalley; $issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO'); /** @var IssueGalleyDAO $issueGalleyDao */ // If a temporary file ID was specified (i.e. an upload occurred), get the file for later. $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /** @var TemporaryFileDAO $temporaryFileDao */ $temporaryFile = $temporaryFileDao->getTemporaryFile($this->getData('temporaryFileId'), $user->getId()); parent::execute(...$functionArgs); if ($issueGalley) { // Update an existing galley $oldFileId = null; if ($temporaryFile) { $oldFileId = $issueGalley->getFileId(); // Upload new file $issueFile = $issueFileManager->fromTemporaryFile($temporaryFile); $issueGalley->setFileId($issueFile->getId()); } $issueGalley->setLabel($this->getData('label')); $issueGalley->setStoredPubId('publisher-id', $this->getData('publicGalleyId')); $issueGalley->setLocale($this->getData('galleyLocale')); $issueGalley->setData('urlPath', strlen($urlPath = (string) $this->getData('urlPath')) ? $urlPath : null); // Update galley in the db $issueGalleyDao->updateObject($issueGalley); if ($oldFileId) { // If the galley previously had a file, delete it $issueFileManager->deleteById($oldFileId); } } else { // Create a new galley $issueGalleyFile = $issueFileManager->fromTemporaryFile($temporaryFile); $issueGalley = $issueGalleyDao->newDataObject(); $issueGalley->setIssueId($this->_issue->getId()); $issueGalley->setFileId($issueGalleyFile->getId()); $issueGalley->setData('urlPath', $this->getData('urlPath')); $issueGalley->setLabel($this->getData('label')); $issueGalley->setLocale($this->getData('galleyLocale')); $issueGalley->setStoredPubId('publisher-id', $this->getData('publicGalleyId')); // Insert new galley into the db $issueGalleyDao->insertObject($issueGalley); $this->_issueGalley = $issueGalley; } return $this->_issueGalley->getId(); } }