Рейтинг:0

Подписка на сообщения игнорирует флаг и отправляет уведомления всем

флаг au

Я разрабатываю форум на основе Drupal и использую модули стека сообщений в сочетании с измененной версией этого пользовательского модуля. https://github.com/Lullabot/message_integration Идея состоит в том, что все пользователи получают электронное письмо, когда публикуется новая ветка, но только пользователи, подписавшиеся на ветку, получают уведомление о комментариях, оставленных в этой ветке. Часть, где люди получают электронные письма для новых тем, работает, но когда оставлен комментарий, все пользователи также получают уведомление по электронной почте об этом. На данный момент я не могу сказать, связана ли проблема с пользовательским модулем или с подпиской на сообщения. Я включил отладку, но я не вижу никаких сообщений о том, что он решает, кому и не отправлять электронные письма, просто он готовит сообщение и отправляет его.

Мой пользовательский модуль ничем не отличается от того, что настроил Lullabot.

Это код, который создает список подписчиков:

функция message_integration_subscribe_options_comment() {
  $query = \Drupal::entityQuery('пользователь')
    ->условие('статус', 1);
  $query->condition('uid', [0, 1], 'НЕ ВНУТРИ');
  $subscribe_uids = $query->execute();

  $notifiers = ['электронная почта'];
  $subscribe_options = [
    'уведомить владельца сообщения' => FALSE,
    'уиды' => [],
  ];
  foreach ($subscribe_uids как $uid) {
    $subscribe_options['uids'][$uid] = new DeliveryCandidate([], $notifiers, $uid);
  }
  вернуть $subscribe_options;
}

И вот код, когда комментарий оставлен:

функция message_integration_comment_insert (комментарий $ комментарий) {

  // Посмотрим, следует ли пропустить эту обработку.
  $config = \Drupal::config('message_integration.settings');
  $skip = $config->get('skip');
  если (! пусто ($ пропустить)) {
    возвращаться;
  }

  $node = $comment->get('entity_id')->first()->get('entity')->getTarget()->getValue();
  если (!in_array($node->bundle(), MESSAGE_INTEGRATION_CONTENT_TYPES)) {
    возвращаться;
  }

  // Создать сообщение.
  $сообщение = Сообщение::создать([
    'шаблон' => 'создать_комментарий',
    'uid' => $node->getOwnerId(),
  ]);
  $message->set('field_comment_reference', $comment);
  $message->set('field_published', $comment->isPublished());
  $сообщение->сохранить();

  // Поставить сообщения в очередь, чтобы уведомить всех подписчиков узла о новом комментарии.
  $subscribers = \Drupal::service('message_subscribe.subscribers');
  
  // Создайте собственный список подписчиков, чтобы уведомить всех активных пользователей.
  // Это конец обычной системы подписки на флаги, так как мы
  // не нужно подписывать каждого пользователя на каждую часть контента.
  $subscribe_options = message_integration_subscribe_options_comment();
  $options = $subscribe_options;
  foreach ($subscribe_options['uids'] as $uid => $values) {
    $options['uids'] = [$uid => $values];
    $subscribers->sendMessage($node, $message, [], $options);
  }
}

Я ходил по кругу и рвал на себе волосы, поэтому любая помощь будет оценена по достоинству.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.