![]() 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/Model/ |
<?php namespace MauticPlugin\MauticSocialBundle\Model; use Mautic\CoreBundle\Model\AjaxLookupModelInterface; use Mautic\CoreBundle\Model\FormModel; use Mautic\LeadBundle\Entity\Lead; use MauticPlugin\MauticSocialBundle\Entity\Tweet; use MauticPlugin\MauticSocialBundle\Entity\TweetRepository; use MauticPlugin\MauticSocialBundle\Entity\TweetStat; use MauticPlugin\MauticSocialBundle\Entity\TweetStatRepository; use MauticPlugin\MauticSocialBundle\Event as Events; use MauticPlugin\MauticSocialBundle\Form\Type\TweetType; use MauticPlugin\MauticSocialBundle\SocialEvents; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; use Symfony\Contracts\EventDispatcher\Event; /** * @extends FormModel<Tweet> * * @implements AjaxLookupModelInterface<Tweet> */ class TweetModel extends FormModel implements AjaxLookupModelInterface { /** * @param string $filter * @param int $limit * @param int $start * @param array $options */ public function getLookupResults($type, $filter = '', $limit = 10, $start = 0, $options = []): array { $results = []; switch ($type) { case 'social.tweet': case 'tweet': if (isset($filter['tweet_text'])) { // This tweet was created as the campaign action param and these params are not the filter. Clear the filter. $filter = ''; } $tweetRepo = $this->getRepository(); $tweetRepo->setCurrentUser($this->userHelper->getUser()); $entities = $tweetRepo->getTweetList( $filter, $limit, $start, $this->security->isGranted($this->getPermissionBase().':viewother') ); foreach ($entities as $entity) { $results[$entity['language']][$entity['id']] = $entity['name']; } // sort by language ksort($results); unset($entities); break; } return $results; } /** * Create/update Tweet Stat and update sent count for Tweet. * * @param string $source * @param int $sourceId * * @return $this */ public function registerSend(Tweet $tweet, Lead $lead, array $sendResponse, $source = null, $sourceId = null) { $statRepo = $this->getStatRepository(); // Update failed tweet $stat = $statRepo->findOneBy( [ 'lead' => $lead->getId(), 'tweet' => $tweet->getId(), 'source' => $source, 'sourceId' => $sourceId, 'isFailed' => true, ] ); if (!$stat) { // Create new entity $stat = new TweetStat(); } else { // Or add 1 to the retry count $stat->retryCountUp(); } $stat->setTweet($tweet); $stat->setLead($lead); $stat->setResponseDetails($sendResponse); $stat->setSource($source); $stat->setSourceId($sourceId); $fields = $lead->getProfileFields(); if (!empty($fields['twitter'])) { $stat->setHandle($fields['twitter']); } if (!empty($sendResponse['id_str'])) { $stat->setDateSent(new \DateTime()); $stat->setTwitterTweetId($sendResponse['id_str']); $tweet->sentCountUp(); $this->saveEntity($tweet); } else { $stat->setIsFailed(true); } $statRepo->saveEntity($stat); return $this; } /** * @param Tweet $entity * @param array<mixed> $options * * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ public function createForm($entity, FormFactoryInterface $formFactory, $action = null, $options = []): \Symfony\Component\Form\FormInterface { if (!$entity instanceof Tweet) { throw new MethodNotAllowedHttpException(['Tweet']); } if (!empty($action)) { $options['action'] = $action; } return $formFactory->create(TweetType::class, $entity, $options); } /** * Get a specific entity or generate a new one if id is empty. * * @param int $id */ public function getEntity($id = null): ?Tweet { if (null === $id) { return new Tweet(); } return parent::getEntity($id); } /** * @throws MethodNotAllowedHttpException */ protected function dispatchEvent($action, &$entity, $isNew = false, Event $event = null): ?Event { if (!$entity instanceof Tweet) { throw new MethodNotAllowedHttpException(['Tweet']); } switch ($action) { case 'pre_save': $name = SocialEvents::TWEET_PRE_SAVE; break; case 'post_save': $name = SocialEvents::TWEET_POST_SAVE; break; case 'pre_delete': $name = SocialEvents::TWEET_PRE_DELETE; break; case 'post_delete': $name = SocialEvents::TWEET_POST_DELETE; break; default: return null; } if ($this->dispatcher->hasListeners($name)) { if (empty($event)) { $event = new Events\SocialEvent($entity, $isNew); } $this->dispatcher->dispatch($event, $name); return $event; } else { return null; } } public function getRepository(): TweetRepository { return $this->em->getRepository(Tweet::class); } public function getStatRepository(): TweetStatRepository { return $this->em->getRepository(TweetStat::class); } public function getPermissionBase(): string { return 'mauticSocial:tweets'; } }