Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • project/private_message
  • issue/private_message-3102091
  • issue/private_message-3184577
  • issue/private_message-3186067
  • issue/private_message-3095101
  • issue/private_message-3164669
  • issue/private_message-3203419
  • issue/private_message-2942602
  • issue/private_message-3095232
  • issue/private_message-3216927
  • issue/private_message-3217509
  • issue/private_message-3232483
  • issue/private_message-3226703
  • issue/private_message-3231433
  • issue/private_message-3137648
  • issue/private_message-3094213
  • issue/private_message-3156194
  • issue/private_message-3183628
  • issue/private_message-3231711
  • issue/private_message-3142633
  • issue/private_message-3042276
  • issue/private_message-3236702
  • issue/private_message-3239279
  • issue/private_message-3239575
  • issue/private_message-3281258
  • issue/private_message-3243139
  • issue/private_message-3195730
  • issue/private_message-3184550
  • issue/private_message-3041599
  • issue/private_message-3179135
  • issue/private_message-3029461
  • issue/private_message-3245298
  • issue/private_message-3250059
  • issue/private_message-3261287
  • issue/private_message-3221475
  • issue/private_message-3261292
  • issue/private_message-3050359
  • issue/private_message-3249348
  • issue/private_message-3248258
  • issue/private_message-3082478
  • issue/private_message-3265901
  • issue/private_message-3300046
  • issue/private_message-2947762
  • issue/private_message-3321802
  • issue/private_message-3051300
  • issue/private_message-3207855
  • issue/private_message-3099166
  • issue/private_message-3344346
  • issue/private_message-3297889
  • issue/private_message-3261083
  • issue/private_message-3151941
  • issue/private_message-3317985
  • issue/private_message-3285143
  • issue/private_message-3337185
  • issue/private_message-3337186
  • issue/private_message-3337189
  • issue/private_message-3322900
  • issue/private_message-2977313
  • issue/private_message-3333001
  • issue/private_message-3337216
  • issue/private_message-3088743
  • issue/private_message-3337221
  • issue/private_message-3337222
  • issue/private_message-3343726
  • issue/private_message-3337224
  • issue/private_message-3339976
  • issue/private_message-3297888
  • issue/private_message-3355273
  • issue/private_message-3356586
  • issue/private_message-3378251
  • issue/private_message-3391546
  • issue/private_message-3381016
  • issue/private_message-3412209
  • issue/private_message-3414396
  • issue/private_message-3204985
  • issue/private_message-3043898
  • issue/private_message-3384791
  • issue/private_message-3121606
  • issue/private_message-3035510
  • issue/private_message-3337240
  • issue/private_message-3417386
  • issue/private_message-3183523
  • issue/private_message-3386742
  • issue/private_message-3322629
  • issue/private_message-3322625
  • issue/private_message-3417433
  • issue/private_message-3241221
  • issue/private_message-3417449
  • issue/private_message-3417461
  • issue/private_message-3271454
  • issue/private_message-3417457
  • issue/private_message-3417644
  • issue/private_message-3417654
  • issue/private_message-3417705
  • issue/private_message-3417731
  • issue/private_message-3417742
  • issue/private_message-3417747
  • issue/private_message-3417751
  • issue/private_message-3417752
  • issue/private_message-3212104
  • issue/private_message-3427223
  • issue/private_message-3365542
  • issue/private_message-3424499
  • issue/private_message-3432140
  • issue/private_message-3439400
  • issue/private_message-3454771
  • issue/private_message-3456956
  • issue/private_message-3464363
  • issue/private_message-3464371
  • issue/private_message-3470070
  • issue/private_message-3470072
  • issue/private_message-3470928
  • issue/private_message-3475462
  • issue/private_message-2987189
  • issue/private_message-3477667
  • issue/private_message-3477873
  • issue/private_message-3478456
  • issue/private_message-3054106
  • issue/private_message-3479391
  • issue/private_message-3417748
  • issue/private_message-3480219
  • issue/private_message-3482103
  • issue/private_message-3482504
  • issue/private_message-3482630
  • issue/private_message-2971692
  • issue/private_message-3484561
  • issue/private_message-3484828
  • issue/private_message-3484854
  • issue/private_message-3485607
  • issue/private_message-3486915
  • issue/private_message-3487175
  • issue/private_message-3482416
  • issue/private_message-3487689
  • issue/private_message-3487705
  • issue/private_message-3487770
  • issue/private_message-3488097
  • issue/private_message-3484915
  • issue/private_message-3488247
  • issue/private_message-3488508
  • issue/private_message-3487692
  • issue/private_message-3484246
  • issue/private_message-3488863
  • issue/private_message-3486047
  • issue/private_message-3489091
  • issue/private_message-3489205
  • issue/private_message-3490037
  • issue/private_message-3490119
  • issue/private_message-3490456
  • issue/private_message-3489224
  • issue/private_message-3490346
  • issue/private_message-3490816
  • issue/private_message-3491252
  • issue/private_message-3491271
  • issue/private_message-3492177
  • issue/private_message-3492289
  • issue/private_message-3331865
  • issue/private_message-3497800
  • issue/private_message-3499154
  • issue/private_message-3499926
  • issue/private_message-3501083
  • issue/private_message-3501286
  • issue/private_message-3501694
  • issue/private_message-3502128
  • issue/private_message-3502140
  • issue/private_message-3502159
  • issue/private_message-3502162
  • issue/private_message-3502180
  • issue/private_message-3502186
  • issue/private_message-3502190
  • issue/private_message-3502496
  • issue/private_message-3504372
  • issue/private_message-3512770
  • issue/private_message-3513969
173 results
Show changes
Showing with 81 additions and 66 deletions
......@@ -5,16 +5,19 @@ namespace Drupal\private_message\Plugin\Field\FieldWidget;
use Drupal\Component\Utility\Crypt;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Access\CsrfTokenGenerator;
use Drupal\Core\Config\Config;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\Core\Site\Settings;
use Drupal\Core\Url;
use Drupal\user\UserStorageInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
......@@ -36,35 +39,42 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
*
* @var \Drupal\Core\Access\CsrfTokenGenerator
*/
protected $csrfTokenGenerator;
protected CsrfTokenGenerator $csrfTokenGenerator;
/**
* The current user.
*
* @var \Drupal\Core\Session\AccountProxyInterface
*/
protected $currentUser;
protected AccountProxyInterface $currentUser;
/**
* The request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
protected RequestStack $requestStack;
/**
* Key-value storage.
*
* @var \Drupal\Core\KeyValueStore\KeyValueFactoryInterface
*/
protected KeyValueFactoryInterface $keyValue;
/**
* The user manager service.
*
* @var \Drupal\user\UserStorageInterface
*/
protected $userManager;
protected UserStorageInterface $userManager;
/**
* The configuration factory.
*
* @var \Drupal\Core\Config\ImmutableConfig
* @var \Drupal\Core\Config\Config
*/
protected $config;
protected Config $config;
/**
* Constructs a PrivateMessageThreadMemberWidget object.
......@@ -85,9 +95,9 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
* The current user.
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
* The request stack.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager service.
* @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The configuration factory.
*/
public function __construct(
......@@ -99,22 +109,24 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
CsrfTokenGenerator $csrfTokenGenerator,
AccountProxyInterface $currentUser,
RequestStack $requestStack,
EntityTypeManagerInterface $entityTypeManager,
ConfigFactoryInterface $configFactory
EntityTypeManagerInterface $entity_type_manager,
ConfigFactoryInterface $config_factory,
KeyValueFactoryInterface $key_value_factory
) {
parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings);
$this->csrfTokenGenerator = $csrfTokenGenerator;
$this->currentUser = $currentUser;
$this->requestStack = $requestStack;
$this->userManager = $entityTypeManager->getStorage('user');
$this->config = $configFactory->get('private_message.settings');
$this->keyValue = $key_value_factory;
$this->userManager = $entity_type_manager->getStorage('user');
$this->config = $config_factory->get('private_message.settings');
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): PrivateMessageThreadMemberWidget {
return new static(
$plugin_id,
$plugin_definition,
......@@ -125,21 +137,22 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
$container->get('current_user'),
$container->get('request_stack'),
$container->get('entity_type.manager'),
$container->get('config.factory')
$container->get('config.factory'),
$container->get('keyvalue')
);
}
/**
* {@inheritdoc}
*/
public static function isApplicable(FieldDefinitionInterface $field_definition) {
public static function isApplicable(FieldDefinitionInterface $field_definition): bool {
return $field_definition->getFieldStorageDefinition()->getTargetEntityTypeId() == 'private_message_thread' && $field_definition->getFieldStorageDefinition()->getSetting('target_type') == 'user';
}
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
public static function defaultSettings(): array {
return [
'max_members' => 0,
] + parent::defaultSettings();
......@@ -151,7 +164,7 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
* The settings summary is returned empty, as the parent settings have no
* effect on this form.
*/
public function settingsSummary() {
public function settingsSummary(): array {
$summary = parent::settingsSummary();
unset($summary[0]);
......@@ -164,7 +177,7 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
public function settingsForm(array $form, FormStateInterface $form_state): array {
$form = parent::settingsForm($form, $form_state);
// This setting has no bearing on this widget, so it is removed.
unset($form['match_operator']);
......@@ -183,7 +196,7 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state): array {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
$recipient = FALSE;
......@@ -222,7 +235,7 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
$data = serialize($selection_settings) . $target_type . $selection_handler;
$selection_settings_key = Crypt::hmacBase64($data, Settings::getHashSalt());
$key_value_storage = \Drupal::keyValue('entity_autocomplete');
$key_value_storage = $this->keyValue->get('entity_autocomplete');
if (!$key_value_storage->has($selection_settings_key)) {
$key_value_storage->set($selection_settings_key, $selection_settings);
}
......@@ -257,7 +270,7 @@ class PrivateMessageThreadMemberWidget extends EntityReferenceAutocompleteWidget
* created as an unlimited cardinality field, but the widget allows for
* setting a maximum number of users.
*/
public static function validateFormElement(array $element, FormStateInterface $form_state) {
public static function validateFormElement(array $element, FormStateInterface $form_state): void {
$input_exists = FALSE;
$parents = $element['#parents'];
array_pop($parents);
......
......@@ -17,7 +17,7 @@ abstract class PrivateMessageConfigFormBase extends PluginBase implements Privat
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
protected ConfigFactoryInterface $configFactory;
/**
* Constructs a PrivateMessageForm object.
......
......@@ -23,6 +23,6 @@ class PrivateMessageThreadMemberConstraint extends Constraint {
*
* @var string
*/
public $userPrivateMessagePermissionError = 'User %user not found';
public string $userPrivateMessagePermissionError = 'User %user not found';
}
......@@ -7,6 +7,7 @@ use Drupal\Core\Cache\CacheTagsInvalidatorInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\Core\Url;
......@@ -15,6 +16,7 @@ use Drupal\private_message\Entity\PrivateMessageThreadInterface;
use Drupal\private_message\Mapper\PrivateMessageMapperInterface;
use Drupal\user\UserDataInterface;
use Drupal\user\UserInterface;
use Drupal\user\UserStorageInterface;
/**
* The Private Message service for the private message module.
......@@ -26,56 +28,56 @@ class PrivateMessageService implements PrivateMessageServiceInterface {
*
* @var \Drupal\private_message\Mapper\PrivateMessageMapperInterface
*/
protected $mapper;
protected PrivateMessageMapperInterface $mapper;
/**
* The current user.
*
* @var \Drupal\Core\Session\AccountProxyInterface
*/
protected $currentUser;
protected AccountProxyInterface $currentUser;
/**
* The configuration factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
protected ConfigFactoryInterface $configFactory;
/**
* The user data service.
*
* @var \Drupal\user\UserDataInterface
*/
protected $userData;
protected UserDataInterface $userData;
/**
* Cache Tags Invalidator.
*
* @var \Drupal\Core\Cache\CacheTagsInvalidatorInterface
*/
protected $cacheTagsInvalidator;
protected CacheTagsInvalidatorInterface $cacheTagsInvalidator;
/**
* The private message thread manager.
*
* @var \Drupal\Core\Entity\Sql\SqlContentEntityStorage
*/
protected $pmThreadManager;
protected EntityStorageInterface $pmThreadManager;
/**
* The user entity manager.
*
* @var \Drupal\user\UserStorageInterface
*/
protected $userManager;
protected UserStorageInterface $userManager;
/**
* The time service.
*
* @var \Drupal\Component\Datetime\TimeInterface
*/
protected $time;
protected TimeInterface $time;
/**
* Constructs a PrivateMessageService object.
......@@ -112,9 +114,9 @@ class PrivateMessageService implements PrivateMessageServiceInterface {
$this->configFactory = $configFactory;
$this->userData = $userData;
$this->cacheTagsInvalidator = $cacheTagsInvalidator;
$this->time = $time;
$this->pmThreadManager = $entityTypeManager->getStorage('private_message_thread');
$this->userManager = $entityTypeManager->getStorage('user');
$this->time = $time;
}
/**
......
......@@ -40,7 +40,7 @@ interface PrivateMessageServiceInterface {
/**
* Get the most recently updated thread for the given user.
*
* @param \Drupal\user\Entity\UserInterface $user
* @param \Drupal\user\UserInterface $user
* The user whose most recently updated thread should be retrieved.
*/
public function getFirstThreadForUser(UserInterface $user);
......
......@@ -17,28 +17,28 @@ class PrivateMessageThreadManager implements PrivateMessageThreadManagerInterfac
*
* @var \Drupal\private_message\Service\PrivateMessageServiceInterface
*/
private $privateMessageService;
private PrivateMessageServiceInterface $privateMessageService;
/**
* The private message.
*
* @var \Drupal\private_message\Entity\PrivateMessageInterface
* @var \Drupal\private_message\Entity\PrivateMessageInterface|null
*/
private $message;
private ?PrivateMessageInterface $message;
/**
* The message recipients.
*
* @var \Drupal\Core\Session\AccountInterface[]
*/
private $recipients = [];
private array $recipients = [];
/**
* The private message thread.
*
* @var \Drupal\private_message\Entity\PrivateMessageThreadInterface|null
*/
private $thread;
private ?PrivateMessageThreadInterface $thread;
/**
* PrivateMessageThreadManager constructor.
......@@ -55,7 +55,7 @@ class PrivateMessageThreadManager implements PrivateMessageThreadManagerInterfac
/**
* {@inheritdoc}
*/
public function saveThread(PrivateMessageInterface $message, array $recipients = [], PrivateMessageThreadInterface $thread = NULL) {
public function saveThread(PrivateMessageInterface $message, array $recipients = [], PrivateMessageThreadInterface $thread = NULL): void {
$this->message = $message;
$this->thread = $thread;
$this->recipients = $recipients;
......@@ -68,7 +68,7 @@ class PrivateMessageThreadManager implements PrivateMessageThreadManagerInterfac
*
* @return $this
*/
private function getThread() {
private function getThread(): PrivateMessageThreadManagerInterface {
if (is_null($this->thread)) {
$this->thread = $this->privateMessageService->getThreadForMembers($this->recipients);
}
......@@ -81,9 +81,11 @@ class PrivateMessageThreadManager implements PrivateMessageThreadManagerInterfac
*
* @return $this
*/
private function addMessage() {
$this->thread->addMessage($this->message);
$this->thread->save();
private function addMessage(): PrivateMessageThreadManagerInterface {
if ($this->thread) {
$this->thread->addMessage($this->message);
$this->thread->save();
}
return $this;
}
......
......@@ -39,7 +39,7 @@ class PrivateMessageNotificationTest extends BrowserTestBase {
/**
* SetUp the test class.
*/
public function setUp() {
public function setUp(): void {
parent::setUp();
$this->userA = $this->drupalCreateUser([
'use private messaging system',
......@@ -60,16 +60,16 @@ class PrivateMessageNotificationTest extends BrowserTestBase {
$this->drupalLogin($this->userA);
$this->drupalGet('/private-message/create');
$this->assertResponse(200);
$this->drupalPostForm(NULL, [
$this->assertSession()->statusCodeEquals(200);
$this->submitForm([
'members[0][target_id]' => $this->userB->getDisplayName(),
'message[0][value]' => $this->getRandomGenerator()->sentences(5),
], 'Send');
$this->assertResponse(200);
$this->assertSession()->statusCodeEquals(200);
$this->drupalLogin($this->userB);
$this->drupalGet('private-message/create');
$this->assertResponse(200);
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->elementTextContains('css', 'a.private-message-page-link', 1);
}
......
......@@ -20,7 +20,7 @@ class PrivateMessageSettingsFormTest extends BrowserTestBase {
*
* @var array
*/
public static $modules = ['private_message'];
protected static $modules = ['private_message'];
/**
* The User used for the test.
......@@ -39,7 +39,7 @@ class PrivateMessageSettingsFormTest extends BrowserTestBase {
/**
* SetUp the test class.
*/
public function setUp() {
public function setUp(): void {
parent::setUp();
$this->user = $this->DrupalCreateUser();
$this->adminUser = $this->DrupalCreateUser([
......@@ -54,11 +54,11 @@ class PrivateMessageSettingsFormTest extends BrowserTestBase {
public function testSettingsPageExists() {
$this->drupalLogin($this->user);
$this->drupalGet('admin/config/private-message/config');
$this->assertResponse(403);
$this->assertSession()->statusCodeEquals(403);
$this->drupalLogin($this->adminUser);
$this->drupalGet('admin/config/private-message/config');
$this->assertResponse(200);
$this->assertSession()->statusCodeEquals(200);
}
/**
......@@ -67,13 +67,11 @@ class PrivateMessageSettingsFormTest extends BrowserTestBase {
public function testConfigForm() {
$this->drupalLogin($this->adminUser);
$this->drupalGet('admin/config/private-message/config');
$this->assertResponse(200);
$this->assertSession()->statusCodeEquals(200);
// Test form submission.
$this->drupalPostForm(NULL, [], t('Save configuration'));
$this->assertText(
'The configuration options have been saved.'
);
$this->submitForm([], t('Save configuration'));
$this->assertSession()->pageTextContains('The configuration options have been saved.');
}
}
......@@ -46,7 +46,7 @@ class PrivateMessageThreadMembersTest extends BrowserTestBase {
/**
* {@inheritdoc}
*/
protected function setUp() {
protected function setUp(): void {
parent::setUp();
$this->userA = $this->drupalCreateUser([
'use private messaging system',
......
......@@ -21,7 +21,7 @@ class PrivateMessageUnreadCountTest extends BrowserTestBase {
*
* @var array
*/
public static $modules = ['block', 'private_message'];
protected static $modules = ['block', 'private_message'];
/**
* The first User used for the test.
......@@ -40,7 +40,7 @@ class PrivateMessageUnreadCountTest extends BrowserTestBase {
/**
* SetUp the test class.
*/
public function setUp() {
public function setUp(): void {
parent::setUp();
$this->userA = $this->drupalCreateUser([
'use private messaging system',
......@@ -61,12 +61,12 @@ class PrivateMessageUnreadCountTest extends BrowserTestBase {
$this->drupalLogin($this->userA);
$this->drupalGet('/private-message/create');
$this->assertResponse(200);
$this->drupalPostForm(NULL, [
$this->assertSession()->statusCodeEquals(200);
$this->submitForm([
'members[0][target_id]' => $this->userB->getDisplayName(),
'message[0][value]' => $this->getRandomGenerator()->sentences(5),
], 'Send');
$this->assertResponse(200);
$this->assertSession()->statusCodeEquals(200);
// I should not see a notification for my own message.
$this->assertSession()->elementTextContains('css', 'a.private-message-page-link', 0);
// When going to a different page, I should still not see a notification for
......@@ -80,14 +80,14 @@ class PrivateMessageUnreadCountTest extends BrowserTestBase {
// We visit the thread directly.
$this->drupalGet('private-messages/1');
$this->assertResponse(200);
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->elementTextContains('css', 'a.private-message-page-link', 0);
// We are not already looking at the thread.
$this->drupalPostForm(NULL, [
$this->submitForm([
'message[0][value]' => $this->getRandomGenerator()->sentences(5),
], 'Send');
$this->assertResponse(200);
$this->assertSession()->statusCodeEquals(200);
// I should not see a notification for my own message.
$this->assertSession()->elementTextContains('css', 'a.private-message-page-link', 0);
......