Spaces:
No application file
No application file
| namespace MauticPlugin\MauticSocialBundle\Integration; | |
| use Doctrine\ORM\EntityManager; | |
| use Mautic\CoreBundle\Helper\CacheStorageHelper; | |
| use Mautic\CoreBundle\Helper\EncryptionHelper; | |
| use Mautic\CoreBundle\Helper\PathsHelper; | |
| use Mautic\CoreBundle\Model\NotificationModel; | |
| use Mautic\CoreBundle\Translation\Translator; | |
| use Mautic\LeadBundle\Model\CompanyModel; | |
| use Mautic\LeadBundle\Model\DoNotContact; | |
| use Mautic\LeadBundle\Model\FieldModel; | |
| use Mautic\LeadBundle\Model\LeadModel; | |
| use Mautic\PluginBundle\Helper\IntegrationHelper; | |
| use Mautic\PluginBundle\Integration\AbstractIntegration; | |
| use Mautic\PluginBundle\Model\IntegrationEntityModel; | |
| use Monolog\Logger; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| use Symfony\Component\Form\FormBuilder; | |
| use Symfony\Component\HttpFoundation\RequestStack; | |
| use Symfony\Component\HttpFoundation\Session\Session; | |
| use Symfony\Component\Routing\Router; | |
| use Symfony\Contracts\Translation\TranslatorInterface; | |
| abstract class SocialIntegration extends AbstractIntegration | |
| { | |
| protected $persistNewLead = false; | |
| /** | |
| * @var Translator | |
| */ | |
| protected TranslatorInterface $translator; | |
| public function __construct( | |
| EventDispatcherInterface $eventDispatcher, | |
| CacheStorageHelper $cacheStorageHelper, | |
| EntityManager $entityManager, | |
| Session $session, | |
| RequestStack $requestStack, | |
| Router $router, | |
| Translator $translator, | |
| Logger $logger, | |
| EncryptionHelper $encryptionHelper, | |
| LeadModel $leadModel, | |
| CompanyModel $companyModel, | |
| PathsHelper $pathsHelper, | |
| NotificationModel $notificationModel, | |
| FieldModel $fieldModel, | |
| IntegrationEntityModel $integrationEntityModel, | |
| DoNotContact $doNotContact, | |
| protected IntegrationHelper $integrationHelper | |
| ) { | |
| parent::__construct( | |
| $eventDispatcher, | |
| $cacheStorageHelper, | |
| $entityManager, | |
| $session, | |
| $requestStack, | |
| $router, | |
| $translator, | |
| $logger, | |
| $encryptionHelper, | |
| $leadModel, | |
| $companyModel, | |
| $pathsHelper, | |
| $notificationModel, | |
| $fieldModel, | |
| $integrationEntityModel, | |
| $doNotContact | |
| ); | |
| } | |
| /** | |
| * @param \Mautic\PluginBundle\Integration\Form|FormBuilder $builder | |
| * @param array $data | |
| * @param string $formArea | |
| */ | |
| public function appendToForm(&$builder, $data, $formArea): void | |
| { | |
| if ('features' == $formArea) { | |
| $name = strtolower($this->getName()); | |
| $formType = $this->getFormType(); | |
| if ($formType) { | |
| $builder->add('shareButton', $formType, [ | |
| 'label' => 'mautic.integration.form.sharebutton', | |
| 'required' => false, | |
| 'data' => $data['shareButton'] ?? [], | |
| ]); | |
| } | |
| } | |
| } | |
| /** | |
| * @param array $settings | |
| * | |
| * @return array | |
| */ | |
| public function getFormLeadFields($settings = []) | |
| { | |
| static $fields = []; | |
| if (empty($fields)) { | |
| $s = $this->getName(); | |
| $available = $this->getAvailableLeadFields($settings); | |
| if (empty($available) || !is_array($available)) { | |
| return []; | |
| } | |
| // create social profile fields | |
| $socialProfileUrls = $this->integrationHelper->getSocialProfileUrlRegex(); | |
| foreach ($available as $field => $details) { | |
| $label = (!empty($details['label'])) ? $details['label'] : false; | |
| $fn = $this->matchFieldName($field); | |
| switch ($details['type']) { | |
| case 'string': | |
| case 'boolean': | |
| $fields[$fn] = (!$label) | |
| ? $this->translator->transConditional("mautic.integration.common.{$fn}", "mautic.integration.{$s}.{$fn}") | |
| : $label; | |
| break; | |
| case 'object': | |
| if (isset($details['fields'])) { | |
| foreach ($details['fields'] as $f) { | |
| $fn = $this->matchFieldName($field, $f); | |
| $fields[$fn] = (!$label) | |
| ? $this->translator->transConditional("mautic.integration.common.{$fn}", "mautic.integration.{$s}.{$fn}") | |
| : $label; | |
| } | |
| } else { | |
| $fields[$field] = (!$label) | |
| ? $this->translator->transConditional("mautic.integration.common.{$fn}", "mautic.integration.{$s}.{$fn}") | |
| : $label; | |
| } | |
| break; | |
| case 'array_object': | |
| if ('urls' == $field || 'url' == $field) { | |
| foreach ($socialProfileUrls as $p => $d) { | |
| $fields["{$p}ProfileHandle"] = (!$label) | |
| ? $this->translator->transConditional("mautic.integration.common.{$p}ProfileHandle", "mautic.integration.{$s}.{$p}ProfileHandle") | |
| : $label; | |
| } | |
| foreach ($details['fields'] as $f) { | |
| $fields["{$p}Urls"] = (!$label) | |
| ? $this->translator->transConditional("mautic.integration.common.{$f}Urls", "mautic.integration.{$s}.{$f}Urls") | |
| : $label; | |
| } | |
| } elseif (isset($details['fields'])) { | |
| foreach ($details['fields'] as $f) { | |
| $fn = $this->matchFieldName($field, $f); | |
| $fields[$fn] = (!$label) | |
| ? $this->translator->transConditional("mautic.integration.common.{$fn}", "mautic.integration.{$s}.{$fn}") | |
| : $label; | |
| } | |
| } else { | |
| $fields[$fn] = (!$label) | |
| ? $this->translator->transConditional("mautic.integration.common.{$fn}", "mautic.integration.{$s}.{$fn}") | |
| : $label; | |
| } | |
| break; | |
| } | |
| } | |
| if ($this->sortFieldsAlphabetically()) { | |
| uasort($fields, 'strnatcmp'); | |
| } | |
| } | |
| return $fields; | |
| } | |
| public function getFormCompanyFields($settings = []) | |
| { | |
| $settings['feature_settings']['objects'] = ['Company']; | |
| return []; | |
| } | |
| public function getAuthenticationType() | |
| { | |
| return 'oauth2'; | |
| } | |
| public function getRequiredKeyFields() | |
| { | |
| return [ | |
| 'client_id' => 'mautic.integration.keyfield.clientid', | |
| 'client_secret' => 'mautic.integration.keyfield.clientsecret', | |
| ]; | |
| } | |
| /** | |
| * Get the array key for clientId. | |
| * | |
| * @return string | |
| */ | |
| public function getClientIdKey() | |
| { | |
| return 'client_id'; | |
| } | |
| /** | |
| * Get the array key for client secret. | |
| * | |
| * @return string | |
| */ | |
| public function getClientSecretKey() | |
| { | |
| return 'client_secret'; | |
| } | |
| /** | |
| * @param string $data | |
| * @param bool $postAuthorization | |
| * | |
| * @return mixed | |
| */ | |
| public function parseCallbackResponse($data, $postAuthorization = false) | |
| { | |
| if ($postAuthorization) { | |
| return json_decode($data, true); | |
| } else { | |
| return json_decode($data); | |
| } | |
| } | |
| /** | |
| * Returns notes specific to sections of the integration form (if applicable). | |
| * | |
| * @return array<mixed> | |
| */ | |
| public function getFormNotes($section) | |
| { | |
| return ['', 'info']; | |
| } | |
| /** | |
| * Get the template for social profiles. | |
| * | |
| * @return string | |
| */ | |
| public function getSocialProfileTemplate() | |
| { | |
| return "MauticSocialBundle:Integration/{$this->getName()}/Profile:view.html.twig"; | |
| } | |
| /** | |
| * Get the access token from session or socialCache. | |
| * | |
| * @return array|mixed|null | |
| */ | |
| protected function getContactAccessToken(&$socialCache) | |
| { | |
| if (!$this->session) { | |
| return null; | |
| } | |
| if (!$this->session->isStarted()) { | |
| return (isset($socialCache['accessToken'])) ? $this->decryptApiKeys($socialCache['accessToken']) : null; | |
| } | |
| $accessToken = $this->session->get($this->getName().'_tokenResponse', []); | |
| if (!isset($accessToken[$this->getAuthTokenKey()])) { | |
| if (isset($socialCache['accessToken'])) { | |
| $accessToken = $this->decryptApiKeys($socialCache['accessToken']); | |
| } else { | |
| return null; | |
| } | |
| } else { | |
| $this->session->remove($this->getName().'_tokenResponse'); | |
| $socialCache['accessToken'] = $this->encryptApiKeys($accessToken); | |
| $this->persistNewLead = true; | |
| } | |
| return $accessToken; | |
| } | |
| /** | |
| * Returns form type. | |
| * | |
| * @return string|null | |
| */ | |
| abstract public function getFormType(); | |
| } | |