url = $url; $this->message = $message; $this->generator = new MarkupGenerator(); } public function generateEmbed() { return ''; } public function generateNode() { if ($this->generateRequest()) { $node = $this->setNodeData(); $this->processTerms(); if ($node->save()) { return $node->id(); } } return null; } public function setNodeData() { $provider_manager = \Drupal::service('video.provider_manager'); $enabled_providers = $provider_manager->loadDefinitionsFromOptionList(array('youtube' => 'youtube')); if ($provider_matches = $provider_manager->loadApplicableDefinitionMatches($enabled_providers, $this->url)) { $definition = $provider_matches['definition']; $matches = $provider_matches['matches']; $uri = $definition['stream_wrapper'] . '://' . $matches['id']; $storage = \Drupal::entityManager()->getStorage('file'); $results = $storage->getQuery() ->condition('uri', $uri) ->execute(); if (!(count($results) > 0)) { $user = \Drupal::currentUser(); $file = File::Create([ 'uri' => $uri, 'filemime' => $definition['mimetype'], 'filesize' => 1, 'uid' => $user->id() ]); $file->save(); $fid = $file->id(); } else { $fid = array_values($results)[0]; } $node = Node::create([ 'type' => 'youtube_video', 'title' => $this->generator->getTitle(), 'status' => 1, 'uid' => \Drupal::currentUser()->id(), 'field_video_embed' => $fid, ]); if ($this->message) { $node->set('body', [ 'value' => '
' . $this->message . '
', 'format' => 'full_html' ]); } return $node; } return null; } public static function parseHashtags($message) { $tids = array(); $i = 0; $tagsArray = explode('#', $message); unset($tagsArray[0]); $num = count($tagsArray); foreach ($tagsArray as $hashtag) { $hashtag = strpos($hashtag, ' ') ? substr($hashtag, 0, strpos($hashtag, ' ')) : $hashtag; if ($i === $num - 1) { $lastTagArray = explode(' ', $hashtag); if (strlen($lastTagArray[1]) > 1) { $hashtag = trim($lastTagArray[0]); } } $tid = \Drupal::entityQuery("taxonomy_term") ->condition("name", trim($hashtag)) ->condition('vid', [ 'twitter', 'tags', ], 'IN') ->execute(); if (count($tid) > 0) { if (\Drupal::moduleHandler()->moduleExists('heartbeat')) { Heartbeat::updateTermUsage(array_values($tid)[0], 'tags'); } $tids[] = array_values($tid)[0]; } else { $term = Term::create([ 'name' => trim($hashtag), 'vid' => 'tags', 'field_count' => 1 ]); if ($term->save()) { $tids[] = $term->id(); if (\Drupal::moduleHandler()->moduleExists('heartbeat')) { Heartbeat::newTermUsage($term->id()); } } } $i++; } return $tids; } private function processTerms() { foreach ($this->generator->getTags() as $tag) { $newTag = $tag; } if ($this->message) { $this->tags = self::parseHashtags($this->message); } return $this->generator->getTags(); } private function generateRequest() { return $this->generator->parseMarkup($this->url); } }