Hotfix release available: 2025-05-14b "Librarian".
upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian".
upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian".
upgrade now! [56] (what's this?)
tmp:p_number_usecases
<?php // dummy nimega functioon, mis boksi võrku ilmudes teeb kõik tegevused, et andmed baasis hetke olukorrale vastavaks viia function validate_stb() { // --- üritame tuvastada, millise ühenduse tagant stb võrku ilmus --- // // --------------- // leiame, millise ühenduse tagant boks hetkel võrku tuli // vastuseks saame P numbri või veateate // see peaks olema päring Henri poole ning siin ta lihtsalt suvaline dummy funktsioon lihtsalt näitamaks, // et selline tegevus tehakse ning vastav info tulemusena saadakse list($real_p_number, $p_num_error) = ip_to_p_number($ip); // --------------- if (!$real_p_number) { if ($no_serial) { // sellist olukorda ei tohiks kunagi sisuliselt juhtuda. Kui juhtub, siis saab näidata vaid veateadet ning mitte midagi muud fatal_error("Helista 165!"); exit; } else if ($no_ip) { // andmed on puudulikud ning üritame säilitada kliendil sama olukorra, mis tal seni oli, // sest, eeldame, et Elion on olukorras süüdi maintain_status_quo($serial, "no_ip"); return true; } else if ($no_circuit_id OR $circuit_id_format_wrong) { // andmed on puudulikud ning üritame säilitada kliendil sama olukorra, mis tal seni oli, // sest, eeldame, et Elion on olukorras süüdi maintain_status_quo($serial, "circuit_id problem (no_circuit_id=".$no_circuit_id." | circuit_id_format_wrong=".$circuit_id_format_wrong); return true; } else if ($no_pnumber) { // boks on ühenduse taga, mis tehniliste baaside järgi ei tohiks toimida // paneme peale free_mode'i, sest eeldame, et klient on olukorras süüdi // (tegu ei saa olla ka ärikliendi erijuhtumiga, sest ka ärikliendil peab P number vähemasti olemas olema) create_dummy_client($serial, FREE_MODE, "no_pnumber"); return true; } else if ($unknown_p_number_error) // andmed on puudulikud ning üritame säilitada kliendil sama olukorra, mis tal seni oli, // sest, eeldame, et Elion on olukorras süüdi maintain_status_quo($serial, "unknown_p_number_error (".$unknown_p_number_error.")"); return true; } } // --- kui siiani jõuame, siis me teame täpselt, millise ühenduse taga stb hetkel on --- // // --------------- // vaja leida all olev info, kuid täpseid funktsioone ei tea ning siin nad suvaliste dummy nimedega $last_known_client = serial_to_client($serial); $last_known_p_number = $last_known_client->inet_p_number; // ühele interneti P numrile võib vastata mitu clientit (kui tegu ärikliendiga) $real_clients = inet_p_number_to_clients($real_p_number); // kuigi ärikliendil võib olla mitu client't ning need ka erinevate service'tega, // siis meid huvitab vaid fakt, kas tegu ärikliendiga ning seega sobib ühe suvalise tema client'i service $real_client = $real_clients[0]; $real_service = $real_client->service; // --------------- // -- tuvastame, kas tegu ärikliendiga -- // // // See siin on AINUS koht kus ärikliendi teemadega tegeleme, // sest kui meil baasis eelenvalt puudub info, et antud interneti ühenduse taga on ärikliendi asjad, // siis ei saa me seda infot ka kuidagi tuletada ning käsitleme ühendust kui tavalist erakliendi case'i. // Lisamõttena juurde, et stb võrku tulemise hetkel me MITTE KUNAGI ei tee uut ärikliendi service'ga client'it. See tehakse AINULT argose synci peale. if (in_array($real_service, array(BUSINESS_HOUSING, BUSINESS_OFFICE))) { // kuna ühe ärikiendi ühenduse taga võib olla mitu erinevat toodet erinevate service'tega, // siis tuleb kontrollida, millise tootega antud boks seotud on või peab olema // leiame kas stb on juba mõne antud ühenduse client'ga seotud foreach ($real_clients AS $real_client) { if ($real_client->id == $stb->client_id) { // stb asub seal, kus ta ka varem asus ning midagi muuta pole vaja return $stb; } } // kui siia jõuame, siis stb varem antud ühendusega seotud ei olnud ning tuleb teada saada, millise client'i külge ta nüüd ühendada findClientForBusinessStb($stb, $real_clients); return $stb; } // -- siia j6udes tegu erakliendi stb (või uue ühenduse tagant tulnud stb'ga) -- // // stb tuli võrku sealt, kus ta varemgi oli // ehk, et stb on juba baasis seotud õige client'ga // (kuigi 99,9% kordadest maandutakse siia, siis ei saa seda blokki ärikliendi omast ettepoole tõsta, sest seal ei piisa sellest, kui stb tuleb sama ühenduse tagant vaid vaja ka TV P numbri järgi õiget client'it kontrollida) if ($real_p_number == $last_known_p_number) { // midagi pole muutunud ning seega pole ka midagi teha vaja return $stb; } // stb on liikunud teise ühensue taha kui ta varem oli else if ($real_client) { // seome boksi lihtsalt õige client'iga ning rohkem midagi kontrollida ega teha pole vaja Client::bindStbWithClient($stb, $real_client->id); return $stb; } // boks on tulnud võrku sellise ühenduse tagant, mille kohta client'it veel pole else { // Enamikul juhtudel ongi tegu uue kliendiga, kelle kohta veel Argose synci pole tulnud. // Peale paneme kõige tavalisema erakliendi baaspaketi, sest me ei saa hetkel kuidagi teada, et mis tal tulevikus olema hakkab. // Kui Argosest nüüd mingi hetk sync tuleb, siis keeratakse tal (vajadusel) service õigeks ning lisatakse ka preview. // Kui aga boks ilmus võrku kohast, kus digiTV'd ei olegi lubatud, siis paari päeva pärast keerab cron'i skript tal service free_mode'i peale. $client = Client::createClient($real_p_number, $real_tv_p_number); Client::bindStbWithClient($stb, $client->id); return $stb; } } //end validate_stb /** * Andmed on puudulikud ning üritame säilitada kliendil sama olukorra, mis tal seni oli. * Tekib siis, kui ei õnnestu leida mingeid olulisi andmeid, kuid seda ilmselt meie (Elioni) enda vea tõttu. * Eeldame, et klient pole midagi valesti teinud ning üritame teda mitte häirida. * */ function maintain_status_quo($serial, $reason) { if ($no_stb) { // loome uue stb ning dummy kliendi, kellel peal free_mode // (kuna isegi stb'd pole baasis, siis ei saa tegu olla ka ärikliendi erijuhtumige ning paneme seega ikkagi free_mode peale) create_stb_with_dummy_client($serial, FREE_MODE); } else if ($no_client) { // loome dummy kliendi, kellel peal free_mode // (kuna stb oli baasis ilma client'ta, siis ei saa tegu olla ka ärikliendi erijuhtumige ning paneme seega ikkagi free_mode peale) create_dummy_client($stb, FREE_MODE); } else { // do nothing - maintain status quo } // kõik siia funktsiooni maandunud case'd tuleb selgelt eristuvalt logida ning nende ilmumist logisse pidevalt jälgida, // sest tegu ei ole normaalse olukorraga // näiteks logi kirje ees alati "NEEDS ATTENTION ASAP: " log_with_special_tag("maintain_status_quo ".$reason); } /** * Loome uue dummy client'i, millel puuduvad korrektsed P numbrid * */ function create_dummy_client($serial, $service = FREE_MODE, $reason) { // leiame baasist stb või vajadusel loome selle... $inet_p_number = "DUMMY_".$client_id; $tv_p_number = NULL; // teeme clienti ... // kõik siia funktsiooni maandunud case'd tuleb selgelt eristuvalt logida ning nende ilmumist logisse pidevalt jälgida, // sest tegu ei ole normaalse olukorraga // näiteks logi kirje ees alati "NEEDS ATTENTION ASAP: " log_with_special_tag("created new dummy client (service=".$service.")".$reason); } /** * Kontrollime, kas ärikliendil sama netiühenduse taga mitu erinevat TV toodet * ning kui on, siis tuleb tuvastada (või kliendilt üle küsida) millisele vaatajakohale ta antud boksi lisas * Lõpuks seome antud stb valitud client'ga. * */ function findClientForBusinessStb($stb, $real_clients) { $open_locations = array(); $different_services = array(); // k2ime järjest läbi kõik antud interneti ühendusega seotud client'd foreach ($real_clients AS $real_client) { // muutuja, millesse kogume erinevad service'd, mis antud ühenduse taga võivad olla // enamasti on neid vaid 1, kuid äriklientide puhul võib ka olla mitu erinevat $different_services[$real_client->service_id] = true; // leiame, kas antud client'i küljes on hetkel vaba koht uue stb jaoks ehk ega client'ga juba pole mõnda stb'd seotud if (!client_to_stbs($real_client->id)) <- TODO: vaja kirjutada või kasutusele võtta õige funktsioon, mis seda teeks $open_locations[] = $real_client; } // kui kliendil on vaba vaatajakoht ning tema ühenduse taga on vaid üks service võimalik, // siis seome lihtsalt stb antud client'ga ja elu on lill if (count($open_locations) AND count($different_services) == 1) { // Bind client with stb Client::bindStbWithClient($stb, $open_locations[0]->id); Yii::log('Business client\'s stb '.$stb->serial.' bonded with client '.$stb->client_id, 'info', 'application.models.Stb.findClientForBusinessStb'); return true; } else { // kui ühendusel mitu client't või pole vaba vaatajakohta, siis tuleb igaljuhul kasutajalt üle küsida, et kas/kuhu boks ühendada askUserToChooseClient($open_locations, $different_services, $real_clients); return true; } } function askUserToChooseClient($&stb, $real_clients, $open_locations) { // TODO/FIXME: hetkel teeme ikkagi valiku kasutaja eest ise ära, kuid see peab tulevikus muutuma!!! // peab andma kasutajale ette nimekirja kus iga tema vaatajakoha kohta on üks rida kujul: "service name (serial)" // kui antud vaatajakohaga ühtegi stb'd seotud ei ole, siis on seriali asemel kiri "vaba" // kui kasutaja valib mõne sellise rea, kus juba serial olemas, siis nimetutud serialiga stb seotakse client'i küljest lahti // ---- AJUTIN HÄKK ---- // // kui mõni vaba koht olemas, siis valime suvaliselt esimese neist if (count($open_locations)) { $client_id = $open_locations[0]->id; Yii::log('NEEDS ATTENTION ASAP: business client\'s stb '.$stb->serial.' bonded with first random free client '.$stb->client_id.' -> it means that service could be wrong', 'warning', 'application.models.Client.askUserToChooseClient'); } else { // kui vabu vaatajakohti pole, siis seome boksi suvalise client'ga, mis on tegelikult suht vale käitumine kuna // ärikliendil ei tohiks olla ühe client'i küljes mitut stb'd $client_id = $real_clients[0]->id; Yii::log('NEEDS ATTENTION ASAP: business client\'s stb '.$stb->serial.' bonded with first random client '.$stb->client_id.' -> business client has now 2 stb\'s and that is VERY WRONG!!!', 'warning', 'application.models.Client.askUserToChooseClient'); } //END ---- AJUTIN HÄKK ---- // // seome stb uue valitud client'ga Client::bindStbWithClient($stb, $client_id); Yii::log('Business client\'s stb '.$stb->serial.' bonded with client '.$stb->client_id.' by user choice', 'info', 'application.models.Client.askUserToChooseClient'); } /** * Bind stb with (new) client and senda sync command to WideVine * (old client will stay even if it hasn't got anymore stb bindings, because service in Argos is still active and stb might return) * */ function bindStbWithClient($&stb, $client_id) { // vana seos logisse kirja (kui see eksisteeris) if ($stb->client_id) Yii::log('stb '.$stb->serial.' bonding with client '.$stb->client_id.' removed', 'info', 'application.models.Client.bindStbWithClient'); $stb->client_id = $client_id; $stb->save(); $stb->getActiveRelation('client'); // syncime boksi tema uue client'iga määratud võtmed syncWideVineKeys($stb); } // Create new client function createClient($real_p_number, $real_tv_p_number) { Yii::log('Create new client with inet pnumber ' . $real_p_number . ' and tv pnumber ' . $real_tv_p_number, 'info', 'application.models.Client.createClient'); $client = new Client; $client->p_number = $real_p_number; $client->tv_p_number = $real_p_number; $client->service_id = Client::NEW_CLIENT_DEFAULT_SERVICE; <-- lisasin muutja nimesse DEFAULT juurde $client->save(); return $client; } function syncWideVineKeys($stb) { // TODO: all lihtsalt lambi nimedega funktsioonid, mis vaja alles kirjutada... $packets = getClientPackets($stb->client_id); doTheMagicWgetToHenri($stb->serial, $packets); // see ei pea eraldi funktsioon olema, vaid võiks siin samas lahti kirjutatud olla }
tmp/p_number_usecases.txt · Last modified: 2019/09/20 15:52 by 127.0.0.1
