Source of file api.darkvoid.php
Size: 16,892 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.darkvoid.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 | <?php /** * Notification area aka DarkVoid class */ class DarkVoid { /** * * Contains system alter config as key=>value * * @var array */ protected $altCfg = array(); /** * Contains current user login * * @var string */ protected $myLogin = ''; /** * Contains alerts cache * * @var string */ protected $alerts = ''; /** * Contains default cache timeout in minutes * * @var int */ protected $cacheTime = '10'; /** * UbillingConfig object placeholder * * @var null */ protected $ubConfig = null; /** * Array of modules that must be skipped on alert updates * * @var array */ protected $skipOnModules = array(); /** * Cache storage path */ const CACHE_PATH = 'exports/'; /** * Cache prefix */ const CACHE_PREFIX = 'darkvoid.'; public function __construct() { if (LOGGED_IN) { $this->setModSkip(); $this->setMyLogin(); $this->loadAlter(); $this->loadAlerts(); } } /** * Sets modules array to be skipped on alert updates to prevent DB ops * * @return void */ protected function setModSkip() { $this->skipOnModules = array('turbosms', 'senddog', 'remoteapi', 'updatemanager'); $this->skipOnModules = array_flip($this->skipOnModules); } /** * Loads alerts from per-user cache or from database if needed * * @return void */ protected function loadAlerts() { $cacheName = self::CACHE_PATH . self::CACHE_PREFIX . $this->myLogin; $cacheTime = time() - ($this->cacheTime * 60); //in minutes $updateCache = false; if (file_exists($cacheName)) { $updateCache = false; if ((filemtime($cacheName) > $cacheTime)) { $updateCache = false; } else { $updateCache = true; } } else { $updateCache = true; } if ($updateCache) { //ugly hack to prevent alerts update on tsms and senddog modules if (isset($_GET['module'])) { if (!isset($this->skipOnModules[$_GET['module']])) { //renew cache $this->updateAlerts(); } } else { //renew cache $this->updateAlerts(); } } else { //read from cache @$this->alerts = file_get_contents($cacheName); } } /** * Sets private login property * * @return */ protected function setMyLogin() { $this->myLogin = whoami(); } /** * Loads global alter.ini config into protected property * * @global type $ubillingConfig * @return void */ protected function loadAlter() { global $ubillingConfig; $this->ubConfig = $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); if (isset($this->altCfg['DARKVOID_CACHETIME'])) { if ($this->altCfg['DARKVOID_CACHETIME']) { $this->cacheTime = $this->altCfg['DARKVOID_CACHETIME']; } } } /** * Renders available and enabled alerts into DarkVoid notification area * * @return void */ protected function updateAlerts() { //new tickets alert if ($this->altCfg['TB_NEWTICKETNOTIFY']) { $newticketcount = zb_TicketsGetAllNewCount(); if ($newticketcount != 0) { $this->alerts .= wf_Link('?module=ticketing', wf_img('skins/ticketnotify.gif', $newticketcount . ' ' . __('support tickets expected processing')), false); } } //new signups notification if ($this->altCfg['SIGREQ_ENABLED']) { $signups = new SignupRequests(); $newreqcount = $signups->getAllNewCount(); if ($newreqcount != 0) { $this->alerts .= wf_Link('?module=sigreq', wf_img('skins/sigreqnotify.gif', $newreqcount . ' ' . __('signup requests expected processing')), false); } } //check for unread messages in instant messanger if ($this->altCfg['TB_UBIM']) { if (cfr('UBIM')) { $unreadMessageCount = im_CheckForUnreadMessages(); if ($unreadMessageCount) { //we have new messages $unreadIMNotify = __('You received') . ' ' . $unreadMessageCount . ' ' . __('new messages'); $urlIM = $unreadIMNotify . wf_delimiter() . wf_Link("?module=ubim&checknew=true", __('Click here to go to the instant messaging service.'), false, 'ubButton'); $this->alerts .= wf_Link("?module=ubim&checknew=true", wf_img("skins/ubim_blink.gif", $unreadMessageCount . ' ' . __('new message received')), false, ''); //$this->alerts.=wf_modalOpened(__('New messages received'), $urlIM, '450', '200'); } } } //check sms sending queue if ($this->altCfg['SENDDOG_ENABLED']) { $smsQueueCount = rcms_scandir(DATA_PATH . 'tsms/'); $smsQueueCount = sizeof($smsQueueCount); if ($smsQueueCount > 0) { $this->alerts .= wf_Link('?module=tsmsqueue', wf_img('skins/sms.png', $smsQueueCount . ' ' . __('SMS in queue')), false, ''); } if ($this->altCfg['SENDDOG_PARALLEL_MODE']) { $sendDogPid = SendDog::PID_PATH; if (file_exists($sendDogPid)) { $this->alerts .= wf_Link('?module=tsmsqueue', wf_img('skins/dog_stand.png', __('SendDog is working')), false, ''); } } } //police dog alerts if ($this->altCfg['POLICEDOG_ENABLED']) { $policeDogQuery = "SELECT COUNT(`id`) from `policedogalerts`"; $policeDogCount = simple_query($policeDogQuery); $policeDogCount = $policeDogCount['COUNT(`id`)']; if ($policeDogCount > 0) { $this->alerts .= wf_Link('?module=policedog&show=fastscan', wf_img('skins/policedogalert.png', $policeDogCount . ' ' . __('Wanted MAC detected')), false, ''); } } if ($this->altCfg['TB_TASKMANNOTIFY']) { //only "for me" tasks notification if ($this->altCfg['TB_TASKMANNOTIFY'] == 1) { $undoneTasksCount = ts_GetUndoneCountersMy(); if ($undoneTasksCount > 0) { $undoneAlert = $undoneTasksCount . ' ' . __('Undone tasks') . ' ' . __('for me'); $this->alerts .= wf_Link("?module=taskman&show=undone", wf_img("skins/jobnotify.png", $undoneAlert), false, ''); } } //total undone tasks count notification if ($this->altCfg['TB_TASKMANNOTIFY'] == 2) { $undoneTasksCount = ts_GetUndoneCountersAll(); if ($undoneTasksCount > 0) { $undoneAlert = $undoneTasksCount . ' ' . __('Undone tasks') . ' ' . __('for all'); $this->alerts .= wf_Link("?module=taskman&show=undone", wf_img("skins/jobnotify.png", $undoneAlert), false, ''); } } //total+my undone tasks count notification if ($this->altCfg['TB_TASKMANNOTIFY'] == 3) { $undoneTasksCount = ts_GetUndoneCountersAll(); if ($undoneTasksCount > 0) { $undoneTasksCountMy = ts_GetUndoneCountersMy(); $undoneAlert = $undoneTasksCount . ' ' . __('Undone tasks') . ': ' . __('for all') . ' ' . ($undoneTasksCount - $undoneTasksCountMy) . ' / ' . __('for me') . ' ' . $undoneTasksCountMy; $this->alerts .= wf_Link("?module=taskman&show=undone", wf_img("skins/jobnotify.png", $undoneAlert), false, ''); } } } //missed calls notification if (@$this->altCfg['WDYC_ENABLED']) { $wdycCache = 'exports/whydoyoucall.dat'; if (file_exists($wdycCache)) { $cacheData = file_get_contents($wdycCache); if (!empty($wdycCache)) { $cacheData = unserialize($cacheData); $missedCallsCount = sizeof($cacheData); if ($missedCallsCount > 0) { $missedCallsAlert = $missedCallsCount . ' ' . __('users tried to contact you but could not'); $this->alerts .= wf_Link('?module=whydoyoucall', wf_img("skins/wdycnotify.png", $missedCallsAlert), false, ''); } } } } //callback services if (@$this->altCfg['CALLMEBACK_ENABLED']) { $callMeBack = new CallMeBack(); $undoneCallsCount = $callMeBack->getUndoneCount(); if ($undoneCallsCount > 0) { $callmeBackAlert = $undoneCallsCount . ' ' . __('Users are waiting for your call'); $this->alerts .= wf_Link('?module=callmeback', wf_img("skins/cmbnotify.png", $callmeBackAlert), false, ''); } } //NAS servers monitoring if (isset($this->altCfg['NASMON_ENABLED'])) { if ($this->altCfg['NASMON_ENABLED']) { $nasMon = new NasMon(); $this->alerts .= $nasMon->getNasAlerts(); } } //watchdog maintenance mode notification if (isset($this->altCfg['WATCHDOG_ENABLED'])) { if ($this->altCfg['WATCHDOG_ENABLED']) { $watchDogMaintenance = zb_StorageGet('WATCHDOG_MAINTENANCE'); $watchDogSmsSilence = zb_StorageGet('WATCHDOG_SMSSILENCE'); if ($watchDogMaintenance) { $this->alerts .= wf_Link('?module=watchdog', wf_img('skins/maintenance.png', __('Watchdog') . ': ' . __('Disabled'))); } if ($watchDogSmsSilence) { $this->alerts .= wf_Link('?module=watchdog', wf_img('skins/smssilence.png', __('Watchdog') . ': ' . __('SMS silence'))); } } } //switchmon at notify area if ($this->altCfg['TB_SWITCHMON']) { $dead_raw = zb_StorageGet('SWDEAD'); $last_pingtime = zb_StorageGet('SWPINGTIME'); if (!is_numeric($last_pingtime)) { $last_pingtime = 0; } $deathTime = zb_SwitchesGetAllDeathTime(); $deadarr = array(); $content = ''; if ($this->altCfg['SWYMAP_ENABLED']) { $content = wf_Link('?module=switchmap', wf_img('skins/swmapsmall.png', __('Switches map')), false); } $content .= wf_AjaxLoader() . wf_AjaxLink("?module=switches&forcereping=true&ajaxping=true", wf_img('skins/refresh.gif', __('Force ping')), 'switchping', true, ''); if ($dead_raw) { $deadarr = unserialize($dead_raw); if (!empty($deadarr)) { //there is some dead switches $deadcount = sizeof($deadarr); if ($this->altCfg['SWYMAP_ENABLED']) { //getting geodata $switchesGeo = zb_SwitchesGetAllGeo(); } //ajax container $content .= wf_tag('div', false, '', 'id="switchping"'); foreach ($deadarr as $ip => $switch) { if ($this->altCfg['SWYMAP_ENABLED']) { if (isset($switchesGeo[$ip])) { if (!empty($switchesGeo[$ip])) { $devicefind = wf_Link('?module=switchmap&finddevice=' . $switchesGeo[$ip], wf_img('skins/icon_search_small.gif', __('Find on map'))) . ' '; } else { $devicefind = ''; } } else { $devicefind = ''; } } else { $devicefind = ''; } //check morgue records for death time if (isset($deathTime[$ip])) { $deathClock = wf_img('skins/clock.png', __('Switch dead since') . ' ' . $deathTime[$ip]) . ' '; } else { $deathClock = ''; } //switch location link $switchLocator = wf_Link('?module=switches&gotoswitchbyip=' . $ip, web_edit_icon(__('Go to switch'))); //add switch as dead $content .= $devicefind . ' ' . $switchLocator . ' ' . $deathClock . $ip . ' - ' . $switch . '<br>'; } //ajax container end $content .= wf_delimiter() . __('Cache state at time') . ': ' . date("H:i:s", $last_pingtime) . wf_tag('div', true); $this->alerts .= wf_tag('div', false, 'ubButton') . wf_modal(__('Dead switches') . ': ' . $deadcount, __('Dead switches'), $content, '', '500', '400') . wf_tag('div', true); } else { $content .= wf_tag('div', false, '', 'id="switchping"') . __('Switches are okay, everything is fine - I guarantee') . wf_delimiter() . __('Cache state at time') . ': ' . date("H:i:s", $last_pingtime) . wf_tag('div', true); $this->alerts .= wf_tag('div', false, 'ubButton') . wf_modal(__('All switches alive'), __('All switches alive'), $content, '', '500', '400') . wf_tag('div', true); } } else { $content .= wf_tag('div', false, '', 'id="switchping"') . __('Switches are okay, everything is fine - I guarantee') . wf_delimiter() . __('Cache state at time') . ': ' . @date("H:i:s", $last_pingtime) . wf_tag('div', true); $this->alerts .= wf_tag('div', false, 'ubButton') . wf_modal(__('All switches alive'), __('All switches alive'), $content, '', '500', '400') . wf_tag('div', true); } } //ForWhotTheBellTolls notification widget if (isset($this->altCfg['FWTBT_ENABLED'])) { if ($this->altCfg['FWTBT_ENABLED']) { $fwtbtFront = new ForWhomTheBellTolls(); $this->alerts .= $fwtbtFront->renderWidget(); } } //Dreamkas notification if ($this->ubConfig->getAlterParam('DREAMKAS_ENABLED') and $this->ubConfig->getAlterParam('DREAMKAS_NOTIFICATIONS_ENABLED')) { $dsNotifyFront = new DreamKasNotifications(); $this->alerts .= $dsNotifyFront->renderWidget(); } //I hope this service died. if ($this->ubConfig->getAlterParam('INSURANCE_ENABLED')) { $insurance = new Insurance(false); $hinsReqCount = $insurance->getUnprocessedHinsReqCount(); if ($hinsReqCount > 0) { $insuranceRequestsAlert = $hinsReqCount . ' ' . __('insurance requests waiting for your reaction'); $this->alerts .= wf_Link($insurance::URL_ME, wf_img('skins/insurance_notify.png', $insuranceRequestsAlert)); } } //aerial alerts basic notification if ($this->ubConfig->getAlterParam('AERIAL_ALERTS_ENABLED')) { if ($this->ubConfig->getAlterParam('AERIAL_ALERTS_NOTIFY')) { $monitorRegion = $this->ubConfig->getAlterParam('AERIAL_ALERTS_NOTIFY'); $aerialAlerts = new AerialAlerts($monitorRegion); $regionAlert = $aerialAlerts->renderRegionNotification($monitorRegion); if (!empty($regionAlert)) { $this->alerts .= $regionAlert; } } } //appending some debug string to validate cache expire $this->alerts .= '<!-- DarkVoid saved: ' . curdatetime() . ' -->'; //saving per-admin cache data file_put_contents(self::CACHE_PATH . self::CACHE_PREFIX . $this->myLogin, $this->alerts); } /** * Returns raw alerts data * * @return string */ public function render() { return ($this->alerts); } /** * Flushes all users alert cache * * @return void */ public function flushCache() { $allCache = rcms_scandir(self::CACHE_PATH, self::CACHE_PREFIX . '*', 'file'); if (!empty($allCache)) { foreach ($allCache as $io => $each) { @unlink(self::CACHE_PATH . $each); } } } } |