From ca99267b1a9e017bf488372392ae34c9fa84cc77 Mon Sep 17 00:00:00 2001 From: Yann Gonidec Date: Wed, 31 Jul 2019 12:22:24 +0200 Subject: [PATCH] add panier widget --- app/Console/Commands/ImportArcadiaFiles.php | 128 ++----- app/Console/Commands/ImportMedia.php | 234 +++++++++++++ app/Http/Controllers/CommunController.php | 3 +- app/Http/Controllers/MediaController.php | 4 +- app/Http/Controllers/PanierController.php | 122 +++++++ app/Http/Controllers/UserController.php | 20 +- app/Media.php | 8 + app/Panier.php | 36 ++ app/User.php | 16 + public/css/app.css | 142 +++++++- public/js/app.js | 337 ++++++++++++++++++- resources/js/app.js | 6 + resources/js/media.js | 25 +- resources/js/panier.js | 266 +++++++++++++++ resources/sass/partials/form.scss | 1 + resources/sass/partials/media.scss | 142 +++++++- resources/views/home.blade.php | 10 + resources/views/layouts/header.blade.php | 5 + resources/views/layouts/media_edit.blade.php | 2 +- resources/views/media_manager.blade.php | 21 ++ resources/views/panier/index.blade.php | 114 +++++++ routes/web.php | 8 + webpack.mix.js | 1 + 23 files changed, 1521 insertions(+), 130 deletions(-) create mode 100644 app/Console/Commands/ImportMedia.php create mode 100644 app/Http/Controllers/PanierController.php create mode 100644 app/Panier.php create mode 100644 resources/js/panier.js create mode 100644 resources/views/panier/index.blade.php diff --git a/app/Console/Commands/ImportArcadiaFiles.php b/app/Console/Commands/ImportArcadiaFiles.php index 4b48f6c..0dce899 100644 --- a/app/Console/Commands/ImportArcadiaFiles.php +++ b/app/Console/Commands/ImportArcadiaFiles.php @@ -92,6 +92,10 @@ class ImportArcadiaFiles extends Command $record->save(); } } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + }elseif (substr($filename, 0, 10) == "DAM_MARQUE") { foreach ($fileContent->dam as $row) { $record = Marque::where('codMarq', $row->codMarq)->first(); @@ -105,6 +109,10 @@ class ImportArcadiaFiles extends Command $record->save(); } } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + }elseif (substr($filename, 0, 15) == "DAM_MEDIA_SUJET") { foreach ($fileContent->mediaSujet as $row) { $record = Sujet::where('codeSujet', $row->code)->first(); @@ -118,6 +126,10 @@ class ImportArcadiaFiles extends Command $record->save(); } } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + }elseif (substr($filename, 0, 20) == "DAM_MEDIA_TYPE_MEDIA") { foreach ($fileContent->mediatypemedia as $row) { $record = Typemedia::where('codeTypemedia', $row->code)->first(); @@ -131,6 +143,10 @@ class ImportArcadiaFiles extends Command $record->save(); } } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + }elseif (substr($filename, 0, 17) == "DAM_MEDIA_TYPEVUE") { foreach ($fileContent->mediatypesvue as $row) { $record = Typevue::where('codeTypevue', $row->code)->first(); @@ -146,6 +162,10 @@ class ImportArcadiaFiles extends Command $record->save(); } } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + }elseif (substr($filename, 0, 18) == "DAM_MEDIA_VARIANTE") { foreach ($fileContent->mediavariante as $row) { $record = Variante::where('codeVariante', $row->code)->first(); @@ -163,6 +183,10 @@ class ImportArcadiaFiles extends Command $record->save(); } } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + }elseif (substr($filename, 0, 20) == "DAM_SITE_PROD_GROUPE") { foreach ($fileContent->SITE_PROD_GRP as $row) { $record = Site::where('id', $row->code)->first(); @@ -176,111 +200,11 @@ class ImportArcadiaFiles extends Command $record->save(); } } - }elseif (substr($filename, 0, 16) == "DAM_MEDIA_VISUEL") { - foreach ($fileContent->MEDIA_VISUEL as $row) { - $record = Media::where('arcadia_id', $row->code)->first(); - if(!$record){ // Insert new record - $record = new Media(); - $record->arcadia_id = $row->code; - if($row->extension != ""){ - $record->extension = $row->extension->typeFichier->libExtension; - } - $record->libelle = $row->libelle; - $record->largeur = $row->nbPxLargeur; - $record->largeur_mm = $row->largeurMm; - $record->hauteur = $row->nbPxHauteur; - $record->hauteur_mm = $row->hauteurMm; - $record->resolution = $row->pppLargeur; - if($row->version != ""){ - $record->version = $row->version; - }else{ - $record->version = 1; - } - - if($row->typemedia_id != ""){ - $record->typemedia_id = $row->codeTypeMedia; - }else{ - $record->typemedia_id = 1; - } - if($row->typevue_id != ""){ - $record->typevue_id = $row->codeTypeVue; - } - $record->commentaire = $row->commentaire; - $record->sujet_id = $row->codeSujet; - if($row->langue != ""){ - $record->langue_id = $row->langue; - } - if($row->copyright != ""){ - $record->copyright_id = $row->copyright; - } - if($row->codeVariante != ""){ - $record->variante_id = $row->codeVariante; - } - if($row->dateCreation != ""){ - $row->dateCreation = substr($row->dateCreation, 0, 10); - $date = explode("/", $row->dateCreation); - $record->created_at = $date[2].'-'.$date[1].'-'.$date[0]; - } - if($row->dateModification != ""){ - $row->dateModification = substr($row->dateModification, 0, 10); - $date = explode("/", $row->dateModification); - $record->updated_at = $date[2].'-'.$date[1].'-'.$date[0]; - } - if($row->datePublication != ""){ - $row->datePublication = substr($row->datePublication, 0, 10); - $date = explode("/", $row->datePublication); - $record->published_at = $date[2].'-'.$date[1].'-'.$date[0]; - } - $record->statut = config('services.statut.public_etendu'); - - // TODO lien avec les sites, marques et articles - - - $mediaFile = "/images/".$record->arcadia_id.".".$record->extension; - $fileExists = Storage::disk('arcadia')->exists($mediaFile); - if($fileExists){ - $file = Storage::disk('arcadia')->get($mediaFile); - - // Affectation d'un dossier et d'un uid - $destinationPath = $this->get_mediaFolder()."/"; - $record->folder = $destinationPath; - $record->uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', - // 32 bits for "time_low" - mt_rand(0, 0xffff), mt_rand(0, 0xffff), - // 16 bits for "time_mid" - mt_rand(0, 0xffff), - // 16 bits for "time_hi_and_version", - // four most significant bits holds version number 4 - mt_rand(0, 0x0fff) | 0x4000, - // 16 bits, 8 bits for "clk_seq_hi_res", - // 8 bits for "clk_seq_low", - // two most significant bits holds zero and one for variant DCE1.1 - mt_rand(0, 0x3fff) | 0x8000, - // 48 bits for "node" - mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) - ); - - // déplacement du média et renommage du fichier - $full_path_source = Storage::disk('arcadia')->getDriver()->getAdapter()->applyPathPrefix($mediaFile); - $full_path_dest = Storage::disk('local')->getDriver()->getAdapter()->applyPathPrefix($destinationPath.$record->uid. '.' .$record->extension); - File::move($full_path_source, $full_path_dest); - - // calcul de la taille du média et durée - $record->taille = $this->formatBytes($this->get_file_size($full_path_dest)); - $record->save(); - - // ---- Creation des vignettes de base - $this->create_sys_thumb($record); - // ---- Creation des vignettes en lien avec le sujet du média - $this->create_thumb($record); - } - } - } + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); } - // ---- Suppression du fichier - Storage::disk('arcadia')->delete($filename); $bar->advance(); } diff --git a/app/Console/Commands/ImportMedia.php b/app/Console/Commands/ImportMedia.php new file mode 100644 index 0000000..eee0839 --- /dev/null +++ b/app/Console/Commands/ImportMedia.php @@ -0,0 +1,234 @@ +info('Démarrage du traitement'); + $files = Storage::disk('arcadia')->files(); + + + + $this->line("-> Import du fichier DAM_MEDIA_VISUEL"); + // ---- Traitement de l'import des XML Visuel + foreach ($files as $filename) { + + if($filename == ".gitignore") continue; + + // ---- Récupération du contenu + $oneFile = Storage::disk('arcadia')->get($filename); + $fileContent = simplexml_load_string($oneFile); + + // ---- traitement du fichier + if (substr($filename, 0, 16) == "DAM_MEDIA_VISUEL") { + foreach ($fileContent->MEDIA_VISUEL as $row) { + $record = Media::where('arcadia_id', $row->code)->first(); + if(!$record){ // Insert new record + $record = new Media(); + $record->arcadia_id = $row->code; + if($row->extension != ""){ + $record->extension = $row->extension->typeFichier->libExtension; + } + + $record->libelle = $row->libelle; + $record->largeur = $row->nbPxLargeur; + $record->largeur_mm = $row->largeurMm; + $record->hauteur = $row->nbPxHauteur; + $record->hauteur_mm = $row->hauteurMm; + $record->resolution = $row->pppLargeur; + if($row->version != ""){ + $record->version = $row->version; + }else{ + $record->version = 1; + } + + if($row->typemedia_id != ""){ + $record->typemedia_id = $row->codeTypeMedia; + }else{ + $record->typemedia_id = 1; + } + if($row->typevue_id != ""){ + $record->typevue_id = $row->codeTypeVue; + } + $record->commentaire = $row->commentaire; + $record->sujet_id = $row->codeSujet; + if($row->langue != ""){ + $record->langue_id = $row->langue; + } + if($row->copyright != ""){ + $record->copyright_id = $row->copyright; + } + if($row->codeVariante != ""){ + $record->variante_id = $row->codeVariante; + } + if($row->dateCreation != ""){ + $row->dateCreation = substr($row->dateCreation, 0, 10); + $date = explode("/", $row->dateCreation); + $record->created_at = $date[2].'-'.$date[1].'-'.$date[0]; + } + if($row->dateModification != ""){ + $row->dateModification = substr($row->dateModification, 0, 10); + $date = explode("/", $row->dateModification); + $record->updated_at = $date[2].'-'.$date[1].'-'.$date[0]; + } + if($row->datePublication != ""){ + $row->datePublication = substr($row->datePublication, 0, 10); + $date = explode("/", $row->datePublication); + $record->published_at = $date[2].'-'.$date[1].'-'.$date[0]; + } + $record->statut = config('services.statut.public_etendu'); + + $mediaFile = "/images/".$record->arcadia_id.".".$record->extension; + $fileExists = Storage::disk('arcadia')->exists($mediaFile); + if($fileExists){ + $file = Storage::disk('arcadia')->get($mediaFile); + + // Affectation d'un dossier et d'un uid + $destinationPath = $this->get_mediaFolder()."/"; + $record->folder = $destinationPath; + $record->uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + // 32 bits for "time_low" + mt_rand(0, 0xffff), mt_rand(0, 0xffff), + // 16 bits for "time_mid" + mt_rand(0, 0xffff), + // 16 bits for "time_hi_and_version", + // four most significant bits holds version number 4 + mt_rand(0, 0x0fff) | 0x4000, + // 16 bits, 8 bits for "clk_seq_hi_res", + // 8 bits for "clk_seq_low", + // two most significant bits holds zero and one for variant DCE1.1 + mt_rand(0, 0x3fff) | 0x8000, + // 48 bits for "node" + mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) + ); + + // déplacement du média et renommage du fichier + $full_path_source = Storage::disk('arcadia')->getDriver()->getAdapter()->applyPathPrefix($mediaFile); + $full_path_dest = Storage::disk('local')->getDriver()->getAdapter()->applyPathPrefix($destinationPath.$record->uid. '.' .$record->extension); + File::move($full_path_source, $full_path_dest); + + // calcul de la taille du média et durée + $record->taille = $this->formatBytes($this->get_file_size($full_path_dest)); + $record->save(); + + // ---- Creation des vignettes de base + $this->create_sys_thumb($record); + // ---- Creation des vignettes en lien avec le sujet du média + $this->create_thumb($record); + }else{ + $this->line("DAM_MEDIA_VISUEL : le visuel du media n°".$row->code. " n'a pas été trouvé"); + } + }else{ + $this->line("DAM_MEDIA_VISUEL : le media n°".$row->code. " existe déjà en base"); + } + } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + + } + } + + + // ---- Traitement de l'association media <-> article + $this->line("-> Import du fichier DAM_ASSO_ARTICLE"); + foreach ($files as $filename) { + if($filename == ".gitignore") continue; + + // ---- Récupération du contenu + $oneFile = Storage::disk('arcadia')->get($filename); + $fileContent = simplexml_load_string($oneFile); + + // ---- traitement du fichier + if (substr($filename, 0, 16) == "DAM_ASSO_ARTICLE") { + foreach ($fileContent->mediaassoarticle as $row) { + $record = Media::where('arcadia_id', $row->codeVisuel)->first(); + if($record){ + $article = Article::where('noArt', $row->noArt)->first(); + if($article){ + $record->articles()->attach($article->id); + }else{ + $this->line("DAM_ASSO_ARTICLE : le media n°".$row->codeVisuel. " ne peut être lié à l'article n°".$row->noArt); + } + }else{ + $this->line("DAM_ASSO_ARTICLE : le media n°".$row->codeVisuel. " n'existe pas"); + } + } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + } + } + + + // ---- Traitement de l'association media <-> marque + $this->line("-> Import du fichier DAM_ASSO_MARQUE"); + foreach ($files as $filename) { + if($filename == ".gitignore") continue; + + // ---- Récupération du contenu + $oneFile = Storage::disk('arcadia')->get($filename); + $fileContent = simplexml_load_string($oneFile); + + // ---- traitement du fichier + if (substr($filename, 0, 15) == "DAM_ASSO_MARQUE") { + foreach ($fileContent->mediaassomarque as $row) { + $record = Media::where('arcadia_id', $row->codeVisuel)->first(); + if($record){ + $record->marques()->attach($row->codMarq); + }else{ + $this->line("DAM_ASSO_MARQUE : le media n°".$row->codeVisuel. " n'existe pas"); + } + } + + // ---- Suppression du fichier + Storage::disk('arcadia')->delete($filename); + } + } + + + $this->line(""); + $this->info('Fin du traitement'); + } +} diff --git a/app/Http/Controllers/CommunController.php b/app/Http/Controllers/CommunController.php index 0463e0b..047f5e3 100644 --- a/app/Http/Controllers/CommunController.php +++ b/app/Http/Controllers/CommunController.php @@ -22,6 +22,7 @@ class CommunController extends Controller { $user = Auth::user(); $sujets = $user->sujets; + $paniers = Auth::user()->paniersFavoris; $recherches = Recherche::where('user_id', $user->id) ->with("sujet") ->limit(10) @@ -33,7 +34,7 @@ class CommunController extends Controller }) ->with("sujet") ->get(); - return view('home')->with(['sujets'=> $sujets, 'recherches'=> $recherches, 'dossiers'=> $dossiers]); + return view('home')->with(['sujets'=> $sujets, 'recherches'=> $recherches, 'dossiers'=> $dossiers, 'paniers'=> $paniers]); } /** diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php index 4a43894..66f3891 100644 --- a/app/Http/Controllers/MediaController.php +++ b/app/Http/Controllers/MediaController.php @@ -19,6 +19,7 @@ use App\Tag; use App\Article; use App\Recherche; use App\Historique; +use App\Panier; use App\Http\Traits\MediaTools; class MediaController extends Controller @@ -35,6 +36,7 @@ class MediaController extends Controller { $filters = ""; $sujets = Auth::user()->sujets; + $paniers = Auth::user()->paniersOwner; $typemedias = Typemedia::all(); $langues = Langue::all(); $copyrights = Copyright::all(); @@ -42,7 +44,6 @@ class MediaController extends Controller $sites = Site::orderBy('libelle')->get(); $marques = Marque::all(); - $dossier_id = $request->get('d'); $sujet_id = $request->get('s'); $textSearch = $request->get('t'); @@ -83,6 +84,7 @@ class MediaController extends Controller 'currentFolder'=> $dossier_id, 'currentSujet'=> $sujet_id, 'currentFilters'=> $filters, + 'paniers' => $paniers, ]); } diff --git a/app/Http/Controllers/PanierController.php b/app/Http/Controllers/PanierController.php new file mode 100644 index 0000000..9027576 --- /dev/null +++ b/app/Http/Controllers/PanierController.php @@ -0,0 +1,122 @@ +with([ + 'paniers'=> $paniers, + ]); + + } + + /** + * Ajout de média à un panier + */ + public function addMediasBasket(Request $request) + { + $response = false; + + $mediasToAdd = $request->input('medias'); + $panierId = $request->input('panier_id'); + + $panier = Panier::where('id', $panierId)->with('medias')->first(); + if($panier){ + $result = $panier->medias()->syncWithoutDetaching($mediasToAdd); + $medias = Media::whereIn('id', $result['attached'])->get(); + $response = $medias; + } + + return json_encode($response); + } + + /** + * Suppression de média à un panier + */ + public function removeMediasBasket(Request $request) + { + $response = false; + + $mediaToRemove = $request->input('media_id'); + $panierId = $request->input('panier_id'); + + $panier = Panier::where('id', $panierId)->with('medias')->first(); + if($panier && $mediaToRemove != ""){ + $panier->medias()->detach($mediaToRemove); + $response = true; + } + + return json_encode($response); + } + + + /** + * Ajoute un panier + */ + public function addBasket(Request $request) + { + $response = false; + $title = $request->input('title'); + + if($title == ""){ + $title = "Panier du ".date("d/m/Y"); + } + + $panier = new Panier(); + $panier->owner = Auth::user()->id; + $panier->libelle = $title; + if($panier->save()){ + $response = $panier; + } + + return json_encode($response); + } + + /** + * supprimer un panier + * + */ + public function removeBasket(Request $request) + { + $response = false; + $user_id = Auth::user()->id; + $basket_id = $request->input('basket_id'); + + + $panier = Panier::where('id', $basket_id); + if($panier){ + $panier->delete(); + $response = true; + } + return json_encode($response); + } + + /** + * Charge un panier + */ + public function loadBasket(Request $request) + { + $response = false; + $panierId = $request->input('panier_id'); + + $panier = Panier::where('id', $panierId)->with('medias')->first(); + if($panier){ + $response = $panier; + } + + return json_encode($response); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index b16dd15..0269fcf 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -241,7 +241,6 @@ class UserController extends Controller */ public function favorisFolder(Request $request) { - Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]); $dossier_id = $request->input('dossier_id'); $favoris = $request->input('favoris'); @@ -254,4 +253,23 @@ class UserController extends Controller } return json_encode(true); } + + /** + * ajouter un panier en favoris + * + */ + public function favorisBasket(Request $request) + { + $basket_id = $request->input('basket_id'); + $favoris = $request->input('favoris'); + + $basketFav = Auth::user()->paniersFavoris()->where('id', $basket_id)->first(); + + if($favoris == "false" && $basketFav){ + Auth::user()->paniersFavoris()->detach($basket_id); + }elseif ($favoris == "true" && !$basketFav) { + Auth::user()->paniersFavoris()->attach($basket_id); + } + return json_encode(true); + } } diff --git a/app/Media.php b/app/Media.php index 7aff524..8f4729f 100644 --- a/app/Media.php +++ b/app/Media.php @@ -114,4 +114,12 @@ class Media extends Model { return $this->hasMany('App\Historique'); } + + /** + * The paniers that belong to the media. + */ + public function paniers() + { + return $this->belongsToMany('App\Panier', 'paniers_medias', 'media_id', 'panier_id'); + } } diff --git a/app/Panier.php b/app/Panier.php new file mode 100644 index 0000000..ff95d7c --- /dev/null +++ b/app/Panier.php @@ -0,0 +1,36 @@ +belongsTo('App\User', 'owner'); + } + + /** + * The users that belong to the panier. + */ + public function usersFavoris() + { + return $this->belongsToMany('App\User', 'paniers_users', 'panier_id', 'user_id'); + } + + /** + * The medias that belong to the panier. + */ + public function medias() + { + return $this->belongsToMany('App\Media', 'paniers_medias', 'panier_id', 'media_id'); + } + +} diff --git a/app/User.php b/app/User.php index 99bacd9..132441b 100644 --- a/app/User.php +++ b/app/User.php @@ -115,4 +115,20 @@ class User extends Authenticatable { return $this->hasMany('App\Recherche'); } + + /** + * Get the paniers for the user. + */ + public function paniersOwner() + { + return $this->hasMany('App\Panier', 'owner'); + } + + /** + * The paniers that belong to the user. + */ + public function paniersFavoris() + { + return $this->belongsToMany('App\Panier', 'paniers_users', 'user_id', 'panier_id'); + } } diff --git a/public/css/app.css b/public/css/app.css index 4429021..30c8f47 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -13538,6 +13538,7 @@ a { .heading a { margin-left: 10px; + display: inline-block; } h1 { @@ -13720,6 +13721,8 @@ table tfoot tr:hover { .media_manager { height: calc(100% - 48px); + position: relative; + overflow: hidden; } .media_manager .main_content { @@ -13950,8 +13953,9 @@ table tfoot tr:hover { .media_manager .main_content .media_container { overflow-y: auto; overflow-x: hidden; + scrollbar-color: #272626 #1a1a1a; position: relative; - height: calc(100% - 180px); + height: calc(100% - 174px); } .media_manager .main_content .media_container .loader { @@ -14267,6 +14271,7 @@ table tfoot tr:hover { .media_manager .side_menu .folder_container { background-color: #333333; height: calc(100% - 129px); + scrollbar-color: #272626 #1a1a1a; overflow-y: auto; position: relative; } @@ -14345,6 +14350,141 @@ table tfoot tr:hover { background: rgba(0, 0, 0, 0.2); } +.media_manager .side_menu.panier_side_menu { + width: 380px; +} + +.media_manager .side_menu.panier_side_menu .close_side_menu { + left: -17px; + border-radius: 3px 0 0 3px; + border-left: 1px solid #505050; + border-right: none; +} + +.media_manager .side_menu.panier_side_menu.collapse { + -webkit-transform: translateX(100%); + transform: translateX(100%); + position: absolute; + right: 0; +} + +.media_manager .side_menu.panier_side_menu header { + display: flex; +} + +.media_manager .side_menu.panier_side_menu header a { + margin-left: 5px; + position: relative; +} + +.media_manager .side_menu.panier_side_menu header .panier_menu { + width: 140px; + box-shadow: 0 4px 5px 3px rgba(0, 0, 0, 0.2); + position: absolute; + display: none; + background-color: #333333; + z-index: 1; + right: 12px; + top: 48px; +} + +.media_manager .side_menu.panier_side_menu header .panier_menu .menu-options { + list-style: none; + padding: 10px 0; +} + +.media_manager .side_menu.panier_side_menu header .panier_menu .menu-options .menu-option { + font-weight: 500; + font-size: 13px; + padding: 10px; + cursor: pointer; +} + +.media_manager .side_menu.panier_side_menu header .panier_menu .menu-options .menu-option:hover { + background: rgba(0, 0, 0, 0.2); +} + +.media_manager .side_menu.panier_side_menu .panier_content { + height: calc(100% - 59px); + overflow-y: auto; + scrollbar-color: #272626 #1a1a1a; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem { + display: inline-block; + border: 1px solid grey; + width: 202px; + margin: 2px 5px; + background-color: #333333; + transition: 0.3s ease-in-out; + position: relative; + cursor: pointer; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media { + height: 200px; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + position: relative; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media::before { + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + display: block; + position: absolute; + left: 50%; + top: 50%; + text-align: center; + text-indent: 0; + color: #ffffff; + font-size: 59px; + z-index: 1; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media.video::before { + content: "\F167"; + font-family: "Font Awesome 5 Brands"; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media.son::before { + content: "\F58F"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media.doc::before { + content: "\F15C"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem:hover { + background-color: #3b3b3b; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem .bar { + position: absolute; + opacity: 0; + transition: opacity 0.5s; + bottom: 0; + height: 29px; + width: 100%; + background-color: rgba(0, 0, 0, 0.7); + text-align: right; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem .bar a { + display: inline-block; + padding: 5px; + border: none; +} + +.media_manager .side_menu.panier_side_menu .panier_content .imageItem:hover .bar { + opacity: 1; +} + /****************************************** POPUP EDITION MEDIA ******************************************/ diff --git a/public/js/app.js b/public/js/app.js index eb49e12..ebdcf8f 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -10934,6 +10934,7 @@ jQuery.fn.scrollParent = function () { $(window).data('offset', 0); $(window).data('limit', 50); $(window).data('currentFolder', 0); +$(window).data('currentBasket', 0); $(window).data('filter', {}); //confirm popup $.fancyConfirm = function (opts) { @@ -10997,6 +10998,12 @@ $(document).mouseup(function (e) { menuContextuel.hide(); } + var cartMenu = $(".panier_side_menu .panier_menu"); + + if (!cartMenu.is(e.target) && cartMenu.has(e.target).length === 0 && $("#menu_panier").has(e.target).length === 0) { + cartMenu.hide(); + } + var filter_list = $(".filter_selector"); if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) { @@ -11305,14 +11312,14 @@ $(document).ready(function () { $(".close_side_menu").on('click', function (event) { event.preventDefault(); - if ($(".side_menu ").hasClass('collapse')) { - $(".side_menu ").removeClass('collapse'); - $(".close_side_menu i").removeClass('fa-chevron-right'); - $(".close_side_menu i").addClass('fa-chevron-left'); + if ($(this).parents(".side_menu ").hasClass('collapse')) { + $(this).parents(".side_menu ").removeClass('collapse'); + $(this).find("i").removeClass('fa-chevron-right'); + $(this).find("i").addClass('fa-chevron-left'); } else { - $(".side_menu ").addClass('collapse'); - $(".close_side_menu i").removeClass('fa-chevron-left'); - $(".close_side_menu i").addClass('fa-chevron-right'); + $(this).parents(".side_menu ").addClass('collapse'); + $(this).find("i").removeClass('fa-chevron-left'); + $(this).find("i").addClass('fa-chevron-right'); } }); // ---- init des dossiers lorsqu'on change de sujet @@ -11753,7 +11760,9 @@ $(document).ready(function () { $("#form_download .medias").val(medias.join()); } }).trigger("click"); - } else if ($target.hasClass('addBasket')) {// ajouter le média au panier + } else if ($target.hasClass('addBasket')) { + // ajouter le média au panier + addMediasBasket([$(this).attr('data-id')]); } else if ($target.hasClass('deleteItem')) { // supprimer le média removeMedias([$(this).attr('data-id')]); @@ -11866,7 +11875,7 @@ $(document).ready(function () { var drPlugin = null; var viewer = null; - $(".main_content .wrapper").on("dblclick", '.imageItem', function (event) { + $(".media_manager").on("dblclick", '.imageItem', function (event) { event.preventDefault(); // récupère l'image de preview var imgPreview = $(this).attr('data-preview') + '?t=' + new Date().getTime(); @@ -12046,7 +12055,13 @@ $(document).ready(function () { $(".tab_edit #commentaire").val(result.data.commentaire); $(".tab_edit #version").val(result.data.version); $(".tab_edit #created_at").val(result.data.created_at); - $(".tab_edit #created_by").val(result.data.owner.firstname + " " + result.data.owner.lastname); + + if (result.data.owner != null) { + $(".tab_edit #created_by").val(result.data.owner.firstname + " " + result.data.owner.lastname); + } else { + $(".tab_edit #created_by").val(""); + } + $(".tab_edit #updated_at").val(result.data.updated_at); $(".tab_edit #published_at").val(result.data.published_at); $(".tab_edit #statut").val(result.data.statut); // articles lié @@ -12246,6 +12261,7 @@ $(document).ready(function () { $('.tab_edit .add_article').on('click', function (event) { event.preventDefault(); var arcadia_id = prompt("Indiquez le code Arcadia de l'article.", arcadia_id); + if (arcadia_id === null) return false; $.ajax({ url: '/ajax/get-article', method: 'POST', @@ -13158,6 +13174,300 @@ window.create_UUID = function () { /***/ }), +/***/ "./resources/js/panier.js": +/*!********************************!*\ + !*** ./resources/js/panier.js ***! + \********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +$(document).ready(function () { + if ($(".panier_side_menu").length) { + // ---- collapse/expand panier side menu + $("#menu_panier").on('click', function (event) { + event.preventDefault(); + $(".panier_side_menu .panier_menu").toggle(); + }); // ---- Chargement par défaut du premier panier + + if ($("#panier_selector").val()) { + $(window).data('currentBasket', $("#panier_selector").val()); + loadBasket($(window).data('currentBasket')); + } // ---- chargement du panier on change du sélector + + + $("#panier_selector").on('change', function (event) { + $(window).data('currentBasket', $("#panier_selector").val()); + loadBasket($(window).data('currentBasket')); + }); // ---- Ajout de média au panier en masse + + $('.action_add_basket').on('click', function (event) { + event.preventDefault(); + var medias = []; + $('.media_container .imageItem').each(function (index) { + if ($(this).attr("aria-grabbed") == "true") { + medias.push($(this).attr("data-id")); + } + }); + addMediasBasket(medias); + }); // ---- Ajout un nouveau panier + + $('.panier_side_menu .add_panier').on('click', function (event) { + event.preventDefault(); + $(".panier_side_menu .panier_menu").hide(); + var d = new Date(); + var strDate = ("0" + d.getDate()).slice(-2) + "/" + ("0" + (d.getMonth() + 1)).slice(-2) + "/" + d.getFullYear(); + var defaultTitle = "Panier du " + strDate; + var title = prompt("Indiquez le code Arcadia de ce média", defaultTitle); + $.ajax({ + url: '/ajax/add-basket', + method: 'POST', + dataType: 'json', + data: { + title: title + }, + success: function success(result) { + if (result) { + $("#panier_selector").append(new Option(result.libelle, result.id)); + $("#panier_selector").val(result.id); + $("#panier_selector").trigger("change"); + } + }, + error: function error(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({ + title: "Attention", + message: "Erreur lors de la création du panier, merci d'actualiser la page.", + type: "error" + }); + } + }); + }); // ---- Ajout un nouveau panier + + $('.panier_side_menu .goto_panier').on('click', function (event) { + event.preventDefault(); + $(".panier_side_menu .panier_menu").hide(); + window.location.href = $(this).attr("data-url") + "?p=" + $(window).data('currentBasket'); + }); // ---- Supprimer un média du panier + + $('.panier_content').on('click', ".imageItem .media_remove_basket", function (event) { + event.preventDefault(); + var $media = $(this).parents(".imageItem"); + var media_id = $media.attr("data-id"); + $.ajax({ + url: '/ajax/remove-media-basket', + method: 'POST', + dataType: 'json', + data: { + media_id: media_id, + panier_id: $(window).data('currentBasket') + }, + success: function success(result) { + if (result) { + $(".panier_side_menu .imageItem[data-id='" + media_id + "']").remove(); + } + }, + error: function error(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({ + title: "Attention", + message: "Erreur lors de la suppression du média, merci d'actualiser la page.", + type: "error" + }); + } + }); + }); // ---- Supprimer un média du panier + + $('.panier_content').on('click', ".imageItem .media_info", function (event) { + event.preventDefault(); + var $media = $(this).parents(".imageItem"); + $media.trigger('dblclick'); + }); // ---- gestion du dragover + + $(".panier_content").on("dragover", function (event) { + event.preventDefault(); + event.stopPropagation(); + }); // ---- gestion du dragleave + + $(".panier_content").on("dragleave", function (event) { + event.preventDefault(); + event.stopPropagation(); + }); // ---- evt lorsque l'on drop des élements dans le widget panier + + $(".panier_content").on("drop", function (event) { + event.preventDefault(); + event.stopPropagation(); + var isMediaDepot = false; // source + + var medias = event.originalEvent.dataTransfer.getData("Text").split(","); // Contrôles + + $.each(medias, function (index, media_id) { + if ($(".media_container .imageItem[data-id='" + media_id + "']").attr("data-depot") == "1") { + $.fancyMessage({ + title: "Attention", + message: "Vous ne pouvez pas mettre les médias du dépôt dans un panier.", + type: "error" + }); + isMediaDepot = true; + return false; + } + }); // Ajout des médias dans le panier + + if (!isMediaDepot) { + $.ajax({ + url: '/ajax/add-media-basket', + method: 'POST', + dataType: 'json', + data: { + medias: medias, + panier_id: $(window).data('currentBasket') + }, + success: function success(result) { + if (result) { + $.each(result, function (index, media) { + addmediaBasketHtml(media); + }); + } + }, + error: function error(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({ + title: "Attention", + message: "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", + type: "error" + }); + } + }); + } + }); + } +}); // ---- Ajout de médias au panier + +window.addMediasBasket = function (medias) { + var thumb = ""; + var preview = ""; + var content = ""; + + if (medias.length == 0) { + $.fancyMessage({ + title: "Ajout de média au panier", + message: "Veuillez sélectionner les médias à ajouter.", + type: "info" + }); + } else if ($(window).data('currentBasket') == 0) { + $.fancyMessage({ + title: "Ajout de média au panier", + message: "Veuillez sélectionner un panier.", + type: "info" + }); + } else { + $.ajax({ + url: '/ajax/add-media-basket', + method: 'POST', + dataType: 'json', + data: { + medias: medias, + panier_id: $(window).data('currentBasket') + }, + success: function success(result) { + if (result) { + $.each(result, function (index, media) { + addmediaBasketHtml(media); + }); + } + }, + error: function error(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({ + title: "Attention", + message: "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", + type: "error" + }); + } + }); + } +}; // ---- Charge un panier dans le widget + + +function loadBasket(panierId) { + if (panierId != 0) { + $.ajax({ + url: '/ajax/load-basket', + method: 'POST', + dataType: 'json', + data: { + panier_id: $(window).data('currentBasket') + }, + success: function success(result) { + if (result) { + $(".panier_side_menu .panier_content").html(""); + $.each(result.medias, function (index, media) { + addmediaBasketHtml(media); + }); + } + }, + error: function error(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({ + title: "Attention", + message: "Erreur lors du chargement du panier, merci d'actualiser la page.", + type: "error" + }); + } + }); + } +} // ---- Ajoute un média dans le widget panier + + +function addmediaBasketHtml(media) { + var thumb = ""; + var preview = ""; + var content = ""; + var itemClass = ""; + + switch (media.typemedia_id) { + case 1: + itemClass = ""; + + if (media.extension == "pdf" || media.extension == "ai" || media.extension == "psd") { + thumb = media.folder + media.uid + "_thumb.png"; + preview = media.folder + media.uid + "_preview.png"; + } else { + thumb = media.folder + media.uid + "_thumb." + media.extension; + preview = media.folder + media.uid + "_preview." + media.extension; + } + + break; + + case 2: + itemClass = ""; + thumb = media.folder + media.uid + "." + media.extension; + preview = media.folder + media.uid + "." + media.extension; + break; + + case 3: + itemClass = "video"; + thumb = ""; + preview = media.folder + media.uid + "." + media.extension; + break; + + case 4: + itemClass = "son"; + thumb = ""; + preview = media.folder + media.uid + "." + media.extension; + break; + + default: + } + + content = '
'; + content += '
'; + content += '
'; + content += '
'; + $(".panier_side_menu .panier_content").append(content); +} + +/***/ }), + /***/ "./resources/js/searchengine.js": /*!**************************************!*\ !*** ./resources/js/searchengine.js ***! @@ -13328,9 +13638,9 @@ window.updateFilter = function (filter) { /***/ }), /***/ 0: -/*!********************************************************************************************************************************************************************!*\ - !*** multi ./resources/js/app.js ./resources/js/admin.js ./resources/js/media.js ./resources/js/depot.js ./resources/js/searchengine.js ./resources/sass/app.scss ***! - \********************************************************************************************************************************************************************/ +/*!*********************************************************************************************************************************************************************************************!*\ + !*** multi ./resources/js/app.js ./resources/js/admin.js ./resources/js/media.js ./resources/js/depot.js ./resources/js/panier.js ./resources/js/searchengine.js ./resources/sass/app.scss ***! + \*********************************************************************************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -13338,6 +13648,7 @@ __webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\app.js */"./resource __webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\admin.js */"./resources/js/admin.js"); __webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\media.js */"./resources/js/media.js"); __webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\depot.js */"./resources/js/depot.js"); +__webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\panier.js */"./resources/js/panier.js"); __webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\searchengine.js */"./resources/js/searchengine.js"); module.exports = __webpack_require__(/*! D:\sources\www\ldc-dam\resources\sass\app.scss */"./resources/sass/app.scss"); diff --git a/resources/js/app.js b/resources/js/app.js index 426e433..5cd1915 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -25,6 +25,7 @@ jQuery.fn.scrollParent = function() { $(window).data('offset', 0); $(window).data('limit', 50); $(window).data('currentFolder', 0); +$(window).data('currentBasket', 0); $(window).data('filter', {}); //confirm popup @@ -122,6 +123,11 @@ $(document).mouseup(function(e) { menuContextuel.hide(); } + var cartMenu = $(".panier_side_menu .panier_menu"); + if (!cartMenu.is(e.target) && cartMenu.has(e.target).length === 0 && $("#menu_panier").has(e.target).length === 0) { + cartMenu.hide(); + } + var filter_list = $(".filter_selector"); if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) { $(".filter_selector .list").hide(); diff --git a/resources/js/media.js b/resources/js/media.js index c59d9d6..a5ff532 100644 --- a/resources/js/media.js +++ b/resources/js/media.js @@ -25,14 +25,14 @@ $(document).ready(function() { // ---- collapse/expand side menu $(".close_side_menu").on('click', function(event) { event.preventDefault(); - if($(".side_menu ").hasClass('collapse')){ - $(".side_menu ").removeClass('collapse') - $(".close_side_menu i").removeClass('fa-chevron-right'); - $(".close_side_menu i").addClass('fa-chevron-left'); + if($(this).parents(".side_menu ").hasClass('collapse')){ + $(this).parents(".side_menu ").removeClass('collapse') + $(this).find("i").removeClass('fa-chevron-right'); + $(this).find("i").addClass('fa-chevron-left'); }else{ - $(".side_menu ").addClass('collapse'); - $(".close_side_menu i").removeClass('fa-chevron-left'); - $(".close_side_menu i").addClass('fa-chevron-right'); + $(this).parents(".side_menu ").addClass('collapse'); + $(this).find("i").removeClass('fa-chevron-left'); + $(this).find("i").addClass('fa-chevron-right'); } }); @@ -450,6 +450,7 @@ $(document).ready(function() { } }).trigger("click"); }else if ($target.hasClass('addBasket')) { // ajouter le média au panier + addMediasBasket([$(this).attr('data-id')]); }else if ($target.hasClass('deleteItem')) { // supprimer le média removeMedias([$(this).attr('data-id')]); }else if ($target.hasClass('tagItem')) { // Appliquer une étiquette @@ -556,7 +557,7 @@ $(document).ready(function() { // ---- double-clique sur un média var drPlugin = null; var viewer = null; - $(".main_content .wrapper").on("dblclick", '.imageItem' , function(event) { + $(".media_manager").on("dblclick", '.imageItem' , function(event) { event.preventDefault(); // récupère l'image de preview @@ -722,7 +723,12 @@ $(document).ready(function() { $(".tab_edit #commentaire").val(result.data.commentaire); $(".tab_edit #version").val(result.data.version); $(".tab_edit #created_at").val(result.data.created_at); - $(".tab_edit #created_by").val(result.data.owner.firstname+" "+result.data.owner.lastname); + + if(result.data.owner != null){ + $(".tab_edit #created_by").val(result.data.owner.firstname+" "+result.data.owner.lastname); + }else{ + $(".tab_edit #created_by").val(""); + } $(".tab_edit #updated_at").val(result.data.updated_at); $(".tab_edit #published_at").val(result.data.published_at); $(".tab_edit #statut").val(result.data.statut); @@ -898,6 +904,7 @@ $(document).ready(function() { $('.tab_edit .add_article').on('click', function(event){ event.preventDefault(); var arcadia_id = prompt("Indiquez le code Arcadia de l'article.", arcadia_id); + if(arcadia_id === null) return false; $.ajax({ url: '/ajax/get-article', diff --git a/resources/js/panier.js b/resources/js/panier.js new file mode 100644 index 0000000..d993b9d --- /dev/null +++ b/resources/js/panier.js @@ -0,0 +1,266 @@ +$(document).ready(function() { + + if ( $( ".panier_side_menu" ).length ) { + + // ---- collapse/expand panier side menu + $("#menu_panier").on('click', function(event) { + event.preventDefault(); + $(".panier_side_menu .panier_menu").toggle(); + }); + + // ---- Chargement par défaut du premier panier + if($("#panier_selector").val()){ + $(window).data('currentBasket', $("#panier_selector").val()); + loadBasket($(window).data('currentBasket')); + } + + // ---- chargement du panier on change du sélector + $("#panier_selector").on('change', function(event) { + $(window).data('currentBasket', $("#panier_selector").val()); + loadBasket($(window).data('currentBasket')); + }); + + // ---- Ajout de média au panier en masse + $('.action_add_basket').on('click',function(event){ + event.preventDefault(); + var medias = []; + $('.media_container .imageItem').each(function (index) { + if( $(this ).attr("aria-grabbed") == "true" ){ + medias.push($(this ).attr("data-id")); + } + }); + addMediasBasket(medias); + }); + + // ---- Ajout un nouveau panier + $('.panier_side_menu .add_panier').on('click',function(event){ + event.preventDefault(); + $(".panier_side_menu .panier_menu").hide(); + var d = new Date(); + var strDate = ("0" +d.getDate()).slice(-2)+ "/" + ("0" +(d.getMonth()+1)).slice(-2) + "/" + d.getFullYear(); + var defaultTitle = "Panier du "+strDate; + var title = prompt("Indiquez le code Arcadia de ce média", defaultTitle); + + $.ajax({ + url: '/ajax/add-basket', + method: 'POST', + dataType : 'json', + data: { + title: title, + }, + success: function(result){ + if(result){ + $("#panier_selector").append(new Option(result.libelle, result.id)); + $("#panier_selector").val(result.id); + $("#panier_selector").trigger("change"); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({title : "Attention", message : "Erreur lors de la création du panier, merci d'actualiser la page.", type : "error"}); + } + }); + + }); + + // ---- Ajout un nouveau panier + $('.panier_side_menu .goto_panier').on('click',function(event){ + event.preventDefault(); + $(".panier_side_menu .panier_menu").hide(); + window.location.href = $(this).attr("data-url")+"?p="+$(window).data('currentBasket'); + }); + + // ---- Supprimer un média du panier + $('.panier_content').on('click', ".imageItem .media_remove_basket",function(event){ + event.preventDefault(); + var $media = $(this).parents(".imageItem"); + var media_id = $media.attr("data-id"); + $.ajax({ + url: '/ajax/remove-media-basket', + method: 'POST', + dataType : 'json', + data: { + media_id: media_id, + panier_id : $(window).data('currentBasket'), + }, + success: function(result){ + if(result){ + $(".panier_side_menu .imageItem[data-id='"+media_id+"']").remove(); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du média, merci d'actualiser la page.", type : "error"}); + } + }); + }); + + // ---- Supprimer un média du panier + $('.panier_content').on('click', ".imageItem .media_info",function(event){ + event.preventDefault(); + var $media = $(this).parents(".imageItem"); + $media.trigger('dblclick'); + }); + + + // ---- gestion du dragover + $(".panier_content").on("dragover", function(event) { + event.preventDefault(); + event.stopPropagation(); + }); + + // ---- gestion du dragleave + $(".panier_content").on("dragleave", function(event) { + event.preventDefault(); + event.stopPropagation(); + }); + + // ---- evt lorsque l'on drop des élements dans le widget panier + $(".panier_content").on("drop", function(event) { + event.preventDefault(); + event.stopPropagation(); + var isMediaDepot = false; + + // source + var medias = event.originalEvent.dataTransfer.getData("Text").split(","); + + // Contrôles + $.each(medias, function (index, media_id) { + if($(".media_container .imageItem[data-id='"+media_id+"']").attr("data-depot") == "1"){ + $.fancyMessage({title : "Attention", message : "Vous ne pouvez pas mettre les médias du dépôt dans un panier.", type : "error"}); + isMediaDepot = true; + return false; + } + }); + + // Ajout des médias dans le panier + if(!isMediaDepot){ + $.ajax({ + url: '/ajax/add-media-basket', + method: 'POST', + dataType : 'json', + data: { + medias: medias, + panier_id : $(window).data('currentBasket'), + }, + success: function(result){ + if(result){ + $.each(result, function (index, media) { + addmediaBasketHtml(media); + }); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({title : "Attention", message : "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", type : "error"}); + } + }); + } + }); + + + } +}); + + +// ---- Ajout de médias au panier +window.addMediasBasket = function(medias){ + var thumb = ""; + var preview = ""; + var content = ""; + + if(medias.length == 0){ + $.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner les médias à ajouter.", type : "info"}); + }else if ($(window).data('currentBasket') == 0) { + $.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner un panier.", type : "info"}); + }else{ + $.ajax({ + url: '/ajax/add-media-basket', + method: 'POST', + dataType : 'json', + data: { + medias: medias, + panier_id : $(window).data('currentBasket'), + }, + success: function(result){ + if(result){ + $.each(result, function (index, media) { + addmediaBasketHtml(media); + }); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({title : "Attention", message : "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", type : "error"}); + } + }); + } +} + +// ---- Charge un panier dans le widget +function loadBasket(panierId){ + if(panierId != 0){ + $.ajax({ + url: '/ajax/load-basket', + method: 'POST', + dataType : 'json', + data: { + panier_id : $(window).data('currentBasket'), + }, + success: function(result){ + if(result){ + $(".panier_side_menu .panier_content").html(""); + $.each(result.medias, function (index, media) { + addmediaBasketHtml(media); + }); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({title : "Attention", message : "Erreur lors du chargement du panier, merci d'actualiser la page.", type : "error"}); + } + }); + } +} + +// ---- Ajoute un média dans le widget panier +function addmediaBasketHtml(media){ + var thumb = ""; + var preview = ""; + var content = ""; + var itemClass = ""; + + switch (media.typemedia_id) { + case 1: + itemClass = ""; + if(media.extension == "pdf" || media.extension == "ai" || media.extension == "psd"){ + thumb = media.folder+media.uid+"_thumb.png"; + preview = media.folder+media.uid+"_preview.png"; + }else{ + thumb = media.folder+media.uid+"_thumb."+media.extension; + preview = media.folder+media.uid+"_preview."+media.extension; + } + break; + case 2: + itemClass = ""; + thumb = media.folder+media.uid+"."+media.extension; + preview = media.folder+media.uid+"."+media.extension; + break; + case 3: + itemClass = "video"; + thumb = ""; + preview = media.folder+media.uid+"."+media.extension; + break; + case 4: + itemClass = "son"; + thumb = ""; + preview = media.folder+media.uid+"."+media.extension; + break; + default: + } + content = '
'; + content += '
'; + content += '
'; + content += '
'; + $(".panier_side_menu .panier_content").append(content); +} diff --git a/resources/sass/partials/form.scss b/resources/sass/partials/form.scss index 3609e84..6a6e9b2 100644 --- a/resources/sass/partials/form.scss +++ b/resources/sass/partials/form.scss @@ -107,6 +107,7 @@ a{ a{ margin-left: 10px; + display: inline-block; } } h1{ diff --git a/resources/sass/partials/media.scss b/resources/sass/partials/media.scss index a2abed3..8c04a71 100644 --- a/resources/sass/partials/media.scss +++ b/resources/sass/partials/media.scss @@ -2,6 +2,8 @@ .media_manager{ height: calc(100% - 48px); + position: relative; + overflow: hidden; .main_content{ height: 100%; @@ -207,8 +209,9 @@ .media_container{ overflow-y: auto; overflow-x: hidden; + scrollbar-color: #272626 #1a1a1a; position: relative; - height: calc(100% - 180px); + height: calc(100% - 174px); .loader{ position: sticky; @@ -513,6 +516,7 @@ .folder_container{ background-color: $grey3; height: calc(100% - 129px); + scrollbar-color: #272626 #1a1a1a; overflow-y: auto; position: relative; @@ -586,6 +590,142 @@ } + &.panier_side_menu{ + width: 380px; + + .close_side_menu{ + left: -17px; + border-radius : 3px 0 0 3px; + border-left: 1px solid #505050; + border-right: none; + } + &.collapse{ + transform: translateX(100%); + position: absolute; + right: 0; + } + header{ + display: flex; + + a{ + margin-left: 5px; + position: relative; + } + .panier_menu { + width: 140px; + box-shadow: 0 4px 5px 3px rgba(0, 0, 0, 0.2); + position: absolute; + display: none; + background-color: $grey3; + z-index: 1; + right: 12px; + top: 48px; + + .menu-options { + list-style: none; + padding: 10px 0; + + .menu-option { + font-weight: 500; + font-size: 13px; + padding: 10px; + cursor: pointer; + + &:hover { + background: rgba(0, 0, 0, 0.2); + } + } + } + } + } + .panier_content{ + height: calc(100% - 59px); + overflow-y: auto; + scrollbar-color: #272626 #1a1a1a; + + .imageItem{ + display: inline-block; + border: 1px solid grey; + width: 202px; + margin: 2px 5px; + background-color: $grey3; + transition: 0.3s ease-in-out; + position: relative; + cursor: pointer; + + .media{ + height: 200px; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + position: relative; + + &::before { + transform: translate(-50%,-50%); + display: block; + position: absolute; + left: 50%; + top: 50%; + text-align: center; + text-indent: 0; + color: $white; + font-size: 59px; + z-index: 1; + } + &.video{ + &::before { + content: "\f167"; + font-family: "Font Awesome 5 Brands"; + + } + } + &.son{ + &::before { + content: "\f58f"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; + + } + } + &.doc{ + &::before { + content: "\f15c"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; + + } + } + } + + &:hover{ + background-color: $grey; + } + + .bar{ + position: absolute; + opacity: 0; + transition: opacity 0.5s; + bottom: 0; + height: 29px; + width: 100%; + background-color: rgba(0,0,0,0.7); + text-align: right; + + + a{ + display: inline-block; + padding: 5px; + border: none; + } + } + &:hover{ + .bar{ + opacity: 1; + } + } + } + } + } } } diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 0714e35..a9beb1e 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -37,6 +37,16 @@ @endforeach +
+
+ Mes paniers favoris +
+
+ @foreach ($paniers as $panier) + {{$panier->libelle}} + @endforeach +
+
@endsection diff --git a/resources/views/layouts/header.blade.php b/resources/views/layouts/header.blade.php index a0c848f..7272389 100644 --- a/resources/views/layouts/header.blade.php +++ b/resources/views/layouts/header.blade.php @@ -7,6 +7,11 @@ Gestion des média +
{{ Auth::user()->firstname." ".Auth::user()->lastname}} diff --git a/resources/views/layouts/media_edit.blade.php b/resources/views/layouts/media_edit.blade.php index 72a03a7..297ddae 100644 --- a/resources/views/layouts/media_edit.blade.php +++ b/resources/views/layouts/media_edit.blade.php @@ -85,7 +85,7 @@
- + + @foreach ($paniers as $panier) + + @endforeach + + +
+ +
+ +
+ +
+