27 assert(is_a($parentForm,
'Form'));
28 $this->_parentForm = $parentForm;
45 import(
'lib.pkp.classes.form.validation.FormValidatorLocale');
46 import(
'lib.pkp.classes.form.validation.FormValidatorCustom');
49 $this->_parentForm->addCheck(
new FormValidatorLocale($this->_parentForm,
'title',
'required',
'submission.submit.form.titleRequired', $submission->getCurrentPublication()->getData(
'locale')));
51 $this->_parentForm->addCheck(
new FormValidatorLocale($this->_parentForm,
'abstract',
'required',
'submission.submit.form.abstractRequired', $submission->getCurrentPublication()->getData(
'locale')));
56 $this->_parentForm,
'authors',
'required',
'submission.submit.form.authorRequired',
57 function() use ($submission) {
58 return !empty($submission->getCurrentPublication()->getData(
'authors'));
62 $contextDao = Application::getContextDao();
63 $context = $contextDao->getById($submission->getContextId());
65 foreach ($metadataFields as $field) {
66 $requiredLocaleKey =
'submission.submit.form.'.$field.
'Required';
67 if ($context->getData($field) === METADATA_REQUIRE) {
70 $this->_parentForm->addCheck(new
FormValidatorLocale($this->_parentForm, $field,
'required', $requiredLocaleKey, $submission->getCurrentPublication()->getData(
'locale')));
73 $this->_parentForm->addCheck(new
FormValidatorCustom($this->_parentForm, $field,
'required', $requiredLocaleKey, create_function(
'$field,$form,$name',
'$data = (array) $form->getData(\'keywords\'); return array_key_exists($name, $data);'), array($this->_parentForm, $submission->getCurrentPublication()->getData(
'locale').
'-'.$field)));
77 $this->_parentForm->addCheck(
new FormValidatorCustom($this->_parentForm,
'citationsRaw',
'required', $requiredLocaleKey,
function($key) use ($form) {
78 return !empty($form->getData(
'citationsRaw'));
82 $this->_parentForm->addCheck(
new FormValidator($this->_parentForm, $field,
'required', $requiredLocaleKey));
93 if (isset($submission)) {
94 $publication = $submission->getCurrentPublication();
96 'title' => $publication->getData(
'title'),
97 'prefix' => $publication->getData(
'prefix'),
98 'subtitle' => $publication->getData(
'subtitle'),
99 'abstract' => $publication->getData(
'abstract'),
100 'coverage' => $publication->getData(
'coverage'),
101 'type' => $publication->getData(
'type'),
102 'source' =>$publication->getData(
'source'),
103 'rights' => $publication->getData(
'rights'),
104 'citationsRaw' => $publication->getData(
'citationsRaw'),
105 'locale' => $publication->getData(
'locale'),
108 foreach ($formData as $key => $data) {
109 $this->_parentForm->setData($key, $data);
113 $locales = array_keys($this->_parentForm->supportedLocales);
122 $this->_parentForm->setData(
'subjects', $submissionSubjectDao->getSubjects($publication->getId(), $locales));
123 $this->_parentForm->setData(
'keywords', $submissionKeywordDao->getKeywords($publication->getId(), $locales));
124 $this->_parentForm->setData(
'disciplines', $submissionDisciplineDao->getDisciplines($publication->getId(), $locales));
125 $this->_parentForm->setData(
'agencies', $submissionAgencyDao->getAgencies($publication->getId(), $locales));
126 $this->_parentForm->setData(
'languages', $submissionLanguageDao->getLanguages($publication->getId(), $locales));
136 $userVars = array(
'title',
'prefix',
'subtitle',
'abstract',
'coverage',
'type',
'source',
'rights',
'keywords',
'citationsRaw',
'locale');
137 $this->_parentForm->readUserVars($userVars);
145 return array(
'title',
'prefix',
'subtitle',
'abstract',
'coverage',
'type',
'source',
'rights');
153 return array(
'subjects',
'keywords',
'disciplines',
'agencies',
'languages');
162 function execute($submission, $request) {
163 $publication = $submission->getCurrentPublication();
165 $context = $request->getContext();
169 'title' => $this->_parentForm->getData(
'title'),
170 'prefix' => $this->_parentForm->getData(
'prefix'),
171 'subtitle' => $this->_parentForm->getData(
'subtitle'),
172 'abstract' => $this->_parentForm->getData(
'abstract'),
173 'coverage' => $this->_parentForm->getData(
'coverage'),
174 'type' => $this->_parentForm->getData(
'type'),
175 'rights' => $this->_parentForm->getData(
'rights'),
176 'source' => $this->_parentForm->getData(
'source'),
177 'citationsRaw' => $this->_parentForm->getData(
'citationsRaw'),
181 $newLocale = $this->_parentForm->getData(
'locale');
183 $oldLocale = $publication->getData(
'locale');
184 if (in_array($newLocale, $context->getData(
'supportedSubmissionLocales'))) {
185 $params[
'locale'] = $newLocale;
187 if ($newLocale !== $oldLocale) {
188 $authorDao->changePublicationLocale($publication->getId(), $oldLocale, $newLocale);
193 $publication =
Services::get(
'publication')->edit($publication, $params, $request);
196 $locales = array_keys($this->_parentForm->supportedLocales);
207 $disciplines = array();
208 $languages = array();
211 $tagitKeywords = $this->_parentForm->getData(
'keywords');
213 if (is_array($tagitKeywords)) {
214 foreach ($locales as $locale) {
215 $keywords[$locale] = array_key_exists($locale .
'-keywords', $tagitKeywords) ? $tagitKeywords[$locale .
'-keywords'] : array();
216 $agencies[$locale] = array_key_exists($locale .
'-agencies', $tagitKeywords) ? $tagitKeywords[$locale .
'-agencies'] : array();
217 $disciplines[$locale] = array_key_exists($locale .
'-disciplines', $tagitKeywords) ? $tagitKeywords[$locale .
'-disciplines'] : array();
218 $languages[$locale] = array_key_exists($locale .
'-languages', $tagitKeywords) ? $tagitKeywords[$locale .
'-languages'] : array();
219 $subjects[$locale] = array_key_exists($locale .
'-subjects', $tagitKeywords) ?$tagitKeywords[$locale .
'-subjects'] : array();
224 $submissionKeywordDao->insertKeywords($keywords, $submission->getCurrentPublication()->getId());
225 $submissionAgencyDao->insertAgencies($agencies, $submission->getCurrentPublication()->getId());
226 $submissionDisciplineDao->insertDisciplines($disciplines, $submission->getCurrentPublication()->getId());
227 $submissionLanguageDao->insertLanguages($languages, $submission->getCurrentPublication()->getId());
228 $submissionSubjectDao->insertSubjects($subjects, $submission->getCurrentPublication()->getId());
231 if ($submission->getSubmissionProgress() == 0) {
233 import(
'lib.pkp.classes.log.SubmissionLog');
234 import(
'classes.log.SubmissionEventLogEntry');
235 SubmissionLog::logEvent($request, $submission, SUBMISSION_LOG_METADATA_UPDATE,
'submission.event.general.metadataUpdated');