Open Journal Systems  3.3.0
PKPSubmissionSubmitStep4Form.inc.php
1 <?php
2 
16 import('lib.pkp.classes.submission.form.SubmissionSubmitForm');
17 
19 
26  parent::__construct($context, $submission, 4);
27  }
28 
33  function execute(...$functionArgs) {
34  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
35  $request = Application::get()->getRequest();
36 
37  // Set other submission data.
38  if ($this->submission->getSubmissionProgress() <= $this->step) {
39  $this->submission->setDateSubmitted(Core::getCurrentDate());
40  $this->submission->stampLastActivity();
41  $this->submission->stampModified();
42  $this->submission->setSubmissionProgress(0);
43  }
44 
45  parent::execute(...$functionArgs);
46 
47  // Save the submission.
48  $submissionDao->updateObject($this->submission);
49 
50  // Assign the default stage participants.
51  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
52  $notifyUsers = array();
53 
54  // Manager and assistant roles -- for each assigned to this
55  // stage in setup, iff there is only one user for the group,
56  // automatically assign the user to the stage.
57  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /* @var $stageAssignmentDao StageAssignmentDAO */
58  $submissionStageGroups = $userGroupDao->getUserGroupsByStage($this->submission->getContextId(), WORKFLOW_STAGE_ID_SUBMISSION);
59  while ($userGroup = $submissionStageGroups->next()) {
60  // Only handle manager and assistant roles
61  if (!in_array($userGroup->getRoleId(), array(ROLE_ID_MANAGER, ROLE_ID_ASSISTANT))) continue;
62 
63  $users = $userGroupDao->getUsersById($userGroup->getId(), $this->submission->getContextId());
64  if($users->getCount() == 1) {
65  $user = $users->next();
66  $stageAssignmentDao->build($this->submission->getId(), $userGroup->getId(), $user->getId(), $userGroup->getRecommendOnly());
67  $notifyUsers[] = $user->getId();
68  }
69  }
70 
71  // Author roles
72  // Assign only the submitter in whatever ROLE_ID_AUTHOR capacity they were assigned previously
73  $user = $request->getUser();
74  $submitterAssignments = $stageAssignmentDao->getBySubmissionAndStageId($this->submission->getId(), null, null, $user->getId());
75  while ($assignment = $submitterAssignments->next()) {
76  $userGroup = $userGroupDao->getById($assignment->getUserGroupId());
77  if ($userGroup->getRoleId() == ROLE_ID_AUTHOR) {
78  $stageAssignmentDao->build($this->submission->getId(), $userGroup->getId(), $assignment->getUserId());
79  // Only assign them once, since otherwise we'll one assignment for each previous stage.
80  // And as long as they are assigned once, they will get access to their submission.
81  break;
82  }
83  }
84 
85  $notificationManager = new NotificationManager();
86 
87  // Assign sub editors for sections
88  $subEditorsDao = DAORegistry::getDAO('SubEditorsDAO'); /* @var $subEditorsDao SubEditorsDAO */
89  $subEditors = $subEditorsDao->getBySubmissionGroupId($this->submission->getSectionId(), ASSOC_TYPE_SECTION, $this->submission->getContextId());
90  foreach ($subEditors as $subEditor) {
91  $userGroups = $userGroupDao->getByUserId($subEditor->getId(), $this->submission->getContextId());
92  while ($userGroup = $userGroups->next()) {
93  if ($userGroup->getRoleId() != ROLE_ID_SUB_EDITOR) continue;
94  $stageAssignmentDao->build($this->submission->getId(), $userGroup->getId(), $subEditor->getId(), $userGroup->getRecommendOnly());
95  // If we assign a stage assignment in the Submission stage to a sub editor, make note.
96  if ($userGroupDao->userGroupAssignedToStage($userGroup->getId(), WORKFLOW_STAGE_ID_SUBMISSION)) {
97  $notifyUsers[] = $subEditor->getId();
98  }
99  }
100  }
101 
102  // Assign sub editors for categories
103  $categoryDao = DAORegistry::getDAO('CategoryDAO'); /* @var $categoryDao CategoryDAO */
104  $subEditorsDao = DAORegistry::getDAO('SubEditorsDAO'); /* @var $subEditorsDao SubEditorsDAO */
105  $categories = $categoryDao->getByPublicationId($this->submission->getCurrentPublication()->getId());
106  while ($category = $categories->next()) {
107  $subEditors = $subEditorsDao->getBySubmissionGroupId($category->getId(), ASSOC_TYPE_CATEGORY, $this->submission->getContextId());
108  foreach ($subEditors as $subEditor) {
109  $userGroups = $userGroupDao->getByUserId($subEditor->getId(), $this->submission->getContextId());
110  while ($userGroup = $userGroups->next()) {
111  if ($userGroup->getRoleId() != ROLE_ID_SUB_EDITOR) continue;
112  $stageAssignmentDao->build($this->submission->getId(), $userGroup->getId(), $subEditor->getId(), $userGroup->getRecommendOnly());
113  // If we assign a stage assignment in the Submission stage to a sub editor, make note.
114  if ($userGroupDao->userGroupAssignedToStage($userGroup->getId(), WORKFLOW_STAGE_ID_SUBMISSION)) {
115  $notifyUsers[] = $subEditor->getId();
116  }
117  }
118  }
119  }
120 
121  // Update assignment notifications
122  import('classes.workflow.EditorDecisionActionsManager');
123  $notificationManager->updateNotification(
124  $request,
125  (new EditorDecisionActionsManager())->getStageNotifications(),
126  null,
127  ASSOC_TYPE_SUBMISSION,
128  $this->submission->getId()
129  );
130 
131  // Send a notification to associated users if an editor needs assigning
132  if (empty($notifyUsers)) {
133  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
134 
135  // Get the managers.
136  $managers = $roleDao->getUsersByRoleId(ROLE_ID_MANAGER, $this->submission->getContextId());
137 
138  $managersArray = $managers->toAssociativeArray();
139 
140  $allUserIds = array_keys($managersArray);
141  foreach ($allUserIds as $userId) {
142 
143  // Add TASK notification indicating that a submission is unassigned
144  $notificationManager->createNotification(
145  $request,
146  $userId,
147  NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_REQUIRED,
148  $this->submission->getContextId(),
149  ASSOC_TYPE_SUBMISSION,
150  $this->submission->getId(),
151  NOTIFICATION_LEVEL_TASK
152  );
153  }
154  } else foreach ($notifyUsers as $userId) {
155  $notificationManager->createNotification(
156  $request, $userId, NOTIFICATION_TYPE_SUBMISSION_SUBMITTED,
157  $this->submission->getContextId(), ASSOC_TYPE_SUBMISSION, $this->submission->getId()
158  );
159  }
160 
161  $notificationManager->updateNotification(
162  $request,
163  array(NOTIFICATION_TYPE_APPROVE_SUBMISSION),
164  null,
165  ASSOC_TYPE_SUBMISSION,
166  $this->submission->getId()
167  );
168 
169  return $this->submissionId;
170  }
171 }
172 
173 
PKPSubmissionSubmitStep4Form\execute
execute(... $functionArgs)
Definition: PKPSubmissionSubmitStep4Form.inc.php:33
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPSubmissionSubmitStep4Form
Form for Step 4 of author submission: confirm & complete.
Definition: PKPSubmissionSubmitStep4Form.inc.php:18
SubmissionSubmitForm\$context
$context
Definition: SubmissionSubmitForm.inc.php:26
PKPSubmissionSubmitStep4Form\__construct
__construct($context, $submission)
Definition: PKPSubmissionSubmitStep4Form.inc.php:25
EditorDecisionActionsManager
Wrapper class for create and assign editor decisions actions to template manager.
Definition: EditorDecisionActionsManager.inc.php:33
SubmissionSubmitForm\$submissionId
$submissionId
Definition: SubmissionSubmitForm.inc.php:32
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
NotificationManager
Definition: NotificationManager.inc.php:19
SubmissionSubmitForm
Base class for author submit forms.
Definition: SubmissionSubmitForm.inc.php:21
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
SubmissionSubmitForm\$submission
$submission
Definition: SubmissionSubmitForm.inc.php:38