diff --git a/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php b/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php index 6b70450f7d0add28f216d33303c337c4e0398855..370a7e6b09532f3c89e299f8c5a46393591081ed 100644 --- a/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php +++ b/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php @@ -9,8 +9,12 @@ use Drupal\Component\Utility\Tags; use Drupal\Core\Action\ConfigurableActionBase; +use Drupal\Core\Entity\EntityViewBuilderInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Drupal\Core\Render\RendererInterface; use Drupal\Core\Session\AccountInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Unpublishes a comment containing certain keywords. @@ -21,14 +25,62 @@ * type = "comment" * ) */ -class UnpublishByKeywordComment extends ConfigurableActionBase { +class UnpublishByKeywordComment extends ConfigurableActionBase implements ContainerFactoryPluginInterface { + + /** + * The comment entity builder handler. + * + * @var \Drupal\Core\Entity\EntityViewBuilderInterface + */ + protected $viewBuilder; + + /** + * The renderer. + * + * @var \Drupal\Core\Render\RendererInterface + */ + protected $renderer; + + /** + * Constructs a UnpublishByKeywordComment object. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin ID for the plugin instance. + * @param mixed $plugin_definition + * The plugin implementation definition. + * @param \Drupal\Core\Entity\EntityViewBuilderInterface $comment_view_builder + * The comment entity builder handler. + * @param \Drupal\Core\Render\RendererInterface $renderer + * The renderer. + */ + public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityViewBuilderInterface $comment_view_builder, RendererInterface $renderer) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + + $this->viewBuilder = $comment_view_builder; + $this->renderer = $renderer; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('entity.manager')->getViewBuilder('comment'), + $container->get('renderer') + ); + } /** * {@inheritdoc} */ public function execute($comment = NULL) { - $build = comment_view($comment); - $text = \Drupal::service('renderer')->renderPlain($build); + $build = $this->viewBuilder->view($comment); + $text = $this->renderer->renderPlain($build); foreach ($this->configuration['keywords'] as $keyword) { if (strpos($text, $keyword) !== FALSE) { $comment->setPublished(FALSE); @@ -52,9 +104,9 @@ public function defaultConfiguration() { */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form['keywords'] = array( - '#title' => t('Keywords'), + '#title' => $this->t('Keywords'), '#type' => 'textarea', - '#description' => t('The comment will be unpublished if it contains any of the phrases above. Use a case-sensitive, comma-separated list of phrases. Example: funny, bungee jumping, "Company, Inc."'), + '#description' => $this->t('The comment will be unpublished if it contains any of the phrases above. Use a case-sensitive, comma-separated list of phrases. Example: funny, bungee jumping, "Company, Inc."'), '#default_value' => Tags::implode($this->configuration['keywords']), ); return $form;