mautic / app /bundles /NotificationBundle /Helper /NotificationHelper.php
chrisbryan17's picture
Upload folder using huggingface_hub
d2897cd verified
<?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;
}
}