16 import(
'lib.pkp.classes.submission.form.SubmissionSubmitForm');
17 import(
'classes.publication.Publication');
31 $enableSiteWidePrivacyStatement =
Config::getVar(
'general',
'sitewide_privacy_statement');
32 if (!$enableSiteWidePrivacyStatement &&
$context) {
33 $this->hasPrivacyStatement = (boolean)
$context->getData(
'privacyStatement');
35 $this->hasPrivacyStatement = (boolean)
Application::get()->getRequest()->getSite()->getData(
'privacyStatement');
39 $supportedSubmissionLocales =
$context->getSupportedSubmissionLocales();
40 if (!is_array($supportedSubmissionLocales) ||
count($supportedSubmissionLocales) < 1) $supportedSubmissionLocales = array(
$context->getPrimaryLocale());
41 $this->
addCheck(
new FormValidatorInSet($this,
'locale',
'required',
'submission.submit.form.localeRequired', $supportedSubmissionLocales));
42 if ((
boolean)
$context->getData(
'copyrightNotice')) {
43 $this->
addCheck(
new FormValidator($this,
'copyrightNoticeAgree',
'required',
'submission.submit.copyrightNoticeAgreeRequired'));
45 $this->
addCheck(
new FormValidator($this,
'userGroupId',
'required',
'submission.submit.availableUserGroupsDescription'));
46 if ($this->hasPrivacyStatement) {
47 $this->
addCheck(
new FormValidator($this,
'privacyConsent',
'required',
'user.profile.form.privacyConsentRequired'));
50 foreach ((array)
$context->getLocalizedData(
'submissionChecklist') as $key => $checklistItem) {
51 $this->
addCheck(
new FormValidator($this,
"checklist-$key",
'required',
'submission.submit.checklistErrors'));
59 function validate($callHooks =
true) {
60 if (!parent::validate($callHooks))
return false;
63 $userGroupId = (int) $this->
getData(
'userGroupId');
67 $user = $request->getUser();
68 if (!$user)
return false;
70 if ($userGroupDao->userInGroup($user->getId(), $userGroupId)) {
73 $userGroup = $userGroupDao->getById($userGroupId,
$context->getId());
74 if ($userGroup->getPermitSelfRegistration()){
84 function fetch($request, $template =
null, $display =
false) {
85 $user = $request->getUser();
89 'supportedSubmissionLocaleNames',
90 $this->context->getSupportedSubmissionLocaleNames()
94 if ((
boolean) $this->context->getData(
'copyrightNotice')) {
95 $templateMgr->assign(
'copyrightNotice', $this->context->getLocalizedData(
'copyrightNotice'));
96 $templateMgr->assign(
'copyrightNoticeAgree',
true);
101 $userGroupNames = array();
104 $managerUserGroupAssignments = $userGroupAssignmentDao->getByUserId($user->getId(), $this->context->getId(), ROLE_ID_MANAGER);
105 $authorUserGroupAssignments = $userGroupAssignmentDao->getByUserId($user->getId(), $this->context->getId(), ROLE_ID_AUTHOR);
108 $availableAuthorUserGroups = $userGroupDao->getUserGroupsByStage($this->context->getId(), WORKFLOW_STAGE_ID_SUBMISSION, ROLE_ID_AUTHOR);
109 $availableUserGroupNames = array();
110 while($authorUserGroup = $availableAuthorUserGroups->next()) {
111 if ($authorUserGroup->getPermitSelfRegistration()){
112 $availableUserGroupNames[$authorUserGroup->getId()] = $authorUserGroup->getLocalizedName();
117 $defaultGroup = $userGroupDao->getDefaultByRoleId($this->context->getId(), ROLE_ID_AUTHOR);
118 $noExistingRoles =
false;
119 $managerGroups =
false;
122 if (!$managerUserGroupAssignments->wasEmpty()) {
123 while($managerUserGroupAssignment = $managerUserGroupAssignments->next()) {
124 $managerUserGroup = $userGroupDao->getById($managerUserGroupAssignment->getUserGroupId());
125 $userGroupNames[$managerUserGroup->getId()] = $managerUserGroup->getLocalizedName();
127 $managerGroups = join(__(
'common.commaListSeparator'), $userGroupNames);
128 $userGroupNames = array_replace($userGroupNames, $availableUserGroupNames);
131 $defaultGroup = $userGroupDao->getDefaultByRoleId($this->context->getId(), ROLE_ID_MANAGER);
134 }
else if (!$authorUserGroupAssignments->wasEmpty()) {
135 while($authorUserGroupAssignment = $authorUserGroupAssignments->next()) {
136 $authorUserGroup = $userGroupDao->getById($authorUserGroupAssignment->getUserGroupId());
137 $userGroupNames[$authorUserGroup->getId()] = $authorUserGroup->getLocalizedName();
142 $userGroupNames = $availableUserGroupNames;
143 $noExistingRoles =
true;
146 $templateMgr->assign([
147 'managerGroups' => $managerGroups,
148 'userGroupOptions' => $userGroupNames,
149 'defaultGroup' => $defaultGroup,
150 'noExistingRoles' => $noExistingRoles,
151 'hasPrivacyStatement' => $this->hasPrivacyStatement,
155 $assignedCategories = [];
158 if (isset($this->submission)) {
159 $categories = $categoryDao->getByPublicationId($this->submission->getCurrentPublication()->getId());
160 while ($category = $categories->next()) {
161 $assignedCategories[] = $category->getId();
167 $categories = $categoryDao->getByContextId($this->context->getId())->toAssociativeArray();
168 foreach ($categories as $category) {
169 $title = $category->getLocalizedTitle();
170 if ($category->getParentId()) {
171 $title = $categories[$category->getParentId()]->getLocalizedTitle() .
' > ' . $title;
173 $items[(int) $category->getId()] = $title;
175 $templateMgr->assign(array(
176 'assignedCategories' => $assignedCategories,
177 'categories' => $items,
180 return parent::fetch($request, $template, $display);
188 function initData($data = array()) {
189 if (isset($this->submission)) {
191 $this->_data = array_merge($data, array(
192 'locale' => $this->submission->getLocale(),
193 'commentsToEditor' => $query ? $query->getHeadNote()->getContents() :
'',
196 $supportedSubmissionLocales = $this->context->getSupportedSubmissionLocales();
199 $keys = array_keys($supportedSubmissionLocales);
202 $this->context->getPrimaryLocale(),
203 $supportedSubmissionLocales[array_shift($keys)]
205 $this->_data = $data;
206 foreach ($tryLocales as $locale) {
207 if (in_array($locale, $supportedSubmissionLocales)) {
209 $this->_data[
'locale'] = $locale;
221 'userGroupId',
'locale',
'copyrightNoticeAgree',
'commentsToEditor',
'privacyConsent',
'categories'
223 foreach ((array) $this->context->getLocalizedData(
'submissionChecklist') as $key => $checklistItem) {
224 $vars[] =
"checklist-$key";
242 $publication->setData(
'submissionId',
$submission->getId());
243 $oldLocale = $publication->getData(
'locale');
244 $publication->setData(
'locale', $this->
getData(
'locale'));
246 if ($oldLocale && $oldLocale != $this->
getData(
'locale')) {
248 $authorDao->changePublicationLocale($publication->getId(), $oldLocale, $this->getData(
'locale'));
264 if ($commentsToEditor) {
267 $query = $queryDao->newDataObject();
268 $query->setAssocType(ASSOC_TYPE_SUBMISSION);
270 $query->setStageId(WORKFLOW_STAGE_ID_SUBMISSION);
271 $query->setSequence(REALLY_BIG_NUMBER);
272 $queryDao->insertObject($query);
274 $queryId = $query->getId();
276 $userIds = array_keys([$userId =>
null] + $subEditorsDAO->getBySubmissionGroupId($this->submission->getSectionId(), ASSOC_TYPE_SECTION, $this->submission->getContextId()));
277 foreach (array_unique($userIds) as $id) {
278 $queryDao->insertParticipant($queryId, $id);
281 $note = $noteDao->newDataObject();
282 $note->setUserId($userId);
283 $note->setAssocType(ASSOC_TYPE_QUERY);
284 $note->setTitle(__(
'submission.submit.coverNote'));
285 $note->setContents($commentsToEditor);
288 $note->setAssocId($queryId);
289 $noteDao->insertObject($note);
292 $queryId = $query->getId();
293 $notes = $noteDao->getByAssoc(ASSOC_TYPE_QUERY, $queryId);
294 if (!$notes->wasEmpty()) {
295 $note = $notes->next();
296 if ($commentsToEditor) {
297 $note->setContents($commentsToEditor);
299 $noteDao->updateObject($note);
301 $noteDao->deleteObject($note);
302 $queryDao->deleteObject($query);
317 if ($queries) $query = $queries->next();
325 function execute(...$functionArgs) {
326 parent::execute(...$functionArgs);
330 $user = $request->getUser();
334 $userGroupId = (int) $this->
getData(
'userGroupId');
335 if (!$userGroupDao->userInGroup($user->getId(), $userGroupId)) {
336 $userGroupDao->assignUserToGroup($user->getId(), $userGroupId);
339 if (isset($this->submission)) {
342 if ($this->submission->getSubmissionProgress() <= $this->step) {
343 $this->submission->stampLastActivity();
344 $this->submission->stampModified();
345 $this->submission->setSubmissionProgress($this->step + 1);
351 $submissionDao->updateObject($this->submission);
353 $publication = $this->submission->getCurrentPublication();
355 $publication =
Services::get(
'publication')->edit($publication, $publication->_data, $request);
359 $this->submission = $submissionDao->newDataObject();
360 $this->submission->setContextId($this->context->getId());
364 $this->submission->stampLastActivity();
365 $this->submission->stampModified();
366 $this->submission->setSubmissionProgress($this->step + 1);
367 $this->submission->setStageId(WORKFLOW_STAGE_ID_SUBMISSION);
369 $this->submission =
Services::get(
'submission')->add($this->submission, $request);
370 $this->submissionId = $this->submission->getId();
375 $publication->setData(
'status', STATUS_QUEUED);
376 $publication->setData(
'version', 1);
377 $publication =
Services::get(
'publication')->add($publication, $request);
378 $this->submission =
Services::get(
'submission')->edit($this->submission, [
'currentPublicationId' => $publication->getId()], $request);
382 $author = $authorDao->newDataObject();
385 $userGivenNames = $user->getGivenName(
null);
386 $userFamilyNames = $user->getFamilyName(
null);
387 if (is_null($userFamilyNames)) $userFamilyNames = array();
388 if (empty($userGivenNames[$this->submission->getLocale()])) {
390 $userGivenNames[$this->submission->getLocale()] = $userGivenNames[$site->getPrimaryLocale()];
392 $userFamilyNames[$this->submission->getLocale()] = !empty($userFamilyNames[$site->getPrimaryLocale()]) ? $userFamilyNames[$site->getPrimaryLocale()] :
'';
394 $author->setGivenName($userGivenNames,
null);
395 $author->setFamilyName($userFamilyNames,
null);
396 $author->setAffiliation($user->getAffiliation(
null),
null);
397 $author->setCountry($user->getCountry());
398 $author->setEmail($user->getEmail());
399 $author->setUrl($user->getUrl());
400 $author->setBiography($user->getBiography(
null),
null);
401 $author->setIncludeInBrowse(1);
402 $author->setOrcid($user->getOrcid());
403 $author->setData(
'publicationId', $publication->getId());
406 $author->setUserGroupId($userGroupId);
408 $authorId = $authorDao->insertObject($author);
409 $publication =
Services::get(
'publication')->edit($publication, [
'primaryContactId' => $authorId], $request);
413 $stageAssignmentDao->build($this->submissionId, $userGroupId, $user->getId());
416 if ($this->
getData(
'commentsToEditor')){
423 $categoryDao->deletePublicationAssignments($publication->getId());
424 if ($categories = $this->
getData(
'categories')) {
425 foreach ((array) $categories as $categoryId) {
426 $categoryDao->insertPublicationAssignment($categoryId, $publication->getId());