/** * @param $slackId * @param $title * @param $url * @param array $tags * @return Link */ public static function fromSlack(MessageId $slackId, User $user, Datetime $createdTs, $title, $url, array $tags = array()) { $link = new Link(); $link->slackId = $slackId->getValue(); $link->user = $user; $link->createdTs = $createdTs; $link->title = $title; $link->url = $url; $link->author = $user->getName(); foreach ($tags as $tag) { $link->addTag(new Tag($tag)); } return $link; }
/** * @param Message $message */ public function process(Message $message) { // Only process messages where ShareMonkey is mentioned if ($this->shareMonkeyIsMentioned($message->getText()) === false) { return; } $text = $message->getText(); $urls = $text->getUrls(); $tags = $text->getTags(); if (count($urls) === 0) { $this->logger->debug('No urls found in message'); return; } $user = $this->userRepository->findOneBySlackId($message->getUserId()); if (!$user instanceof User) { $this->logger->error(sprintf('User "%s" not found', $message->getUserId()->getValue())); return; } foreach ($urls as $url) { $this->logger->debug(sprintf('processing url %s', $url)); $info = Embed::create($url); $link = Link::fromSlack($message->getId(), $user, $message->getCreatedAt(), $info->getTitle() ?: $message->getText(), $url, $tags); $this->objectManager->persist($link); $this->objectManager->flush(); $this->objectManager->clear(); $this->logger->debug(sprintf('Saved link %s', $link->getUrl())); } }