Initial commit: CloudOps infrastructure platform
This commit is contained in:
@@ -0,0 +1,193 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user