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

137 lines
4.2 KiB
PHP

<?php
/**
* @defgroup notification_form Notification Form
*/
/**
* @file classes/notification/form/PKPNotificationsUnsubscribeForm.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 PKPNotificationsUnsubscribeForm
*
* @ingroup notification_form
*
* @brief Form to unsubscribe from email notifications.
*/
namespace PKP\notification\form;
use APP\facades\Repo;
use APP\notification\Notification;
use APP\notification\NotificationManager;
use APP\template\TemplateManager;
use PKP\db\DAORegistry;
use PKP\form\Form;
use PKP\notification\NotificationSubscriptionSettingsDAO;
class PKPNotificationsUnsubscribeForm extends Form
{
/** @var Notification The notification that triggered the unsubscribe event */
public $_notification;
/** @var string The unsubscribe validation token */
public $_validationToken;
/**
* Constructor.
*
* @param Notification $notification The notification that triggered the unsubscribe event
* @param string $validationToken $name The unsubscribe validation token
*/
public function __construct($notification, $validationToken)
{
parent::__construct('notification/unsubscribeNotificationsForm.tpl');
// Validation checks for this form
$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
$this->_notification = $notification;
$this->_validationToken = $validationToken;
}
/**
* Assign form data to user-submitted data.
*/
public function readInputData()
{
$userVars = [];
foreach ($this->getNotificationSettingsMap() as $notificationSetting) {
$userVars[] = $notificationSetting['emailSettingName'];
}
$this->readUserVars($userVars);
}
/**
* Get all notification settings form names and their setting type values
*
* @return array
*/
protected function getNotificationSettingsMap()
{
$notificationManager = new NotificationManager();
return $notificationManager->getNotificationSettingsMap();
}
/**
* @copydoc Form::fetch
*
* @param null|mixed $template
*/
public function fetch($request, $template = null, $display = false)
{
$userId = $this->_notification->getUserId();
$contextId = $this->_notification->getContextId();
if ($contextId != $request->getContext()->getId()) {
$dispatcher = $request->getDispatcher();
$dispatcher->handle404();
}
$emailSettings = $this->getNotificationSettingsMap();
$user = Repo::user()->get($userId);
$context = $request->getContext();
$templateMgr = TemplateManager::getManager($request);
$templateMgr->assign([
'contextName' => $context->getLocalizedName(),
'userEmail' => $user->getEmail(),
'emailSettings' => $emailSettings,
'validationToken' => $this->_validationToken,
'notificationId' => $this->_notification->getId(),
]);
return parent::fetch($request, $template, $display);
}
/**
* @copydoc Form::execute
*/
public function execute(...$functionArgs)
{
$emailSettings = [];
foreach ($this->getNotificationSettingsMap() as $settingId => $notificationSetting) {
// Get notifications that the user wants to be notified of by email
if ($this->getData($notificationSetting['emailSettingName'])) {
$emailSettings[] = $settingId;
}
}
/** @var NotificationSubscriptionSettingsDAO */
$notificationSubscriptionSettingsDao = DAORegistry::getDAO('NotificationSubscriptionSettingsDAO');
$notificationSubscriptionSettingsDao->updateNotificationSubscriptionSettings('blocked_emailed_notification', $emailSettings, $this->_notification->getUserId(), $this->_notification->getContextId());
return true;
}
}
if (!PKP_STRICT_MODE) {
class_alias('\PKP\notification\form\PKPNotificationsUnsubscribeForm', '\PKPNotificationsUnsubscribeForm');
}