17 import(
'lib.pkp.classes.form.Form');
18 import(
'classes.submission.SubmissionMetadataFormImplementation');
19 import(
'classes.publication.Publication');
40 parent::__construct($plugin->getTemplateResource(
'index.tpl'));
42 $this->_request = $request;
43 $this->_context = $request->getContext();
47 $locale = $request->getUserVar(
'locale');
52 if ($submissionId = $request->getUserVar(
'submissionId')) {
54 $this->_submission = $submissionDao->getById($submissionId);
55 if ($this->_submission->getContextId() != $this->_context->getId())
throw new Exeption(
'Submission not in context!');
57 $submissionDao->updateObject($this->_submission);
59 $this->_metadataFormImplem->addChecks($this->_submission);
67 $supportedSubmissionLocales = $this->_context->getSupportedSubmissionLocales();
68 if (!is_array($supportedSubmissionLocales) || count($supportedSubmissionLocales) < 1)
69 $supportedSubmissionLocales = array($this->_context->getPrimaryLocale());
70 $this->
addCheck(
new FormValidatorInSet($this,
'locale',
'required',
'submission.submit.form.localeRequired', $supportedSubmissionLocales));
72 $this->
addCheck(
new FormValidatorURL($this,
'licenseUrl',
'optional',
'form.url.invalid'));
88 return $this->_metadataFormImplem->getLocaleFieldNames();
94 function display($request =
null, $template =
null) {
98 'supportedSubmissionLocaleNames',
99 $this->_context->getSupportedSubmissionLocaleNames()
104 $templateMgr->assign(array(
105 $field .
'Enabled' => in_array($this->_context->getData($field), array(METADATA_ENABLE, METADATA_REQUEST, METADATA_REQUIRE)),
106 $field .
'Required' => $this->_context->getData($field) === METADATA_REQUIRE,
113 import(
'lib.pkp.classes.linkAction.LinkAction');
114 import(
'lib.pkp.classes.linkAction.request.AjaxModal');
115 $router = $this->_request->getRouter();
116 $templateMgr->assign(
'openCoverImageLinkAction',
new LinkAction(
119 $router->url($this->_request,
null,
null,
'importexport', array(
'plugin',
'QuickSubmitPlugin',
'uploadCoverImage'), array(
120 'coverImage' => $this->_submission->getCoverImage($locale),
121 'submissionId' => $this->_submission->getId(),
122 'publicationId' => $this->_submission->getCurrentPublication()->getId(),
126 'stageId' => WORKFLOW_STAGE_ID_PRODUCTION,
137 $sectionOptions = array(
'0' =>
'') + $sectionDao->getTitlesByContextId($this->_context->getId());
138 $templateMgr->assign(
'sectionOptions', $sectionOptions);
142 $issuesIterator = $issueDao->getIssues($this->_context->getId());
143 $issues = $issuesIterator->toArray();
144 $templateMgr->assign(
'hasIssues', count($issues) > 0);
147 $templateMgr->assign(array(
149 'submission' => $this->_submission,
151 'publicationId' => $this->_submission->getCurrentPublication()->getId(),
155 $sectionId = $this->
getData(
'sectionId') ?: $this->_submission->getSectionId();
156 $section = $sectionDao->getById($sectionId, $this->_context->getId());
157 $templateMgr->assign(array(
158 'wordCount' => $section->getAbstractWordCount(),
159 'abstractsRequired' => !$section->getAbstractsNotRequired(),
162 parent::display($request, $template);
168 function validate($callHooks =
true) {
169 if (!parent::validate($callHooks))
return false;
173 if ($this->
getData(
'articleStatus') == 1) {
174 if ($this->
getData(
'issueId') <= 0) {
175 $this->
addError(
'issueId', __(
'plugins.importexport.quickSubmit.selectIssue'));
176 $this->errorFields[
'issueId'] = 1;
190 $this->_data = array();
192 if (!$this->_submission) {
197 $sectionOptions = $sectionDao->getTitlesByContextId($this->_context->getId());
201 $this->_submission = $submissionDao->newDataObject();
202 $this->_submission->setContextId($this->_context->getId());
203 $this->_submission->setStatus(STATUS_QUEUED);
204 $this->_submission->setSubmissionProgress(1);
205 $this->_submission->stampStatusModified();
206 $this->_submission->setStageId(WORKFLOW_STAGE_ID_SUBMISSION);
207 $this->_submission->setData(
'sectionId', $sectionId = current(array_keys($sectionOptions)));
211 $this->_submission =
Services::get(
'submission')->add($this->_submission, $this->_request);
212 $this->
setData(
'submissionId', $this->_submission->getId());
215 $publication->setData(
'submissionId', $this->_submission->getId());
218 $publication->setData(
'sectionId', $sectionId);
219 $publication->setData(
'status', STATUS_QUEUED);
220 $publication->setData(
'version', 1);
221 $publication =
Services::get(
'publication')->add($publication, $this->_request);
222 $this->_submission =
Services::get(
'submission')->edit($this->_submission, [
'currentPublicationId' => $publication->getId()], $this->_request);
224 $this->_metadataFormImplem->initData($this->_submission);
227 $user = $this->_request->getUser();
233 $managerUserGroupAssignments = $userGroupAssignmentDao->getByUserId($user->getId(), $this->_context->getId(), ROLE_ID_MANAGER);
234 if($managerUserGroupAssignments) {
235 while($managerUserGroupAssignment = $managerUserGroupAssignments->next()) {
236 $managerUserGroup = $userGroupDao->getById($managerUserGroupAssignment->getUserGroupId());
237 $userGroupId = $managerUserGroup->getId();
244 $stageAssignmentDao->build($this->_submission->getId(), $userGroupId, $user->getId());
252 $this->_metadataFormImplem->readInputData();
275 $submission = $submissionDao->getById($this->
getData(
'submissionId'));
276 if ($this->_submission->getContextId() != $this->_context->getId())
throw new Exeption(
'Submission not in context!');
277 if ($submission) $submissionDao->deleteById($submission->getId());
283 function execute(...$functionParams) {
285 $this->_metadataFormImplem->execute($this->_submission, $this->_request);
290 $galleyFilesRes = $galleyDao->getByPublicationId($this->_submission->getCurrentPublication()->getId());
292 if (!is_null($galleyFilesRes)) {
293 $galleyFiles = $galleyFilesRes->toAssociativeArray();
296 import(
'lib.pkp.classes.file.SubmissionFileManager');
297 $submissionFileManager =
new SubmissionFileManager($this->_context->getId(), $this->_submission->getId());
299 foreach($galleyFiles as $galleyFile) {
300 $newFile = $galleyFile->getFile();
302 $revisionNumber = $submissionFileDao->getLatestRevisionNumber($newFile->getFileId());
303 $submissionFileManager->copyFileToFileStage($newFile->getFileId(), $revisionNumber, SUBMISSION_FILE_SUBMISSION,
null,
true);
308 $this->_submission->setLocale($this->
getData(
'locale'));
309 $this->_submission->setStageId(WORKFLOW_STAGE_ID_PRODUCTION);
311 $this->_submission->setSubmissionProgress(0);
313 parent::execute($this->_submission, ...$functionParams);
316 $submissionDao->updateObject($this->_submission);
317 $this->_submission = $submissionDao->getById($this->_submission->getId());
319 $publication = $this->_submission->getCurrentPublication();
320 if ($publication->getData(
'sectionId') !== (
int) $this->getData(
'sectionId')) {
321 $publication =
Services::get(
'publication')->edit($publication, [
'sectionId' => (
int) $this->
getData(
'sectionId')], $this->_request);
324 if ($this->
getData(
'articleStatus') == 1) {
325 $publication->setData(
'copyrightYear', $this->
getData(
'copyrightYear'));
326 $publication->setData(
'copyrightHolder', $this->
getData(
'copyrightHolder'),
null);
327 $publication->setData(
'licenseUrl', $this->
getData(
'licenseUrl'));
328 $publication->setData(
'pages', $this->
getData(
'pages'));
329 $publication->setData(
'datePublished', $this->
getData(
'datePublished'));
330 $publication->setData(
'accessStatus', ARTICLE_ACCESS_ISSUE_DEFAULT);
331 $publication->setData(
'issueId', (
int) $this->
getData(
'issueId'));
334 $otherSubmissionsInSection =
Services::get(
'submission')->getMany([
335 'contextId' => $this->_request->getContext()->getId(),
336 'issueIds' => [$publication->getData(
'issueId')],
337 'sectionIds' => [$publication->getData(
'sectionId')],
339 if (
count($otherSubmissionsInSection)) {
341 foreach ($otherSubmissionsInSection as $submission) {
342 if ($submission->getCurrentPublication()->getData(
'seq')) {
343 $maxSequence = max($maxSequence, $submission->getCurrentPublication()->getData(
'seq'));
346 $publication->setData(
'seq', $maxSequence + 1);
349 $publication =
Services::get(
'publication')->publish($publication);
354 if (
DAORegistry::getDAO(
'SectionDAO')->customSectionOrderingExists($publication->getData(
'issueId'))) {
355 $sectionOrder =
DAORegistry::getDAO(
'SectionDAO')->getCustomSectionOrder($publication->getData(
'issueId'), $publication->getData(
'sectionId'));
356 if ($sectionOrder ===
null) {
357 DAORegistry::getDAO(
'SectionDAO')->insertCustomSectionOrder($publication->getData(
'issueId'), $publication->getData(
'sectionId'), REALLY_BIG_NUMBER);
358 DAORegistry::getDAO(
'SectionDAO')->resequenceCustomSectionOrders($publication->getData(
'issueId'));
365 $articleSearchIndex->submissionMetadataChanged($this->_submission);
366 $articleSearchIndex->submissionFilesChanged($this->_submission);
367 $articleSearchIndex->submissionChangesFinished();
377 $issuesPublicationDates = array();
378 $issueOptions = array();
379 $journalId = $journal->getId();
383 $issueOptions[-1] =
'------ ' . __(
'editor.issues.futureIssues') .
' ------';
384 $issueIterator = $issueDao->getUnpublishedIssues($journalId);
385 while ($issue = $issueIterator->next()) {
386 $issueOptions[$issue->getId()] = $issue->getIssueIdentification();
389 $issueOptions[-2] =
'------ ' . __(
'editor.issues.currentIssue') .
' ------';
390 $issuesIterator = $issueDao->getPublishedIssues($journalId);
391 $issues = $issuesIterator->toArray();
392 if (isset($issues[0]) && $issues[0]->getCurrent()) {
393 $issueOptions[$issues[0]->getId()] = $issues[0]->getIssueIdentification();
394 $issuesPublicationDates[$issues[0]->getId()] = strftime(
Config::getVar(
'general',
'date_format_short'), strtotime($issues[0]->getDatePublished()));
395 array_shift($issues);
397 $issueOptions[-3] =
'------ ' . __(
'editor.issues.backIssues') .
' ------';
398 foreach ($issues as $issue) {
399 $issueOptions[$issue->getId()] = $issue->getIssueIdentification();
400 $issuesPublicationDates[$issue->getId()] = strftime(
Config::getVar(
'general',
'date_format_short'), strtotime($issues[0]->getDatePublished()));
404 $templateMgr->assign(
'issuesPublicationDates',
json_encode($issuesPublicationDates));
406 return $issueOptions;