diff --git a/app/Console/Commands/ImportMedia.php b/app/Console/Commands/ImportMedia.php index eee0839..0d67e9b 100644 --- a/app/Console/Commands/ImportMedia.php +++ b/app/Console/Commands/ImportMedia.php @@ -83,12 +83,12 @@ class ImportMedia extends Command $record->version = 1; } - if($row->typemedia_id != ""){ + if($row->codeTypeMedia != ""){ $record->typemedia_id = $row->codeTypeMedia; }else{ $record->typemedia_id = 1; } - if($row->typevue_id != ""){ + if($row->codeTypeVue != ""){ $record->typevue_id = $row->codeTypeVue; } $record->commentaire = $row->commentaire; @@ -119,46 +119,40 @@ class ImportMedia extends Command } $record->statut = config('services.statut.public_etendu'); + // 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', 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)); + + $mediaFile = "/images/".$record->arcadia_id.".".$record->extension; $fileExists = Storage::disk('arcadia')->exists($mediaFile); if($fileExists){ + // déplacement du média et renommage du fichier $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(); + // calcul de la taille du média + $record->taille = $this->formatBytes($this->get_file_size($full_path_dest)); - // ---- 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é"); + // on applique une image par défaut + $record->extension = "jpg"; + Storage::disk('local')->copy("images/default.jpg", $destinationPath.$record->uid. '.' .$record->extension); + + // calcul de la taille du média + $record->taille = $this->formatBytes($this->get_file_size("public/".$destinationPath.$record->uid. '.' .$record->extension)); } + + + $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 media n°".$row->code. " existe déjà en base"); } diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php index 66f3891..8afe26c 100644 --- a/app/Http/Controllers/MediaController.php +++ b/app/Http/Controllers/MediaController.php @@ -353,9 +353,7 @@ class MediaController extends Controller $media->langue_id = $mediaUpdate->langue_id; $media->commentaire = $mediaUpdate->commentaire; $media->version = $mediaUpdate->version; - if( ($mediaUpdate->statut == config('services.statut.public') || $mediaUpdate->statut == config('services.statut.public_etendu')) && $media->statut == config('services.statut.brouillon')){ - $media->published_at = date("Y-m-d H:i:s"); - } + $media->published_at = $mediaUpdate->published_at; $media->statut = $mediaUpdate->statut; $media->copyright_id = $mediaUpdate->copyright_id; @@ -651,4 +649,73 @@ class MediaController extends Controller return json_encode($response); } + /** + * Ajoute un média sans fichier + * + */ + public function addMedia(Request $request) + { + $response = false; + $sujet_id = $request->input('sujet_id'); + $dossier_id = $request->input('dossier_id'); + if($dossier_id == 0) $dossier_id = NULL; + + // On déplace le média par défaut dans le répertoire des médias + $destinationPath = $this->get_mediaFolder()."/"; + $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)); + $filename = $uid.".jpg"; + Storage::copy("images/default.jpg", $destinationPath.$filename); + + + // on créé un média en bdd + $media = new Media(); + $media->dossier_id = $dossier_id; + $media->sujet_id = $sujet_id; + $media->libelle = "Nouveau média"; + $media->folder = $destinationPath; + $media->taille = $this->formatBytes($this->get_file_size($destinationPath.$filename)); + if($user = Auth::user()){ + $media->created_by= $user->id; + } + $media->uid = $uid; + $media->extension = "jpg"; + $media->typemedia_id = 1; + $im = new \imagick($destinationPath.$filename); + $resolutions = $im->getImageResolution(); + $media->resolution = round($resolutions['x'] * 2.54, 2); + $imageprops = $im->getImageGeometry(); + $media->largeur = $imageprops['width']; + $media->hauteur = $imageprops['height']; + + if($media->resolution != 0){ + $media->largeur_mm = ceil(($media->largeur * 2.54 / $media->resolution)*10); + $media->hauteur_mm = ceil(($media->hauteur * 2.54 / $media->resolution)*10); + }else{ + $media->largeur_mm = ""; + $media->hauteur_mm = ""; + } + $media->save(); + $response = $media; + $im->destroy(); + + // ---- Creation des vignettes de base + $this->create_sys_thumb($media); + // ---- Creation des vignettes en lien avec le sujet du média + if(isset($sujet_id) ){ + $this->create_thumb($media); + } + + // ---- Historique des actions + $historique = new historique(); + if($user = Auth::user()){ + $historique->user_id = $user->id; + } + $historique->media_id = $media->id; + $historique->type = "Création"; + $historique->description = "Média ajouté"; + $historique->save(); + + + return json_encode($response); + } } diff --git a/app/Http/Controllers/PanierController.php b/app/Http/Controllers/PanierController.php index 9027576..f8a7365 100644 --- a/app/Http/Controllers/PanierController.php +++ b/app/Http/Controllers/PanierController.php @@ -6,23 +6,45 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Panier; use App\Media; +use App\Format; class PanierController extends Controller { /** - * Pas principale des paniers + * Page principale des paniers * * @return \Illuminate\Http\Response */ public function index(Request $request) { - $paniers = ""; + $paniers = Auth::user()->paniersOwner; return view('panier.index')->with([ 'paniers'=> $paniers, ]); } + + /** + * Page publique d'un panier + * + * @return \Illuminate\Http\Response + */ + public function showBasket(Request $request) + { + $panier_uid = $request->basket_uid; + $formats = Format::withoutGlobalScope('App\Scopes\SystemScope')->where('system', 1)->get(); + $panier = Panier::where('uid', $panier_uid)->first(); + if($panier && $panier->statut == 1){ + return view('panier.show')->with([ + 'panier'=> $panier, + 'formats' => $formats, + ]); + }else{ + abort(404, 'Page introuvable'); + } + } + /** * Ajout de média à un panier */ @@ -69,6 +91,7 @@ class PanierController extends Controller public function addBasket(Request $request) { $response = false; + $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)); $title = $request->input('title'); if($title == ""){ @@ -78,6 +101,7 @@ class PanierController extends Controller $panier = new Panier(); $panier->owner = Auth::user()->id; $panier->libelle = $title; + $panier->uid = $uid; if($panier->save()){ $response = $panier; } @@ -86,13 +110,12 @@ class PanierController extends Controller } /** - * supprimer un panier + * Supprimer un panier * */ public function removeBasket(Request $request) { $response = false; - $user_id = Auth::user()->id; $basket_id = $request->input('basket_id'); @@ -104,6 +127,24 @@ class PanierController extends Controller return json_encode($response); } + /** + * Obtenir un panier + * + */ + public function getBasket(Request $request) + { + $response = false; + $basket_id = $request->input('basket_id'); + $host = $request->getSchemeAndHttpHost(); + + $panier = Panier::where('id', $basket_id)->first(); + if($panier){ + $response['basket'] = $panier; + $response['link'] = $host."/basket/".$panier->uid; + } + return json_encode($response); + } + /** * Charge un panier */ @@ -119,4 +160,25 @@ class PanierController extends Controller return json_encode($response); } + + /** + * enregistre les propriétés d'un panier + * + */ + public function saveBasketProperty(Request $request) + { + $basket_id = $request->input('basket_id'); + $libelle = $request->input('libelle'); + $description = $request->input('description'); + $statut = $request->input('statut'); + + $panier = Panier::where('id', $basket_id)->first(); + if($panier){ + $panier->libelle = $libelle; + $panier->description = $description; + $panier->statut = $statut; + $panier->save(); + } + return json_encode(true); + } } diff --git a/app/Http/Controllers/UploadController.php b/app/Http/Controllers/UploadController.php index 56e6f17..20600b8 100644 --- a/app/Http/Controllers/UploadController.php +++ b/app/Http/Controllers/UploadController.php @@ -31,6 +31,7 @@ class UploadController extends Controller { $uid = $request->input('uid'); $sujet_id = $request->input('sujet_id'); $dossier_id = $request->input('dossier_id'); + $replaceMediaId = $request->input('replaceMediaId'); if($dossier_id == 0) $dossier_id = NULL; $headers = $request->headers->all(); @@ -99,19 +100,36 @@ class UploadController extends Controller { // si c'est le dernier morceau d'un fichier ou que c'est un envoi simple if($is_last_chunk || !$is_chunked_upload ){ - // On déplace le fichier dans le répertoire des médias $destinationPath = $this->get_mediaFolder()."/"; - Storage::move("uploads/".$filename, $destinationPath.$filename); - // on créé un média en bdd - $media = new Media(); - $media->dossier_id = $dossier_id; - $media->sujet_id = $sujet_id; - $media->libelle = $originalName; + // si on upload un média pour remplacer un fichier par un autre + if($replaceMediaId != 0){ + // on récupère le média à modifier + $media= Media::where('id', $replaceMediaId)->first(); + + // On déplace le fichier dans le répertoire des médias + Storage::move("uploads/".$filename, $destinationPath.$filename); + + // supprime les fichiers médias stockés sur disque + $filesfF= Storage::files($media->folder."/"); + $filepath = preg_quote($media->folder.$media->uid, '/'); + $matchingFiles = preg_grep('/^'.$filepath.'/', $filesfF); + Storage::delete($matchingFiles); + }else{ + // On déplace le fichier dans le répertoire des médias + Storage::move("uploads/".$filename, $destinationPath.$filename); + + // on créé un média en bdd + $media = new Media(); + $media->dossier_id = $dossier_id; + $media->sujet_id = $sujet_id; + } + $media->extension = $extension; $media->folder = $destinationPath; - if($user = Auth::user()){ - $media->created_by= $user->id; + if($replaceMediaId == 0){ + $media->libelle = $originalName; + $media->created_by= Auth::user()->id; } $media->uid = $uid; $media->taille = $this->formatBytes($this->get_file_size($destinationPath.$filename)); @@ -188,8 +206,13 @@ class UploadController extends Controller { $historique->user_id = $user->id; } $historique->media_id = $media->id; - $historique->type = "Création"; - $historique->description = "Média ajouté"; + if($replaceMediaId == 0){ + $historique->type = "Création"; + $historique->description = "Média ajouté"; + }else{ + $historique->type = "Modification"; + $historique->description = "Le média a été remplacé"; + } $historique->save(); } diff --git a/app/Panier.php b/app/Panier.php index ff95d7c..e41874e 100644 --- a/app/Panier.php +++ b/app/Panier.php @@ -9,6 +9,8 @@ class Panier extends Model { use SoftDeletes; + protected $appends = array('mediacount', 'mediacover'); + /** * Get the user that owns the panier. */ @@ -33,4 +35,35 @@ class Panier extends Model return $this->belongsToMany('App\Media', 'paniers_medias', 'panier_id', 'media_id'); } + /** + * Get media linked + */ + public function getMediacountAttribute() + { + return $this->medias()->count(); + } + + /** + * Get media linked + */ + public function getMediacoverAttribute() + { + $cover = ""; + $media = $this->medias()->where('typemedia_id', 1)->first(); + if($media){ + switch ($media->typemedia_id) { + case 1: + if($media->extension == "pdf" || $media->extension == "ai" || $media->extension == "psd"){ + $cover = $media->folder.$media->uid."_thumb.png"; + }else{ + $cover = $media->folder.$media->uid."_thumb.".$media->extension; + } + break; + case 2: + $cover = $media->folder.$media->uid."_thumb.".$media->extension; + break; + } + } + return $cover; + } } diff --git a/public/css/app.css b/public/css/app.css index 30c8f47..354f417 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -13030,6 +13030,55 @@ readers do not read off random characters that represent icons */ display: none; } +#form_basket_property { + padding: 30px; + min-width: 550px; +} + +#form_basket_property h3 { + font-size: 14px; + margin-bottom: 12px; + font-weight: bold; + color: #ffffff; +} + +#form_basket_property hr { + color: #24272e; + border-bottom: 1px solid #2c2f36; + margin-bottom: 20px; +} + +#form_basket_property p.button_bar { + text-align: right; + margin: 0; +} + +#form_basket_property select, +#form_basket_property input, +#form_basket_property textarea { + width: 100%; +} + +#form_basket_property textarea { + min-height: 200px; +} + +#form_basket_property .btn { + margin-right: 10px; +} + +#form_basket_property .form_basket_save .fa-spinner-third { + display: none; +} + +#form_basket_property .form_basket_save.loading .fa-spinner-third { + display: inline-block; +} + +#form_basket_property .form_basket_save.loading .fa-share { + display: none; +} + #form_etiquette { padding: 30px; min-width: 340px; @@ -13098,6 +13147,48 @@ readers do not read off random characters that represent icons */ margin-bottom: 40px; } +#form_select_add_media { + padding: 30px; + min-width: 340px; +} + +#form_select_add_media h3 { + font-size: 14px; + margin-bottom: 12px; + font-weight: bold; + color: #ffffff; +} + +#form_select_add_media hr { + color: #24272e; + border-bottom: 1px solid #2c2f36; + margin-bottom: 20px; +} + +#form_select_add_media .content { + margin: 10px 0; +} + +#form_select_add_media .content a { + display: block; + color: #ffffff; + border-radius: 5px; + border: 1px solid #ffffff; + padding: 15px 15px; + margin-bottom: 5px; + font-size: 15px; + transition: background-color 200ms ease-in; +} + +#form_select_add_media .content a i { + margin-right: 10px; + font-size: 20px; +} + +#form_select_add_media .content a:hover { + background-color: #0a6fb7; +} + /****************************************** TEMPLATE ******************************************/ @@ -13392,6 +13483,7 @@ p { input[type=text], input[type=number], input[type=password], +input[type=date], input[type=email], input[type=url], select { @@ -13403,6 +13495,7 @@ select { input[type=text].is-invalid, input[type=number].is-invalid, input[type=password].is-invalid, +input[type=date].is-invalid, input[type=email].is-invalid, input[type=url].is-invalid, select.is-invalid { @@ -13775,7 +13868,7 @@ table tfoot tr:hover { min-width: 163px; -webkit-transform: translateX(-50%); transform: translateX(-50%); - z-index: 1; + z-index: 2; } .media_manager .main_content header .search_wrapper .search_filters > div .list.list_etiquette li label { @@ -14383,7 +14476,7 @@ table tfoot tr:hover { position: absolute; display: none; background-color: #333333; - z-index: 1; + z-index: 2; right: 12px; top: 48px; } @@ -14494,7 +14587,7 @@ table tfoot tr:hover { height: 100%; background-color: #333333; position: absolute; - z-index: 99990; + z-index: 99; left: 0; top: 0; } @@ -14553,17 +14646,21 @@ table tfoot tr:hover { z-index: 1; } -#form_media header .form_media_download { +#form_media header .form_media_download, +#form_media header .form_media_replace { float: right; - font-size: 18px; + font-size: 26px; + margin-right: 5px; position: relative; - padding: 12px; + padding: 8px; border: none; + color: #ffffff; } -#form_media header .form_media_download:hover { +#form_media header .form_media_download:hover, +#form_media header .form_media_replace:hover { background-color: transparent; - color: #ffffff; + color: #aaaaaa; } #form_media .main_content { @@ -14706,6 +14803,263 @@ table tfoot tr:hover { color: #aaaaaa; } +/********************* + Widget Panier +**********************/ + +.panier_manager .side_menu header { + padding: 13px; +} + +.panier_manager .side_menu header h1 { + font-size: 18px; + margin: 20px 0; +} + +.panier_manager .side_menu header p { + color: white; + font-size: 14px; +} + +.panier_manager .main_content .panier_list { + display: flex; + flex-wrap: wrap; +} + +.panier_manager .main_content .panier_list .panier_item { + display: inline-block; + border: 1px solid grey; + width: 202px; + margin: 8px 10px; + background-color: #333333; + transition: 0.3s ease-in-out; + position: relative; + padding-bottom: 25px; + height: 200px; + background-size: cover; + background-position: center; + cursor: pointer; +} + +.panier_manager .main_content .panier_list .panier_item::before { + content: ""; + background-color: rgba(255, 255, 255, 0.6); + position: absolute; + width: 100%; + height: 100%; + left: 3px; + top: 3px; + z-index: -1; +} + +.panier_manager .main_content .panier_list .panier_item::after { + content: ""; + background-color: rgba(255, 255, 255, 0.3); + position: absolute; + z-index: 1; + width: 100%; + height: 100%; +} + +.panier_manager .main_content .panier_list .panier_item .title { + position: absolute; + top: 0; + z-index: 2; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + padding: 5px; +} + +.panier_manager .main_content .panier_list .panier_item .title i { + color: #ffed4a; + margin-right: 10px; +} + +.panier_manager .main_content .panier_list .panier_item .title p { + margin: 0; + color: black; +} + +.panier_manager .main_content .panier_list .panier_item .bar { + position: absolute; + bottom: 0; + padding: 4px; + font-size: 11px; + z-index: 2; + text-align: right; + width: 100%; + padding: 3px 8px; +} + +.panier_manager .main_content .panier_list .panier_item .bar .action_delete_basket { + color: black; + margin-right: 6px; + font-size: 16px; +} + +.panier_manager .main_content .panier_list .panier_item .bar .count { + background-color: #FFAB57; + color: #ffffff; + font-size: 14px; + font-weight: bold; + padding: 5px 6px; + border-radius: 10px; + display: inline-block; +} + +/******************************** + Page publique d'un panier +*********************************/ + +.public_basket { + height: 100%; + overflow: hidden; +} + +.public_basket .main_content { + height: 100%; + padding: 0; + position: relative; + overflow: hidden; +} + +.public_basket .main_content header { + height: 48px; + background-color: #3b3b3b; + display: flex; + align-items: center; + justify-content: space-between; +} + +.public_basket .main_content header .basket_title { + margin-left: 10px; + font-size: 17px; +} + +.public_basket .main_content header .basket_Info { + margin-right: 10px; + font-size: 27px; +} + +.public_basket .main_content header .basket_Info a { + margin-right: 5px; +} + +.public_basket .main_content .media_container { + overflow-y: auto; + overflow-x: hidden; + scrollbar-color: #272626 #1a1a1a; + position: relative; + height: calc(100% - 48px); +} + +.public_basket .main_content .media_container .wrapper { + display: flex; + flex-wrap: wrap; +} + +.public_basket .main_content .media_container .wrapper .imageItem { + display: inline-block; + border: 1px solid grey; + width: 202px; + margin: 8px 10px; + background-color: #333333; + transition: 0.3s ease-in-out; + position: relative; + padding-bottom: 25px; + cursor: pointer; +} + +.public_basket .main_content .media_container .wrapper .imageItem .media { + height: 200px; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + position: relative; +} + +.public_basket .main_content .media_container .wrapper .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; +} + +.public_basket .main_content .media_container .wrapper .imageItem .media.video::before { + content: "\F167"; + font-family: "Font Awesome 5 Brands"; +} + +.public_basket .main_content .media_container .wrapper .imageItem .media.son::before { + content: "\F58F"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; +} + +.public_basket .main_content .media_container .wrapper .imageItem .media.doc::before { + content: "\F15C"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; +} + +.public_basket .main_content .media_container .wrapper .imageItem .libelle { + padding: 4px; + text-align: center; + color: #ffffff; + margin: 0; + word-wrap: break-word; +} + +.public_basket .main_content .media_container .wrapper .imageItem .info { + position: absolute; + bottom: 0; + padding: 4px; + font-size: 11px; +} + +.public_basket .main_content .media_container .wrapper .imageItem .info i { + margin-right: 7px; +} + +.public_basket .main_content .media_container .wrapper .imageItem[aria-grabbed=true]::before { + content: "\F058"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; + display: block; + position: absolute; + left: 5px; + top: 5px; + text-align: center; + text-indent: 0; + color: #2489D1; + font-size: 25px; + z-index: 2; +} + +.public_basket .main_content .media_container .wrapper .imageItem[aria-grabbed=true]::after { + content: ""; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + position: absolute; + left: 0px; + top: 0px; + z-index: 1; +} + +.public_basket .main_content .media_container .wrapper .imageItem:hover { + background-color: #3b3b3b; +} + /****************************************** PAGE LOGIN ******************************************/ diff --git a/public/images/default.jpg b/public/images/default.jpg new file mode 100644 index 0000000..1b7b4d4 Binary files /dev/null and b/public/images/default.jpg differ diff --git a/public/js/app.js b/public/js/app.js index ebdcf8f..7b4ef5b 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -10986,23 +10986,27 @@ $(".userbar").on('click', function (event) { $(".submenu").toggle(); }); $(document).mouseup(function (e) { + // ---- Masque le menu utilisateur var container = $(".userbar"); if (!container.is(e.target) && container.has(e.target).length === 0) { $(".submenu").hide(); - } + } // ---- Masque le menu contextuel des dossiers + var menuContextuel = $(".folder_container .folder_menu"); if (!menuContextuel.is(e.target) && menuContextuel.has(e.target).length === 0) { menuContextuel.hide(); - } + } // ---- Masque le menu des paniers + 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(); - } + } // ---- Masque les filtres de la bar de recherche + var filter_list = $(".filter_selector"); @@ -11011,7 +11015,9 @@ $(document).mouseup(function (e) { } // ---- déselectionne les éléments si on clique en dehors - if ($(e.target).hasClass('media_container') || $(e.target).hasClass('wrapper')) { + var parentOffset = $('.media_container').parent().offset(); + + if ($(e.target).hasClass('media_container') && event.pageX - parentOffset.left < $('.media_container')[0]['clientWidth'] || $(e.target).hasClass('wrapper')) { $(".imageItem").attr("aria-grabbed", "false"); $(".imageItem").removeClass('flip'); } @@ -11602,6 +11608,17 @@ $(document).ready(function () { var dossier_id = $("#form_folder_property").attr("data-id"); var libelle = $(".form_folder_libelle").val(); var description = $(".form_folder_description").val(); + + if (libelle == "") { + $.fancyMessage({ + title: "Propriétés d'un dossier", + message: "Vous devez indiquer un nom de dossier.", + type: "error" + }); + return false; + } + + $(".form_folder_save").addClass('loading'); $.ajax({ url: '/ajax/save-folder-property', method: 'POST', @@ -11612,10 +11629,12 @@ $(document).ready(function () { description: description }, success: function success(result) { + $(".form_folder_save").removeClass('loading'); $(".folder_container .dd3-item[data-id='" + dossier_id + "'] > .dd3-content span").html(libelle); $.fancybox.close(); }, error: function error(jqXHR, textStatus, errorThrown) { + $(".form_folder_save").removeClass('loading'); $.fancybox.close(); $.fancyMessage({ title: "Attention", @@ -11834,7 +11853,7 @@ $(document).ready(function () { } }); // ---- Gestion de l'infinite scroll - $(".main_content .media_container").on("scroll resize", function () { + $(".media_manager .media_container").on("scroll resize", function () { if ($(window).data('ajaxready') == false) return; if ($(window).data('noMedia') == true) return; @@ -11980,7 +11999,7 @@ $(document).ready(function () { var mediaId = $(window).data('current_edit_media'); var $media = $(".media_container .imageItem[data-id='" + mediaId + "'] .media"); - var mediaBg = $media.css('background-image', 'url(' + result.folder + result.uid + "." + result.extension + '?t=' + new Date().getTime() + ')'); + var mediaBg = $media.css('background-image', 'url(' + result.folder + result.uid + "_thumb." + result.extension + '?t=' + new Date().getTime() + ')'); }, error: function error(jqXHR, textStatus, errorThrown) { $.fancybox.close(); @@ -12402,6 +12421,13 @@ $(document).ready(function () { } }).trigger("click"); } + }); // ---- Bouton pour remplacer un média par un autre + + $('.form_media_replace').on('click', function (event) { + event.preventDefault(); + $('.upload_container').show("fast"); + maxFiles = 1; + replaceMediaId = $(window).data('current_edit_media'); }); // ---- Bouton pour lancer le téléchargement d'un ou plusieurs médias $('#form_download .btn_form_download').on('click', function (event) { @@ -12481,7 +12507,8 @@ $(document).ready(function () { tags: $('#tag-editor').tagEditor('getTags')[0].tags, sites: $(".tab_edit .selector_sites .selector_dataValues").val(), marques: $(".tab_edit .selector_marques .selector_dataValues").val(), - articles: $(".tab_edit #articles").val() + articles: $(".tab_edit #articles").val(), + published_at: $(".tab_edit #published_at").val() }; $.ajax({ url: '/ajax/save-media', @@ -12525,13 +12552,19 @@ $(document).ready(function () { $('#close_upload_form').on('click', function (event) { event.preventDefault(); $('.upload_container').hide("fast"); - }); // ---- Ouvrir la popup d'upload + }); // ---- Ouvrir la popup de mode d'ajout $('.action_add_media').on('click', function (event) { event.preventDefault(); if ($(window).data('currentFolder') >= 0) { - $('.upload_container').show("fast"); + $("#form_select_add_media").fancybox({ + type: 'inline', + opts: { + animationDuration: 350, + animationEffect: 'material' + } + }).trigger("click"); } else { $.fancyMessage({ title: "Ajout de média", @@ -12539,6 +12572,49 @@ $(document).ready(function () { type: "error" }); } + }); // ---- Ouvrir la popup d'upload + + $('.add_media_by_upload').on('click', function (event) { + event.preventDefault(); + $.fancybox.close(); + $('.upload_container').show("fast"); + maxFiles = 100; + replaceMediaId = 0; + }); // ---- Ajoute un élément sans média + + $('.add_media_without_file').on('click', function (event) { + event.preventDefault(); + $.fancybox.close(); + $.ajax({ + url: '/ajax/add-media', + method: 'POST', + dataType: 'json', + data: { + dossier_id: $(window).data('currentFolder'), + sujet_id: $("#sujet_selector").val() + }, + success: function success(result) { + //---- Chargement des médias + var currentFolder = $(window).data('currentFolder'); + + if (currentFolder == 0 || currentFolder == "") { + var count = $(".folder_container .root_folder .count"); + } else { + var count = $(".folder_container .dd3-item[data-id='" + currentFolder + "'] > .dd3-content .count"); + } + + count.html(parseInt(count.html()) + 1); + $(".reinit_search_btn").trigger("click"); + }, + error: function error(jqXHR, textStatus, errorThrown) { + $(".folder_container .loader").hide(); + $.fancyMessage({ + title: "Attention", + message: "Erreur lors de la création du média. Merci d'actualiser la page.", + type: "error" + }); + } + }); }); // ---- Initialisation du module d'upload if ($('#fileupload').length) { @@ -12561,6 +12637,10 @@ $(document).ready(function () { return false; } + if (counter == 0) { + return false; + } + $("#submit").html(' Transférer'); $("#submit").css("pointer-events", "none"); $("#upload_errors").html(""); @@ -12578,6 +12658,7 @@ $(document).ready(function () { var currentfiles = []; var maxFiles = 100; var counter = 0; + var replaceMediaId = 0; $('#fileupload').fileupload({ url: "/ajax/upload-media", dataType: 'json', @@ -12593,7 +12674,7 @@ $(document).ready(function () { } else { $.fancyMessage({ title: "Attention", - message: "Vous ne pouvez pas ajouter plus de " + maxFiles + " fichiers", + message: "Vous ne pouvez pas ajouter plus de " + maxFiles + " fichier(s)", type: "info" }); return false; @@ -12641,7 +12722,8 @@ $(document).ready(function () { data.formData = { uid: create_UUID(), sujet_id: $("#sujet_selector").val(), - dossier_id: $(window).data('currentFolder') + dossier_id: $(window).data('currentFolder'), + replaceMediaId: replaceMediaId }; data.submit(); }); @@ -12683,6 +12765,11 @@ $(document).ready(function () { $(".reinit_search_btn").trigger("click"); $("#submit").html('Transférer'); $("#submit").css("pointer-events", "auto"); + + if (replaceMediaId != 0) { + // Fermeture de la popin d'édition de média + $(".form_media_close, .btn_tab_edit_cancel").trigger('click'); + } }, fail: function fail(e, data) { $.each(data.files, function (index, file) { @@ -13182,6 +13269,9 @@ window.create_UUID = function () { /***/ (function(module, exports) { $(document).ready(function () { + /*************************** + Widget panier + *****************************/ if ($(".panier_side_menu").length) { // ---- collapse/expand panier side menu $("#menu_panier").on('click', function (event) { @@ -13241,12 +13331,151 @@ $(document).ready(function () { }); } }); - }); // ---- Ajout un nouveau panier + }); // ---- Aller au 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 le panier + + $('.panier_side_menu .remove_panier').on('click', function (event) { + event.preventDefault(); + + if ($(window).data('currentBasket') == 0) { + $.fancyMessage({ + title: "Suppression de panier", + message: "Veuillez sélectionner un panier à supprimer.", + type: "info" + }); + } + + $.fancyConfirm({ + title: "Suppression de panier", + message: "Êtes-vous sûr de vouloir supprimer ce panier ?", + okButton: 'Supprimer', + noButton: 'Annuler', + callback: function callback(value) { + if (value) { + // sauvegarde de l'image en base + $.ajax({ + url: '/ajax/remove-basket', + method: 'POST', + dataType: 'json', + data: { + basket_id: $(window).data('currentBasket') + }, + success: function success(result) { + $("#panier_selector option[value='" + $(window).data('currentBasket') + "']").remove(); + $("#panier_selector").val($("#panier_selector option:first").val()); + $("#panier_selector").trigger("change"); + }, + error: function error(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({ + title: "Suppression de panier", + message: "Erreur lors de la suppression, merci d'actualiser la page.", + type: "error" + }); + } + }); + } + } + }); + }); // ---- Propriétés d'un panier + + $('.panier_side_menu .info_panier').on('click', function (event) { + event.preventDefault(); + + if ($(window).data('currentBasket') == 0) { + $.fancyMessage({ + title: "Propriétés du panier", + message: "Veuillez sélectionner un panier.", + type: "info" + }); + } + + $.ajax({ + url: '/ajax/get-basket', + method: 'POST', + dataType: 'json', + data: { + basket_id: $(window).data('currentBasket') + }, + success: function success(result) { + if (result) { + var basket = result.basket; + $.fancybox.open({ + src: '#form_basket_property', + type: 'inline', + opts: { + animationDuration: 350, + animationEffect: 'material', + beforeShow: function beforeShow(instance, current) { + var date = new Date(basket.created_at); + $(".form_basket_datecreate").html(date.toLocaleDateString('fr-FR', { + 'hour': '2-digit', + 'minute': '2-digit' + })); + $(".form_basket_libelle").val(basket.libelle); + $(".form_basket_description").val(basket.description); + $(".form_basket_statut").val(basket.statut); + $(".form_basket_link").val(result.link); + } + } + }); + } + }, + 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" + }); + } + }); + }); // ---- enregistre les propriétés d'un panier + + $("html").on('click', '.form_basket_save', function (event) { + event.preventDefault(); + var libelle = $(".form_basket_libelle").val(); + + if (libelle == "") { + $.fancyMessage({ + title: "Propriétés d'un dossier", + message: "Vous devez indiquer un nom de panier.", + type: "error" + }); + return false; + } + + $(".form_basket_save").addClass('loading'); + $.ajax({ + url: '/ajax/save-basket-property', + method: 'POST', + dataType: 'json', + data: { + basket_id: $(window).data('currentBasket'), + libelle: libelle, + description: $(".form_basket_description").val(), + statut: $(".form_basket_statut").val() + }, + success: function success(result) { + $(".form_basket_save").removeClass('loading'); + $("#panier_selector option[value='" + $(window).data('currentBasket') + "']").text(result.libelle); + $.fancybox.close(); + }, + error: function error(jqXHR, textStatus, errorThrown) { + $(".form_basket_save").removeClass('loading'); + $.fancybox.close(); + $.fancyMessage({ + title: "Attention", + message: "Erreur lors de l'édition du panier, merci d'actualiser la page.", + type: "error" + }); + } + }); }); // ---- Supprimer un média du panier $('.panier_content').on('click', ".imageItem .media_remove_basket", function (event) { @@ -13340,6 +13569,69 @@ $(document).ready(function () { } }); } + /**************************************** + Page publique des paniers + *****************************************/ + + + if ($(".public_basket").length) { + // ---- Aperçu des médias du panier + $(".public_basket ").on("dblclick", '.imageItem', function (event) { + var imgPreview = $(this).attr('data-preview') + '?t=' + new Date().getTime(); + + if ($(this).attr('data-typemedia') == 1 || $(this).attr('data-typemedia') == 2) { + // image + $.fancybox.open(''); + } else if ($(this).attr('data-typemedia') == 3) { + // vidéo + $.fancybox.open(''); + } else if ($(this).attr('data-typemedia') == 4) { + // Audio + $.fancybox.open(''); + } + }); // ---- Propriétés d'un panier + + $('.public_basket .btn_basket_Info').on('click', function (event) { + event.preventDefault(); + $.fancybox.open({ + src: '#form_basket_property', + type: 'inline', + opts: { + animationDuration: 350, + animationEffect: 'material' + } + }); + }); // ---- Popup pour télécharger des médias en masse + + $('.public_basket .btn_basket_download').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")); + } + }); + + if (medias.length == 0) { + $.fancyMessage({ + title: "Télécharger des médias", + message: "Veuillez sélectionner au moins un média.", + type: "info" + }); + } else { + $("#form_download").fancybox({ + type: 'inline', + opts: { + animationDuration: 350, + animationEffect: 'material' + }, + beforeShow: function beforeShow() { + $("#form_download .medias").val(medias.join()); + } + }).trigger("click"); + } + }); + } }); // ---- Ajout de médias au panier window.addMediasBasket = function (medias) { diff --git a/resources/js/app.js b/resources/js/app.js index 5cd1915..03f1d77 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -113,21 +113,26 @@ $(".userbar").on('click',function(event) { }); $(document).mouseup(function(e) { + + // ---- Masque le menu utilisateur var container = $(".userbar"); if (!container.is(e.target) && container.has(e.target).length === 0) { $(".submenu").hide(); } + // ---- Masque le menu contextuel des dossiers var menuContextuel = $(".folder_container .folder_menu"); if (!menuContextuel.is(e.target) && menuContextuel.has(e.target).length === 0) { menuContextuel.hide(); } + // ---- Masque le menu des paniers 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(); } + // ---- Masque les filtres de la bar de recherche var filter_list = $(".filter_selector"); if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) { $(".filter_selector .list").hide(); @@ -135,7 +140,8 @@ $(document).mouseup(function(e) { // ---- déselectionne les éléments si on clique en dehors - if ($(e.target).hasClass('media_container') || $(e.target).hasClass('wrapper')) { + var parentOffset = $('.media_container').parent().offset(); + if ( ($(e.target).hasClass('media_container') && event.pageX- parentOffset.left < $('.media_container')[0]['clientWidth'] ) || $(e.target).hasClass('wrapper')) { $(".imageItem").attr("aria-grabbed", "false"); $(".imageItem").removeClass('flip'); } diff --git a/resources/js/media.js b/resources/js/media.js index a5ff532..fb27414 100644 --- a/resources/js/media.js +++ b/resources/js/media.js @@ -294,11 +294,16 @@ $(document).ready(function() { // ---- enregistre les propriétés d'un dossier $("html").on('click', '.form_folder_save', function(event) { event.preventDefault(); - var dossier_id = $("#form_folder_property").attr("data-id"); var libelle = $(".form_folder_libelle").val(); var description = $(".form_folder_description").val(); + if(libelle == ""){ + $.fancyMessage({title : "Propriétés d'un dossier", message : "Vous devez indiquer un nom de dossier.", type : "error"}); + return false; + } + $(".form_folder_save").addClass('loading'); + $.ajax({ url: '/ajax/save-folder-property', method: 'POST', @@ -309,10 +314,12 @@ $(document).ready(function() { description: description, }, success: function(result){ + $(".form_folder_save").removeClass('loading'); $(".folder_container .dd3-item[data-id='"+dossier_id+"'] > .dd3-content span").html(libelle); $.fancybox.close(); }, error: function(jqXHR, textStatus, errorThrown) { + $(".form_folder_save").removeClass('loading'); $.fancybox.close(); $.fancyMessage({title : "Attention", message : "Erreur lors de l'édition du dossier, merci d'actualiser la page.", type : "error"}); } @@ -515,7 +522,7 @@ $(document).ready(function() { }); // ---- Gestion de l'infinite scroll - $(".main_content .media_container").on("scroll resize", function() { + $(".media_manager .media_container").on("scroll resize", function() { if ($(window).data('ajaxready') == false) return; if ($(window).data('noMedia') == true) return; @@ -661,7 +668,7 @@ $(document).ready(function() { // MAJ du visuel dans la Liste var mediaId = $(window).data('current_edit_media') var $media = $(".media_container .imageItem[data-id='"+mediaId+"'] .media"); - var mediaBg = $media.css('background-image', 'url('+result.folder+result.uid+"."+result.extension+'?t='+ new Date().getTime()+')'); + var mediaBg = $media.css('background-image', 'url('+result.folder+result.uid+"_thumb."+result.extension+'?t='+ new Date().getTime()+')'); }, error: function(jqXHR, textStatus, errorThrown) { $.fancybox.close(); @@ -1033,6 +1040,14 @@ $(document).ready(function() { } }); + // ---- Bouton pour remplacer un média par un autre + $('.form_media_replace').on('click',function(event){ + event.preventDefault(); + $('.upload_container').show("fast"); + maxFiles = 1; + replaceMediaId =$(window).data('current_edit_media'); + }); + // ---- Bouton pour lancer le téléchargement d'un ou plusieurs médias $('#form_download .btn_form_download').on('click',function(event){ event.preventDefault(); @@ -1111,6 +1126,7 @@ $(document).ready(function() { sites : $(".tab_edit .selector_sites .selector_dataValues").val(), marques : $(".tab_edit .selector_marques .selector_dataValues").val(), articles : $(".tab_edit #articles").val(), + published_at : $(".tab_edit #published_at").val(), } $.ajax({ @@ -1151,16 +1167,57 @@ $(document).ready(function() { $('.upload_container').hide("fast"); }); - // ---- Ouvrir la popup d'upload + // ---- Ouvrir la popup de mode d'ajout $('.action_add_media').on('click',function(event){ event.preventDefault(); if($(window).data('currentFolder') >=0){ - $('.upload_container').show("fast"); + $("#form_select_add_media").fancybox({type : 'inline', opts : { animationDuration : 350, animationEffect : 'material'}}).trigger("click"); + }else{ $.fancyMessage({title : "Ajout de média", message : "Pour ajouter des médias, veuillez d'abord sélectionner un dossier de destination.", type : "error"}); } }); + // ---- Ouvrir la popup d'upload + $('.add_media_by_upload').on('click',function(event){ + event.preventDefault(); + $.fancybox.close(); + $('.upload_container').show("fast"); + maxFiles = 100; + replaceMediaId = 0; + }); + + // ---- Ajoute un élément sans média + $('.add_media_without_file').on('click',function(event){ + event.preventDefault(); + $.fancybox.close(); + $.ajax({ + url: '/ajax/add-media', + method: 'POST', + dataType : 'json', + data: { + dossier_id : $(window).data('currentFolder'), + sujet_id: $("#sujet_selector").val(), + }, + success: function(result){ + //---- Chargement des médias + var currentFolder = $(window).data('currentFolder'); + if(currentFolder == 0 || currentFolder == ""){ + var count = $(".folder_container .root_folder .count"); + }else{ + var count = $(".folder_container .dd3-item[data-id='"+currentFolder+"'] > .dd3-content .count"); + } + count.html(parseInt(count.html())+1); + + $(".reinit_search_btn").trigger("click"); + }, + error: function(jqXHR, textStatus, errorThrown) { + $(".folder_container .loader").hide(); + $.fancyMessage({title : "Attention", message : "Erreur lors de la création du média. Merci d'actualiser la page.", type : "error"}); + } + }); + }); + // ---- Initialisation du module d'upload if($('#fileupload').length){ $.ajaxSetup({ @@ -1182,6 +1239,9 @@ $(document).ready(function() { $.fancyMessage({title : "Ajout de média", message : "Pour ajouter des médias, veuillez d'abord sélectionner un dossier de destination.", type : "error"}); return false; } + if(counter ==0){ + return false; + } $("#submit").html(' Transférer'); $("#submit").css("pointer-events", "none"); $("#upload_errors").html(""); @@ -1200,6 +1260,7 @@ $(document).ready(function() { var currentfiles = []; var maxFiles = 100; var counter = 0; + var replaceMediaId = 0; $('#fileupload').fileupload({ url: "/ajax/upload-media", dataType: 'json', @@ -1214,7 +1275,7 @@ $(document).ready(function() { if(counter < maxFiles){ counter++; }else{ - $.fancyMessage({title : "Attention", message : "Vous ne pouvez pas ajouter plus de "+maxFiles+" fichiers", type : "info"}); + $.fancyMessage({title : "Attention", message : "Vous ne pouvez pas ajouter plus de "+maxFiles+" fichier(s)", type : "info"}); return false; } @@ -1256,6 +1317,7 @@ $(document).ready(function() { uid: create_UUID(), sujet_id: $("#sujet_selector").val(), dossier_id: $(window).data('currentFolder'), + replaceMediaId: replaceMediaId, }; data.submit(); }) @@ -1296,6 +1358,11 @@ $(document).ready(function() { $(".reinit_search_btn").trigger("click"); $("#submit").html('Transférer'); $("#submit").css("pointer-events", "auto"); + + if(replaceMediaId != 0){ + // Fermeture de la popin d'édition de média + $(".form_media_close, .btn_tab_edit_cancel").trigger('click'); + } }, fail: function (e, data) { $.each(data.files, function (index, file) { diff --git a/resources/js/panier.js b/resources/js/panier.js index d993b9d..c9cc948 100644 --- a/resources/js/panier.js +++ b/resources/js/panier.js @@ -1,5 +1,8 @@ $(document).ready(function() { + /*************************** + Widget panier + *****************************/ if ( $( ".panier_side_menu" ).length ) { // ---- collapse/expand panier side menu @@ -63,13 +66,126 @@ $(document).ready(function() { }); - // ---- Ajout un nouveau panier + // ---- Aller au 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 le panier + $('.panier_side_menu .remove_panier').on('click',function(event){ + event.preventDefault(); + if($(window).data('currentBasket') == 0){ + $.fancyMessage({title : "Suppression de panier", message : "Veuillez sélectionner un panier à supprimer.", type : "info"}); + } + + $.fancyConfirm({ + title : "Suppression de panier", + message : "Êtes-vous sûr de vouloir supprimer ce panier ?", + okButton : 'Supprimer', + noButton : 'Annuler', + callback : function (value) { + if (value) { + // sauvegarde de l'image en base + $.ajax({ + url: '/ajax/remove-basket', + method: 'POST', + dataType : 'json', + data: { + basket_id: $(window).data('currentBasket'), + }, + success: function(result){ + $("#panier_selector option[value='"+$(window).data('currentBasket')+"']").remove(); + $("#panier_selector").val($("#panier_selector option:first").val()); + $("#panier_selector").trigger("change"); + }, + error: function(jqXHR, textStatus, errorThrown) { + $.fancybox.close(); + $.fancyMessage({title : "Suppression de panier", message : "Erreur lors de la suppression, merci d'actualiser la page.", type : "error"}); + } + }); + } + } + }); + }); + + // ---- Propriétés d'un panier + $('.panier_side_menu .info_panier').on('click',function(event){ + event.preventDefault(); + + if($(window).data('currentBasket') == 0){ + $.fancyMessage({title : "Propriétés du panier", message : "Veuillez sélectionner un panier.", type : "info"}); + } + + $.ajax({ + url: '/ajax/get-basket', + method: 'POST', + dataType : 'json', + data: { + basket_id : $(window).data('currentBasket'), + }, + success: function(result){ + if(result){ + var basket = result.basket; + $.fancybox.open({ + src : '#form_basket_property', + type : 'inline', + opts : { + animationDuration : 350, + animationEffect : 'material', + beforeShow : function( instance, current ) { + var date = new Date(basket.created_at); + $(".form_basket_datecreate").html(date.toLocaleDateString('fr-FR', {'hour': '2-digit', 'minute': '2-digit'} )); + $(".form_basket_libelle").val(basket.libelle); + $(".form_basket_description").val(basket.description); + $(".form_basket_statut").val(basket.statut); + $(".form_basket_link").val(result.link); + } + } + }); + } + }, + 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"}); + } + }); + }); + + // ---- enregistre les propriétés d'un panier + $("html").on('click', '.form_basket_save', function(event) { + event.preventDefault(); + var libelle = $(".form_basket_libelle").val(); + if(libelle == ""){ + $.fancyMessage({title : "Propriétés d'un dossier", message : "Vous devez indiquer un nom de panier.", type : "error"}); + return false; + } + + $(".form_basket_save").addClass('loading'); + $.ajax({ + url: '/ajax/save-basket-property', + method: 'POST', + dataType : 'json', + data: { + basket_id: $(window).data('currentBasket'), + libelle: libelle, + description: $(".form_basket_description").val(), + statut: $(".form_basket_statut").val(), + }, + success: function(result){ + $(".form_basket_save").removeClass('loading'); + $("#panier_selector option[value='"+$(window).data('currentBasket')+"']").text(result.libelle); + $.fancybox.close(); + }, + error: function(jqXHR, textStatus, errorThrown) { + $(".form_basket_save").removeClass('loading'); + $.fancybox.close(); + $.fancyMessage({title : "Attention", message : "Erreur lors de l'édition du panier, merci d'actualiser la page.", type : "error"}); + } + }); + }); + // ---- Supprimer un média du panier $('.panier_content').on('click', ".imageItem .media_remove_basket",function(event){ event.preventDefault(); @@ -160,6 +276,65 @@ $(document).ready(function() { } + + /**************************************** + Page publique des paniers + *****************************************/ + if ( $( ".public_basket" ).length ) { + + + // ---- Aperçu des médias du panier + $(".public_basket ").on("dblclick", '.imageItem' , function(event) { + var imgPreview = $(this).attr('data-preview')+'?t='+ new Date().getTime(); + + if($(this).attr('data-typemedia') == 1|| $(this).attr('data-typemedia') == 2){ // image + $.fancybox.open(''); + }else if ($(this).attr('data-typemedia') == 3) { // vidéo + $.fancybox.open(''); + }else if ($(this).attr('data-typemedia') == 4) { // Audio + $.fancybox.open(''); + } + }); + + // ---- Propriétés d'un panier + $('.public_basket .btn_basket_Info').on('click',function(event){ + event.preventDefault(); + $.fancybox.open({ + src : '#form_basket_property', + type : 'inline', + opts : { + animationDuration : 350, + animationEffect : 'material', + } + }); + }); + + // ---- Popup pour télécharger des médias en masse + $('.public_basket .btn_basket_download').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")); + } + }); + + if(medias.length == 0){ + $.fancyMessage({title : "Télécharger des médias", message : "Veuillez sélectionner au moins un média.", type : "info"}); + }else{ + $("#form_download").fancybox({ + type : 'inline', + opts : { + animationDuration : 350, + animationEffect : 'material', + }, + beforeShow : function() { + $("#form_download .medias").val(medias.join()); + } + }).trigger("click"); + } + }); + } }); diff --git a/resources/sass/app.scss b/resources/sass/app.scss index cc9e336..1295618 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -15,4 +15,5 @@ 'partials/common.scss', 'partials/form.scss', 'partials/media.scss', +'partials/panier.scss', 'partials/user.scss'; diff --git a/resources/sass/partials/common.scss b/resources/sass/partials/common.scss index 2d01591..341d8ea 100644 --- a/resources/sass/partials/common.scss +++ b/resources/sass/partials/common.scss @@ -268,6 +268,49 @@ } } +#form_basket_property{ + padding: 30px; + min-width: 550px; + + h3{ + font-size: 14px; + margin-bottom: 12px; + font-weight: bold; + color: $white; + } + hr{ + color: #24272e; + border-bottom: 1px solid #2c2f36; + margin-bottom: 20px; + } + p.button_bar{ + text-align: right; + margin: 0; + } + select, input, textarea{ + width: 100%; + } + textarea{ + min-height: 200px; + } + .btn{ + margin-right: 10px; + } + .form_basket_save { + .fa-spinner-third{ + display: none; + } + &.loading{ + .fa-spinner-third{ + display: inline-block; + } + .fa-share{ + display: none; + } + } + } +} + #form_etiquette{ padding: 30px; min-width: 340px; @@ -333,6 +376,46 @@ } } + +#form_select_add_media{ + padding: 30px; + min-width: 340px; + + h3{ + font-size: 14px; + margin-bottom: 12px; + font-weight: bold; + color: $white; + } + hr{ + color: #24272e; + border-bottom: 1px solid #2c2f36; + margin-bottom: 20px; + } + .content{ + margin: 10px 0; + + a{ + display: block; + color: $white; + border-radius: 5px; + border: 1px solid $white; + padding: 15px 15px; + margin-bottom: 5px; + font-size: 15px; + transition: background-color 200ms ease-in; + + i{ + margin-right: 10px; + font-size: 20px; + } + + &:hover{ + background-color: $blue; + } + } + } +} /****************************************** TEMPLATE ******************************************/ diff --git a/resources/sass/partials/form.scss b/resources/sass/partials/form.scss index 6a6e9b2..e5dd251 100644 --- a/resources/sass/partials/form.scss +++ b/resources/sass/partials/form.scss @@ -7,7 +7,7 @@ p{ margin-bottom: 10px; } -input[type="text"], input[type="number"], input[type="password"], , input[type="email"], input[type="url"], select{ +input[type="text"], input[type="number"], input[type="password"], input[type="date"] , input[type="email"], input[type="url"], select{ border-radius: 3px; padding: 5px 10px; border: none; diff --git a/resources/sass/partials/media.scss b/resources/sass/partials/media.scss index 8c04a71..bede639 100644 --- a/resources/sass/partials/media.scss +++ b/resources/sass/partials/media.scss @@ -44,7 +44,7 @@ padding: 9px; min-width: 163px; transform: translateX(-50%); - z-index: 1; + z-index: 2; &.list_etiquette li label{ color: $white; @@ -617,7 +617,7 @@ position: absolute; display: none; background-color: $grey3; - z-index: 1; + z-index: 2; right: 12px; top: 48px; @@ -740,7 +740,7 @@ height: 100%; background-color: $grey3; position: absolute; - z-index: 99990; + z-index: 99; left: 0; top: 0; @@ -793,16 +793,18 @@ z-index: 1; } } - .form_media_download{ + .form_media_download, .form_media_replace{ float: right; - font-size: 18px; + font-size: 26px; + margin-right: 5px; position: relative; - padding: 12px; + padding: 8px; border: none; + color: $white; &:hover{ background-color: transparent; - color: $white; + color: $grey2; } } } diff --git a/resources/sass/partials/panier.scss b/resources/sass/partials/panier.scss new file mode 100644 index 0000000..5696989 --- /dev/null +++ b/resources/sass/partials/panier.scss @@ -0,0 +1,262 @@ +/********************* + Widget Panier +**********************/ + +.panier_manager{ + .side_menu{ + header{ + padding: 13px; + + h1{ + font-size: 18px; + margin: 20px 0; + } + p{ + color: white; + font-size: 14px; + } + } + .form_search_basket{ + + } + } + .main_content{ + + .panier_list{ + display: flex; + flex-wrap: wrap; + + .panier_item{ + display: inline-block; + border: 1px solid grey; + width: 202px; + margin: 8px 10px; + background-color: $grey3; + transition: 0.3s ease-in-out; + position: relative; + padding-bottom: 25px; + height: 200px; + background-size: cover; + background-position: center; + cursor: pointer; + + &::before{ + content: ''; + background-color: rgba(255,255,255,0.6); + position: absolute; + width: 100%; + height: 100%; + left: 3px; + top: 3px; + z-index: -1; + } + + &::after{ + content: ''; + background-color: rgba(255,255,255,0.3); + position: absolute; + z-index: 1; + width: 100%; + height: 100%; + } + + .title{ + position: absolute; + top: 0; + z-index: 2; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + padding: 5px; + + i{ + color: $yellow; + margin-right: 10px; + } + p{ + margin: 0; + color: black; + } + } + .bar{ + position: absolute; + bottom: 0; + padding: 4px; + font-size: 11px; + z-index: 2; + text-align: right; + width: 100%; + padding: 3px 8px; + + .action_delete_basket{ + color: black; + margin-right: 6px; + font-size: 16px; + } + .count{ + background-color: $lightorange; + color: $white; + font-size: 14px; + font-weight: bold; + padding: 5px 6px; + border-radius: 10px; + display: inline-block; + } + } + } + } + } +} + +/******************************** + Page publique d'un panier +*********************************/ + +.public_basket{ + height: 100%; + overflow: hidden; + + .main_content{ + height: 100%; + padding: 0; + position: relative; + overflow: hidden; + + header{ + height: 48px; + background-color: $grey; + display: flex; + align-items: center; + justify-content: space-between; + + .basket_title{ + margin-left: 10px; + font-size: 17px; + } + .basket_Info{ + margin-right: 10px; + font-size: 27px; + + a{ + margin-right: 5px; + } + } + } + + .media_container{ + overflow-y: auto; + overflow-x: hidden; + scrollbar-color: #272626 #1a1a1a; + position: relative; + height: calc(100% - 48px); + + .wrapper{ + display: flex; + flex-wrap: wrap; + + .imageItem{ + display: inline-block; + border: 1px solid grey; + width: 202px; + margin: 8px 10px; + background-color: $grey3; + transition: 0.3s ease-in-out; + position: relative; + padding-bottom: 25px; + 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; + + } + } + } + .libelle{ + padding: 4px; + text-align: center; + color: $white; + margin: 0; + word-wrap: break-word; + } + .info{ + position: absolute; + bottom: 0; + padding: 4px; + font-size: 11px; + i{ + margin-right: 7px; + } + } + + &[aria-grabbed="true"] { + &::before { + content: "\f058"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; + display: block; + position: absolute; + left: 5px; + top: 5px; + text-align: center; + text-indent: 0; + color: $lightblue; + font-size: 25px; + z-index: 2; + } + &::after { + content: ""; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.5); + position: absolute; + left: 0px; + top: 0px; + z-index: 1; + } + } + &:hover{ + background-color: $grey; + } + } + } + } + } +} diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index a9beb1e..98292a2 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -37,6 +37,7 @@ @endforeach + @endsection diff --git a/resources/views/layouts/header.blade.php b/resources/views/layouts/header.blade.php index 7272389..20bc424 100644 --- a/resources/views/layouts/header.blade.php +++ b/resources/views/layouts/header.blade.php @@ -5,7 +5,7 @@ - Gestion des média + Gestion des médias + + + @@ -143,7 +148,7 @@ -