Open Journal Systems  3.3.0
PKPSubmissionMetadataFormImplementation.inc.php
1 <?php
2 
18 
20  var $_parentForm;
21 
26  function __construct($parentForm = null) {
27  assert(is_a($parentForm, 'Form'));
28  $this->_parentForm = $parentForm;
29  }
30 
36  function _getAbstractsRequired($submission) {
37  return true; // Required by default
38  }
39 
44  function addChecks($submission) {
45  import('lib.pkp.classes.form.validation.FormValidatorLocale');
46  import('lib.pkp.classes.form.validation.FormValidatorCustom');
47 
48  // Validation checks.
49  $this->_parentForm->addCheck(new FormValidatorLocale($this->_parentForm, 'title', 'required', 'submission.submit.form.titleRequired', $submission->getCurrentPublication()->getData('locale')));
50  if ($this->_getAbstractsRequired($submission)) {
51  $this->_parentForm->addCheck(new FormValidatorLocale($this->_parentForm, 'abstract', 'required', 'submission.submit.form.abstractRequired', $submission->getCurrentPublication()->getData('locale')));
52  }
53 
54  // Validates that at least one author has been added.
55  $this->_parentForm->addCheck(new FormValidatorCustom(
56  $this->_parentForm, 'authors', 'required', 'submission.submit.form.authorRequired',
57  function() use ($submission) {
58  return !empty($submission->getCurrentPublication()->getData('authors'));
59  }
60  ));
61 
62  $contextDao = Application::getContextDao();
63  $context = $contextDao->getById($submission->getContextId());
64  $metadataFields = Application::getMetadataFields();
65  foreach ($metadataFields as $field) {
66  $requiredLocaleKey = 'submission.submit.form.'.$field.'Required';
67  if ($context->getData($field) === METADATA_REQUIRE) {
68  switch($field) {
69  case in_array($field, $this->getLocaleFieldNames()):
70  $this->_parentForm->addCheck(new FormValidatorLocale($this->_parentForm, $field, 'required', $requiredLocaleKey, $submission->getCurrentPublication()->getData('locale')));
71  break;
72  case in_array($field, $this->getTagitFieldNames()):
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)));
74  break;
75  case 'citations':
76  $form = $this->_parentForm;
77  $this->_parentForm->addCheck(new FormValidatorCustom($this->_parentForm, 'citationsRaw', 'required', $requiredLocaleKey, function($key) use ($form) {
78  return !empty($form->getData('citationsRaw'));
79  }));
80  break;
81  default:
82  $this->_parentForm->addCheck(new FormValidator($this->_parentForm, $field, 'required', $requiredLocaleKey));
83  }
84  }
85  }
86  }
87 
92  function initData($submission) {
93  if (isset($submission)) {
94  $publication = $submission->getCurrentPublication();
95  $formData = array(
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'),
106  );
107 
108  foreach ($formData as $key => $data) {
109  $this->_parentForm->setData($key, $data);
110  }
111 
112  // get the supported locale keys
113  $locales = array_keys($this->_parentForm->supportedLocales);
114 
115  // load the persisted metadata controlled vocabularies
116  $submissionKeywordDao = DAORegistry::getDAO('SubmissionKeywordDAO'); /* @var $submissionKeywordDao SubmissionKeywordDAO */
117  $submissionSubjectDao = DAORegistry::getDAO('SubmissionSubjectDAO'); /* @var $submissionSubjectDao SubmissionSubjectDAO */
118  $submissionDisciplineDao = DAORegistry::getDAO('SubmissionDisciplineDAO'); /* @var $submissionDisciplineDao SubmissionDisciplineDAO */
119  $submissionAgencyDao = DAORegistry::getDAO('SubmissionAgencyDAO'); /* @var $submissionAgencyDao SubmissionAgencyDAO */
120  $submissionLanguageDao = DAORegistry::getDAO('SubmissionLanguageDAO'); /* @var $submissionLanguageDao SubmissionLanguageDAO */
121 
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));
127  $this->_parentForm->setData('abstractsRequired', $this->_getAbstractsRequired($submission));
128  }
129  }
130 
134  function readInputData() {
135  // 'keywords' is a tagit catchall that contains an array of values for each keyword/locale combination on the form.
136  $userVars = array('title', 'prefix', 'subtitle', 'abstract', 'coverage', 'type', 'source', 'rights', 'keywords', 'citationsRaw', 'locale');
137  $this->_parentForm->readUserVars($userVars);
138  }
139 
144  function getLocaleFieldNames() {
145  return array('title', 'prefix', 'subtitle', 'abstract', 'coverage', 'type', 'source', 'rights');
146  }
147 
152  function getTagitFieldNames() {
153  return array('subjects', 'keywords', 'disciplines', 'agencies', 'languages');
154  }
155 
162  function execute($submission, $request) {
163  $publication = $submission->getCurrentPublication();
164  $authorDao = DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */
165  $context = $request->getContext();
166 
167  // Get params to update
168  $params = [
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'),
178  ];
179 
180  // Update locale
181  $newLocale = $this->_parentForm->getData('locale');
182  if ($newLocale) {
183  $oldLocale = $publication->getData('locale');
184  if (in_array($newLocale, $context->getData('supportedSubmissionLocales'))) {
185  $params['locale'] = $newLocale;
186  }
187  if ($newLocale !== $oldLocale) {
188  $authorDao->changePublicationLocale($publication->getId(), $oldLocale, $newLocale);
189  }
190  }
191 
192  // Save the publication
193  $publication = Services::get('publication')->edit($publication, $params, $request);
194 
195  // get the supported locale keys
196  $locales = array_keys($this->_parentForm->supportedLocales);
197 
198  // persist the metadata/keyword fields.
199  $submissionKeywordDao = DAORegistry::getDAO('SubmissionKeywordDAO'); /* @var $submissionKeywordDao SubmissionKeywordDAO */
200  $submissionSubjectDao = DAORegistry::getDAO('SubmissionSubjectDAO'); /* @var $submissionSubjectDao SubmissionSubjectDAO */
201  $submissionDisciplineDao = DAORegistry::getDAO('SubmissionDisciplineDAO'); /* @var $submissionDisciplineDao SubmissionDisciplineDAO */
202  $submissionAgencyDao = DAORegistry::getDAO('SubmissionAgencyDAO'); /* @var $submissionAgencyDao SubmissionAgencyDAO */
203  $submissionLanguageDao = DAORegistry::getDAO('SubmissionLanguageDAO'); /* @var $submissionLanguageDao SubmissionLanguageDAO */
204 
205  $keywords = array();
206  $agencies = array();
207  $disciplines = array();
208  $languages = array();
209  $subjects = array();
210 
211  $tagitKeywords = $this->_parentForm->getData('keywords');
212 
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();
220  }
221  }
222 
223  // persist the controlled vocabs
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());
229 
230  // Only log modifications on completed submissions
231  if ($submission->getSubmissionProgress() == 0) {
232  // Log the metadata modification event.
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');
236  }
237  }
238 }
PKPSubmissionMetadataFormImplementation\getLocaleFieldNames
getLocaleFieldNames()
Definition: PKPSubmissionMetadataFormImplementation.inc.php:147
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPSubmissionMetadataFormImplementation\getTagitFieldNames
getTagitFieldNames()
Definition: PKPSubmissionMetadataFormImplementation.inc.php:155
FormValidatorLocale
Class to represent a form validation check for localized fields.
Definition: FormValidatorLocale.inc.php:16
PKPSubmissionMetadataFormImplementation\execute
execute($submission, $request)
Definition: PKPSubmissionMetadataFormImplementation.inc.php:165
PKPSubmissionMetadataFormImplementation
Definition: PKPSubmissionMetadataFormImplementation.inc.php:17
SubmissionLog\logEvent
static logEvent($request, $submission, $eventType, $messageKey, $params=array())
Definition: SubmissionLog.inc.php:34
PKPSubmissionMetadataFormImplementation\readInputData
readInputData()
Definition: PKPSubmissionMetadataFormImplementation.inc.php:137
PKPSubmissionMetadataFormImplementation\addChecks
addChecks($submission)
Definition: PKPSubmissionMetadataFormImplementation.inc.php:47
PKPApplication\getMetadataFields
static getMetadataFields()
Definition: PKPApplication.inc.php:830
PKPSubmissionMetadataFormImplementation\__construct
__construct($parentForm=null)
Definition: PKPSubmissionMetadataFormImplementation.inc.php:29
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
PKPSubmissionMetadataFormImplementation\initData
initData($submission)
Definition: PKPSubmissionMetadataFormImplementation.inc.php:95
PKPSubmissionMetadataFormImplementation\_getAbstractsRequired
_getAbstractsRequired($submission)
Definition: PKPSubmissionMetadataFormImplementation.inc.php:39
PKPSubmissionMetadataFormImplementation\$_parentForm
$_parentForm
Definition: PKPSubmissionMetadataFormImplementation.inc.php:23
FormValidatorCustom
Form validation check with a custom user function performing the validation check.
Definition: FormValidatorCustom.inc.php:18
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49