MessageArgumentsWorker.php in Message UI 8
File
src/Plugin/QueueWorker/MessageArgumentsWorker.php
View source
<?php
namespace Drupal\message_ui\Plugin\QueueWorker;
use Drupal\Core\Render\Markup;
use Drupal\message\Entity\Message;
use Drupal\message\Entity\MessageTemplate;
use Drupal\Core\Queue\QueueWorkerBase;
class MessageArgumentsWorker extends QueueWorkerBase {
public function processItem($data) {
$query = \Drupal::entityQuery('message');
$result = $query
->condition('template', $data['template'])
->sort('mid', 'DESC')
->condition('mid', $data['last_mid'], '>=')
->range(0, $data['item_to_process'])
->execute();
if (empty($result)) {
return FALSE;
}
$messages = Message::loadMultiple(array_keys($result));
foreach ($messages as $message) {
self::messageArgumentsUpdate($message, $data['new_arguments']);
$data['last_mid'] = $message
->id();
}
$queue = \Drupal::queue('message_ui_arguments');
return $queue
->createItem($data);
}
public static function getArguments($template, $count = FALSE) {
if (!($message_template = MessageTemplate::load($template))) {
return [];
}
if (!($output = $message_template
->getText())) {
return [];
}
$text = array_map(function (Markup $markup) {
return (string) $markup;
}, $output);
$text = implode("\n", $text);
preg_match_all('/[@|%|\\!]\\{([a-z0-9:_\\-]+?)\\}/i', $text, $matches);
return $count ? count($matches[0]) : $matches[0];
}
public static function messageArgumentsUpdate(Message $message, array $arguments) {
$message_arguments = [];
foreach ($arguments as $token) {
$token_name = str_replace([
'@{',
'}',
], [
'[',
']',
], $token);
$token_service = \Drupal::token();
$value = $token_service
->replace($token_name, [
'message' => $message,
]);
$message_arguments[$token] = $value;
}
$message
->setArguments($message_arguments);
$message
->save();
}
public static function argumentsUpdate(array $mids, array $arguments) {
$messages = Message::loadMultiple($mids);
foreach ($messages as $message) {
MessageArgumentsWorker::messageArgumentsUpdate($message, $arguments);
}
}
}