Source of file api.sormyahont.php
Size: 24,945 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.sormyahont.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709 | <?php /** * SORM Yahont draft support */ class SormYahont { /** * Contains system alter config as key=>value * * @var array */ protected $altCfg = array(); /** * Contains stargazer users table as login=>userdata * * @var array */ protected $allUsers = array(); /** * Contains users data with fields like address, realname, etc as login=>userdata * * @var array */ protected $allUsersData = array(); /** * Contains all contract dates as contract=>date * * @var array */ protected $allContractDates = array(); /** * Contains users passport data as login=>passportdata * * @var array */ protected $AllPassportData = array(); /** * Default branch ID * * @var int */ protected $branchId = 1; /** * Contains ISP name * * @var string */ protected $ispName = ''; /** * Contains ISP location country * * @var string */ protected $ispCountry = ''; /** * Contains ISP location region * * @var string */ protected $ispRegion = ''; /** * Contains ISP location district * * @var string */ protected $ispDistrict = ''; /** * Contains ISP location city * * @var string */ protected $ispCity = ''; /** * Contains ISP location street * * @var string */ protected $ispStreet = ''; /** * Contains ISP location build number * * @var string */ protected $ispBuildNum = ''; /** * Export date format */ const DATE_FORMAT = 'd.m.Y H:i:s'; /** * Ubilling database charset */ const IN_CHARSET = 'utf-8'; /** * Output charset */ const OUT_CHARSET = 'windows-1251'; /** * Default output CSV delimiter */ const DELIMITER = ';'; /** * Default CSV enclosure */ const ENCLOSURE = '"'; /** * Describes path for exporting output data */ const PATH_EXPORT = 'content/documents/sorm/'; /** * Creates new SormYahont instance * * @return void */ public function __construct() { $this->loadAlter(); $this->setOptions(); $this->loadUsersData(); $this->loadContractDates(); $this->loadPassportData(); } /** * Loads system alter config into protected property for further usage * * @global type $ubillingConfig * * @return void */ protected function loadAlter() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); } /** * Sets some object config-based options if required * * @return void */ protected function setOptions() { //setting ISP location options $this->ispName = @$this->altCfg['SORM_ISPNAME']; $this->branchId = @$this->altCfg['SORM_BRANCHID']; $this->ispCountry = @$this->altCfg['SORM_ISPCOUNTRY']; $this->ispRegion = @$this->altCfg['SORM_ISPREGION']; $this->ispDistrict = @$this->altCfg['SORM_ISPDISTRICT']; $this->ispCity = @$this->altCfg['SORM_ISPCITY']; $this->ispStreet = @$this->altCfg['SORM_ISPSTREET']; $this->ispBuildNum = @$this->altCfg['SORM_ISPBUILD']; } /** * Loads users data from database into protected object props * * @return void */ protected function loadUsersData() { $this->allUsers = zb_UserGetAllStargazerDataAssoc(); $this->allUsersData = zb_UserGetAllDataCache(); } /** * Loads all contract dates * * @return void */ protected function loadContractDates() { $contractDates = new ContractDates(); $this->allContractDates = $contractDates->getAllDatesBasic(); } /** * Loads all users passport data * * @return void */ protected function loadPassportData() { $this->AllPassportData = zb_UserPassportDataGetAll(); } /** * Little workaround for future multiple branches support * * @param string $userLogin * * @return int */ protected function getUserBranchId($userLogin) { return ($this->branchId); } /** * Encodes data to output charset before export * * @param string $data * * @return string */ protected function changeCharset($data) { $data = iconv(self::IN_CHARSET, self::OUT_CHARSET, $data); return ($data); } /** * Casts date in required format * * @param string $date * * @return string */ protected function formatDate($date) { $result = ''; if (!empty($date)) { $timestamp = strtotime($date); $result = date(self::DATE_FORMAT, $timestamp); } return ($result); } /** * Converts single dimension array into CSV string data * * @param array $fields * @param string $delimiter * @param string $enclosure * @param bool $encloseAll * @param bool $nullToMysqlNull * * @return string */ protected function arrayToCsv(array &$fields, $delimiter = ';', $enclosure = '"', $encloseAll = false, $nullToMysqlNull = false) { $delimiter_esc = preg_quote($delimiter, '/'); $enclosure_esc = preg_quote($enclosure, '/'); $output = array(); foreach ($fields as $field) { if ($field === null && $nullToMysqlNull) { $output[] = 'NULL'; continue; } // Enclose fields containing $delimiter, $enclosure or whitespace if ($encloseAll || preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field)) { $output[] = $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure; } else { $output[] = $field; } } return implode($delimiter, $output); } /** * Returns user data squense 4.1 * * @return string */ public function getUserData() { $result = ''; if (!empty($this->allUsersData)) { foreach ($this->allUsersData as $io => $each) { $userLogin = $each['login']; $stgData = $this->allUsers[$userLogin]; $userContract = $each['contract']; $userContractDate = @$this->allContractDates[$userContract]; $userState = 1; //detecting user state if (($each['Cash'] <= $each['Credit']) OR ( $each['Passive'] == 1) OR ( $stgData['Down'] == 1) OR ( $each['AlwaysOnline'] == 0)) { $userState = 0; } $dataTmp = array( $this->getUserBranchId($userLogin), //default branch $userLogin, // login $each['ip'], // ip $each['email'], // email $each['mobile'], // phone $each['mac'], // mac $this->formatDate($userContractDate), //contract date $userContract, //contract number $userState, //user state $this->formatDate($userContractDate), //using contract date as service activation date '', //using empty value as service deactivation date 0, // by default home user, may be we can detect corporative users (1) if CORPS_ENABLED 1, //single string user data fields //empty struct realname data for 3 fields , using type 1 '', // first name '', // patronymic '', // surname $each['realname'], //realname as single string $this->formatDate(@$this->AllPassportData[$userLogin]['birthdate']), // birthdate 1, //single string passport data //empty struct passport data for 3 fields, using type 1 '', // passport series '', // passport number '', // when and who applied //unsctruct passport data below @$this->AllPassportData[$userLogin]['passportnum'] . ' ' . @$this->AllPassportData[$userLogin]['passportdate'] . ' ' . @$this->AllPassportData[$userLogin]['passportwho'], 1, // i guess 1 is passport '', //empty user bank '', //empty bank account //corporate users data below, now its unprocessed '', //empty corp name '', //empty INN '', //empty contact person '', //empty phones/faxes '', //empty corp bank name '', //empty corp bank account 1, // single string address data //empty struct address 9 fields, using type 1 '', // postal index aka zip '', // country '', // region '', // district '', // city name '', // street '', // build num '', // housing '', // apartment $each['fulladress'], //single string address 1, //single string device address //empty 9 fields for struct device address '', // postal index aka zip '', // country '', // region '', // district '', // city name '', // street '', // build num '', // housing '', // apt $each['fulladress'], //using user address as device address ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } return ($result); } /** * Returns user services data squense 4.2 * * @return string */ public function getServicesData() { $result = ''; if (!empty($this->allUsersData)) { foreach ($this->allUsersData as $io => $each) { $userLogin = $each['login']; $stgData = @$this->allUsers[$userLogin]; $userContract = $each['contract']; $userContractDate = @$this->allContractDates[$userContract]; $dataTmp = array( $this->getUserBranchId($userLogin), //default branch $userLogin, // login $userContract, //contract number 1, //using something like service ID $this->formatDate($userContractDate), //contract date '', //using empty value as service deactivation date '', // using empty service custom parameters ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } return ($result); } /** * Banks transactons data squense 6.1 returns empty data because no mechanics for detecting it * * @return string */ public function getBankTransactions() { $result = ''; return ($result); } /** * Payment cards usage data squense 6.2 * * @return string */ public function getPaycardsTransactions() { $result = ''; $query = "SELECT * from `cardbank` WHERE `usedlogin`!='';"; $allCards = simple_queryall($query); if (!empty($allCards)) { foreach ($allCards as $io => $each) { $userLogin = $each['usedlogin']; //not showing card payments for users that not exists anymore if (isset($this->allUsersData[$userLogin])) { $userData = $this->allUsersData[$userLogin]; $userContract = $userData['contract']; $dataTmp = array( $this->getUserBranchId($userLogin), //default branch ID $userContract, //user contract $userData['ip'], //user IP $this->formatDate($each['usedate']), //card usage aka payment date $each['part'] . $each['serial'], //card part and number $each['cash'] // card price ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } } return ($result); } /** * Returns existing OpenPays transactions data squense 6.3 * * @return string */ public function getOpenPayzTransactions() { $result = ''; //is openpayz used on this host? if (zb_CheckTableExists('op_transactions')) { $allPayIds = array(); $queryPayIds = "SELECT * from `op_customers`"; $allPayIdsTmp = simple_queryall($queryPayIds); //payment IDs preprocessing if (!empty($allPayIdsTmp)) { foreach ($allPayIdsTmp as $io => $each) { $allPayIds[$each['virtualid']] = $each['realid']; } } //transactions processing $query = "SELECT * from `op_transactions`"; $allTransactions = simple_queryall($query); if (!empty($allTransactions)) { foreach ($allTransactions as $io => $each) { //detecting user login by its PaymentID if (isset($allPayIds[$each['customerid']])) { $userLogin = $allPayIds[$each['customerid']]; //not showing transactions for users that not exists anymore if (isset($this->allUsersData[$userLogin])) { $userData = $this->allUsersData[$userLogin]; $dataTmp = array( $this->getUserBranchId($userLogin), //user branch ID $userData['contract'], // user contract number $this->formatDate($each['date']), //transaction processing aka payment date $each['paysys'] . ' ' . $each['hash'], //using payment system name + hash as terminal ID '', //we dont know anything about terminal number '', //and nothing about its address $each['summ'], //but we know transaction summ ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } } } } return ($result); } /** * Returns data squense 6.4 for users cash payments * * @return string */ public function getCashPayments() { $result = ''; $query = "SELECT * from `payments` WHERE `cashtypeid`='1' AND `summ`>0;"; $allPayments = simple_queryall($query); if (!empty($allPayments)) { foreach ($allPayments as $io => $each) { $userLogin = $each['login']; //no export payments for users that not exists anymore if (isset($this->allUsersData[$userLogin])) { $userData = $this->allUsersData[$userLogin]; $dataTmp = array( $this->getUserBranchId($userLogin), //user branch ID $userData['contract'], //user contract number $userData['ip'], //user IP address $this->formatDate($each['date']), //payment date 'cashbox', // its cash payment point //6 empty fields for cashbox address $this->ispCountry, // country $this->ispRegion, // region $this->ispDistrict, // district $this->ispCity, // city name $this->ispStreet, // street $this->ispBuildNum, //build num $each['summ'], // payment sum ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } } return ($result); } /** * Returns data about payments summary aka data squense 6.7 * * @return string */ public function getPaymentsSummary() { $result = ''; $query = "SELECT * from `payments` WHERE `summ`>0;"; $allPayments = simple_queryall($query); if (!empty($allPayments)) { foreach ($allPayments as $io => $each) { $userLogin = $each['login']; //no export payments for users that not exists anymore if (isset($this->allUsersData[$userLogin])) { $userData = $this->allUsersData[$userLogin]; $dataTmp = array( $this->getUserBranchId($userLogin), //user branch ID $each['cashtypeid'], //cash type id $userData['contract'], //user contract number $userData['ip'], //user IP address $this->formatDate($each['date']), //payment date $each['summ'], // payment sum $each['note'], // payment notes ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } } return ($result); } /** * Returns available NAS servers list aka gates as data squense 7.1 * * @return string */ public function getNasData() { $result = ''; $query = "SELECT * from `nas`"; $all = simple_queryall($query); if (!empty($all)) { foreach ($all as $io => $each) { /** * Когда я с ними - я перестаю умирать * У них открытые руки и цветные слова * Они дышат травой и им на всё наплевать * А майор идёт их уничтожать */ $dataTmp = array( $this->branchId, //default branch id $each['nasip'], // NAS IP '01.01.2017 00:00:00', // we dont know when NAS start working '', // and guesss what? we think that NAS still works $each['nasname'], //using NAS name as description $this->ispCountry, //location country $this->ispRegion, // location region $this->ispDistrict, //location district $this->ispCity, //location city $this->ispStreet, //location street $this->ispBuildNum, //location build 7, // NAS type AAA ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } return ($result); } /** * Returns available services list aka 7.2 * * @return string */ public function getServicesList() { $result = ''; $dataTmp = array( $this->branchId, // branch id 1, //serviceID 'Internet', //service internal name '', //start date '', //end date __('Internet'), //localised service name ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; return ($result); } /** * Payment types directory aka 7.3 * * @return string */ public function getPaymentTypesList() { $result = ''; $all = zb_CashGetAllCashTypes(); if (!empty($all)) { foreach ($all as $cashTypeId => $cashTypeName) { $dataTmp = array( $this->branchId, //branch ID $cashTypeId, // payment type id '01.01.2017 00:00:00', //type start date '', //type end date __($cashTypeName) //type name localised ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } return ($result); } /** * Returns available IP pools directory aka 7.4 * * @return string */ public function getIpPoolsList() { $result = ''; $query = "SELECT * from `networks`"; $all = simple_queryall($query); if (!empty($all)) { foreach ($all as $io => $each) { $ipSegs = explode('/', $each['desc']); if (!empty($ipSegs)) { $dataTmp = array( $this->branchId, //branch id 'Users IP pool', // ip pool purpose $ipSegs[0], //IP pool network address $ipSegs[1], //IP pool network CIDR mask '01.01.2017 00:00:00', //start date '', //end date ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; } } } return ($result); } /** * Returns document types list aka 7.5 * * @return string */ public function getDocsTypesList() { $result = ''; $dataTmp = array( $this->branchId, //branch id 1, // document type '01.01.2017 00:00:00', //start date '', //end date __('Passport data') //document type name ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; return ($result); } /** * Returns branches directory aka 7.8 * * @return string */ public function getBranchesList() { $result = ''; $dataTmp = array( $this->branchId, //branch id '', //start date '', //end date $this->ispName //Branch name ); $result .= $this->arrayToCsv($dataTmp, self::DELIMITER, self::ENCLOSURE, true) . PHP_EOL; return ($result); } /** * Saves all output data to some path * * @return void */ public function saveAllDataCsv() { //telephony only //file_put_contents(self::PATH_EXPORT . 'dictionaries/' . '7.8-branches.csv', $this->changeCharset($this->getBranchesList())); file_put_contents(self::PATH_EXPORT . 'dictionaries/' . '7.5-doctypes.csv', $this->changeCharset($this->getDocsTypesList())); file_put_contents(self::PATH_EXPORT . 'dictionaries/' . '7.4-ip_numbering_plan.csv', $this->changeCharset($this->getIpPoolsList())); file_put_contents(self::PATH_EXPORT . 'dictionaries/' . '7.3-pay_types.csv', $this->changeCharset($this->getPaymentTypesList())); file_put_contents(self::PATH_EXPORT . 'dictionaries/' . '7.2-supplement_services.csv', $this->changeCharset($this->getServicesList())); file_put_contents(self::PATH_EXPORT . 'dictionaries/' . '7.1-gates.csv', $this->changeCharset($this->getNasData())); file_put_contents(self::PATH_EXPORT . 'payments/' . '6.7-balance-fillup.csv', $this->changeCharset($this->getPaymentsSummary())); //not required if fillup used //file_put_contents(self::PATH_EXPORT . 'payments/' . '6.4-service-center.csv', $this->changeCharset($this->getCashPayments())); //file_put_contents(self::PATH_EXPORT . 'payments/' . '6.3-public-terminal.csv', $this->changeCharset($this->getOpenPayzTransactions())); //file_put_contents(self::PATH_EXPORT . 'payments/' . '6.2-express-card.csv', $this->changeCharset($this->getPaycardsTransactions())); file_put_contents(self::PATH_EXPORT . 'abonents/' . '4.2-services.csv', $this->changeCharset($this->getServicesData())); file_put_contents(self::PATH_EXPORT . 'abonents/' . '4.1-abonents.csv', $this->changeCharset($this->getUserData())); } } ?> |