![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/plugins/MauticSocialBundle/Helper/ |
<?php namespace MauticPlugin\MauticSocialBundle\Helper; use Mautic\AssetBundle\Helper\TokenHelper as AssetTokenHelper; use Mautic\LeadBundle\Entity\Lead; use Mautic\LeadBundle\Helper\TokenHelper; use Mautic\PageBundle\Entity\Trackable; use Mautic\PageBundle\Helper\TokenHelper as PageTokenHelper; use Mautic\PageBundle\Model\TrackableModel; use Mautic\PluginBundle\Helper\IntegrationHelper; use MauticPlugin\MauticSocialBundle\Model\TweetModel; class CampaignEventHelper { /** * @var array */ protected $clickthrough = []; public function __construct( protected IntegrationHelper $integrationHelper, protected TrackableModel $trackableModel, protected PageTokenHelper $pageTokenHelper, protected AssetTokenHelper $assetTokenHelper, protected TweetModel $tweetModel ) { } /** * @return array|false */ public function sendTweetAction(Lead $lead, array $event) { $tweetSent = false; $tweetEntity = $this->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); } }