Source of file api.btrxcrm.php
Size: 17,523 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.btrxcrm.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618 | <?php /** * Bitrix24 CRM integration */ class BtrxCRM { /** * Contains system alter config as key=>value * * @var array */ protected $altCfg = array(); /** * Contains all available users data as login=>userData * * @var array */ protected $allUserData = array(); /** * Contains all stargazer raw DB data * * @var array */ protected $allStgRawData = array(); /** * Export URL HTTP abstraction placeholder * * @var object */ protected $apiCrm = ''; /** * Contains OpenPayz instance * * @var object */ protected $openPayz = ''; /** * Contains all customers payemntIds as login=>paymentId * * @var array */ protected $allPaymentIds = array(); /** * Contains all users tags as login=>tagsArr * * @var array */ protected $allUserTags = array(); /** * Contains all of available tariffs prices as tariffname=>fee * * @var array */ protected $allTariffsPricess = array(); /** * Contains all of available tariff speeds as tariffname=>data (speeddown/speedup keys) * * @var array */ protected $allTariffsSpeeds = array(); /** * Contains extended mobiles instance * * @var object */ protected $extMobiles = ''; /** * Contains all user extmobiles info as login=>mobilesExtData * * @var array */ protected $allExtMobiles = array(); /** * Contains current instance URL to push some data * * @var string */ protected $exportUrl = ''; /** * Name of POST variable to export updated users data * * @var string */ protected $exportVar = ''; /** * LastActivityTime export flag * * @var bool */ protected $exportLatFlag = false; /** * System caching instance placeholder * * @var object */ protected $cache = ''; /** * Current instance caching timeout * * @var int */ protected $cacheTimeout = 2592000; /** * Contains already exported user data as login=>hash(?) * * @var array */ protected $cachedUsers = array(); /** * Deal With It database abstraction layer * * @var object */ protected $dealWithItDb = ''; /** * Payments database abstraction layer * * @var object */ protected $paymentsDb = ''; /** * Contains records about first user payments dates as login=>date * * @var array */ protected $firstUserPayments = array(); /** * Contains records about latest user payments dates login=>date * * @var array */ protected $latestUserPayments = array(); /** * Contains all user payments summ as login=>summ * * @var array */ protected $userPaymentsSumm = array(); /** * Contains all users deal with it data about tariff changes as login=>date/tariff as param * * @var array */ protected $allDealWithItChanges = array(); /** * Contains all user assigned agents data as login=>agentName * * @var array */ protected $allUserAgents = array(); /** * Contains all user assigned ONU signals as login=>signal * * @var array */ protected $allUserOnuSignals = array(); /** * Some predefined stuff here */ const CACHE_KEY = 'BTRX_DATA'; const PID_NAME = 'BITRX24_UPD'; /** * Point me to the sky above * I can't get there on my own * Walk me to the graveyard * Dig up her bones */ public function __construct() { $this->loadConfig(); $this->initCache(); $this->initApiCrm(); $this->initOpenPayz(); $this->initDealWithItDb(); $this->initPaymentsDb(); $this->initExtMobiles(); $this->loadUserData(); $this->loadPaymentsData(); $this->loadExtMobiles(); $this->loadTariffsData(); $this->loadDealWithitData(); $this->loadUserTags(); $this->loadPayIds(); $this->loadAgentsData(); $this->loadPonizerData(); $this->loadCachedData(); } /** * Preloads some required configs for further usage * * @global object $ubillingConfig * * @return void */ protected function loadConfig() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); if (isset($this->altCfg['BTRX24_EXPORT_URL'])) { $this->exportUrl = $this->altCfg['BTRX24_EXPORT_URL']; } if (isset($this->altCfg['BTRX24_EXPORT_VAR'])) { $this->exportVar = $this->altCfg['BTRX24_EXPORT_VAR']; } if (isset($this->altCfg['BTRX24_EXPORT_LAT'])) { if ($this->altCfg['BTRX24_EXPORT_LAT']) { $this->exportLatFlag = true; } } } /** * Inits system caching layer * * @return void */ protected function initCache() { $this->cache = new UbillingCache(); } /** * Inits OpenPayz instance * * @return void */ protected function initOpenPayz() { $this->openPayz = new OpenPayz(); } /** * Inits scheduler database abstraction layer * * @return void */ protected function initDealWithItDb() { $this->dealWithItDb = new NyanORM('dealwithit'); } /** * Loads deal with it tariff changes * * @return void */ protected function loadDealWithitData() { $this->dealWithItDb->where('action', '=', 'tariffchange'); $this->dealWithItDb->orderBy('date', 'DESC'); $this->allDealWithItChanges = $this->dealWithItDb->getAll('login'); } /** * Inits extended mobiles instance * * @return void */ protected function initExtMobiles() { $this->extMobiles = new MobilesExt(); } /** * Loads all users extmobiles data * * @return void */ protected function loadExtMobiles() { $this->allExtMobiles = $this->extMobiles->getAllUsersMobileNumbers(); } /** * Inits payments database abstraction layer * * @return void */ protected function initPaymentsDb() { $this->paymentsDb = new NyanORM('payments'); } /** * Preloads first/last user payments data * * @return void */ protected function loadPaymentsData() { //user payments summ total $this->paymentsDb->where('summ', '>', 0); $this->paymentsDb->selectable(array('id', 'login', 'date', 'summ')); $this->paymentsDb->orderBy('id', 'ASC'); $rawPayments = $this->paymentsDb->getAll(); if (!empty($rawPayments)) { foreach ($rawPayments as $io => $each) { if (is_numeric($each['summ'])) { if (isset($this->userPaymentsSumm[$each['login']])) { $this->userPaymentsSumm[$each['login']] += $each['summ']; //latest user payment date here $this->latestUserPayments[$each['login']] = $each['date']; } else { //first occurency $this->userPaymentsSumm[$each['login']] = $each['summ']; //looks like first payment $this->firstUserPayments[$each['login']] = $each['date']; } } } } } /** * Loads all available users PaymentIds * * @return void */ protected function loadPayIds() { $opCustomers = $this->openPayz->getCustomers(); $this->allPaymentIds = array_flip($opCustomers); // login=>payId } /** * Inits CRM HTTP abstraction layer * * @return void */ protected function initApiCrm() { if (!empty($this->exportUrl)) { $this->apiCrm = new OmaeUrl($this->exportUrl); } else { throw new Exception('EX_NO_EXPORT_URL'); } } /** * Loads all users agent assigns data * * @return void */ protected function loadAgentsData() { if (!empty($this->allUserData)) { $allAssigns = zb_AgentAssignGetAllData(); $allStrictAssigns = zb_AgentAssignStrictGetAllData(); $allAgentsData = zb_ExportAgentsLoadAll(); foreach ($this->allUserData as $io => $each) { $assignedAgentId = zb_AgentAssignCheckLoginFast($each['login'], $allAssigns, $each['fulladress'], $allStrictAssigns); if ($assignedAgentId) { if (isset($allAgentsData[$assignedAgentId])) { $this->allUserAgents[$each['login']] = $allAgentsData[$assignedAgentId]['contrname']; } } } } } /** * Loads all PONizer related data * * @return void */ protected function loadPonizerData() { $ponizer = new PONizer(); $this->allUserOnuSignals = $ponizer->getAllONUSignals(); } /** * Loads available tariffs data * * @return void */ protected function loadTariffsData() { $this->allTariffsPricess = zb_TariffGetPricesAll(); $this->allTariffsSpeeds = zb_TariffGetAllSpeeds(); } /** * Preloads all existing users data * * @return void */ protected function loadUserData() { $this->allUserData = zb_UserGetAllDataCache(); $this->allStgRawData = zb_UserGetAllStargazerDataAssoc(); } /** * Preloads previously exported to CRM data from cache * * @return void */ protected function loadCachedData() { $rawCachedData = $this->cache->get(self::CACHE_KEY, $this->cacheTimeout); if (!empty($rawCachedData)) { $this->cachedUsers = $rawCachedData; // fuck mem economy, lol } } /** * Loads existing tag types from database * * @return void */ protected function loadUserTags() { $this->allUserTags = zb_UserGetAllTags(); } /** * Returns unique user numeric ID * * @param string $userLogin * * @return int */ protected function getUserUniqId($userLogin) { $result = 0; if (!empty($userLogin)) { $result = crc32($userLogin); } return($result); } /** * Returns users tags list as string, if assigned * * @param string $userLogin * * @return string */ protected function getUserTagsList($userLogin) { $result = ''; if (isset($this->allUserTags[$userLogin])) { if (!empty($this->allUserTags[$userLogin])) { $result .= implode(',', $this->allUserTags[$userLogin]); } } return($result); } /** * * @param array $userData * * @return array */ protected function getUserStruct($userData) { $result = array(); if (!empty($userData)) { $userLogin = $userData['login']; $userPassword = $userData['Password']; $fullAddress = $userData['fulladress']; $userIp = $userData['ip']; $userMac = $userData['mac']; $userPaymentId = (isset($this->allPaymentIds[$userLogin])) ? $this->allPaymentIds[$userLogin] : ''; $userRealName = $userData['realname']; $userBalance = $userData['Cash']; $userCredit = $userData['Credit']; $creditExpire = $this->allStgRawData[$userLogin]['CreditExpire']; $userFrozen = $userData['Passive']; $userTags = $this->getUserTagsList($userLogin); $latTimestamp = 0; if ($this->exportLatFlag) { $latTimestamp = $this->allStgRawData[$userLogin]['LastActivityTime']; } $userAgent = (isset($this->allUserAgents[$userLogin])) ? $this->allUserAgents[$userLogin] : ''; $onuSignal = (isset($this->allUserOnuSignals[$userLogin])) ? $this->allUserOnuSignals[$userLogin] : 0; //tariffs related data $userTariff = $userData['Tariff']; $speedDown = (isset($this->allTariffsSpeeds[$userTariff]['speeddown'])) ? $this->allTariffsSpeeds[$userTariff]['speeddown'] : 0; $speedUp = (isset($this->allTariffsSpeeds[$userTariff]['speedup'])) ? $this->allTariffsSpeeds[$userTariff]['speedup'] : 0; $tariffFee = isset($this->allTariffsPricess[$userTariff]) ? $this->allTariffsPricess[$userTariff] : 0; $tariffChange = (isset($this->allDealWithItChanges[$userLogin])) ? $this->allDealWithItChanges[$userLogin]['param'] : ''; $tariffChangeDate = (isset($this->allDealWithItChanges[$userLogin])) ? $this->allDealWithItChanges[$userLogin]['date'] : 0; if ($tariffChangeDate) { $tariffChangeDate = strtotime($tariffChangeDate . ' 02:10:00'); } //payments related data $firstPaymentDate = (isset($this->firstUserPayments[$userLogin])) ? strtotime($this->firstUserPayments[$userLogin]) : 0; $latestPaymentDate = (isset($this->latestUserPayments[$userLogin])) ? strtotime($this->latestUserPayments[$userLogin]) : 0; $userPaymentsSumm = (isset($this->userPaymentsSumm[$userLogin])) ? $this->userPaymentsSumm[$userLogin] : 0; //phone related data $userPhone = $userData['mobile']; $mobileExt = ''; if (isset($this->allExtMobiles[$userLogin])) { $mobileExt = $this->allExtMobiles[$userLogin][0]; } // // // _(\_/) // ,((((^`\ // (((( (6 \ // ,((((( , \ // ,,,_ ,((((( /"._ ,`, // ((((\\ ,... ,(((( / `-.-' // ))) ;' `"'"'""(((( ( // ((( / ((( \ // )) | | // (( | . ' | // )) \ _ ' `t ,.') // ( | y;- -,-""'"-.\ \/ // ) / ./ ) / `\ \ // |./ ( ( / /' // || \\ //'| // || \\ _//'|| CIRCUS WITH THE HORSES // || )) |_/ || // \_\ |_/ || // `'" \_\ $result = array( 'phone' => $userPhone, 'fio' => $userRealName, 'pay_id' => $userPaymentId, 'login' => $userLogin, 'password' => $userPassword, 'tariff' => $userTariff, 'balance' => $userBalance, 'tegs' => $userTags, 'speed_up' => $speedUp, 'speed_down' => $speedDown, 'abonplata' => $tariffFee, 'cash_first_pay' => $firstPaymentDate, 'mobile2' => $mobileExt, 'cash_last_pay' => $latestPaymentDate, 'full_adress' => $fullAddress, 'cash_all_pays' => $userPaymentsSumm, 'deal_with_it1' => $tariffChangeDate, 'deal_with_it2' => $tariffChange, 'owner' => $userAgent, 'credit' => $userCredit, 'credit_day' => $creditExpire, 'ip' => $userIp, 'mac' => $userMac, 'onu_signal' => $onuSignal, 'lat' => $latTimestamp ); } return($result); } /** * Pushes changed users struct into CRM hook * * @param array $changedUsersStruct * * @return void */ protected function pushCrmData($changedUsersStruct) { $jsonData = json_encode($changedUsersStruct); $this->apiCrm->dataPost($this->exportVar, $jsonData); $this->apiCrm->response(); } /** * Processing of existing user data to deicide export this to CRM or nothing changed? * * @return void */ public function runExport() { $somethingChanged = array(); if (!empty($this->allUserData)) { foreach ($this->allUserData as $eachUserLogin => $eachUserData) { $updateFlag = false; $eachUserStruct = $this->getUserStruct($eachUserData); if (isset($this->cachedUsers[$eachUserLogin])) { //user data was changed someway if ($eachUserStruct != $this->cachedUsers[$eachUserLogin]) { $updateFlag = true; } } else { //newly registered user? $updateFlag = true; } if ($updateFlag) { $somethingChanged[] = $eachUserStruct; $this->cachedUsers[$eachUserLogin] = $eachUserStruct; } } //pushing data to CRM if (!empty($somethingChanged)) { $this->pushCrmData($somethingChanged); } //saving cache $this->cache->set(self::CACHE_KEY, $this->cachedUsers, $this->cacheTimeout); } } } |