Source of file api.reportbuilds.php
Size: 13,953 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.reportbuilds.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 | <?php /** * Report for filtering and display basic builds info */ class ReportBuilds { /** * Contains alter config as key=>value * * @var array */ protected $altCfg = array(); /** * Contains basic city data as cityid=>name * * @var array */ protected $allCities = array(); /** * Contains full streets data as streetid=>streetdata * * @var array */ protected $allStreets = array(); /** * Contains all streets names array as streetid=>streetname * * @var array */ protected $allStreetNames = array(); /** * Contains full builds data as id=>builddata * * @var array */ protected $allBuilds = array(); /** * Contains array of build apartments as buildid=>aptsData * * @var array */ protected $allApts = array(); /** * Just BUILD_EXTENDED option based flag * * @var bool */ protected $buildPassportsFlag = false; /** * Is ADcomments enabled flag? * * @var bool */ protected $adCommentsFlag = false; /** * Build passports instance placeholder * * @var object */ protected $buildPassports = ''; /** * System messages helper instance placeholder * * @var object */ protected $messages = ''; /** * Some routes, urls, defines etc */ const URL_ME = '?module=report_builds'; const ROUTE_AJLIST = 'ajaxbuildslist'; const ROUTE_EXPORTS = 'exportcontrols'; const PROUTE_FILTERS = 'applynewfilters'; const PROUTE_FILTERCITY = 'filtercityid'; const PROUTE_FILTERSTREET = 'filterstreetid'; public function __construct() { $this->loadConfigs(); $this->initMessages(); $this->loadCities(); $this->loadStreets(); $this->loadBuilds(); $this->loadApartments(); $this->initBuildPassports(); } /** * Preloads some required configs and sores it in protected properties * * @global object $ubillingConfig * * @return vod */ protected function loadConfigs() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); if (@$this->altCfg['BUILD_EXTENDED']) { $this->buildPassportsFlag = true; } if (@$this->altCfg['ADCOMMENTS_ENABLED']) { $this->adCommentsFlag = true; } } /** * Inits message helper for further usage * * @return void */ protected function initMessages() { $this->messages = new UbillingMessageHelper(); } /** * Loads city data from database * * @return void */ protected function loadCities() { $this->allCities = zb_AddressGetFullCityNames(); } /** * Loads streets data from database * * @return void */ protected function loadStreets() { $this->allStreets = zb_AddressGetStreetsDataAssoc('ORDER BY `streetname` ASC'); if (!empty($this->allStreets)) { foreach ($this->allStreets as $io => $each) { $this->allStreetNames[$each['id']] = $each['streetname']; } } } /** * Loads builds data from database * * @return void */ protected function loadBuilds() { $this->allBuilds = zb_AddressGetBuildAllDataAssoc(); } /** * Loads apartments data from database * * @return void */ protected function loadApartments() { $aptTmp = zb_AddressGetAptAllData(); if (!empty($aptTmp)) { foreach ($aptTmp as $io => $each) { $this->allApts[$each['buildid']][] = $each; } } } /** * Inits build passports object for further usage * * @return void */ protected function initBuildPassports() { if ($this->buildPassportsFlag) { $this->buildPassports = new BuildPassport(); } } /** * Returns city id of build * * @param int $buildId * * @return int */ protected function getCityOfBuild($buildId) { $result = 0; $streetId = $this->getStreetOfBuild($buildId); if ($streetId) { if (isset($this->allStreets[$streetId])) { $streetData = $this->allStreets[$streetId]; $result = $streetData['cityid']; } } return($result); } /** * Returns street id of build * * @param int $buildId * * @return int */ protected function getStreetOfBuild($buildId) { $result = 0; if (isset($this->allBuilds[$buildId])) { $result = $this->allBuilds[$buildId]['streetid']; } return($result); } /** * Returns apartments count in some build * * @param int $buildId * * @return int */ protected function getAptCount($buildId) { $result = 0; if (isset($this->allApts[$buildId])) { $result = sizeof($this->allApts[$buildId]); } return($result); } /** * Renders report container * * @return string */ public function renderBuilds() { $result = ''; if (!empty($this->allBuilds)) { $columns = array( 'City', 'Street', 'Building number', 'Users', 'Actions' ); if ($this->buildPassportsFlag) { $columns = array( 'City', 'Street', 'Building number', 'Owner', 'Phone', 'Type', 'Floors', 'Entrances', 'Apartments', 'Users', '%', 'Access', 'Actions' ); } $opts = '"order": [[ 1, "asc" ]]'; //optional ID column if (cfr('ROOT')) { $columns = array_merge(array('ID'), $columns); $opts = '"order": [[ 2, "asc" ]]'; } //optional export options if (ubRouting::checkGet(self::ROUTE_EXPORTS)) { $opts .= ', "dom": \'<"F"lfB>rti<"F"ps>\', buttons: [\'csv\', \'excel\', \'pdf\']'; } $filters = ''; if (ubRouting::checkPost(self::PROUTE_FILTERS)) { //filters form catched? if (ubRouting::checkPost(self::PROUTE_FILTERCITY)) { $filters .= '&' . self::PROUTE_FILTERCITY . '=' . ubRouting::post(self::PROUTE_FILTERCITY); } if (ubRouting::checkPost(self::PROUTE_FILTERSTREET)) { $filters .= '&' . self::PROUTE_FILTERSTREET . '=' . ubRouting::post(self::PROUTE_FILTERSTREET); } } $ajaxSource = self::URL_ME . '&' . self::ROUTE_AJLIST . '=true' . $filters; $result .= wf_JqDtLoader($columns, $ajaxSource, false, __('Builds'), 100, $opts); } else { $result .= $this->messages->getStyledMessage(__('Nothing to show'), 'warning'); } return($result); } /** * Renders filters form * * @return string */ public function renderFiltersForm() { $result = ''; if (!empty($this->allCities) AND ! empty($this->allStreets)) { $cityArr = array('' => __('Any')); $cityArr += $this->allCities; $streetArr = array('' => __('Any')); if (ubRouting::checkPost(self::PROUTE_FILTERCITY)) { //filter streets by some selected city $filterCityId = ubRouting::post(self::PROUTE_FILTERCITY); foreach ($this->allStreets as $io => $each) { if ($each['cityid'] == $filterCityId) { $streetArr[$each['id']] = $each['streetname']; } } } else { //full streets list $streetArr += $this->allStreetNames; } $inputs = wf_HiddenInput(self::PROUTE_FILTERS, 'true'); $inputs .= wf_SelectorAC(self::PROUTE_FILTERCITY, $cityArr, __('City'), ubRouting::post(self::PROUTE_FILTERCITY), false) . ' '; $inputs .= wf_SelectorAC(self::PROUTE_FILTERSTREET, $streetArr, __('Street'), ubRouting::post(self::PROUTE_FILTERSTREET), false) . ' '; $result .= wf_Form('', 'POST', $inputs, 'glamour'); } return($result); } /** * Renders json build data array * * @return void */ public function renderAjBuildList() { $json = new wf_JqDtHelper(); $cityFilter = ubRouting::get(self::PROUTE_FILTERCITY, 'int'); $streetFilter = ubRouting::get(self::PROUTE_FILTERSTREET, 'int'); $backUrl = '&back=' . base64_encode('report_builds'); $passportUrl = BuildPassport::URL_PASSPORT . $backUrl . '&' . BuildPassport::ROUTE_BUILD . '='; if ($this->adCommentsFlag) { $adComments = new ADcomments('BUILDS'); } $actBoxStyle = wf_tag('div', false, '', 'style="width:60px;"'); $actBoxStyleEnd = wf_tag('div', true); if (!empty($this->allBuilds)) { foreach ($this->allBuilds as $io => $each) { $filtersPassed = true; $buildId = $each['id']; $buildCity = $this->getCityOfBuild($buildId); $buildStreet = $this->getStreetOfBuild($buildId); $cityName = (isset($this->allCities[$buildCity])) ? $this->allCities[$buildCity] : __('Missed'); $streetName = (isset($this->allStreets[$buildStreet])) ? $this->allStreets[$buildStreet]['streetname'] : __('Missed'); $userCount = $this->getAptCount($buildId); //some optional filtering here if ($cityFilter) { if ($buildCity != $cityFilter) { $filtersPassed = false; } } if ($streetFilter) { if ($buildStreet != $streetFilter) { $filtersPassed = false; } } if ($filtersPassed) { if (cfr('ROOT')) { $data[] = $each['id']; } $data[] = $cityName; $data[] = $streetName; $data[] = $each['buildnum']; if ($this->buildPassportsFlag) { $buildPassport = $this->buildPassports->getPassportData($buildId); if (!empty($buildPassport)) { //some passport data available $ownerLabel = $buildPassport['owner'] . ' ' . $buildPassport['ownername'] . ' ' . $buildPassport['ownercontact']; $ownerPhone = $buildPassport['ownerphone']; $floors = $buildPassport['floors']; $type = ($buildPassport['anthill']) ? wf_img('skins/ymaps/build.png', __('Apartment house')) : wf_img('skins/ymaps/home.png'); $entrances = $buildPassport['entrances']; $apts = $buildPassport['apts']; $accessNotices = $buildPassport['accessnotices']; } else { $ownerLabel = ''; $ownerPhone = ''; $type = wf_img('skins/ymaps/home.png'); $floors = ''; $entrances = ''; $apts = ''; $accessNotices = ''; } $data[] = $ownerLabel; $data[] = $ownerPhone; $data[] = $type; $data[] = $floors; $data[] = $entrances; $data[] = $apts; } $data[] = $userCount; if ($this->buildPassportsFlag) { $signupsPercent = ''; if (($apts > 0)) { $signupsPercent = zb_PercentValue($apts, $userCount); } $data[] = $signupsPercent; $data[] = $accessNotices; } $actionLinks = ''; if ($this->buildPassportsFlag) { if ($this->adCommentsFlag) { $actionLinks .= $adComments->getCommentsIndicator($each['id']) . ' '; } $actionLinks .= wf_Link($passportUrl . $each['id'], wf_img('skins/icon_buildpassport.png', __('Build passport'))) . ' '; } if (!empty($each['geo'])) { $actionLinks .= wf_Link("?module=usersmap&findbuild=" . $each['geo'], wf_img('skins/icon_search_small.gif', __('Find on map')), false) . ' '; } else { if (cfr('BUILDS')) { $actionLinks .= wf_Link('?module=usersmap&locfinder=true&placebld=' . $each['id'], wf_img('skins/ymaps/target.png', __('Place on map')), false, '') . ' '; } } $data[] = $actBoxStyle . $actionLinks . $actBoxStyleEnd; $json->addRow($data); unset($data); } } } $json->getJson(); } } |