Source of file api.oefails.php
Size: 8,863 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.oefails.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 | <?php /** * Electrical failures reporting class */ class OeFails { /** * Contains system alter.ini config as key=>value * * @var array */ protected $altCfg = array(); /** * System caching abstraction layer placeholder * * @var object */ protected $cache = ''; /** * Default caching timeout * * @var int */ protected $cacheTimeout = 600; /** * Contains default data source URL or file path * * @var string */ protected $dataSource = ''; /** * Contains raw data received from data source * * @var string */ protected $rawData = ''; /** * Contains basically preprocessed data * * @var array */ protected $parsedData = array(); /** * Contains default city filters for extraction * * @var string */ protected $cityFilter = ''; /** * Contains scheduled power outages string mask * * @var string */ protected $scheduledMask = ''; /** * Contains emergency power outages string mask * * @var string */ protected $emergencyMask = ''; /** * Contains default cache key name */ const CACHE_KEY = 'OEFAILS'; /** * Contains basic module controller URL */ const URL_ME = '?module=oefails'; /** * Options string parsing offsets */ const OFFSET_SOURCE = 0; const OFFSET_FILTER = 1; const OFFSET_EMERG = 2; const OFFSET_SCHED = 3; /** * Creates new fails instance * * @param string $dataSource */ public function __construct($dataSource = '') { $this->loadAlter(); $this->setOptions(); $this->initCache(); $this->setDataSource($dataSource); } /** * Loads alter config file into protected prop * * @global object $ubillingConfig * * @return void */ protected function loadAlter() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); } /** * Sets config based options for current instance * * @return void */ protected function setOptions() { if (isset($this->altCfg['OEFAILS_OPTIONS'])) { $optionsString = @$this->altCfg['OEFAILS_OPTIONS']; $options = explode('|', $optionsString); if (!empty($options)) { $this->setDataSource($options[self::OFFSET_SOURCE]); $this->setFilter($options[self::OFFSET_FILTER]); if (isset($options[self::OFFSET_EMERG])) { $this->scheduledMask = $options[self::OFFSET_SCHED]; $this->emergencyMask = $options[self::OFFSET_EMERG]; } } else { throw new Exception('EX_EMPTY_OPTIONS'); } } else { throw new Exception('EX_NO_OPTIONS'); } } /** * Inits caching object for further usage */ protected function initCache() { $this->cache = new UbillingCache(); } /** * Sets data source file path/URL into obj prop * * @param string $dataSource * * @return void */ protected function setDataSource($dataSource = '') { if (!empty($dataSource)) { $this->dataSource = $dataSource; } } /** * Sets city filter for data extraction * * @param string $mask * * @return void */ protected function setFilter($mask = '') { if (!empty($mask)) { $this->cityFilter = $mask; } } /** * Gets raw CSV data from datasource and stores it in protected property * * @return void */ protected function getRawData() { $this->rawData = $this->cache->get(self::CACHE_KEY, $this->cacheTimeout); if (empty($this->rawData)) { $remoteData = new OmaeUrl($this->dataSource); $remoteData->setTimeout(42); $this->rawData = $remoteData->response(); $this->cache->set(self::CACHE_KEY, $this->rawData, $this->cacheTimeout); } } /** * Returns basically preprocessed and filtered data * * @return void */ protected function parseData() { $this->getRawData(); if (!empty($this->rawData)) { $rawTmp = explodeRows($this->rawData); $filteringRequired = (!empty($this->cityFilter)) ? true : false; if (!empty($rawTmp)) { foreach ($rawTmp as $io => $eachLine) { if ($filteringRequired) { if (ispos($eachLine, $this->cityFilter)) { $this->parsedData[] = str_getcsv($eachLine); } } else { $this->parsedData[] = $eachLine; } } } } } /** * Basic data preprocessing method. May be customizable in far far future. * Now its hardcodded for oe.if.ua data format * * @return void */ public function ajGetData($dateFilter = '', $allTime = false) { $this->parseData(); $json = new wf_JqDtHelper(); $magicNumber = 3; //f**k that s**t $dateFilter = (!empty($dateFilter)) ? $dateFilter : curdate(); if ($allTime) { $dateFilter = ''; } if (!empty($this->parsedData)) { foreach ($this->parsedData as $io => $each) { $indexOffset = 0; $region = $each[0]; $cityName = $each[1]; $address = $each[2]; $recordsCount = sizeof($each); if ($recordsCount >= $magicNumber) { foreach ($each as $index => $failRecord) { if ($indexOffset >= $magicNumber) { $data[] = $region; $data[] = $cityName; $data[] = $address; $failRecord = str_replace('{', '', $failRecord); $failRecord = str_replace('}', '', $failRecord); $failText = $failRecord; $typeIcon = ''; if (!empty($this->emergencyMask) and ! empty($this->scheduledMask)) { $typeIcon = ''; if (ispos($failText, $this->emergencyMask)) { $typeIcon = web_red_led() . ' ' . trim($this->emergencyMask, ','); $failText = str_replace($this->emergencyMask, '', $failText); } if (ispos($failText, $this->scheduledMask)) { $typeIcon = web_yellow_led() . ' ' . trim($this->scheduledMask, ','); $failText = str_replace($this->scheduledMask, '', $failText); } } $data[] = $typeIcon; $data[] = $failText; //some date filtering if (!empty($dateFilter)) { if (ispos($failText, $dateFilter)) { $json->addRow($data); } } else { //all time data $json->addRow($data); } unset($data); } $indexOffset++; } } } } $json->getJson(); } /** * Renders power outages list container * * @return string */ public function renderList() { $result = ''; //some controls here $curdateFilter = (ubRouting::checkPost('datefilter')) ? ubRouting::post('datefilter') : curdate(); $alltimeCall = (ubRouting::checkPost('alltime')) ? '&alltime=true' : ''; $inputs = wf_DatePickerPreset('datefilter', $curdateFilter) . ' '; $inputs .= wf_CheckInput('alltime', __('All time'), false, ubRouting::checkPost('alltime')) . ' '; $inputs .= wf_Submit(__('Show')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); $columns = array(__('District'), __('City'), __('Address'), __('Type'), __('Date') . '/' . __('Time')); $opts = ''; $result .= wf_JqDtLoader($columns, self::URL_ME . '&ajaxlist=true&datefilter=' . $curdateFilter . $alltimeCall, false, __('Power outages'), 100, $opts); return($result); } } |