diff --git a/app/Http/Controllers/CommunController.php b/app/Http/Controllers/CommunController.php index 014ee72..0463e0b 100644 --- a/app/Http/Controllers/CommunController.php +++ b/app/Http/Controllers/CommunController.php @@ -5,7 +5,9 @@ namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Mail; use App\Sujet; +use App\Recherche; use App\User; +use App\Dossier; use App\Mail\contact; use Illuminate\Http\Request; @@ -18,8 +20,20 @@ class CommunController extends Controller */ public function index() { - $sujets = Auth::user()->sujets; - return view('home')->with(['sujets'=> $sujets]); + $user = Auth::user(); + $sujets = $user->sujets; + $recherches = Recherche::where('user_id', $user->id) + ->with("sujet") + ->limit(10) + ->orderBy("created_at", "desc") + ->get(); + + $dossiers = Dossier::whereHas("users", function($query) use ($user){ + $query->where('user_id', $user->id); + }) + ->with("sujet") + ->get(); + return view('home')->with(['sujets'=> $sujets, 'recherches'=> $recherches, 'dossiers'=> $dossiers]); } /** diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php index e102a68..107bfb5 100644 --- a/app/Http/Controllers/MediaController.php +++ b/app/Http/Controllers/MediaController.php @@ -17,6 +17,7 @@ use App\Marque; use App\Dossier; use App\Tag; use App\Article; +use App\Recherche; use App\Historique; use App\Http\Traits\MediaTools; @@ -30,8 +31,9 @@ class MediaController extends Controller * * @return \Illuminate\Http\Response */ - public function index() + public function index(Request $request) { + $filters = ""; $sujets = Auth::user()->sujets; $typemedias = Typemedia::all(); $langues = Langue::all(); @@ -39,6 +41,37 @@ class MediaController extends Controller $etiquettes = Etiquette::all(); $sites = Site::orderBy('libelle')->get(); $marques = Marque::all(); + + + $dossier_id = $request->get('d'); + $sujet_id = $request->get('s'); + $textSearch = $request->get('t'); + $recherche_id = $request->get('r'); + + // ---- Recherche type texte + if($textSearch != "" && $sujet_id != ""){ + // on créé un object filtre + $filters = (object) [ + "search" => array( + 'type' => "search", + 'legend' => "Recherche : ", + 'value'=> $textSearch, + 'libelle' => array($textSearch), + ) + ]; + $filters = json_encode($filters); + + // ---- Recherche favorite + }elseif ($recherche_id != "") { + $recherche = Recherche::where('id', $recherche_id)->first(); + if($recherche){ + $filters = $recherche->filters; + $sujet_id = $recherche->sujet_id; + $dossier_id = $recherche->dossier_id; + } + } + + return view('media_manager')->with([ 'sujets'=> $sujets, 'typemedias'=> $typemedias, @@ -46,7 +79,10 @@ class MediaController extends Controller 'copyrights'=> $copyrights, 'etiquettes'=> $etiquettes, 'sites'=> $sites, - 'marques'=> $marques + 'marques'=> $marques, + 'currentFolder'=> $dossier_id, + 'currentSujet'=> $sujet_id, + 'currentFilters'=> $filters, ]); } @@ -65,6 +101,7 @@ class MediaController extends Controller $limit = $request->input('limit'); $orderField = $request->input('orderField'); $order = $request->input('order'); + $saveSearch = $request->input('saveSearch'); $isDepot = 0; if($dossier_id == "0"){ // dossier racine @@ -115,6 +152,26 @@ class MediaController extends Controller $query->WhereRaw("LCASE(libelle) LIKE '%".$search."%'"); }); }); + + // ---- Sauvegarde de la recherche utilisateur + if($saveSearch == 1){ + $recherche = Recherche::where('libelle', $search)->first(); + if($recherche){ + $recherche->user_id = $userId; + $recherche->sujet_id = $sujet_id; + $recherche->dossier_id = $dossier_id; + $recherche->filters = json_encode($filters); + $recherche->save(); + }else{ + $recherche = new Recherche(); + $recherche->user_id = $userId; + $recherche->sujet_id = $sujet_id; + $recherche->dossier_id = $dossier_id; + $recherche->filters = json_encode($filters); + $recherche->libelle = $search; + $recherche->save(); + } + } } // Filtre type de média if(property_exists($filters, 'typemedia_id')){ diff --git a/app/Recherche.php b/app/Recherche.php new file mode 100644 index 0000000..a3b2fee --- /dev/null +++ b/app/Recherche.php @@ -0,0 +1,26 @@ +belongsTo('App\Sujet', 'sujet_id'); + } + + /** + * Get the user that owns the recherche. + */ + public function user() + { + return $this->belongsTo('App\User', 'id'); + } +} diff --git a/app/Sujet.php b/app/Sujet.php index a7a6011..f3ca365 100644 --- a/app/Sujet.php +++ b/app/Sujet.php @@ -61,4 +61,12 @@ class Sujet extends Model { return $this->belongsToMany('App\Format', 'sujets_formats', 'sujet_id', 'format_id'); } + + /** + * Get the recherches for the sujet. + */ + public function recherches() + { + return $this->hasMany('App\Recherche'); + } } diff --git a/app/User.php b/app/User.php index 44bc545..99bacd9 100644 --- a/app/User.php +++ b/app/User.php @@ -107,4 +107,12 @@ class User extends Authenticatable { return $this->hasMany('App\Historique'); } + + /** + * Get the recherches for the user. + */ + public function recherches() + { + return $this->hasMany('App\Recherche'); + } } diff --git a/public/css/app.css b/public/css/app.css index cb6b48b..6da0545 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -117,11 +117,11 @@ section { body { line-height: 1; - background-image: linear-gradient(139deg, #3d3d3d 37.5%, #262626 37.5%, #262626 50%, #3d3d3d 50%, #3d3d3d 87.5%, #262626 87.5%, #262626 100%); + background-image: url("/images/mosaic.jpg"); font-family: "Arial", sans-serif; font-size: 13px; color: #aaaaaa; - background-size: 6.1px 5.3px; + background-color: #3b3b3b; height: 100%; } @@ -13338,6 +13338,47 @@ readers do not read off random characters that represent icons */ border-left: 1px solid #E1E1E1;*/ } +.home .widget { + display: flex; + flex-direction: row; + justify-content: space-around; + margin-top: 80px; +} + +.home .widget .item { + width: 300px; + min-height: 200px; + background-color: #333333; +} + +.home .widget .item header { + background-color: #272626; + padding: 10px; + font-size: 14px; + color: #ffffff; +} + +.home .widget .item .content { + padding: 10px; + overflow-y: auto; + max-height: 282px; +} + +.home .widget .item .content a { + font-size: 14px; + color: #ffffff; + display: block; + margin-bottom: 7px; +} + +.home .widget .item .content a i { + margin-right: 5px; +} + +.home .widget .item .content a:hover { + text-decoration: underline; +} + /****************************************** FORM ******************************************/ @@ -13766,6 +13807,10 @@ table tfoot tr:hover { margin-right: 3px; } +.media_manager .main_content header .search_wrapper .filter_wrapper .search_filters_list { + display: inline-flex; +} + .media_manager .main_content header .search_wrapper .filter_wrapper .search_filters_list .filter_item { border: 1px solid #aaaaaa; border-radius: 3px; diff --git a/public/images/mosaic.jpg b/public/images/mosaic.jpg new file mode 100644 index 0000000..0497c6b Binary files /dev/null and b/public/images/mosaic.jpg differ diff --git a/public/js/app.js b/public/js/app.js index 1c2fc98..c27bcf1 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -11280,32 +11280,25 @@ $(document).ready(function () { /****************************** Liste des dossiers **********************************/ - // ---- init des dossiers + // ---- init des dossiers et des médias if ($(".media_manager").length) { - // En cas d'une recherche depuis la home, initialise la page avec une recherche texte - if ($("#searchParameter").val() != "") { - // on créé un object filtre - var filter = { - type: "search", - legend: "Recherche : ", - value: $("#searchParameter").val(), - libelle: [$("#searchParameter").val()] - }; // MAJ du filtre principal et de l'affichage - - updateFilter(filter); - $(".search_filters .search_value").val($("#searchParameter").val()); - } // En cas d'une recherche depuis la home, initialise la page avec le bon sujet - - + // initialise la page avec le bon sujet if ($("#sujetParameter").val() != "") { - // aucun dossier sélectionner - $(window).data('currentFolder', -1); $("#sujet_selector").val($("#sujetParameter").val()); - loadMedia($("#sujet_selector").val()); + } // initialise la page avec le bon dossier + + + if ($("#folderParameter").val() != "") { + $(window).data('currentFolder', $("#folderParameter").val()); + } // initialise les paramètres de recherche + + + if ($("#filterParameter").val() != "") { + var filters = JSON.parse($("#filterParameter").val()); + $(window).data('filter', filters); } - var sujetId = $("#sujet_selector").val(); - if (sujetId != "") initFolderManager(sujetId); + initFolderManager($("#sujet_selector").val()); } // ---- collapse/expand side menu @@ -11326,7 +11319,13 @@ $(document).ready(function () { $("#sujet_selector").on('change', function (event) { var sujetId = $("#sujet_selector").val(); if (sujetId != "") $('.dd').nestable('destroy'); - $(window).data('currentFolder', 0); + $(window).data('currentFolder', 0); // Vide la bar recherche + + $(".search_filters_list").html(""); // supprime tous les éléments de recherche + + $(window).data('filter', {}); // masque le bouton de reinitialisation + + $(".filter_wrapper .reinit_search_btn").hide(); initFolderManager(sujetId); }); // ---- sélectionner un dossier et favoris @@ -12787,19 +12786,40 @@ function initFolderManager(sujetId) { }); //('.dd').nestable('collapseAll'); $(".folder_container .dd-empty").remove(); - $(".folder_container .loader").hide(); //---- Chargement des médias + $(".folder_container .loader").hide(); // ---- Par défaut déselectionne toutes les checkbox - var currentFolder = $(window).data('currentFolder'); + $(".filter").find('input[type="checkbox"]').prop("checked", false); // charge la recherche si necessaire - if (currentFolder == 0 || currentFolder == "") { + if (Object.keys($(window).data('filter')).length > 0) { + var filters = $(window).data('filter'); + $.each(filters, function (index, filter) { + // ajoute le widget filtre + updateFilter(filter); // init des champs de recherche + + if (filter.type == 'search') { + $(".search_filters .search_value").val(filter.value); + } else { + $('.search_filters .filter[data-type="' + filter.type + '"]').find('input[type="checkbox"]').each(function (index, cb) { + if ($.inArray($(this).val(), filter.value) >= 0) { + $(this).prop("checked", true); + } else { + $(this).prop("checked", false); + } + }); + } + }); + } // sélection du dossier + + + if ($(window).data('currentFolder') > 0) { + // on se place sur un dossier spécifique + $('.dd .dd-item[data-id="' + $(window).data('currentFolder') + '"] > .dd3-content').trigger("click"); + } else if ($(window).data('currentFolder') == -1) { + loadMedia($("#sujet_selector").val()); + } else { + // si pasdossier spécifié alors on se place à la racine + $(window).data('currentFolder', 0); $(".root_folder").trigger("click"); - } else if (currentFolder > 0) { - if ($('.dd .dd-item[data-id="' + currentFolder + '"] > .dd3-content').length) { - $('.dd .dd-item[data-id="' + currentFolder + '"] > .dd3-content').trigger("click"); - } else { - $(window).data('currentFolder', 0); - $(".root_folder").trigger("click"); - } } }, error: function error(jqXHR, textStatus, errorThrown) { @@ -12815,6 +12835,7 @@ function initFolderManager(sujetId) { window.loadMedia = function (sujet_id) { + var saveSearch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var output = ''; if ($(window).data('offset') == 0) { @@ -12842,7 +12863,7 @@ window.loadMedia = function (sujet_id) { limit: $(window).data('limit'), orderField: $("#order_select").val(), order: $('#order_select option:selected').attr('data-order'), - filter: $(window).data('filter') + saveSearch: saveSearch }, success: function success(result) { var data = result.data; @@ -13120,9 +13141,7 @@ $(document).ready(function () { **********************************/ // ---- Initialisation du module de recherche if ($('.search_wrapper').length) { - // ---- Par défaut déselectionne toutes les checkbox - $(".filter").find('input[type="checkbox"]').prop("checked", false); // ---- Initialisation des listes - + // ---- Initialisation des listes $(".filter_selector .filter_btn").on('click', function (event) { $(".filter_selector .list").not($(this).parent().find(".list")).hide(); $(this).parent().find(".list").toggle(); @@ -13147,7 +13166,7 @@ $(document).ready(function () { var sujet_id = $("#sujet_selector").val(); $(window).data('offset', 0); - loadMedia(sujet_id); + loadMedia(sujet_id, 1); }); // ---- Clique sur un filtre $(".filter").on('click', 'input[type="checkbox"]', function (event) { diff --git a/resources/js/media.js b/resources/js/media.js index b198755..d8508fe 100644 --- a/resources/js/media.js +++ b/resources/js/media.js @@ -4,34 +4,22 @@ $(document).ready(function() { Liste des dossiers **********************************/ - // ---- init des dossiers + // ---- init des dossiers et des médias if ( $( ".media_manager" ).length ) { - - // En cas d'une recherche depuis la home, initialise la page avec une recherche texte - if($("#searchParameter").val() != ""){ - // on créé un object filtre - var filter = { - type: "search", - legend : "Recherche : ", - value: $("#searchParameter").val(), - libelle: [$("#searchParameter").val()], - }; - // MAJ du filtre principal et de l'affichage - updateFilter(filter); - $(".search_filters .search_value").val($("#searchParameter").val()); - } - - // En cas d'une recherche depuis la home, initialise la page avec le bon sujet + // initialise la page avec le bon sujet if($("#sujetParameter").val() != ""){ - // aucun dossier sélectionner - $(window).data('currentFolder', -1); - $("#sujet_selector").val($("#sujetParameter").val()); - loadMedia($("#sujet_selector").val()); } - var sujetId = $("#sujet_selector").val(); - if(sujetId != "") - initFolderManager(sujetId); + // initialise la page avec le bon dossier + if($("#folderParameter").val() != ""){ + $(window).data('currentFolder', $("#folderParameter").val()); + } + // initialise les paramètres de recherche + if($("#filterParameter").val() != ""){ + var filters = JSON.parse($("#filterParameter").val()); + $(window).data('filter', filters); + } + initFolderManager($("#sujet_selector").val()); } // ---- collapse/expand side menu @@ -54,6 +42,14 @@ $(document).ready(function() { if(sujetId != "") $('.dd').nestable('destroy'); $(window).data('currentFolder', 0); + + // Vide la bar recherche + $(".search_filters_list").html(""); + // supprime tous les éléments de recherche + $(window).data('filter', {}); + // masque le bouton de reinitialisation + $(".filter_wrapper .reinit_search_btn").hide(); + initFolderManager(sujetId); }); @@ -1412,18 +1408,44 @@ function initFolderManager(sujetId){ //('.dd').nestable('collapseAll'); $(".folder_container .dd-empty").remove(); $(".folder_container .loader").hide(); - //---- Chargement des médias - var currentFolder = $(window).data('currentFolder'); - if(currentFolder == 0 || currentFolder == ""){ - $(".root_folder").trigger("click"); - }else if (currentFolder > 0) { - if($('.dd .dd-item[data-id="'+currentFolder+'"] > .dd3-content').length){ - $('.dd .dd-item[data-id="'+currentFolder+'"] > .dd3-content').trigger("click"); - }else{ - $(window).data('currentFolder', 0); - $(".root_folder").trigger("click"); - } + + // ---- Par défaut déselectionne toutes les checkbox + $(".filter").find('input[type="checkbox"]').prop( "checked", false ); + + // charge la recherche si necessaire + if(Object.keys($(window).data('filter')).length > 0){ + var filters = $(window).data('filter'); + + $.each(filters, function (index, filter) { + // ajoute le widget filtre + updateFilter(filter); + // init des champs de recherche + if(filter.type == 'search'){ + $(".search_filters .search_value").val(filter.value); + }else{ + $('.search_filters .filter[data-type="'+filter.type+'"]').find('input[type="checkbox"]').each(function (index, cb){ + if($.inArray($(this).val(), filter.value ) >= 0){ + $(this ).prop( "checked", true ); + }else{ + $(this).prop( "checked", false ); + } + }); + } + }); } + + // sélection du dossier + if($(window).data('currentFolder') > 0){ + // on se place sur un dossier spécifique + $('.dd .dd-item[data-id="'+$(window).data('currentFolder')+'"] > .dd3-content').trigger("click"); + }else if ($(window).data('currentFolder') == -1) { + loadMedia($("#sujet_selector").val()); + }else{ + // si pasdossier spécifié alors on se place à la racine + $(window).data('currentFolder', 0); + $(".root_folder").trigger("click"); + } + }, error: function(jqXHR, textStatus, errorThrown) { $(".folder_container .loader").hide(); @@ -1433,7 +1455,7 @@ function initFolderManager(sujetId){ } // ---- Chargement des média -window.loadMedia = function(sujet_id){ +window.loadMedia = function(sujet_id, saveSearch = 0){ var output = ''; if($(window).data('offset') == 0){ $(window).data('noMedia', false); @@ -1461,7 +1483,7 @@ window.loadMedia = function(sujet_id){ limit : $(window).data('limit'), orderField : $("#order_select").val(), order : $('#order_select option:selected').attr('data-order'), - filter : $(window).data('filter'), + saveSearch : saveSearch, }, success: function(result){ var data = result.data; diff --git a/resources/js/searchengine.js b/resources/js/searchengine.js index f4c2a78..935635b 100644 --- a/resources/js/searchengine.js +++ b/resources/js/searchengine.js @@ -8,9 +8,6 @@ $(document).ready(function() { // ---- Initialisation du module de recherche if($('.search_wrapper').length){ - // ---- Par défaut déselectionne toutes les checkbox - $(".filter").find('input[type="checkbox"]').prop( "checked", false ); - // ---- Initialisation des listes $(".filter_selector .filter_btn").on('click',function(event) { $(".filter_selector .list").not($(this).parent().find(".list")).hide(); @@ -40,7 +37,7 @@ $(document).ready(function() { // On lance la recherche var sujet_id = $("#sujet_selector").val(); $(window).data('offset', 0); - loadMedia(sujet_id); + loadMedia(sujet_id, 1); }); // ---- Clique sur un filtre diff --git a/resources/sass/partials/common.scss b/resources/sass/partials/common.scss index 6d2fdd6..0aaa894 100644 --- a/resources/sass/partials/common.scss +++ b/resources/sass/partials/common.scss @@ -552,4 +552,39 @@ } } } + .widget{ + display: flex; + flex-direction: row; + justify-content: space-around; + margin-top: 80px; + + .item{ + width: 300px; + min-height: 200px; + background-color: $grey3; + header{ + background-color: $lightdark; + padding: 10px; + font-size: 14px; + color: $white; + } + .content{ + padding: 10px; + overflow-y: auto; + max-height: 282px; + a{ + font-size: 14px; + color: $white; + display: block; + margin-bottom: 7px; + i{ + margin-right: 5px; + } + &:hover{ + text-decoration: underline; + } + } + } + } + } } diff --git a/resources/sass/partials/media.scss b/resources/sass/partials/media.scss index 54a6c69..108851a 100644 --- a/resources/sass/partials/media.scss +++ b/resources/sass/partials/media.scss @@ -78,6 +78,8 @@ margin-right: 3px; } .search_filters_list{ + display: inline-flex; + .filter_item{ border: 1px solid $grey2; border-radius: 3px; diff --git a/resources/sass/partials/reset.scss b/resources/sass/partials/reset.scss index ca8f321..d6c2902 100644 --- a/resources/sass/partials/reset.scss +++ b/resources/sass/partials/reset.scss @@ -35,11 +35,11 @@ footer, header, hgroup, menu, nav, section { } body { line-height: 1; - background-image: linear-gradient(139deg, #3d3d3d 37.50%, #262626 37.50%, #262626 50%, #3d3d3d 50%, #3d3d3d 87.50%, #262626 87.50%, #262626 100%); + background-image: url("/images/mosaic.jpg"); font-family: "Arial", sans-serif; font-size: 13px; color: $grey2; - background-size: 6.10px 5.30px; + background-color: $grey; height: 100%; } ol, ul { diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index ee281fb..20dcccd 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -6,15 +6,37 @@

Bienvenue

+
+
+
+ Mes dernières recherches +
+
+ @foreach ($recherches as $recherche) + {{$recherche->sujet->libelle." - ".$recherche->libelle}} + @endforeach +
+
+
+
+ Mes dossiers favoris +
+
+ @foreach ($dossiers as $dossier) + {{$dossier->sujet->libelle." - ".$dossier->libelle}} + @endforeach +
+
+
@endsection diff --git a/resources/views/media_manager.blade.php b/resources/views/media_manager.blade.php index 91f90e9..fc09176 100644 --- a/resources/views/media_manager.blade.php +++ b/resources/views/media_manager.blade.php @@ -11,8 +11,9 @@ @endforeach - - + + +