From 35270e1bcdcee94a8d8aea6a9db04a2b2dc5fc1f Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Fri, 21 May 2021 16:15:12 +0200 Subject: [PATCH] LOOP-915: Refactored message helper --- .../os2loop_messages/src/Helper/Helper.php | 123 ++++++++---------- 1 file changed, 51 insertions(+), 72 deletions(-) diff --git a/web/profiles/custom/os2loop/modules/os2loop_messages/src/Helper/Helper.php b/web/profiles/custom/os2loop/modules/os2loop_messages/src/Helper/Helper.php index d76e5b59c..51a9398d2 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_messages/src/Helper/Helper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_messages/src/Helper/Helper.php @@ -24,36 +24,7 @@ class Helper extends ControllerBase { * @throws \Drupal\Core\Entity\EntityStorageException */ public function entityInsert(EntityInterface $entity) { - if ($entity instanceof NodeInterface) { - switch ($entity->bundle()) { - case 'os2loop_documents_collection': - $this->createMessage('os2loop_message_collection_ins', $entity); - break; - - case 'os2loop_documents_document': - $this->createMessage('os2loop_message_document_ins', $entity); - break; - - case 'os2loop_question': - $this->createMessage('os2loop_message_question_ins', $entity); - break; - - case 'os2loop_post': - $this->createMessage('os2loop_message_post_ins', $entity); - break; - } - } - elseif ($entity instanceof CommentInterface) { - switch ($entity->bundle()) { - case 'os2loop_question_answer': - $this->createMessage('os2loop_message_answer_ins', $entity); - break; - - case 'os2loop_post_comment': - $this->createMessage('os2loop_message_comment_ins', $entity); - break; - } - } + $this->createMessage($entity, 'ins'); } /** @@ -65,60 +36,68 @@ public function entityInsert(EntityInterface $entity) { * @throws \Drupal\Core\Entity\EntityStorageException */ public function entityUpdate(EntityInterface $entity) { - if ($entity instanceof NodeInterface) { - switch ($entity->bundle()) { - case 'os2loop_documents_collection': - $this->createMessage('os2loop_message_collection_upd', $entity); - break; - - case 'os2loop_documents_document': - $this->createMessage('os2loop_message_document_upd', $entity); - break; - - case 'os2loop_question': - $this->createMessage('os2loop_message_question_upd', $entity); - break; - - case 'os2loop_post': - $this->createMessage('os2loop_message_post_upd', $entity); - break; - } - } - elseif ($entity instanceof CommentInterface) { - switch ($entity->bundle()) { - case 'os2loop_question_answer': - $this->createMessage('os2loop_message_answer_upd', $entity); - break; - - case 'os2loop_post_comment': - $this->createMessage('os2loop_message_comment_upd', $entity); - break; - } - } + $this->createMessage($entity, 'upd'); } /** * Create a message. * - * @param string $template_name - * The name of the message template. * @param \Drupal\Core\Entity\EntityInterface $entity * The entity being to relate to. + * @param string $operation + * The operation performed. * * @throws \Drupal\Core\Entity\EntityStorageException */ - public function createMessage(string $template_name, EntityInterface $entity) { - $message = Message::create(['template' => $template_name]); - if ($entity instanceof NodeInterface) { - $message->set('os2loop_message_node_refer', $entity); + private function createMessage(EntityInterface $entity, string $operation) { + $template = $this->getMessageTemplate($entity, $operation); + if (NULL !== $template) { + $message = Message::create(['template' => $template]); + if ($entity instanceof NodeInterface) { + $message->set('os2loop_message_node_refer', $entity); + } + elseif ($entity instanceof CommentInterface) { + $node_storage = $this->entityTypeManager()->getStorage('node'); + $node = $node_storage->load($entity->get('entity_id')->getValue()[0]['target_id']); + $message->set('os2loop_message_node_refer', $node); + $message->set('os2loop_message_comment_refer', $entity); + } + $message->save(); } - elseif ($entity instanceof CommentInterface) { - $node_storage = $this->entityTypeManager()->getStorage('node'); - $node = $node_storage->load($entity->get('entity_id')->getValue()[0]['target_id']); - $message->set('os2loop_message_node_refer', $node); - $message->set('os2loop_message_comment_refer', $entity); + } + + /** + * Map from bundle to message type. + * + * @var array + */ + private const BUNDLE_MESSAGE_TYPES = [ + 'os2loop_documents_collection' => 'os2loop_message_collection', + 'os2loop_documents_document' => 'os2loop_message_document', + 'os2loop_post' => 'os2loop_message_post', + 'os2loop_post_comment' => 'os2loop_message_comment', + 'os2loop_question' => 'os2loop_message_question', + 'os2loop_question_answer' => 'os2loop_message_answer', + ]; + + /** + * Get message template for an entity operation. + * + * @param \Drupal\Core\Entity\EntityInterface $entity + * The entity. + * @param string $operation + * The operation ('ins' or 'upd'). + * + * @return null|string + * The message template name if any. + */ + private function getMessageTemplate(EntityInterface $entity, string $operation) { + $template = static::BUNDLE_MESSAGE_TYPES[$entity->bundle()] ?? NULL; + if (NULL !== $template) { + $template .= '_' . $operation; } - $message->save(); + + return $template; } }