![]() 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/app/bundles/NotificationBundle/Helper/ |
<?php namespace Mautic\NotificationBundle\Helper; use Doctrine\ORM\EntityManager; use Mautic\CoreBundle\Helper\CoreParametersHelper; use Mautic\CoreBundle\Twig\Helper\AssetsHelper; use Mautic\LeadBundle\Entity\DoNotContact; use Mautic\PluginBundle\Helper\IntegrationHelper; use Symfony\Bundle\FrameworkBundle\Routing\Router; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class NotificationHelper { public function __construct( protected EntityManager $em, protected AssetsHelper $assetsHelper, protected CoreParametersHelper $coreParametersHelper, protected IntegrationHelper $integrationHelper, protected Router $router, protected RequestStack $requestStack, private \Mautic\LeadBundle\Model\DoNotContact $doNotContact ) { } /** * @param string $notification * * @return bool */ public function unsubscribe($notification) { /** @var \Mautic\LeadBundle\Entity\LeadRepository $repo */ $repo = $this->em->getRepository(\Mautic\LeadBundle\Entity\Lead::class); $lead = $repo->getLeadByEmail($notification); return $this->doNotContact->addDncForContact($lead->getId(), 'notification', DoNotContact::UNSUBSCRIBED); } public function getHeaderScript() { if ($this->hasScript()) { return 'MauticJS.insertScript(\'https://cdn.onesignal.com/sdks/OneSignalSDK.js\'); var OneSignal = OneSignal || [];'; } } public function getScript() { if ($this->hasScript()) { $integration = $this->integrationHelper->getIntegrationObject('OneSignal'); if (!$integration || false === $integration->getIntegrationSettings()->getIsPublished()) { return; } $settings = $integration->getIntegrationSettings(); $keys = $integration->getDecryptedApiKeys(); $supported = $settings->getSupportedFeatures(); $featureSettings = $settings->getFeatureSettings(); $appId = $keys['app_id']; $safariWebId = $keys['safari_web_id']; $welcomenotificationEnabled = in_array('welcome_notification_enabled', $supported); $notificationSubdomainName = $featureSettings['subdomain_name']; $leadAssociationUrl = $this->router->generate( 'mautic_subscribe_notification', [], UrlGeneratorInterface::ABSOLUTE_URL ); $welcomenotificationText = ''; if (!$welcomenotificationEnabled) { $welcomenotificationText = 'welcomeNotification: { "disable": true },'; } $server = $this->requestStack->getCurrentRequest()->server; $https = ('https' == parse_url($server->get('HTTP_REFERER'), PHP_URL_SCHEME)) ? true : false; $subdomainName = ''; if (!$https && $notificationSubdomainName) { $subdomainName = 'subdomainName: "'.$notificationSubdomainName.'", httpPermissionRequest: { enable: true, useCustomModal: true },'; } $oneSignalInit = <<<JS var scrpt = document.createElement('link'); scrpt.rel ='manifest'; scrpt.href ='/manifest.json'; var head = document.getElementsByTagName('head')[0]; head.appendChild(scrpt); OneSignal.push(["init", { appId: "{$appId}", safari_web_id: "{$safariWebId}", autoRegister: true, {$welcomenotificationText} {$subdomainName} notifyButton: { enable: false // Set to false to hide } }]); var postUserIdToMautic = function(userId) { var data = []; data['osid'] = userId; MauticJS.makeCORSRequest('GET', '{$leadAssociationUrl}', data); }; OneSignal.push(function() { OneSignal.getUserId(function(userId) { if (! userId) { OneSignal.on('subscriptionChange', function(isSubscribed) { if (isSubscribed) { OneSignal.getUserId(function(newUserId) { postUserIdToMautic(newUserId); }); } }); } else { postUserIdToMautic(userId); } }); // Just to be sure we've grabbed the ID window.onbeforeunload = function() { OneSignal.getUserId(function(userId) { if (userId) { postUserIdToMautic(userId); } }); }; }); JS; if (!$https && $notificationSubdomainName) { $oneSignalInit .= <<<'JS' OneSignal.push(function() { OneSignal.on('notificationPermissionChange', function(permissionChange) { if(currentPermission == 'granted'){ setTimeout(function(){ OneSignal.registerForPushNotifications({httpPermissionRequest: true}); }, 100); } }); }); JS; } return $oneSignalInit; } } private function hasScript(): bool { $landingPage = true; $server = $this->requestStack->getCurrentRequest()->server; $cookies = $this->requestStack->getCurrentRequest()->cookies; // already exist if ($cookies->get('mtc_osid')) { return false; } if (!str_contains($server->get('HTTP_REFERER'), $this->coreParametersHelper->get('site_url'))) { $landingPage = false; } $integration = $this->integrationHelper->getIntegrationObject('OneSignal'); if (!$integration || false === $integration->getIntegrationSettings()->getIsPublished()) { return false; } $supportedFeatures = $integration->getIntegrationSettings()->getSupportedFeatures(); // disable on Landing pages if (true === $landingPage && !in_array('landing_page_enabled', $supportedFeatures)) { return false; } // disable on Landing pages if (false === $landingPage && !in_array('tracking_page_enabled', $supportedFeatures)) { return false; } return true; } }