[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
v1
/
lib
/
pkp
/
classes
/
notification
/
[
Home
]
File: PKPNotificationManager.php
<?php /** * @file classes/notification/PKPNotificationManager.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2000-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class PKPNotificationManager * * @ingroup notification * * @see NotificationDAO * @see Notification * * @brief Class for Notification Manager. */ namespace PKP\notification; use APP\core\Application; use APP\decision\Decision; use APP\facades\Repo; use APP\notification\Notification; use APP\template\TemplateManager; use PKP\core\PKPApplication; use PKP\db\DAORegistry; use PKP\notification\managerDelegate\EditorAssignmentNotificationManager; use PKP\notification\managerDelegate\EditorDecisionNotificationManager; use PKP\notification\managerDelegate\EditorialReportNotificationManager; use PKP\notification\managerDelegate\PendingRevisionsNotificationManager; use PKP\notification\managerDelegate\PKPEditingProductionStatusNotificationManager; use PKP\notification\managerDelegate\QueryNotificationManager; use PKP\notification\managerDelegate\SubmissionNotificationManager; use PKP\payment\QueuedPaymentDAO; use PKP\security\Role; use PKP\stageAssignment\StageAssignmentDAO; use PKP\submission\reviewAssignment\ReviewAssignmentDAO; use PKP\submission\reviewRound\ReviewRoundDAO; use PKP\workflow\WorkflowStageDAO; class PKPNotificationManager extends PKPNotificationOperationManager { /** * Construct a URL for the notification based on its type and associated object * * @copydoc PKPNotificationOperationManager::getNotificationContents() */ public function getNotificationUrl($request, $notification) { $url = parent::getNotificationUrl($request, $notification); $dispatcher = Application::get()->getDispatcher(); $contextDao = Application::getContextDAO(); $context = $contextDao->getById($notification->getContextId()); switch ($notification->getType()) { case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGN: assert($notification->getAssocType() == Application::ASSOC_TYPE_SUBMISSION && is_numeric($notification->getAssocId())); return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'workflow', 'access', $notification->getAssocId()); case PKPNotification::NOTIFICATION_TYPE_COPYEDIT_ASSIGNMENT: case PKPNotification::NOTIFICATION_TYPE_LAYOUT_ASSIGNMENT: case PKPNotification::NOTIFICATION_TYPE_INDEX_ASSIGNMENT: assert($notification->getAssocType() == Application::ASSOC_TYPE_SUBMISSION && is_numeric($notification->getAssocId())); return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'workflow', 'access', $notification->getAssocId()); case PKPNotification::NOTIFICATION_TYPE_REVIEWER_COMMENT: assert($notification->getAssocType() == Application::ASSOC_TYPE_REVIEW_ASSIGNMENT && is_numeric($notification->getAssocId())); $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var ReviewAssignmentDAO $reviewAssignmentDao */ $reviewAssignment = $reviewAssignmentDao->getById($notification->getAssocId()); $workflowStageDao = DAORegistry::getDAO('WorkflowStageDAO'); /** @var WorkflowStageDAO $workflowStageDao */ $operation = $reviewAssignment->getStageId() == WORKFLOW_STAGE_ID_INTERNAL_REVIEW ? $workflowStageDao::WORKFLOW_STAGE_PATH_INTERNAL_REVIEW : $workflowStageDao::WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW; return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'workflow', $operation, $reviewAssignment->getSubmissionId()); case PKPNotification::NOTIFICATION_TYPE_REVIEW_ASSIGNMENT: case PKPNotification::NOTIFICATION_TYPE_REVIEW_ASSIGNMENT_UPDATED: $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var ReviewAssignmentDAO $reviewAssignmentDao */ $reviewAssignment = $reviewAssignmentDao->getById($notification->getAssocId()); return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'reviewer', 'submission', $reviewAssignment->getSubmissionId()); case PKPNotification::NOTIFICATION_TYPE_NEW_ANNOUNCEMENT: assert($notification->getAssocType() == Application::ASSOC_TYPE_ANNOUNCEMENT); $announcement = Repo::announcement()->get($notification->getAssocId()); $context = $contextDao->getById($announcement->getAssocId()); return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'announcement', 'view', [$notification->getAssocId()]); case PKPNotification::NOTIFICATION_TYPE_CONFIGURE_PAYMENT_METHOD: return __('notification.type.configurePaymentMethod'); case PKPNotification::NOTIFICATION_TYPE_PAYMENT_REQUIRED: $context = $contextDao->getById($notification->getContextId()); Application::getPaymentManager($context); assert($notification->getAssocType() == Application::ASSOC_TYPE_QUEUED_PAYMENT); $queuedPaymentDao = DAORegistry::getDAO('QueuedPaymentDAO'); /** @var QueuedPaymentDAO $queuedPaymentDao */ $queuedPayment = $queuedPaymentDao->getById($notification->getAssocId()); $context = $contextDao->getById($queuedPayment->getContextId()); return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'payment', 'pay', [$queuedPayment->getId()]); default: $delegateResult = $this->getByDelegate( $notification->getType(), $notification->getAssocType(), $notification->getAssocId(), __FUNCTION__, [$request, $notification] ); if ($delegateResult) { $url = $delegateResult; } return $url; } } /** * Return a message string for the notification based on its type * and associated object. * * @copydoc PKPNotificationOperationManager::getNotificationContents() */ public function getNotificationMessage($request, $notification) { $message = parent::getNotificationMessage($request, $notification); $type = $notification->getType(); assert(isset($type)); switch ($type) { case PKPNotification::NOTIFICATION_TYPE_SUCCESS: case PKPNotification::NOTIFICATION_TYPE_ERROR: case PKPNotification::NOTIFICATION_TYPE_WARNING: if (!is_null($this->getNotificationSettings($notification->getId()))) { $notificationSettings = $this->getNotificationSettings($notification->getId()); return $notificationSettings['contents']; } else { return __('common.changesSaved'); } // no break case PKPNotification::NOTIFICATION_TYPE_FORM_ERROR: case PKPNotification::NOTIFICATION_TYPE_ERROR: $notificationSettings = $this->getNotificationSettings($notification->getId()); assert(!is_null($notificationSettings['contents'])); return $notificationSettings['contents']; case PKPNotification::NOTIFICATION_TYPE_PLUGIN_ENABLED: return $this->_getTranslatedKeyWithParameters('common.pluginEnabled', $notification->getId()); case PKPNotification::NOTIFICATION_TYPE_PLUGIN_DISABLED: return $this->_getTranslatedKeyWithParameters('common.pluginDisabled', $notification->getId()); case PKPNotification::NOTIFICATION_TYPE_REVIEWER_COMMENT: assert($notification->getAssocType() == Application::ASSOC_TYPE_REVIEW_ASSIGNMENT && is_numeric($notification->getAssocId())); $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var ReviewAssignmentDAO $reviewAssignmentDao */ $reviewAssignment = $reviewAssignmentDao->getById($notification->getAssocId()); $submission = Repo::submission()->get($reviewAssignment->getSubmissionId()); return __('notification.type.reviewerComment', ['title' => $submission->getCurrentPublication()->getLocalizedTitle(null, 'html')]); case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGN: assert($notification->getAssocType() == Application::ASSOC_TYPE_SUBMISSION && is_numeric($notification->getAssocId())); $submission = Repo::submission()->get($notification->getAssocId()); return __('notification.type.editorAssign', ['title' => $submission->getCurrentPublication()->getLocalizedTitle(null, 'html')]); case PKPNotification::NOTIFICATION_TYPE_COPYEDIT_ASSIGNMENT: assert($notification->getAssocType() == Application::ASSOC_TYPE_SUBMISSION && is_numeric($notification->getAssocId())); $submission = Repo::submission()->get($notification->getAssocId()); return __('notification.type.copyeditorRequest', ['title' => $submission->getCurrentPublication()->getLocalizedTitle(null, 'html')]); case PKPNotification::NOTIFICATION_TYPE_LAYOUT_ASSIGNMENT: assert($notification->getAssocType() == Application::ASSOC_TYPE_SUBMISSION && is_numeric($notification->getAssocId())); $submission = Repo::submission()->get($notification->getAssocId()); return __('notification.type.layouteditorRequest', ['title' => $submission->getCurrentPublication()->getLocalizedTitle(null, 'html')]); case PKPNotification::NOTIFICATION_TYPE_INDEX_ASSIGNMENT: assert($notification->getAssocType() == Application::ASSOC_TYPE_SUBMISSION && is_numeric($notification->getAssocId())); $submission = Repo::submission()->get($notification->getAssocId()); return __('notification.type.indexRequest', ['title' => $submission->getCurrentPublication()->getLocalizedTitle(null, 'html')]); case PKPNotification::NOTIFICATION_TYPE_REVIEW_ASSIGNMENT: return __('notification.type.reviewAssignment'); case PKPNotification::NOTIFICATION_TYPE_REVIEW_ASSIGNMENT_UPDATED: return __('notification.type.reviewAssignmentUpdated'); case PKPNotification::NOTIFICATION_TYPE_REVIEW_ROUND_STATUS: assert($notification->getAssocType() == Application::ASSOC_TYPE_REVIEW_ROUND && is_numeric($notification->getAssocId())); $reviewRoundDao = DAORegistry::getDAO('ReviewRoundDAO'); /** @var ReviewRoundDAO $reviewRoundDao */ $reviewRound = $reviewRoundDao->getById($notification->getAssocId()); $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /** @var StageAssignmentDAO $stageAssignmentDao */ $user = $request->getUser(); $stageAssignments = $stageAssignmentDao->getBySubmissionAndRoleIds($reviewRound->getSubmissionId(), [Role::ROLE_ID_AUTHOR], null, $user->getId()); $isAuthor = (bool) $stageAssignments->next(); return __($reviewRound->getStatusKey($isAuthor)); case PKPNotification::NOTIFICATION_TYPE_PAYMENT_REQUIRED: return __('payment.type.publication.required'); case PKPNotification::NOTIFICATION_TYPE_EDITORIAL_REPORT: case PKPNotification::NOTIFICATION_TYPE_EDITORIAL_REMINDER: $notificationSettings = $this->getNotificationSettings($notification->getId()); return $notificationSettings['contents']; case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_REVERT_DECLINE: return __('notification.type.revertDecline'); default: $delegateResult = $this->getByDelegate( $notification->getType(), $notification->getAssocType(), $notification->getAssocId(), __FUNCTION__, [$request, $notification] ); if ($delegateResult) { $message = $delegateResult; } return $message; } } /** * Using the notification message, construct, if needed, any additional * content for the notification body. If a specific notification type * is not defined, it will return the parent method return value. * Define a notification type case on this method only if you need to * present more than just text in notification. If you need to define * just a locale key, use the getNotificationMessage method only. * * @copydoc PKPNotificationOperationManager::getNotificationContents() */ public function getNotificationContents($request, $notification) { $content = parent::getNotificationContents($request, $notification); $type = $notification->getType(); assert(isset($type)); switch ($type) { case PKPNotification::NOTIFICATION_TYPE_FORM_ERROR: return join(' ', $content); case PKPNotification::NOTIFICATION_TYPE_ERROR: if (!is_array($content)) { return $content; } $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('errors', $content); return $templateMgr->fetch('controllers/notification/errorNotificationContent.tpl'); default: $delegateResult = $this->getByDelegate( $notification->getType(), $notification->getAssocType(), $notification->getAssocId(), __FUNCTION__, [$request, $notification] ); if ($delegateResult) { $content = $delegateResult; } return $content; } } /** * @copydoc PKPNotificationOperationManager::getNotificationContents() */ public function getNotificationTitle($notification) { $title = parent::getNotificationTitle($notification); $type = $notification->getType(); assert(isset($type)); switch ($type) { case PKPNotification::NOTIFICATION_TYPE_REVIEW_ROUND_STATUS: $reviewRoundDao = DAORegistry::getDAO('ReviewRoundDAO'); /** @var ReviewRoundDAO $reviewRoundDao */ $reviewRound = $reviewRoundDao->getById($notification->getAssocId()); return __('notification.type.roundStatusTitle', ['round' => $reviewRound->getRound()]); case PKPNotification::NOTIFICATION_TYPE_FORM_ERROR: return __('form.errorsOccurred'); default: $delegateResult = $this->getByDelegate( $notification->getType(), $notification->getAssocType(), $notification->getAssocId(), __FUNCTION__, [$notification] ); if ($delegateResult) { $title = $delegateResult; } return $title; } } /** * @copydoc PKPNotificationOperationManager::getNotificationContents() */ public function getStyleClass($notification) { $styleClass = parent::getStyleClass($notification); switch ($notification->getType()) { case PKPNotification::NOTIFICATION_TYPE_SUCCESS: return NOTIFICATION_STYLE_CLASS_SUCCESS; case PKPNotification::NOTIFICATION_TYPE_WARNING: return NOTIFICATION_STYLE_CLASS_WARNING; case PKPNotification::NOTIFICATION_TYPE_ERROR: return NOTIFICATION_STYLE_CLASS_ERROR; case PKPNotification::NOTIFICATION_TYPE_INFORMATION: return NOTIFICATION_STYLE_CLASS_INFORMATION; case PKPNotification::NOTIFICATION_TYPE_FORBIDDEN: return NOTIFICATION_STYLE_CLASS_FORBIDDEN; case PKPNotification::NOTIFICATION_TYPE_HELP: return NOTIFICATION_STYLE_CLASS_HELP; case PKPNotification::NOTIFICATION_TYPE_FORM_ERROR: return NOTIFICATION_STYLE_CLASS_FORM_ERROR; case PKPNotification::NOTIFICATION_TYPE_REVIEW_ROUND_STATUS: return NOTIFICATION_STYLE_CLASS_INFORMATION; default: $delegateResult = $this->getByDelegate( $notification->getType(), $notification->getAssocType(), $notification->getAssocId(), __FUNCTION__, [$notification] ); if ($delegateResult) { $styleClass = $delegateResult; } return $styleClass; } } /** * @copydoc PKPNotificationOperationManager::getNotificationContents() */ public function getIconClass($notification) { $iconClass = parent::getIconClass($notification); switch ($notification->getType()) { case PKPNotification::NOTIFICATION_TYPE_SUCCESS: return 'notifyIconSuccess'; case PKPNotification::NOTIFICATION_TYPE_WARNING: return 'notifyIconWarning'; case PKPNotification::NOTIFICATION_TYPE_ERROR: return 'notifyIconError'; case PKPNotification::NOTIFICATION_TYPE_INFORMATION: return 'notifyIconInfo'; case PKPNotification::NOTIFICATION_TYPE_FORBIDDEN: return 'notifyIconForbidden'; case PKPNotification::NOTIFICATION_TYPE_HELP: return 'notifyIconHelp'; default: $delegateResult = $this->getByDelegate( $notification->getType(), $notification->getAssocType(), $notification->getAssocId(), __FUNCTION__, [$notification] ); if ($delegateResult) { $iconClass = $delegateResult; } return $iconClass; } } /** * @copydoc PKPNotificationOperationManager::isVisibleToAllUsers() */ public function isVisibleToAllUsers($notificationType, $assocType, $assocId) { $isVisible = parent::isVisibleToAllUsers($notificationType, $assocType, $assocId); switch ($notificationType) { case PKPNotification::NOTIFICATION_TYPE_REVIEW_ROUND_STATUS: case PKPNotification::NOTIFICATION_TYPE_APPROVE_SUBMISSION: case PKPNotification::NOTIFICATION_TYPE_VISIT_CATALOG: case PKPNotification::NOTIFICATION_TYPE_CONFIGURE_PAYMENT_METHOD: $isVisible = true; break; case PKPNotification::NOTIFICATION_TYPE_PAYMENT_REQUIRED: $isVisible = false; break; default: $delegateResult = $this->getByDelegate( $notificationType, $assocType, $assocId, __FUNCTION__, [$notificationType, $assocType, $assocId] ); if (!is_null($delegateResult)) { $isVisible = $delegateResult; } break; } return $isVisible; } /** * Update notifications by type using a delegate. If you want to be able to use * this method to update notifications associated with a certain type, you need * to first create a manager delegate and define it in getMgrDelegate() method. * * @param \PKP\core\PKPRequest $request * @param array $notificationTypes The type(s) of the notification(s) to * be updated. * @param array|null $userIds The notification user(s) id(s), or null for all. * @param int $assocType Application::ASSOC_TYPE_... The notification associated object type. * @param int $assocId The notification associated object id. * * @return mixed Return false if no operation is executed or the last operation * returned value. */ final public function updateNotification($request, $notificationTypes, $userIds, $assocType, $assocId) { $returner = false; foreach ($notificationTypes as $type) { $managerDelegate = $this->getMgrDelegate($type, $assocType, $assocId); if (!is_null($managerDelegate) && $managerDelegate instanceof \PKP\notification\NotificationManagerDelegate) { $returner = $managerDelegate->updateNotification($request, $userIds, $assocType, $assocId); } else { assert(false); } } return $returner; } /** * Get all subscribable notification types along with names and their setting type values * * @return array */ public function getNotificationSettingsMap() { return [ PKPNotification::NOTIFICATION_TYPE_SUBMISSION_SUBMITTED => ['settingName' => 'notificationSubmissionSubmitted', 'emailSettingName' => 'emailNotificationSubmissionSubmitted', 'settingKey' => 'notification.type.submissionSubmitted'], PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_REQUIRED => ['settingName' => 'notificationEditorAssignmentRequired', 'emailSettingName' => 'emailNotificationEditorAssignmentRequired', 'settingKey' => 'notification.type.editorAssignmentTask'], PKPNotification::NOTIFICATION_TYPE_REVIEWER_COMMENT => ['settingName' => 'notificationReviewerComment', 'emailSettingName' => 'emailNotificationReviewerComment', 'settingKey' => 'notification.type.reviewerComment'], PKPNotification::NOTIFICATION_TYPE_NEW_QUERY => ['settingName' => 'notificationNewQuery', 'emailSettingName' => 'emailNotificationNewQuery', 'settingKey' => 'notification.type.queryAdded'], PKPNotification::NOTIFICATION_TYPE_QUERY_ACTIVITY => ['settingName' => 'notificationQueryActivity', 'emailSettingName' => 'emailNotificationQueryActivity', 'settingKey' => 'notification.type.queryActivity'], PKPNotification::NOTIFICATION_TYPE_NEW_ANNOUNCEMENT => ['settingName' => 'notificationNewAnnouncement', 'emailSettingName' => 'emailNotificationNewAnnouncement', 'settingKey' => 'notification.type.newAnnouncement'], PKPNotification::NOTIFICATION_TYPE_EDITORIAL_REMINDER => ['settingName' => 'notificationEditorialReminder', 'emailSettingName' => 'emailNotificationEditorialReminder', 'settingKey' => 'notification.type.editorialReminder'], PKPNotification::NOTIFICATION_TYPE_EDITORIAL_REPORT => ['settingName' => 'notificationEditorialReport', 'emailSettingName' => 'emailNotificationEditorialReport', 'settingKey' => 'notification.type.editorialReport'] ]; } /** * Get the stage-level notification type constants for editorial decisions * * @return int[] */ public function getDecisionStageNotifications(): array { return [ PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_SUBMISSION, PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EXTERNAL_REVIEW, PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EDITING, PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_PRODUCTION ]; } /** * Get the notification type for each editor decision * * @return int One of the Notification::NOTIFICATION_TYPE_ constants */ public function getNotificationTypeByEditorDecision(Decision $decision): ?int { switch ($decision->getData('decision')) { case Decision::ACCEPT: return Notification::NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT; case Decision::EXTERNAL_REVIEW: return Notification::NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW; case Decision::PENDING_REVISIONS: return Notification::NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS; case Decision::RESUBMIT: return Notification::NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT; case Decision::NEW_EXTERNAL_ROUND: return Notification::NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND; case Decision::DECLINE: case Decision::INITIAL_DECLINE: return Notification::NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE; case Decision::REVERT_DECLINE: return Notification::NOTIFICATION_TYPE_EDITOR_DECISION_REVERT_DECLINE; case Decision::SEND_TO_PRODUCTION: return Notification::NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION; } return null; } // // Protected methods // /** * Get the notification manager delegate based on the passed notification type. * * @param int $notificationType * @param int $assocType * @param int $assocId * * @return mixed Null or NotificationManagerDelegate */ protected function getMgrDelegate($notificationType, $assocType, $assocId) { switch ($notificationType) { case PKPNotification::NOTIFICATION_TYPE_SUBMISSION_SUBMITTED: case PKPNotification::NOTIFICATION_TYPE_SUBMISSION_NEW_VERSION: case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_REQUIRED: assert($assocType == Application::ASSOC_TYPE_SUBMISSION && is_numeric($assocId)); return new SubmissionNotificationManager($notificationType); case PKPNotification::NOTIFICATION_TYPE_NEW_QUERY: case PKPNotification::NOTIFICATION_TYPE_QUERY_ACTIVITY: return new QueryNotificationManager($notificationType); case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_SUBMISSION: case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EXTERNAL_REVIEW: case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EDITING: case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_PRODUCTION: assert($assocType == Application::ASSOC_TYPE_SUBMISSION && is_numeric($assocId)); return new EditorAssignmentNotificationManager($notificationType); case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT: case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW: case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS: case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT: case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND: case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE: case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_REVERT_DECLINE: case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION: assert($assocType == Application::ASSOC_TYPE_SUBMISSION && is_numeric($assocId)); return new EditorDecisionNotificationManager($notificationType); case PKPNotification::NOTIFICATION_TYPE_PENDING_INTERNAL_REVISIONS: case PKPNotification::NOTIFICATION_TYPE_PENDING_EXTERNAL_REVISIONS: assert($assocType == Application::ASSOC_TYPE_SUBMISSION && is_numeric($assocId)); return new PendingRevisionsNotificationManager($notificationType); case PKPNotification::NOTIFICATION_TYPE_ASSIGN_COPYEDITOR: case PKPNotification::NOTIFICATION_TYPE_AWAITING_COPYEDITS: case PKPNotification::NOTIFICATION_TYPE_ASSIGN_PRODUCTIONUSER: case PKPNotification::NOTIFICATION_TYPE_AWAITING_REPRESENTATIONS: assert($assocType == Application::ASSOC_TYPE_SUBMISSION && is_numeric($assocId)); return new PKPEditingProductionStatusNotificationManager($notificationType); case PKPNotification::NOTIFICATION_TYPE_EDITORIAL_REPORT: return new EditorialReportNotificationManager($notificationType); } return null; // No delegate required, let calling context handle null. } /** * Try to use a delegate to retrieve a notification data that's defined * by the implementation of the * * @param string $operationName */ protected function getByDelegate($notificationType, $assocType, $assocId, $operationName, $parameters) { $delegate = $this->getMgrDelegate($notificationType, $assocType, $assocId); if ($delegate instanceof \PKP\notification\NotificationManagerDelegate) { return call_user_func_array([$delegate, $operationName], $parameters); } else { return null; } } // // Private helper methods. // /** * Return notification settings. * * @param int $notificationId * * @return ?array */ private function getNotificationSettings($notificationId) { $notificationSettingsDao = DAORegistry::getDAO('NotificationSettingsDAO'); /** @var NotificationSettingsDAO $notificationSettingsDao */ $notificationSettings = $notificationSettingsDao->getNotificationSettings($notificationId); if (empty($notificationSettings)) { return null; } else { return $notificationSettings; } } /** * Helper function to get a translated string from a notification with parameters * * @param string $key * @param int $notificationId * * @return string */ private function _getTranslatedKeyWithParameters($key, $notificationId) { $params = $this->getNotificationSettings($notificationId); return __($key, $this->getParamsForCurrentLocale($params)); } } if (!PKP_STRICT_MODE) { class_alias('\PKP\notification\PKPNotificationManager', '\PKPNotificationManager'); }