X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Fcomment%2Fsrc%2FPlugin%2FAction%2FUnpublishByKeywordComment.php;fp=web%2Fcore%2Fmodules%2Fcomment%2Fsrc%2FPlugin%2FAction%2FUnpublishByKeywordComment.php;h=ec1b268d7bd6e6f254add2205489d7f94046ec3d;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php b/web/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php new file mode 100644 index 000000000..ec1b268d7 --- /dev/null +++ b/web/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php @@ -0,0 +1,128 @@ +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 = $this->viewBuilder->view($comment); + $text = $this->renderer->renderPlain($build); + foreach ($this->configuration['keywords'] as $keyword) { + if (strpos($text, $keyword) !== FALSE) { + $comment->setPublished(FALSE); + $comment->save(); + break; + } + } + } + + /** + * {@inheritdoc} + */ + public function defaultConfiguration() { + return [ + 'keywords' => [], + ]; + } + + /** + * {@inheritdoc} + */ + public function buildConfigurationForm(array $form, FormStateInterface $form_state) { + $form['keywords'] = [ + '#title' => $this->t('Keywords'), + '#type' => 'textarea', + '#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; + } + + /** + * {@inheritdoc} + */ + public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { + $this->configuration['keywords'] = Tags::explode($form_state->getValue('keywords')); + } + + /** + * {@inheritdoc} + */ + public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) { + /** @var \Drupal\comment\CommentInterface $object */ + $result = $object->access('update', $account, TRUE) + ->andIf($object->status->access('edit', $account, TRUE)); + + return $return_as_object ? $result : $result->isAllowed(); + } + +}