Open Journal Systems  3.3.0
EditorDecisionNotificationManager.inc.php
1 <?php
2 
16 import('lib.pkp.classes.notification.NotificationManagerDelegate');
17 
19 
24  function __construct($notificationType) {
25  parent::__construct($notificationType);
26  }
27 
31  function getNotificationMessage($request, $notification) {
32  switch ($notification->getType()) {
33  case NOTIFICATION_TYPE_EDITOR_DECISION_INTERNAL_REVIEW:
34  return __('notification.type.editorDecisionInternalReview');
35  case NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT:
36  return __('notification.type.editorDecisionAccept');
37  case NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW:
38  return __('notification.type.editorDecisionExternalReview');
39  case NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS:
40  return __('notification.type.editorDecisionPendingRevisions');
41  case NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT:
42  return __('notification.type.editorDecisionResubmit');
43  case NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND:
44  return __('notification.type.editorDecisionNewRound');
45  case NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE:
46  return __('notification.type.editorDecisionDecline');
47  case NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION:
48  return __('notification.type.editorDecisionSendToProduction');
49  default:
50  return null;
51  }
52  }
53 
57  function getStyleClass($notification) {
58  return NOTIFICATION_STYLE_CLASS_INFORMATION;
59  }
60 
64  function getNotificationTitle($notification) {
65  return __('notification.type.editorDecisionTitle');
66  }
67 
71  public function updateNotification($request, $userIds, $assocType, $assocId) {
72  $context = $request->getContext();
73 
74  // Remove any existing editor decision notifications.
75  $notificationDao = DAORegistry::getDAO('NotificationDAO'); /* @var $notificationDao NotificationDAO */
76  $notificationFactory = $notificationDao->getByAssoc(
77  ASSOC_TYPE_SUBMISSION,
78  $assocId,
79  null,
80  null,
81  $context->getId()
82  );
83 
84  // Delete old notifications.
85  $editorDecisionNotificationTypes = $this->_getAllEditorDecisionNotificationTypes();
86  while ($notification = $notificationFactory->next()) {
87  // If a list of user IDs was specified, make sure we're respecting it.
88  if ($userIds !== null && !in_array($notification->getUserId(), $userIds)) continue;
89 
90  // Check that the notification type is in the specified list.
91  if (!in_array($notification->getType(), $editorDecisionNotificationTypes)) continue;
92 
93  $notificationDao->deleteObject($notification);
94  }
95 
96  // (Re)create notifications, but don’t send email, since we
97  // got here from the editor decision which sends its own email.
98  foreach ((array) $userIds as $userId) $this->createNotification(
99  $request,
100  $userId,
101  $this->getNotificationType(),
102  $context->getId(),
103  ASSOC_TYPE_SUBMISSION,
104  $assocId,
105  $this->_getNotificationTaskLevel($this->getNotificationType()),
106  null,
107  true // suppressEmail
108  );
109  }
110 
114  public function getNotificationUrl($request, $notification) {
115  switch ($notification->getType()) {
116  case NOTIFICATION_TYPE_EDITOR_DECISION_INTERNAL_REVIEW:
117  case NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT:
118  case NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW:
119  case NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS:
120  case NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT:
121  case NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND:
122  case NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE:
123  case NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION:
124  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
125  $submission = $submissionDao->getById($notification->getAssocId());
126  import('classes.core.Services');
127  return Services::get('submission')->getWorkflowUrlByUserRoles($submission, $notification->getUserId());
128  default:
129  return '';
130  }
131  }
132 
133  //
134  // Private helper methods
135  //
141  return array(
142  NOTIFICATION_TYPE_EDITOR_DECISION_INTERNAL_REVIEW,
143  NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT,
144  NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW,
145  NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS,
146  NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT,
147  NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND,
148  NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE,
149  NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION
150  );
151  }
152 
158  function _getNotificationTaskLevel($type) {
159  switch ($type) {
160  case NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS:
161  case NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT:
162  return NOTIFICATION_LEVEL_TASK;
163  default:
164  return NOTIFICATION_LEVEL_NORMAL;
165  }
166  }
167 }
168 
169 
EditorDecisionNotificationManager\getStyleClass
getStyleClass($notification)
Definition: EditorDecisionNotificationManager.inc.php:57
EditorDecisionNotificationManager\updateNotification
updateNotification($request, $userIds, $assocType, $assocId)
Definition: EditorDecisionNotificationManager.inc.php:71
EditorDecisionNotificationManager\getNotificationUrl
getNotificationUrl($request, $notification)
Definition: EditorDecisionNotificationManager.inc.php:114
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
EditorDecisionNotificationManager\_getNotificationTaskLevel
_getNotificationTaskLevel($type)
Definition: EditorDecisionNotificationManager.inc.php:158
NotificationManagerDelegate
Abstract class to support notification manager delegates that provide default implementation to the i...
Definition: NotificationManagerDelegate.inc.php:21
EditorDecisionNotificationManager\getNotificationMessage
getNotificationMessage($request, $notification)
Definition: EditorDecisionNotificationManager.inc.php:31
EditorDecisionNotificationManager\getNotificationTitle
getNotificationTitle($notification)
Definition: EditorDecisionNotificationManager.inc.php:64
NotificationManagerDelegate\getNotificationType
getNotificationType()
Definition: NotificationManagerDelegate.inc.php:41
EditorDecisionNotificationManager
Editor decision notification types manager delegate.
Definition: EditorDecisionNotificationManager.inc.php:18
EditorDecisionNotificationManager\__construct
__construct($notificationType)
Definition: EditorDecisionNotificationManager.inc.php:24
EditorDecisionNotificationManager\_getAllEditorDecisionNotificationTypes
_getAllEditorDecisionNotificationTypes()
Definition: EditorDecisionNotificationManager.inc.php:140
NotificationManagerDelegate\createNotification
createNotification($request, $userId=null, $notificationType, $contextId=null, $assocType=null, $assocId=null, $level=NOTIFICATION_LEVEL_NORMAL, $params=null, $suppressEmail=false, callable $mailConfigurator=null)
Definition: NotificationManagerDelegate.inc.php:62
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49