![]() 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/Integration/ |
<?php 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(); }