signature = str_replace('*defaultFile*', $this->defaultFile, $this->signature); parent::__construct(); } public function printDoc() { $this->info(" 1: source malvac.e98.hu localhost - fs.emegrendeles.hu - felhasznalo 2: sql Select: SELECT f.kod id, f.nev userName, f.jelszo userPassword, k_email userEmail, f.statusz, fa.nev name, fa.irsz postCode, fa.varos city, fa.cim street, fa.megjegy note, k_email email, k_tel phone, k_mob mobil, k_nev contactName, k_email contactEmail, k_tel contactPhone, k_mob contactMobil FROM `felhasznalo` as f left join felhasznalo_adat fa on fa.kod=f.kod WHERE f.`statusz`='F' order by name 3: export json "); return 0; } /** * From https://stackoverflow.com/a/19136663/319266 */ public function stripComments(string $str = '') { $str = preg_replace('!/\*.*?\*/!s', '', $str); $str = preg_replace('/\n\s*\n/', "\n", $str); return $str; } private function stripPrefixedItemFromArray($data, $prefix) { if (is_array($prefix)) { foreach ($prefix as $pre) { $data = $this->stripPrefixedItemFromArray($data, $pre); } } else { foreach ($data as $k => $v) { if (strpos($k, $prefix) !== false) { unset($data[$k]); } } } return $data; } private function getPrefixKeyedDataFromArray($data, $prefix) { $retArray = []; foreach ($data as $k => $v) { if (strpos($k, $prefix) !== false) { $key = str_replace($prefix, '', $k); $key = lcfirst($key); $retArray[$key] = $v; } } return $retArray; } private function getUserDataFromArray($data) { $userData = $this->getPrefixKeyedDataFromArray($data, 'user'); $userData['password'] = \Hash::make($userData['password']); return $userData; } private function getContactDataFromArray($data) { return $this->getPrefixKeyedDataFromArray($data, 'contact'); } private function getAcceptedProfitCenterData($data) { $acceptedKey = [ 'name', 'hooreycaId', 'nameId', 'email', 'postCode', 'city', 'street', 'phone', 'mobil', 'note', ]; $retData = []; foreach ($data as $k => $v) { if (in_array($k, $acceptedKey)) { $retData[$k] = $v; } } return $retData; } private function fillNeedProfitCenterData($data, $num = null, ?bool $convertNull = true) { if (! $num) { $num = random_int(1000, 9999); } $data = $this->getAcceptedProfitCenterData($data); if (! isset($data['hooreycaId'])) { $data['hooreycaId'] = 'H'.$num; } if ($convertNull) { foreach ($data as $k => $v) { if ($v === '') { $data[$k] = null; } } } $data['status'] = DbStatusFieldEnum::active; return $data; } private function getAcceptedContactData($data) { $acceptedKey = [ 'name', 'email', 'phone', 'note', ]; if (isset($data['mobil']) && ! is_null($data['mobil']) && $data['mobil'] !== '') { $data['phone'] = $data['mobil']; } $retData = []; foreach ($data as $k => $v) { if (in_array($k, $acceptedKey)) { $retData[$k] = $v; } } return $retData; } private function fillNeedContactData($data, $num = null, ?bool $convertNull = true) { $data = $this->getAcceptedContactData($data); if ($convertNull) { foreach ($data as $k => $v) { if ($v === '') { $data[$k] = null; } } } $data['status'] = DbStatusFieldEnum::active; return $data; } private function createUser($userData) { if ($user = User::where('email', $userData['email'])->first()) { $emailPieces = explode('@', $userData['email']); $userData['email'] = $emailPieces[0].time().'@'.$emailPieces[1]; $this->error('Presents user:'.$userData['name'].' rename email:'.$userData['email']); /* print var_export($userData,true); print var_export($user->toArray(),true); die();*/ } else { } $user = User::Create($userData); $this->info('User created:'.$user->name); return $user; } private ?Role $RoleProfitCenter = null; private function initProfitCenterRole() { $this->RoleProfitCenter = Role::where('name', 'profit-center')->first(); } public function importFile($file, $format = 'JSON') { $this->initProfitCenterRole(); $this->info('inport fileName:'.$file.' format'.$format); $file = base_path().DIRECTORY_SEPARATOR.'database'.DIRECTORY_SEPARATOR.'import'.DIRECTORY_SEPARATOR.$file; $this->info('file:'.$file); switch ($format) { case 'JSON': try { // json_decode("{", false, 512, JSON_THROW_ON_ERROR); $jsonStr = $this->stripComments(file_get_contents($file)); $jsonStr = ltrim($jsonStr); $itemsArray = json_decode($jsonStr, true, 512, JSON_THROW_ON_ERROR); } catch (\JsonException $exception) { echo $exception->getMessage(); // displays "Syntax error" exit(); } break; case 'PHP': require_once $file; $itemsArray = $f; break; } auth()->loginUsingId(1); foreach ($itemsArray as $k => $item) { /* array ( 'id' => 182, 'userName' => 'atrium', 'userPass' => 'atriumetterem', 'statusz' => 'F', 'name' => 'Átrium', 'postCode' => 1138, 'city' => 'Budapest', 'street' => 'Váci út 45.', 'note' => '', 'contactName' => 'Szőnyi Iván', 'contactEmail' => 'atrium@eurest.hu', 'contactPhone' => '', 'contactMobil' => '06-30/207-0148', ) */ $userData = $this->getUserDataFromArray($item); $contactData = $this->getContactDataFromArray($item); /* print var_export($item,true); */ $profitCenterData = $this->stripPrefixedItemFromArray($item, ['user', 'contact']); $profitCenterData = $this->fillNeedProfitCenterData($profitCenterData, $k + 1); $ProfitCenter = ProfitCenter::create($profitCenterData); $contactData = $this->fillNeedContactData($contactData); $Contact = Contact::create($contactData); $this->info('Contact created:'.$Contact->name); $User = $this->createUser($userData); $User->syncRolesWithoutDetaching([$this->RoleProfitCenter]); $ProfitCenter->users()->syncWithoutDetaching($User); $ProfitCenter->syncContactRelations([$Contact->id]); $this->info('ProfitCenter created:'.$ProfitCenter->name); } // $this->info(var_export($Json,true)); } /** * Execute the console command. */ public function handle(): int { // $name = $this->argument('name'); if ($this->option('doc')) { return $this->printDoc(); } $file = $this->defaultFile; if ($this->option('file')) { $file = $this->option('file'); } $this->importFile($file, 'PHP'); $this->info('Import End'); return 0; } }