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

139 lines
5.0 KiB
PHP

<?php
/**
* @file classes/notification/managerDelegate/EditorAssignmentNotificationManager.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 EditorAssignmentNotificationManager
*
* @ingroup managerDelegate
*
* @brief Editor assignment notification types manager delegate.
*/
namespace PKP\notification\managerDelegate;
use APP\core\Application;
use APP\notification\Notification;
use PKP\db\DAORegistry;
use PKP\notification\NotificationManagerDelegate;
use PKP\notification\PKPNotification;
class EditorAssignmentNotificationManager extends NotificationManagerDelegate
{
/**
* @copydoc PKPNotificationOperationManager::getNotificationMessage($notification)
*/
public function getNotificationMessage($request, $notification)
{
switch ($notification->getType()) {
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_SUBMISSION:
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_INTERNAL_REVIEW:
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EXTERNAL_REVIEW:
return __('notification.type.editorAssignment');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EDITING:
return __('notification.type.editorAssignmentEditing');
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_PRODUCTION:
return __('notification.type.editorAssignmentProduction');
}
}
/**
* @copydoc PKPNotificationOperationManager::getStyleClass()
*/
public function getStyleClass($notification)
{
return NOTIFICATION_STYLE_CLASS_WARNING;
}
/**
* @copydoc PKPNotificationOperationManager::isVisibleToAllUsers()
*/
public function isVisibleToAllUsers($notificationType, $assocType, $assocId)
{
return true;
}
/**
* @copydoc NotificationManagerDelegate::updateNotification()
*
* If we have a stage without a manager role user, then
* a notification must be inserted or maintained for the submission.
* If a user with this role is assigned to the stage, the notification
* should be deleted.
* Every user that have access to the stage should see the notification.
*/
public function updateNotification($request, $userIds, $assocType, $assocId)
{
$context = $request->getContext();
$notificationType = $this->getNotificationType();
$submissionId = $assocId;
// Check for an existing NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_...
$notificationDao = DAORegistry::getDAO('NotificationDAO'); /** @var NotificationDAO $notificationDao */
$notificationFactory = $notificationDao->getByAssoc(
Application::ASSOC_TYPE_SUBMISSION,
$submissionId,
null,
$notificationType,
$context->getId()
);
// Check for editor stage assignment.
$stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /** @var StageAssignmentDAO $stageAssignmentDao */
$editorAssigned = $stageAssignmentDao->editorAssignedToStage($submissionId, $this->_getStageIdByNotificationType());
// Decide if we have to create or delete a notification.
$notification = $notificationFactory->next();
if ($editorAssigned && $notification) {
// Delete the notification.
$notificationDao->deleteObject($notification);
} elseif (!$editorAssigned && !$notification) {
// Create a notification.
$this->createNotification(
$request,
null,
$notificationType,
$context->getId(),
Application::ASSOC_TYPE_SUBMISSION,
$submissionId,
Notification::NOTIFICATION_LEVEL_TASK
);
}
}
//
// Helper methods.
//
/**
* Return the correct stage id based on the notification type.
*
* @return int
*/
public function _getStageIdByNotificationType()
{
switch ($this->getNotificationType()) {
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_SUBMISSION:
return WORKFLOW_STAGE_ID_SUBMISSION;
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_INTERNAL_REVIEW:
return WORKFLOW_STAGE_ID_INTERNAL_REVIEW;
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EXTERNAL_REVIEW:
return WORKFLOW_STAGE_ID_EXTERNAL_REVIEW;
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_EDITING:
return WORKFLOW_STAGE_ID_EDITING;
case PKPNotification::NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_PRODUCTION:
return WORKFLOW_STAGE_ID_PRODUCTION;
default:
return null;
}
}
}
if (!PKP_STRICT_MODE) {
class_alias('\PKP\notification\managerDelegate\EditorAssignmentNotificationManager', '\EditorAssignmentNotificationManager');
}