*/ $files = collect(Storage::disk('arcadia')->files()) ->filter(function (string $fileName) { return !\in_array($fileName, ['.gitignore']); }); if (!$files->count()) { $this->info('Pas de nouveau fichiers'); return 0; } $this->info('Démarrage du traitement'); $bar = $this->output->createProgressBar($files->count() - 1); $bar->start(); // ---- Pour chaque fichier foreach ($files as $filename) { // ---- Récupération du contenu if (!($fileContent = Storage::disk('arcadia')->get($filename))) { throw new FileNotFoundException($filename); } if (!($fileContent = simplexml_load_string($fileContent))) { throw new \ErrorException("Could not parse $filename from arcadia storage."); } // ---- traitement du fichier switch (true) { case substr($filename, 0, 11) == 'DAM_ARTICLE': $this->insertDamArticle($fileContent); $this->deleteFile($filename); break; case substr($filename, 0, 10) == 'DAM_MARQUE': $this->insertDamMarque($fileContent); $this->deleteFile($filename); break; case substr($filename, 0, 15) == 'DAM_MEDIA_SUJET': $this->insertDamMediaSujet($fileContent); $this->deleteFile($filename); break; case substr($filename, 0, 20) == 'DAM_MEDIA_TYPE_MEDIA': $this->insertDamMediaTypeMedia($fileContent); $this->deleteFile($filename); break; case substr($filename, 0, 17) == 'DAM_MEDIA_TYPEVUE': $this->insertDamMediaTypeVue($fileContent); $this->deleteFile($filename); break; case substr($filename, 0, 18) == 'DAM_MEDIA_VARIANTE': $this->insertDamMediaVariante($fileContent); $this->deleteFile($filename); break; case substr($filename, 0, 20) == 'DAM_SITE_PROD_GROUPE': $this->insertDamSiteProdGroupe($fileContent); $this->deleteFile($filename); break; case substr($filename, 0, 11) == 'DAM_SOCIETE': $this->insertDamSociete($fileContent); $this->deleteFile($filename); break; default: throw new \ErrorException("Unhandled file $filename"); } //end switch $bar->advance(); } //end foreach $bar->finish(); $this->newLine(); $this->info('Fin du traitement'); } /** * Update or Create Dam Article * * @param \SimpleXMLElement $fileContent * @return void * @throws \Throwable On save failure. */ private function insertDamArticle(\SimpleXMLElement $fileContent) { /** @var \SimpleXMLElement $row */ foreach ($fileContent->dam as $row) { /** @var \App\Models\Article|null $record */ $record = Article::where('noArt', $row->noArt)->first(); if (!$record) { $record = new Article(); $record->noArt = $row->noArt; } $record->libCcial = $row->libCcial; $record->codMarq = $row->codMarq; $record->libMarq = $row->libMarq; $record->codFamVte = $row->codFamVte; $record->libFamVte = $row->libFamVte; $record->codGencodAdm = $row->codGencodAdm; $record->codGencodSymb = $row->codGencodSymb; $record->codGencodPds = $row->codGencodPds; $record->utilisableGroupe = $row->utilisableGroupe; $record->saveOrFail(); } //end foreach } /** * Update or Create Dam Marque * * @param \SimpleXMLElement $fileContent * @return void * @throws \Throwable On save failure. */ private function insertDamMarque(\SimpleXMLElement $fileContent) { /** @var \SimpleXMLElement $row */ foreach ($fileContent->dam as $row) { /** @var \App\Models\Marque|null $record */ $record = Marque::where('codMarq', $row->codMarq)->first(); if (!$record) { $record = new Marque(); $record->codMarq = $row->codMarq; } $record->libMarq = $row->libMarq; $record->saveOrFail(); } } /** * Update or Create Dam Media Sujet * * @param \SimpleXMLElement $fileContent * @return void * @throws \Throwable On save failure. */ private function insertDamMediaSujet(\SimpleXMLElement $fileContent) { /** @var \SimpleXMLElement $row */ foreach ($fileContent->mediaSujet as $row) { /** @var \App\Models\Sujet|null $record */ $record = Sujet::where('codeSujet', $row->code)->first(); if (!$record) { $record = new Sujet(); $record->codeSujet = $row->code; } $record->libelle = $row->libelle; $record->saveOrFail(); } } /** * Update or Create Dam Media Type Media * * @param \SimpleXMLElement $fileContent * @return void * @throws \Throwable On save failure. */ private function insertDamMediaTypeMedia(\SimpleXMLElement $fileContent) { /** @var \SimpleXMLElement $row */ foreach ($fileContent->mediatypemedia as $row) { /** @var \App\Models\TypeMedia|null $record */ $record = TypeMedia::where('codeTypemedia', $row->code)->first(); if (!$record) { $record = new TypeMedia(); $record->codeTypemedia = $row->code; } $record->libelle = $row->libelle; $record->saveOrFail(); } } /** * Update or Create Dam Media Type Vue * * @param \SimpleXMLElement $fileContent * @return void * @throws \Throwable On save failure. */ private function insertDamMediaTypeVue(\SimpleXMLElement $fileContent) { /** @var \SimpleXMLElement $row */ foreach ($fileContent->mediatypesvue as $row) { /** @var \App\Models\TypeVue|null $record */ $record = TypeVue::where('codeTypevue', $row->code)->first(); if (!$record) { $record = new TypeVue(); $record->codeTypevue = $row->code; } $record->libelle = $row->libelle; $record->sujet_id = $row->sujet_id->mediasujet->code; $record->saveOrFail(); } } /** * Update or Create Dam Media Variante * * @param \SimpleXMLElement $fileContent * @return void * @throws \Throwable On save failure. */ private function insertDamMediaVariante(\SimpleXMLElement $fileContent) { /** @var \SimpleXMLElement $row */ foreach ($fileContent->mediavariante as $row) { /** @var \App\Models\TypeVue|null $record */ $record = Variante::where('codeVariante', $row->code)->first(); if (!$record) { $record = new Variante(); $record->codeVariante = $row->code; } $record->libelle = $row->libelle; $record->sujet_id = $row->sujet_id->children()[0]->code; $record->type_vue_id = $row->CodeTypeVue->mediatypesvue->code; $record->saveOrFail(); } } /** * Update or Create Dam Site Prod Groupe * * @param \SimpleXMLElement $fileContent * @return void * @throws \Throwable On save failure. */ private function insertDamSiteProdGroupe(\SimpleXMLElement $fileContent) { /** @var \SimpleXMLElement $row */ foreach ($fileContent->SITE_PROD_GRP as $row) { /** @var \App\Models\TypeVue|null $record */ $record = Site::where('id', $row->code)->first(); if (!$record) { $record = new Site(); $record->id = $row->code; } $record->libelle = $row->libelle; $record->saveOrFail(); } } /** * Update or Create Dam Societe * * @param \SimpleXMLElement $fileContent * @return void * @throws \Throwable On save failure. */ private function insertDamSociete(\SimpleXMLElement $fileContent) { /** @var \SimpleXMLElement $row */ foreach ($fileContent->dam as $row) { /** @var \App\Models\TypeVue|null $record */ $record = Societe::where('id', $row->codSociete)->first(); if (!$record) { $record = new Societe(); $record->id = $row->codSociete; } $record->libelle = $row->nomSociete; $record->saveOrFail(); } } /** * Delete file * * @param string $filename * @return void */ private function deleteFile(string $filename) { if (!Storage::disk('arcadia')->delete($filename)) { Log::warning("Could not delete $filename from arcadia storage."); } } }