$v === NULL) return false; return true; } public static function create($media) { if (!self::checkRequiredValues($media)) return; $media->isLocked = 1; $media->save(); self::convert(self::getXML($media, "C"), $media); } public static function update($media) { if ($media->arcadia_id === NULL) return; if (!self::checkRequiredValues($media)) return; $media->isLocked = 1; $media->save(); self::convert(self::getXML($media, "M"), $media); } public static function delete($media) { if ($media->arcadia_id === NULL) return; if (!self::checkRequiredValues($media)) return; $media->isLocked = 1; $media->save(); self::convert(self::getXML($media, "S"), $media); } public static function reactivate($media) { if ($media->arcadia_id === NULL) return; if (!self::checkRequiredValues($media)) return; $media->isLocked = 1; $media->save(); self::convert(self::getXML($media, "R"), $media); } private static function convert($xml, $media) { $uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)); Storage::disk('arcadia_link_s')->put("$uid.xml", $xml); self::compress($uid, $media); } private static function compress($uid, $media) { try { $zip_file = storage_path('arcadia_link/send') ."/$media->id-$uid.zip"; $zip = new \ZipArchive(); $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE); $zip->addFile(storage_path('arcadia_link/send') . "/$uid.xml", 'media.xml'); $zip->addFile(public_path() . "/$media->folder$media->uid.$media->extension", "$media->uid.$media->extension"); $zip->close(); unset($zip); unlink(storage_path('arcadia_link/send') . "/$uid.xml"); // On insert dans la table de supervision $s = new \App\Models\ArcadiaLink(); $s->media_id = $media->id; if ($media->arcadia_id !== NULL) { $s->arcadia_id = $media->arcadia_id; } $s->filename = "$media->id-$uid.zip"; $s->save(); } catch (Exception $e) { //echo "Exception : " . $e; // TODO : Envoi mail Log Log::emergency("Erreur création .zip : $e (Traits/ArcadiaLink)"); } } private static function getXML($media, $mouvement) { $refKey = self::getRefKey($media); $formats = self::getFormats(); $dom = new DOMDocument('1.0','UTF-8'); $dom->formatOutput = true; $root = $dom->createElement('MEDIA_VISUEL'); $dom->appendChild($root); $root->appendChild($dom->createElement('codeArcadia'))->appendChild($dom->createCDATASection( "$media->arcadia_id")); $root->appendChild($dom->createElement('code_DAM'))->appendChild($dom->createCDATASection( "$media->id")); $root->appendChild( $dom->createElement('TypeMouvement'))->appendChild($dom->createCDATASection( "$mouvement")); $cleRef = $root->appendChild( $dom->createElement('cle_Referentiel')); foreach ($refKey as $k) { if ($media->sujet_id === 1) { $cleRef->appendChild($dom->createElement('id'))->appendChild($dom->createCDATASection("$k->noArt")); }elseif ($media->sujet_id === 2) { $cleRef->appendChild($dom->createElement('id'))->appendChild($dom->createCDATASection("$k->codMarq")); }elseif ($media->sujet_id === 4) { $cleRef->appendChild($dom->createElement('id'))->appendChild($dom->createCDATASection("$k->id")); } } $root->appendChild( $dom->createElement('libExtension'))->appendChild($dom->createCDATASection( "$media->extension")); $root->appendChild( $dom->createElement('nbPxLargeur'))->appendChild($dom->createCDATASection( "$media->largeur")); $root->appendChild( $dom->createElement('largeurMm'))->appendChild($dom->createCDATASection( "$media->largeur_mm")); $root->appendChild( $dom->createElement('nbPxHauteur'))->appendChild($dom->createCDATASection( "$media->hauteur")); $root->appendChild( $dom->createElement('hauteurMm'))->appendChild($dom->createCDATASection( "$media->hauteur_mm")); $root->appendChild( $dom->createElement('pppLargeur'))->appendChild($dom->createCDATASection( "$media->resolution")); $root->appendChild( $dom->createElement('version'))->appendChild($dom->createCDATASection( "$media->version")); $root->appendChild( $dom->createElement('codeTypeMedia'))->appendChild($dom->createCDATASection( "$media->typemedia_id")); $root->appendChild( $dom->createElement('codeTypeVue'))->appendChild($dom->createCDATASection( "$media->typevue_id")); $root->appendChild( $dom->createElement('commentaire'))->appendChild($dom->createCDATASection( "$media->commentaire")); $root->appendChild( $dom->createElement('codeSujet'))->appendChild($dom->createCDATASection( "$media->sujet_id")); $root->appendChild( $dom->createElement('langue'))->appendChild($dom->createCDATASection( "$media->langue_id")); $root->appendChild( $dom->createElement('copyright'))->appendChild($dom->createCDATASection( "$media->copyright_id")); $root->appendChild( $dom->createElement('codeVariante'))->appendChild($dom->createCDATASection( "$media->variante_id")); $root->appendChild( $dom->createElement('dateCreation'))->appendChild($dom->createCDATASection( "$media->created_at")); $root->appendChild( $dom->createElement('dateModification'))->appendChild($dom->createCDATASection( "$media->updated_at")); $root->appendChild( $dom->createElement('datePublication'))->appendChild($dom->createCDATASection( "$media->published_at")); $root->appendChild( $dom->createElement('libelle'))->appendChild($dom->createCDATASection( "$media->libelle")); $root->appendChild( $dom->createElement('NomFichier'))->appendChild($dom->createCDATASection( "$media->uid.$media->extension")); $mediaFormat = $root->appendChild( $dom->createElement('formats')); foreach ($formats as $k) { $format = $mediaFormat->appendChild( $dom->createElement('format')); $format->appendChild( $dom->createElement('id'))->appendChild($dom->createCDATASection( $k['id'])); $format->appendChild( $dom->createElement('libelle'))->appendChild($dom->createCDATASection( $k['libelle'])); $format->appendChild( $dom->createElement('extension'))->appendChild($dom->createCDATASection("$media->extension")); $format->appendChild( $dom->createElement('largeur'))->appendChild($dom->createCDATASection( $k['largeur'])); $format->appendChild( $dom->createElement('hauteur'))->appendChild($dom->createCDATASection( $k['hauteur'])); $format->appendChild( $dom->createElement('lien'))->appendChild($dom->createCDATASection(env('APP_URL') . "/$media->folder$media->uid" . "_" . $k['libelle'] . ".$media->extension")); } return $dom->saveXML(); } public static function getRefKey($media) { switch ($media->sujet_id){ case 1: return $media->articles()->get(); break; case 2: return $media->marques()->get(); break; case 4: return $media->societes()->get(); break; default: return []; } } private static function getFormats() { return Format::withoutGlobalScope(SystemScope::class)->where('system', '=', '1')->get(); } }