189 lines
8.3 KiB
PHP
189 lines
8.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Traits;
|
|
|
|
use App\Models\Format;
|
|
use App\Scopes\SystemScope;
|
|
use DOMDocument;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
trait ArcadiaLink {
|
|
|
|
public static function checkRequiredValues($media)
|
|
{
|
|
$required = ['sujet_id', 'typemedia_id', 'typevue_id', 'variante_id', 'langue_id', 'version'];
|
|
foreach ($required as $v)
|
|
if ($media->$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();
|
|
}
|
|
}
|