View source
<?php
namespace Drupal\notifications_widget\Plugin\rest\resource;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\Core\Database\Connection;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Psr\Log\LoggerInterface;
class NotificationWidgetUpdateResource extends ResourceBase {
protected $database;
protected $currentUser;
public function __construct(array $configuration, $plugin_id, $plugin_definition, array $serializer_formats, LoggerInterface $logger, AccountProxyInterface $current_user, Connection $database) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
$this->currentUser = $current_user;
$this->database = $database;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->getParameter('serializer.formats'), $container
->get('logger.factory')
->get('notification-update'), $container
->get('current_user'), $container
->get('database'), $container
->get('request_stack')
->getCurrentRequest());
}
public function post($notificationData) {
$result = [];
$currentUser = $this->currentUser;
$uid = $currentUser
->id();
if (!$this->currentUser
->hasPermission('access content')) {
throw new AccessDeniedHttpException();
}
$action = $notificationData['notification_action'];
$id = is_numeric($notificationData['nasId']) ? $notificationData['nasId'] : NULL;
$notificationId = $notificationData['notiId'];
switch ($action) {
case 'read':
$keys = [
'id' => $id,
];
$fields = [
'notification_id' => $notificationId,
'uid' => $uid,
'status' => 1,
'created' => \Drupal::time()
->getRequestTime(),
];
$tableName = 'notifications_actions';
break;
case 'delete':
$keys = [
'id' => $id,
];
$fields = [
'notification_id' => $notificationId,
'uid' => $uid,
'status' => 2,
'created' => \Drupal::time()
->getRequestTime(),
];
$tableName = 'notifications_actions';
break;
case 'clearall':
$keys = [
'id' => NULL,
];
$fields = [
'notification_id' => $notificationId,
'uid' => $uid,
'created' => \Drupal::time()
->getRequestTime(),
];
$tableName = 'notifications_clear_all';
break;
}
try {
$this->database
->merge($tableName)
->key($keys)
->fields($fields)
->execute();
$result = [
'status' => $this
->t('success updated'),
];
} catch (Exception $e) {
$this->loggerFactory
->error($e
->getMessage());
}
$response = new ResourceResponse($result);
$response
->addCacheableDependency($result);
return $response;
}
}