tweetModel->getEntity($event['channelId']); if (!$tweetEntity) { return ['failed' => 1, 'response' => 'Tweet entity '.$event['channelId'].' not found']; } /** @var \MauticPlugin\MauticSocialBundle\Integration\TwitterIntegration $twitterIntegration */ $twitterIntegration = $this->integrationHelper->getIntegrationObject('Twitter'); // Setup clickthrough for URLs in tweet $this->clickthrough = [ 'source' => ['campaign', $event['campaign']['id']], ]; $leadArray = $lead->getProfileFields(); if (empty($leadArray['twitter'])) { return false; } $tweetText = $tweetEntity->getText(); $tweetText = $this->parseTweetText($tweetText, $leadArray, $tweetEntity->getId()); $tweetUrl = $twitterIntegration->getApiUrl('statuses/update'); $status = ['status' => $tweetText]; // fire the tweet $sendResponse = $twitterIntegration->makeRequest($tweetUrl, $status, 'POST', ['append_callback' => false]); // verify the tweet was sent by checking for a tweet id if (is_array($sendResponse) && array_key_exists('id_str', $sendResponse)) { $tweetSent = true; } if ($tweetSent) { $this->tweetModel->registerSend($tweetEntity, $lead, $sendResponse, 'campaign.event', $event['id']); return ['timeline' => $tweetText, 'response' => $sendResponse]; } $response = ['failed' => 1, 'response' => $sendResponse]; if (!empty($sendResponse['error']['message'])) { $response['reason'] = $sendResponse['error']['message']; } return $response; } /** * PreParse the twitter message and replace placeholders with values. * * @param string $text * @param array $lead * @param int $channelId * * @return string|string[] */ protected function parseTweetText($text, $lead, $channelId = -1): array|string { $tweetHandle = $lead['twitter']; $tokens = [ '{twitter_handle}' => (str_contains($tweetHandle, '@')) ? $tweetHandle : "@$tweetHandle", ]; $tokens = array_merge( $tokens, TokenHelper::findLeadTokens($text, $lead), $this->pageTokenHelper->findPageTokens($text, $this->clickthrough), $this->assetTokenHelper->findAssetTokens($text, $this->clickthrough) ); [$text, $trackables] = $this->trackableModel->parseContentForTrackables( $text, $tokens, 'social_twitter', $channelId ); /** * @var string $token * @var Trackable $trackable */ foreach ($trackables as $token => $trackable) { $tokens[$token] = $this->trackableModel->generateTrackableUrl($trackable, $this->clickthrough); } return str_replace(array_keys($tokens), array_values($tokens), $text); } }