Files
OSJ/lib/pkp/classes/notification/managerDelegate/EditorDecisionNotificationManager.php
CHIEFSOFT\ameye df3a033196 first commit
2024-06-08 17:09:23 -04:00

187 lines
7.3 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* @file classes/notification/managerDelegate/EditorDecisionNotificationManager.php
*
* Copyright (c) 2014-2021 Simon Fraser University
* Copyright (c) 2003-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class EditorDecisionNotificationManager
*
* @ingroup managerDelegate
*
* @brief Editor decision notification types manager delegate.
*/
namespace PKP\notification\managerDelegate;
use APP\core\Application;
use APP\facades\Repo;
use APP\notification\Notification;
use PKP\db\DAORegistry;
use PKP\notification\NotificationManagerDelegate;
use PKP\notification\PKPNotification;
class EditorDecisionNotificationManager extends NotificationManagerDelegate
{
/**
* @copydoc PKPNotificationOperationManager::getNotificationMessage()
*/
public function getNotificationMessage($request, $notification)
{
switch ($notification->getType()) {
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_INTERNAL_REVIEW:
return __('notification.type.editorDecisionInternalReview');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT:
return __('notification.type.editorDecisionAccept');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW:
return __('notification.type.editorDecisionExternalReview');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS:
return __('notification.type.editorDecisionPendingRevisions');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT:
return __('notification.type.editorDecisionResubmit');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND:
return __('notification.type.editorDecisionNewRound');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE:
return __('notification.type.editorDecisionDecline');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_REVERT_DECLINE:
return __('notification.type.editorDecisionRevertDecline');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION:
return __('notification.type.editorDecisionSendToProduction');
default:
return null;
}
}
/**
* @copydoc PKPNotificationOperationManager::getStyleClass()
*/
public function getStyleClass($notification)
{
return NOTIFICATION_STYLE_CLASS_INFORMATION;
}
/**
* @copydoc PKPNotificationOperationManager::getNotificationTitle()
*/
public function getNotificationTitle($notification)
{
return __('notification.type.editorDecisionTitle');
}
/**
* @copydoc NotificationManagerDelegate::updateNotification()
*/
public function updateNotification($request, $userIds, $assocType, $assocId)
{
$context = $request->getContext();
// Remove any existing editor decision notifications.
$notificationDao = DAORegistry::getDAO('NotificationDAO'); /** @var \PKP\notification\NotificationDAO $notificationDao */
$notificationFactory = $notificationDao->getByAssoc(
Application::ASSOC_TYPE_SUBMISSION,
$assocId,
null,
null,
$context->getId()
);
// Delete old notifications.
$editorDecisionNotificationTypes = $this->_getAllEditorDecisionNotificationTypes();
while ($notification = $notificationFactory->next()) {
// If a list of user IDs was specified, make sure we're respecting it.
if ($userIds !== null && !in_array($notification->getUserId(), $userIds)) {
continue;
}
// Check that the notification type is in the specified list.
if (!in_array($notification->getType(), $editorDecisionNotificationTypes)) {
continue;
}
$notificationDao->deleteObject($notification);
}
// (Re)create notifications, but dont send email, since we
// got here from the editor decision which sends its own email.
foreach ((array) $userIds as $userId) {
$this->createNotification(
$request,
$userId,
$this->getNotificationType(),
$context->getId(),
Application::ASSOC_TYPE_SUBMISSION,
$assocId,
$this->_getNotificationTaskLevel($this->getNotificationType())
);
}
}
/**
* @copydoc INotificationInfoProvider::getNotificationUrl()
*/
public function getNotificationUrl($request, $notification)
{
switch ($notification->getType()) {
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_INTERNAL_REVIEW:
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_SEND_TO_PRODUCTION:
$submission = Repo::submission()->get($notification->getAssocId());
return Repo::submission()->getWorkflowUrlByUserRoles($submission, $notification->getUserId());
default:
return '';
}
}
//
// Private helper methods
//
/**
* Get all notification types corresponding to editor decisions.
*
* @return array
*/
public function _getAllEditorDecisionNotificationTypes()
{
return [
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_INTERNAL_REVIEW,
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_ACCEPT,
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_EXTERNAL_REVIEW,
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS,
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT,
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_NEW_ROUND,
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_DECLINE,
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_REVERT_DECLINE,
PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_SEND_TO_PRODUCTION
];
}
/**
* Get the notification level for the type of notification being created.
*
* @param int $type
*
* @return int
*/
public function _getNotificationTaskLevel($type)
{
switch ($type) {
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_PENDING_REVISIONS:
case PKPNotification::NOTIFICATION_TYPE_EDITOR_DECISION_RESUBMIT:
return Notification::NOTIFICATION_LEVEL_TASK;
default:
return Notification::NOTIFICATION_LEVEL_NORMAL;
}
}
}
if (!PKP_STRICT_MODE) {
class_alias('\PKP\notification\managerDelegate\EditorDecisionNotificationManager', '\EditorDecisionNotificationManager');
}