Skip to content
Snippets Groups Projects
Commit e994a9b2 authored by sagesolutions's avatar sagesolutions Committed by Artem Sylchuk
Browse files

Issue #3051300 by sagesolutions, artem_sylchuk: Delete a message in the conversation

parent 19f7dc87
No related branches found
No related tags found
No related merge requests found
private_message.delete:
route_name: entity.private_message.delete
title: 'Delete'
group: private_message
......@@ -7,3 +7,15 @@ private_message.private_message_thread_settings_tab:
route_name: private_message.private_message_thread_settings
title: Settings
base_route: private_message.private_message_thread_settings
private_message.view:
route_name: entity.private_message.canonical
title: 'View'
base_route: entity.private_message.canonical
class: '\Drupal\private_message\Plugin\Menu\PrivateMessageTab'
private_message.delete:
route_name: entity.private_message.delete
title: 'Delete'
base_route: entity.private_message.canonical
class: '\Drupal\private_message\Plugin\Menu\PrivateMessageTab'
......@@ -312,7 +312,7 @@ function private_message_form_user_form_alter(array &$form, FormStateInterface $
// service.
$user_data = \Drupal::service('user.data');
$user_setting = $user_data->get('private_message', $user->id(), 'receive_notification');
$default_value = is_null($user_setting) ? : $user_setting;
$default_value = is_null($user_setting) ?: $user_setting;
}
$form['private_messages']['receive_notification'] = [
......@@ -353,7 +353,7 @@ function private_message_form_user_form_alter(array &$form, FormStateInterface $
43200 => t('12 hours'),
86400 => t('1 day'),
];
if (!empty($user_data)) {
$user_setting = (int) $user_data->get('private_message', $user->id(), 'number_of_seconds_considered_away');
}
......
......@@ -11,6 +11,15 @@ administer private messages:
description: 'Allows administrators to administer private messages'
restrict access: true
delete any private message:
title: 'Delete any private message'
description: 'Allows administrators to delete private messages'
restrict access: TRUE
delete own private message:
title: 'Delete own private message'
description: 'Allows users to delete their sent private messages'
administer private message module:
title: 'Administer private message module'
description: 'Allows administrators to manage all parts of the One Page Private Message module'
......
......@@ -39,7 +39,7 @@ entity.private_message_thread.clear_personal_history_form:
private_message.private_message_create:
path: '/private-message/create'
defaults:
# Calls the form.add controller, defined in the contact entity.
# Calls the form.add controller, defined in the contact entity.
_entity_form: private_message.add
_title: 'Create Private Message'
requirements:
......@@ -49,14 +49,23 @@ private_message.private_message_create:
entity.private_message.canonical:
path: '/private-message/{private_message}'
defaults:
# Calls the view controller, defined in the annotation of the contact entity
# Calls the view controller, defined in the annotation of the contact entity
_entity_view: 'private_message'
_title: 'View Private Message'
requirements:
# Calls the access controller of the entity, $operation 'view'
# Calls the access controller of the entity, $operation 'view'
_entity_access: 'private_message.view'
_permission: 'use private messaging system,access user profiles'
entity.private_message.delete:
path: '/private-message/{private_message}/delete'
defaults:
_entity_form: 'private_message.delete'
_title: 'Delete Private Message'
requirements:
private_message: \d+
_entity_access: 'private_message.delete'
private_message.admin_structure:
path: '/admin/structure/private-message'
defaults:
......
......@@ -74,19 +74,23 @@ class PrivateMessageAccessControlHandler extends EntityAccessControlHandler impl
return AccessResult::allowed();
}
if ($account->hasPermission('administer private messages')) {
return AccessResult::allowed();
}
break;
case 'delete':
if ($entity->getOwnerId() == $account->id()) {
return AccessResult::allowed();
return AccessResult::allowedIfHasPermissions($account,
[
'delete own private message',
'delete any private message',
], 'OR');
}
$private_message_thread = $this->privateMessageService->getThreadFromMessage($entity);
if ($private_message_thread->isMember($account->id())) {
return AccessResult::allowed();
}
return AccessResult::allowedIfHasPermission($account, 'delete any private message');
break;
}
}
......
......@@ -82,6 +82,11 @@ class PrivateMessageViewBuilder extends EntityViewBuilder {
'data-message-id' => $entity->id(),
'class' => $classes,
],
'#contextual_links' => [
'private_message' => [
'route_parameters' => ['private_message' => $entity->id()],
],
],
];
$build['wrapper']['message'] = $message;
......
......@@ -19,6 +19,7 @@ use Drupal\user\UserInterface;
* "views_data" = "Drupal\views\EntityViewsData",
* "form" = {
* "add" = "Drupal\private_message\Form\PrivateMessageForm",
* "delete" = "Drupal\private_message\Form\PrivateMessageDeleteForm",
* },
* "access" = "Drupal\private_message\Entity\Access\PrivateMessageAccessControlHandler",
* },
......
<?php
namespace Drupal\private_message\Form;
use Drupal\Core\Entity\ContentEntityDeleteForm;
/**
* Provides a form for deleting a private message.
*
* @internal
*/
class PrivateMessageDeleteForm extends ContentEntityDeleteForm {
/**
* {@inheritdoc}
*/
protected function getDeletionMessage(): string {
return $this->t('The message has been deleted.');
}
/**
* {@inheritdoc}
*/
protected function logDeletionMessage() {
$this->logger('private_message')
->notice('@user deleted a private message.', [
'@user' => $this->currentUser()->getAccountName(),
]);
}
}
<?php
namespace Drupal\private_message\Plugin\Menu;
use Drupal\Core\Menu\LocalTaskDefault;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\private_message\Entity\PrivateMessage;
/**
* Adds private message ID to private message tabs.
*/
class PrivateMessageTab extends LocalTaskDefault {
/**
* {@inheritdoc}
*/
public function getRouteParameters(RouteMatchInterface $route_match): array {
$private_message = $route_match->getParameter('private_message');
if ($private_message instanceof PrivateMessage) {
$id = $private_message->id();
}
else {
$id = 0;
}
return [
'private_message' => $id,
];
}
}
......@@ -21,5 +21,6 @@
*/
#}
<div{{ attributes }}>
{{ title_suffix }}
{{ content }}
</div>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment