diff --git a/app/Console/Commands/ImportArcadiaFiles.php b/app/Console/Commands/ImportArcadiaFiles.php index 302db55..0313b51 100644 --- a/app/Console/Commands/ImportArcadiaFiles.php +++ b/app/Console/Commands/ImportArcadiaFiles.php @@ -4,6 +4,7 @@ namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Facades\File; use App\Article; use App\Marque; use App\Sujet; @@ -11,9 +12,13 @@ use App\Typemedia; use App\Typevue; use App\Site; use App\Variante; +use App\Media; +use App\Http\Traits\MediaTools; class ImportArcadiaFiles extends Command { + use MediaTools; + /** * The name and signature of the console command. * @@ -171,10 +176,111 @@ 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_etendue'); + + // 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); + //Storage::disk('arcadia')->delete($filename); $bar->advance(); } diff --git a/app/Http/Controllers/DossierController.php b/app/Http/Controllers/DossierController.php index d56121b..828f79e 100644 --- a/app/Http/Controllers/DossierController.php +++ b/app/Http/Controllers/DossierController.php @@ -22,7 +22,7 @@ class DossierController extends Controller public function index() { Auth::user()->authorizeRoles(config('roles.const.ADMIN')); - $dossiers = Dossier::whereNull('parent_id') + $dossiers = Dossier::whereNull('parent_id')->where('system', 0) ->get(); $sujets = Sujet::where('sujet_dam', 1)->get(); @@ -191,11 +191,22 @@ class DossierController extends Controller $userId = Auth::user()->id; $sujetId = $request->input('sujetId'); $marques = Auth::user()->marques()->pluck("marque_id"); - $response['data'] = Dossier::where('sujet_id', $sujetId) + $dossierQuery = Dossier::where('sujet_id', $sujetId) ->whereNull('parent_id') ->whereHas("marques", function($query) use ($marques){ $query->whereIn("marque_id", $marques); })->get(); + + // Ajout du dépôt de fichier pour les admin + if(Auth::user()->hasRole(config('roles.const.ADMIN')) ){ + $depotQuery = Dossier::whereNull('parent_id') + ->where('system', 1) + ->get(); + $response['data'] = $dossierQuery->merge($depotQuery); + }else{ + $response['data'] = $dossierQuery; + } + $response['count'] = Media::where('sujet_id', $sujetId) ->whereNull('dossier_id') ->where(function ($query) use ( $userId ) { @@ -232,11 +243,39 @@ class DossierController extends Controller Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]); $parent_id = $request->input('parent_id'); $libelle = $request->input('libelle'); + $description = $request->input('description'); // ---- Le dossier $dossier = new Dossier(); $dossier->libelle = $libelle; + $dossier->description = $description; $dossier->parent_id = $parent_id; + if($parent_id == 1){ // dossier de dépôt + $dossier->system = 1; + } + $dossier->save(); + + $response['folder_id'] = $dossier->id; + return json_encode($response); + } + + /** + * Ajouter un dossier de dépôt + * + */ + public function addDepotFolder(Request $request) + { + $response = array(); + $parent_id = $request->input('parent_id'); + $libelle = $request->input('libelle'); + $description = $request->input('description'); + + // ---- Le dossier + $dossier = new Dossier(); + $dossier->libelle = $libelle; + $dossier->description = $description; + $dossier->parent_id = 1; + $dossier->system = 1; $dossier->save(); $response['folder_id'] = $dossier->id; @@ -272,12 +311,17 @@ class DossierController extends Controller Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]); $dossier_id = $request->input('dossier_id'); $parent_id = $request->input('parent_id'); + $sujet_id = $request->input('sujet_id'); // ---- Le dossier $dossier = Dossier::where('id', $dossier_id)->first(); if($dossier && !is_null($dossier->parent_id)){ $dossier->parent_id = $parent_id; if ($dossier->save()) { + + Media::where('dossier_id', $dossier_id)->update(['sujet_id' => $sujet_id]); + + return json_encode(true); } } diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php index b1402ca..a270693 100644 --- a/app/Http/Controllers/MediaController.php +++ b/app/Http/Controllers/MediaController.php @@ -14,6 +14,7 @@ use App\Copyright; use App\Etiquette; use App\Site; use App\Marque; +use App\Dossier; use App\Tag; use App\Article; use App\Http\Traits\MediaTools; @@ -35,7 +36,7 @@ class MediaController extends Controller $langues = Langue::all(); $copyrights = Copyright::all(); $etiquettes = Etiquette::all(); - $sites = Site::all(); + $sites = Site::orderBy('libelle')->get(); $marques = Marque::all(); return view('media_manager')->with([ 'sujets'=> $sujets, @@ -58,41 +59,88 @@ class MediaController extends Controller $userId = Auth::user()->id; $dossier_id = $request->input('dossier_id'); $sujet_id = $request->input('sujet_id'); + $filters = json_decode($request->input('filters')); $offset = $request->input('offset'); $limit = $request->input('limit'); $orderField = $request->input('orderField'); $order = $request->input('order'); + $isDepot = 0; - if($dossier_id == "0"){ - $response['data'] = Media::where('sujet_id', $sujet_id) - ->whereNull('dossier_id') + if($dossier_id == "0"){ // dossier racine + $query= Media::where('sujet_id', $sujet_id) + ->whereNull('dossier_id'); + }elseif($dossier_id == "-1"){ + $query = Media::where('sujet_id', $sujet_id) ->where(function ($query) use ( $userId ) { $query->where('statut', '<>', 0) ->orWhere('created_by', $userId); - }) - ->with('Etiquette') - ->offset($offset) - ->limit($limit) - ->orderBy($orderField, $order) - ->get(); + }); }else{ - $response['data'] = Media::where('sujet_id', $sujet_id) - ->where('dossier_id', $dossier_id) - ->where(function ($query) use ( $userId ) { - $query->where('statut', '<>', 0) - ->orWhere('created_by', $userId); - }) - ->with('Etiquette') - ->offset($offset) - ->limit($limit) - ->orderBy($orderField, $order) - ->get(); + $dossier= Dossier::where('id', $dossier_id)->first(); + if($dossier->parent_id != 1 && $dossier->id != 1){ // dossier classic + $query = Media::where('sujet_id', $sujet_id) + ->where('dossier_id', $dossier_id) + ->where(function ($query) use ( $userId ) { + $query->where('statut', '<>', 0) + ->orWhere('created_by', $userId); + }); + }else{ // dossier dépôt + $isDepot = 1; + $query= Media::where('dossier_id', $dossier_id); + } } + + // Filtre recherche texte + if(property_exists($filters, 'search')){ + $search = strtolower(trim($filters->search->value)); + $query->where(function ($query) use ( $search ) { + $query->whereRaw("LCASE(libelle) LIKE '%".$search."%'") + ->orWhere('arcadia_id', $search) + ->orWhereHas("articles", function($query) use ($search){ + $query->where("noArt", $search) + ->orWhereRaw("LCASE(libCcial) LIKE '%".$search."%'") + ->orWhereRaw("LCASE(libMarq) LIKE '%".$search."%'") + ->orWhereRaw("LCASE(libFamVte) LIKE '%".$search."%'") + ->orWhere('codGencodAdm', $search) + ->orWhere('codGencodSymb', $search) + ->orWhere('codGencodPds', $search); + }) + ->orWhereHas("tags", function($query) use ($search){ + $query->WhereRaw("LCASE(libelle) LIKE '%".$search."%'"); + }); + }); + } + // Filtre type de média + if(property_exists($filters, 'typemedia_id')){ + $query->whereIn('typemedia_id', $filters->typemedia_id->value); + } + // Filtre type de vue + if(property_exists($filters, 'typevue_id')){ + $query->whereIn('typevue_id', $filters->typevue_id->value); + } + // Filtre liason avec Arcadia + if(property_exists($filters, 'arcadia_id')){ + $query->whereNotNull('arcadia_id' ); + } + // Filtre etiquette + if(property_exists($filters, 'etiquette_id')){ + $query->whereIn('etiquette_id', $filters->etiquette_id->value); + } + + + $query->with('Etiquette') + ->offset($offset) + ->limit($limit) + ->orderBy($orderField, $order); + $response['data'] = $query->get(); + if(Auth::user()->hasRole([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')] )){ $response['draggable'] = true; }else{ $response['draggable'] = false; } + $response['role'] = Auth::user()->role; + $response['isDepot'] = $isDepot; return json_encode($response); } @@ -107,10 +155,12 @@ class MediaController extends Controller $response = array(); $dossier_id = $request->input('dossier_id'); $data = $request->input('data'); + $sujet_id = $request->input('sujet_id'); $data = explode(",", $data); foreach ($data as $key => $media_id) { $media = Media::where('id', $media_id)->first(); if($media){ + $media->sujet_id = $sujet_id; if($dossier_id > 0){ $media->dossier_id = $dossier_id; }else{ @@ -165,15 +215,21 @@ class MediaController extends Controller $filepath = preg_quote($media->folder.$media->uid, '/'); $matchingFiles = preg_grep('/^'.$filepath.'/', $files); foreach ($matchingFiles as $matchingFile) { - $im = new \imagick($matchingFile); - $imageprops = $im->getImageGeometry(); $path_parts = pathinfo($matchingFile); - $fileInfo = array(); $fileInfo['url'] = $host."/".$matchingFile; - $fileInfo['resolution'] = $imageprops['width']."x".$imageprops['height']."px"; - $fileInfo['extension'] = $path_parts['extension']; $fileInfo['libelle'] = $path_parts['filename']; + $fileInfo['extension'] = $path_parts['extension']; + $fileInfo['resolution'] = ""; + + if(in_array($path_parts['extension'], array("gif", "jpeg", "jpg", "png", "pdf", "ai", "psd")) ){ + $im = new \imagick($matchingFile); + $im->setIteratorIndex(0); + $imageprops = $im->getImageGeometry(); + $fileInfo['resolution'] = $imageprops['width']."x".$imageprops['height']."px"; + } + + if(strpos($fileInfo['libelle'], '_')){ $fileInfo['libelle'] = "Format ".substr($fileInfo['libelle'], strpos($fileInfo['libelle'], '_')+1); }else{ @@ -343,6 +399,12 @@ class MediaController extends Controller $response = false; $media_id = $request->input('media_id'); $arcadia_id = $request->input('arcadia_id'); + if($arcadia_id == "" || $arcadia_id == 0){ + $arcadia_id = NULL; + }else{ + $media = Media::where('arcadia_id', $arcadia_id)->first(); + if($media) return json_encode($response); + } $media = Media::where('id', $media_id)->first(); if($media){ @@ -379,7 +441,7 @@ class MediaController extends Controller public function downloadMedia(Request $request) { if(!$user = Auth::user()) abort(404, 'Erreur lors du téléchargement'); - + $deleteFileAfterSend = false; // obtention du format $formatId = $request->input('format'); if($formatId != 0){ @@ -410,10 +472,11 @@ class MediaController extends Controller $zip->addFile($fp, basename($fp)); } } + $deleteFileAfterSend = true; $zip->close(); $fp = $zip_file; } - return response()->download($fp)->deleteFileAfterSend(true); + return response()->download($fp)->deleteFileAfterSend($deleteFileAfterSend); } } diff --git a/app/Http/Controllers/UploadController.php b/app/Http/Controllers/UploadController.php index 5389345..bc30e00 100644 --- a/app/Http/Controllers/UploadController.php +++ b/app/Http/Controllers/UploadController.php @@ -5,6 +5,7 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; use Illuminate\Http\Request; use App\Media; +use App\Site; use App\Http\Traits\MediaTools; @@ -12,9 +13,16 @@ class UploadController extends Controller { use MediaTools; - public function index() + public function index(Request $request) { - return view('upload.show'); + // ---- Vérification du token de sécurité + $token = $request->get('token'); + if($token != env('TOKEN_DEPOT', "c8c4613a-236c-4b06-95f6-a9c9c6c18861")) return abort(404); + + $sites = Site::orderBy('libelle')->get(); + return view('upload.show')->with([ + 'sites'=> $sites, + ]); } public function storeMedia(Request $request) @@ -22,10 +30,10 @@ class UploadController extends Controller { $uid = $request->input('uid'); $sujet_id = $request->input('sujet_id'); $dossier_id = $request->input('dossier_id'); - if($dossier_id == 0) $dossier_id = null; + if($dossier_id == 0) $dossier_id = NULL; $headers = $request->headers->all(); - $acceptFileTypes = array('gif','jpeg', 'jpg','png','mp4','mp3','psd','ai','eps','svg','indd','pdf'); + $acceptFileTypes = array('gif','jpeg', 'jpg','png','mp4','mp3','psd','ai','svg','pdf'); if ($request->hasFile('files')) { $file = $request->file('files'); @@ -113,10 +121,13 @@ class UploadController extends Controller { case 'jpeg': case 'jpg': case 'png': + case 'ai': + case 'pdf': + case 'psd': $media->typemedia_id = 1; $im = new \imagick($destinationPath.$filename); - if($extension == "gif" ){ + if(in_array($extension, array("pdf", "ai", "psd", "gif")) ){ $im->setIteratorIndex(0); } @@ -134,11 +145,14 @@ class UploadController extends Controller { $media->hauteur_mm = ""; } $media->save(); + $im->destroy(); // ---- Creation des vignettes de base $this->create_sys_thumb($media); // ---- Creation des vignettes en lien avec le sujet du média - $this->create_thumb($media); + if(isset($sujet_id) ){ + $this->create_thumb($media); + } break; // Illustration/Vectorielle (2) case 'svg': @@ -165,45 +179,6 @@ class UploadController extends Controller { } $media->save(); break; - // Document (5) - case 'ai': - case 'eps': - case 'indd': - case 'pdf': - case 'psd': - default: - $media->typemedia_id = 5; - - - if(in_array($extension, array("pdf", "ai", "psd")) ){ - $im = new \imagick(); - - $im->readImage($destinationPath.$filename); - if($extension == "pdf" || $extension == "psd" || $extension == "ai"){ - $im->setIteratorIndex(0); - } - $imageprops = $im->getImageGeometry(); - $media->largeur = $imageprops['width']; - $media->hauteur = $imageprops['height']; - $resolutions = $im->getImageResolution(); - $media->resolution = $resolutions['x']; - - 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(); - $im->destroy(); - - // ---- Creation des vignettes de base - $this->create_sys_thumb($media); - // ---- Creation des vignettes en lien avec le sujet du média - $this->create_thumb($media); - } - break; } } diff --git a/app/Http/Traits/MediaTools.php b/app/Http/Traits/MediaTools.php index 5c4f08b..7c7f0a0 100644 --- a/app/Http/Traits/MediaTools.php +++ b/app/Http/Traits/MediaTools.php @@ -169,7 +169,7 @@ trait MediaTools { // format système (thumb et preview) if($format->system == 1){ if(in_array($media->extension, array("gif", "jpeg", "jpg", "png")) ){ - return public_path()."/".$media->folder.$media->uid.'_'.$format->libelle.'.'.$format->extension; + return public_path()."/".$media->folder.$media->uid.'_'.$format->libelle.'.'.$media->extension; }elseif(in_array($media->extension, array("pdf", "ai", "psd"))){ return public_path()."/".$media->folder.$media->uid.'.png'; }else{ diff --git a/app/Sujet.php b/app/Sujet.php index 6760dd2..a7a6011 100644 --- a/app/Sujet.php +++ b/app/Sujet.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model; class Sujet extends Model { - + /** * The primary key associated with the table. * diff --git a/config/ldap.php b/config/ldap.php index a778249..c62c91b 100644 --- a/config/ldap.php +++ b/config/ldap.php @@ -155,6 +155,7 @@ return [ */ 'port' => env('LDAP_PORT', 389), + // 'port' => env('LDAP_PORT', 636), /* |-------------------------------------------------------------------------- diff --git a/package.json b/package.json index c2bf31c..ac502b3 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "watch-poll": "npm run watch -- --watch-poll", "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", "prod": "npm run production", - "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "wp": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" }, "devDependencies": { "axios": "^0.18", diff --git a/public/css/app.css b/public/css/app.css index 597d958..0e7607f 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -3834,6 +3834,16 @@ table { user-select: none; } +.dd3-content span { + text-overflow: ellipsis; + word-wrap: break-word; + white-space: nowrap; + display: inline-block; + width: 209px; + overflow: hidden; + height: 20px; +} + .dd3-content .count { float: right; display: inline; @@ -12217,7 +12227,8 @@ readers do not read off random characters that represent icons */ * https://opensource.org/licenses/MIT */ -.upload_container { +.upload_container, +.depot_container { display: none; position: absolute; top: 50%; @@ -12226,13 +12237,14 @@ readers do not read off random characters that represent icons */ transform: translate(-50%, -50%); width: 300px; height: 400px; - background-color: #ffffff; + background-color: #24272e; z-index: 100; border-radius: 10px; /* Fixes for IE < 8 */ } -.upload_container .fileinput-button { +.upload_container .fileinput-button, +.depot_container .fileinput-button { position: relative; overflow: hidden; display: inline-block; @@ -12254,19 +12266,21 @@ readers do not read off random characters that represent icons */ border-radius: 4px; width: 100%; font-size: 15px; - color: #3b3b3b; + color: #ffffff; padding: 16px; cursor: pointer; - border-bottom: 1px solid #aaaaaa; + border-bottom: 1px solid #17191F; } -.upload_container .fileinput-button i { +.upload_container .fileinput-button i, +.depot_container .fileinput-button i { color: #2489D1; font-size: 18px; margin-right: 10px; } -.upload_container .fileinput-button input { +.upload_container .fileinput-button input, +.depot_container .fileinput-button input { position: absolute; top: 0; right: 0; @@ -12278,18 +12292,20 @@ readers do not read off random characters that represent icons */ } @media screen\9 { - .upload_container .fileinput-button input { + .upload_container .fileinput-button input, + .depot_container .fileinput-button input { filter: alpha(opacity=0); font-size: 100%; height: 100%; } } -.upload_container .progress { +.upload_container .progress, +.depot_container .progress { display: none; height: 6px; overflow: hidden; - background-color: #f5f5f5; + background-color: #24272e; position: absolute; top: 0px; left: 0; @@ -12297,7 +12313,8 @@ readers do not read off random characters that represent icons */ width: 100%; } -.upload_container .progress .progress-bar { +.upload_container .progress .progress-bar, +.depot_container .progress .progress-bar { float: left; width: 0; height: 100%; @@ -12310,29 +12327,34 @@ readers do not read off random characters that represent icons */ transition: width 0.6s ease; } -.upload_container .progress .progress-bar.progress-bar-success { +.upload_container .progress .progress-bar.progress-bar-success, +.depot_container .progress .progress-bar.progress-bar-success { background-color: #5cb85c; } -.upload_container .content_wrapper { +.upload_container .content_wrapper, +.depot_container .content_wrapper { height: 286px; overflow-y: auto; } -.upload_container #files > div { +.upload_container #files > div, +.depot_container #files > div { width: 100%; padding: 10px; - border-bottom: 1px solid #e8ebed; + border-bottom: 1px solid #17191F; } -.upload_container #files > div div:first-child { - color: #000000; +.upload_container #files > div div:first-child, +.depot_container #files > div div:first-child { + color: #ffffff; margin-bottom: 5px; font-size: 14px; position: relative; } -.upload_container #files > div div:first-child span { +.upload_container #files > div div:first-child span, +.depot_container #files > div div:first-child span { white-space: nowrap; display: block; text-overflow: ellipsis; @@ -12340,11 +12362,13 @@ readers do not read off random characters that represent icons */ max-width: 91%; } -.upload_container #files > div div:last-child { - color: #3b3b3b; +.upload_container #files > div div:last-child, +.depot_container #files > div div:last-child { + color: #aaaaaa; } -.upload_container #files > div button { +.upload_container #files > div button, +.depot_container #files > div button { display: none; border: none; background-color: transparent; @@ -12354,17 +12378,20 @@ readers do not read off random characters that represent icons */ cursor: pointer; } -.upload_container #files > div button i { - color: #337ab7; +.upload_container #files > div button i, +.depot_container #files > div button i { + color: #ffffff; font-size: 19px; } -.upload_container #files > div:hover button { +.upload_container #files > div:hover button, +.depot_container #files > div:hover button { display: block; } -.upload_container .upload_bar { - border-top: 1px solid #aaaaaa; +.upload_container .upload_bar, +.depot_container .upload_bar { + border-top: 1px solid #17191F; width: 100%; height: 60px; position: absolute; @@ -12372,17 +12399,61 @@ readers do not read off random characters that represent icons */ padding: 13px 10px; } -.upload_container .upload_bar #submit { +.upload_container .upload_bar #submit, +.depot_container .upload_bar #submit { display: inline-block; } .upload_container .upload_bar #cancel, -.upload_container .upload_bar #close_upload_form { - color: #3b3b3b; +.upload_container .upload_bar #close_upload_form, +.depot_container .upload_bar #cancel, +.depot_container .upload_bar #close_upload_form { + color: #ffffff; cursor: pointer; margin-left: 15px; } +.depot_container { + display: block; + width: 700px; +} + +.depot_container header { + padding: 20px; + border-bottom: 1px solid #17191F; +} + +.depot_container header i { + font-size: 30px; + margin-right: 10px; + color: white; +} + +.depot_container .mainContent { + display: flex; + flex-direction: row; +} + +.depot_container .mainContent .col { + width: 50%; +} + +.depot_container .mainContent .col .fileinput-button { + border: none; +} + +.depot_container .mainContent .col .content_wrapper { + height: 217px; +} + +.depot_container .mainContent .col input, +.depot_container .mainContent .col textarea, +.depot_container .mainContent .col select { + display: block; + width: 315px; + margin: 15px; +} + .darkroom-container { position: relative; } @@ -13624,19 +13695,107 @@ table tfoot tr:hover { .media_manager .main_content header .search_wrapper .search_filters { display: inline-flex; align-items: center; - padding: 0px 10px; } .media_manager .main_content header .search_wrapper .search_filters > div { display: flex; align-items: center; - margin-right: 10px; + padding: 1px 8px; + border-right: 1px solid #aaaaaa; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } .media_manager .main_content header .search_wrapper .search_filters > div i { margin-left: 10px; } +.media_manager .main_content header .search_wrapper .search_filters > div:last-child { + border: none; +} + +.media_manager .main_content header .search_wrapper .search_filters > div .list { + position: absolute; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + top: 17px; + left: 50%; + background-color: #24272e; + padding: 9px; + min-width: 163px; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + z-index: 1; +} + +.media_manager .main_content header .search_wrapper .search_filters > div .list.list_etiquette li label { + color: #ffffff; + padding: 4px; + display: inline-block; + position: relative; +} + +.media_manager .main_content header .search_wrapper .search_filters > div .list.list_etiquette li label::before { + border-color: inherit; + content: ""; + top: 0; + border-style: solid; + border-width: 11px; + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + position: absolute; + right: -22px; +} + +.media_manager .main_content header .search_wrapper .filter_wrapper { + display: flex; + flex-direction: row; + margin-top: 18px; + align-items: center; +} + +.media_manager .main_content header .search_wrapper .filter_wrapper > span { + color: #FFAB57; + font-weight: bold; + margin-right: 3px; +} + +.media_manager .main_content header .search_wrapper .filter_wrapper .search_filters_list .filter_item { + border: 1px solid #aaaaaa; + border-radius: 3px; + padding: 3px 3px; + font-size: 11px; + margin: 0 1px; + display: inline-block; +} + +.media_manager .main_content header .search_wrapper .filter_wrapper .search_filters_list .filter_item:hover { + color: #ffffff; + border: 1px solid #ffffff; +} + +.media_manager .main_content header .search_wrapper .filter_wrapper .search_filters_list .filter_item i { + margin-left: 6px; +} + +.media_manager .main_content header .search_wrapper .filter_wrapper .reinit_search_btn { + display: none; + color: #2ea8e5; + margin-left: 4px; + font-size: 11px; +} + +.media_manager .main_content header .search_wrapper .filter_wrapper .reinit_search_btn:hover { + color: #2489D1; + text-decoration: underline; +} + .media_manager .main_content header .action_wrapper { background-color: #3b3b3b; width: 100%; diff --git a/public/js/app.js b/public/js/app.js index db2afe6..c28d941 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -10928,9 +10928,14 @@ jQuery.fn.scrollParent = function () { return overflowRegex.test(overflowState.overflow + overflowState.overflowX + overflowState.overflowY); }).eq(0); return position === "fixed" || !scrollParent.length ? $(this[0].ownerDocument || document) : scrollParent; -}; //confirm popup +}; // ---- Configuration de base des filtres médias +$(window).data('offset', 0); +$(window).data('limit', 50); +$(window).data('currentFolder', 0); +$(window).data('filter', {}); //confirm popup + $.fancyConfirm = function (opts) { opts = $.extend(true, { title: 'Are you sure?', @@ -10981,15 +10986,22 @@ $(".userbar").on('click', function (event) { }); $(document).mouseup(function (e) { var container = $(".userbar"); - var menuContextuel = $(".folder_container .folder_menu"); if (!container.is(e.target) && container.has(e.target).length === 0) { $(".submenu").hide(); } + var menuContextuel = $(".folder_container .folder_menu"); + if (!menuContextuel.is(e.target) && menuContextuel.has(e.target).length === 0) { menuContextuel.hide(); } + + var filter_list = $(".filter_selector"); + + if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) { + $(".filter_selector .list").hide(); + } }); // ---- Header : Ouverture formulaire de contact $(".contact_btn").on('click', function (event) { @@ -11058,6 +11070,195 @@ $(".form_contact_send").on('click', function (event) { /***/ }), +/***/ "./resources/js/depot.js": +/*!*******************************!*\ + !*** ./resources/js/depot.js ***! + \*******************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +$(document).ready(function () { + /****************************** + Dépôt de média + **********************************/ + // ---- Initialisation du module de dépôt + if ($('#uploadDepot').length) { + $.ajaxSetup({ + headers: { + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') + } + }); + var dossier_id = 0; + var cancel_btn = $('