Source of file api.dreamkasnotifications.php
Size: 9,121 Bytes - Last Modified: 2024-05-04T16:22:09+03:00
/tmp/current_snapshot/api/libs/api.dreamkasnotifications.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 | <?php /** * DreamKas notification area */ class DreamKasNotifications { /** * UbillingConfig object placeholder * * @var null */ protected $ubConfig = null; /** * UbillingCache instance placeholder * * @var null */ protected $ubCache = null; /** * Placeholder for DREAMKAS_NOTIFICATIONS_ENABLED alter.ini option * * @var bool */ protected $notysEnabled = false; /** * Placeholder for DREAMKAS_CACHE_CHECK_INTERVAL alter.ini option * * @var int */ protected $notysPollingInterval = 8000; /** * Placeholder for DREAMKAS_POPUP_TIMEOUT alter.ini option * * @var int */ protected $notysPopupTimeout = 10000; /** * Placeholder for DREAMKAS_NOTIFY_ANYWHERE alter.ini option * * @var bool */ protected $notysEverywhere = true; /** * Placeholder for DREAMKAS_DESKTOP_NOTIFICATIONS alter.ini option * * @var bool */ protected $notysOnDesktop = false; /** * Placeholder for DREAMKAS_ADMINS_ALLOWED alter.ini option * * @var array */ protected $notysAdminsAllowed = array(); /** * Caching timeout based on polling interval in seconds. * * @var int */ protected $cachingTimeout = 8; /** * Contains current instance admin user login * * @var string */ protected $curAdminLogin = ''; const URL_NOTIFICATIONS = '?module=dreamkas&getnotys=true'; const DREAMKAS_NOTYS_CAHCE_KEY = 'DREAMKAS_NOTIFICATIONS'; public function __construct() { global $ubillingConfig; $this->ubConfig = $ubillingConfig; $this->ubCache = new UbillingCache(); $this->loadOptions(); } /** * Getting an alter.ini options * * @return void */ protected function loadOptions() { $this->notysEnabled = wf_getBoolFromVar($this->ubConfig->getAlterParam('DREAMKAS_NOTIFICATIONS_ENABLED')); $this->notysPollingInterval = ($this->ubConfig->getAlterParam('DREAMKAS_CACHE_CHECK_INTERVAL')) ? $this->ubConfig->getAlterParam('DREAMKAS_CACHE_CHECK_INTERVAL') * 1000 : 8000; $this->cachingTimeout = ($this->ubConfig->getAlterParam('DREAMKAS_CACHE_CHECK_INTERVAL')) ? $this->ubConfig->getAlterParam('DREAMKAS_CACHE_CHECK_INTERVAL') : 8; $this->notysPopupTimeout = ($this->ubConfig->getAlterParam('DREAMKAS_POPUP_TIMEOUT')) ? $this->ubConfig->getAlterParam('DREAMKAS_POPUP_TIMEOUT') * 1000 : 10000; $this->notysEverywhere = wf_getBoolFromVar($this->ubConfig->getAlterParam('DREAMKAS_NOTIFY_ANYWHERE')); $this->notysOnDesktop = wf_getBoolFromVar($this->ubConfig->getAlterParam('DREAMKAS_DESKTOP_NOTIFICATIONS')); $this->notysAdminsAllowed = explode(',', str_replace(' ', '', $this->ubConfig->getAlterParam('DREAMKAS_ADMINS_ALLOWED'))); $this->notysAdminsAllowed = array_flip($this->notysAdminsAllowed); } public function getDreamkasNotifications() { $noty = array(); $count = 0; $notyCached = $this->ubCache->get(self::DREAMKAS_NOTYS_CAHCE_KEY, $this->cachingTimeout); if (!empty($notyCached)) { foreach ($notyCached as $eachNoty) { $notificationText = wf_tag('div', false, 'dreamkastext'); $notificationText .= wf_tag('span', false, 'dreamkastitle') . $eachNoty['title'] . wf_tag('span', true); $notificationText .= wf_delimiter() . $eachNoty['text']; $notificationText .= wf_tag('div', true); $noty[$count]['text'] = $notificationText; $noty[$count]['type'] = $eachNoty['type']; $noty[$count]['index'] = $count; $count++; } $this->ubCache->delete(self::DREAMKAS_NOTYS_CAHCE_KEY); } die(json_encode($noty)); } /** * Returns notification frontend with some background polling * * @return string */ protected function getDreamkasNotificationsJS() { $result = ''; //some custom style $result .= wf_tag('style'); //this style is inline for preventing of css caching $result .= ' #noty_layout__bottomRight { width: 480px !important; } .dreamkastext { float: left; display: block; font-size: 11pt; margin: 10px 1px; } .dreamkastitle { font-weight: 700; } '; if ($this->notysOnDesktop) { $result .= ' #noty_layout__bottomRight { margin-bottom: 120px !important; } '; } $result .= wf_tag('style', true); //basic notification frontend $result .= wf_tag('script'); $result .= ' $(document).ready(function() { Notification.requestPermission().then(function(result) { console.log(result); }); $(".dismiss").click(function(){$("#notification").fadeOut("slow");}); setInterval( function() { $.get("' . self::URL_NOTIFICATIONS . '&reqadm=' . $this->curAdminLogin . '", function(message) { if (message) { var data= JSON.parse(message); data.forEach(function(key) { new Noty({ theme: \'bootstrap-v4\', timeout: \'' . $this->notysPopupTimeout . '\', progressBar: true, type: key.type, layout: \'bottomRight\', killer: key.index, queue: key.index, text: key.text }).show(); if (typeof (sendNotificationDesktop) === "function") { var title = "' . __('Dreamkas notification') . '"; var options = { body: key.text, tag: key.index, dir: "auto" }; sendDSNotificationDesktop(title, options, key.link); } }); } } ) }, ' . $this->notysPollingInterval . '); }) '; $result .= wf_tag('script', true); if ($this->notysOnDesktop) { $result .= wf_tag('script'); $result .= ' function sendDSNotificationDesktop(title, options, link) { if (Notification.permission === "granted") { var notification = new Notification(title, options); if(link) { notification.onclick = function() { window.open(link,"_self"); } } } else if (Notification.permission !== "denied") { Notification.requestPermission(function (permission) { if (permission === "granted") { var notification = new Notification(title, options); if(link) { notification.onclick = function() { window.open(link,"_self"); } } } }); } }; '; $result .= wf_tag('script', true); } return ($result); } /** * Renders widget code if it required for current situation * * @return string/void */ public function renderWidget() { $result = ''; if (cfr('DREAMKAS')) { if ($this->ubConfig->getAlterParam('DREAMKAS_ENABLED')) { $widget = $this->getDreamkasNotificationsJS(); if ($this->notysEverywhere) { $result .= $widget; } else { if ((@$_GET['module'] == 'taskbar') OR ( !isset($_GET['module']))) { $result .= $widget; } } //per-admin controls if ((!empty($this->notysAdminsAllowed) AND ( !isset($this->notysAdminsAllowed[$this->curAdminLogin])))) { $result = ''; } return ($result); } } } } |