add panier widget

This commit is contained in:
Yann Gonidec 2019-07-31 12:22:24 +02:00
parent 18281c42c9
commit ca99267b1a
23 changed files with 1521 additions and 130 deletions

View file

@ -92,6 +92,10 @@ class ImportArcadiaFiles extends Command
$record->save();
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}elseif (substr($filename, 0, 10) == "DAM_MARQUE") {
foreach ($fileContent->dam as $row) {
$record = Marque::where('codMarq', $row->codMarq)->first();
@ -105,6 +109,10 @@ class ImportArcadiaFiles extends Command
$record->save();
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}elseif (substr($filename, 0, 15) == "DAM_MEDIA_SUJET") {
foreach ($fileContent->mediaSujet as $row) {
$record = Sujet::where('codeSujet', $row->code)->first();
@ -118,6 +126,10 @@ class ImportArcadiaFiles extends Command
$record->save();
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}elseif (substr($filename, 0, 20) == "DAM_MEDIA_TYPE_MEDIA") {
foreach ($fileContent->mediatypemedia as $row) {
$record = Typemedia::where('codeTypemedia', $row->code)->first();
@ -131,6 +143,10 @@ class ImportArcadiaFiles extends Command
$record->save();
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}elseif (substr($filename, 0, 17) == "DAM_MEDIA_TYPEVUE") {
foreach ($fileContent->mediatypesvue as $row) {
$record = Typevue::where('codeTypevue', $row->code)->first();
@ -146,6 +162,10 @@ class ImportArcadiaFiles extends Command
$record->save();
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}elseif (substr($filename, 0, 18) == "DAM_MEDIA_VARIANTE") {
foreach ($fileContent->mediavariante as $row) {
$record = Variante::where('codeVariante', $row->code)->first();
@ -163,6 +183,10 @@ class ImportArcadiaFiles extends Command
$record->save();
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}elseif (substr($filename, 0, 20) == "DAM_SITE_PROD_GROUPE") {
foreach ($fileContent->SITE_PROD_GRP as $row) {
$record = Site::where('id', $row->code)->first();
@ -176,111 +200,11 @@ class ImportArcadiaFiles extends Command
$record->save();
}
}
}elseif (substr($filename, 0, 16) == "DAM_MEDIA_VISUEL") {
foreach ($fileContent->MEDIA_VISUEL as $row) {
$record = Media::where('arcadia_id', $row->code)->first();
if(!$record){ // Insert new record
$record = new Media();
$record->arcadia_id = $row->code;
if($row->extension != ""){
$record->extension = $row->extension->typeFichier->libExtension;
}
$record->libelle = $row->libelle;
$record->largeur = $row->nbPxLargeur;
$record->largeur_mm = $row->largeurMm;
$record->hauteur = $row->nbPxHauteur;
$record->hauteur_mm = $row->hauteurMm;
$record->resolution = $row->pppLargeur;
if($row->version != ""){
$record->version = $row->version;
}else{
$record->version = 1;
}
if($row->typemedia_id != ""){
$record->typemedia_id = $row->codeTypeMedia;
}else{
$record->typemedia_id = 1;
}
if($row->typevue_id != ""){
$record->typevue_id = $row->codeTypeVue;
}
$record->commentaire = $row->commentaire;
$record->sujet_id = $row->codeSujet;
if($row->langue != ""){
$record->langue_id = $row->langue;
}
if($row->copyright != ""){
$record->copyright_id = $row->copyright;
}
if($row->codeVariante != ""){
$record->variante_id = $row->codeVariante;
}
if($row->dateCreation != ""){
$row->dateCreation = substr($row->dateCreation, 0, 10);
$date = explode("/", $row->dateCreation);
$record->created_at = $date[2].'-'.$date[1].'-'.$date[0];
}
if($row->dateModification != ""){
$row->dateModification = substr($row->dateModification, 0, 10);
$date = explode("/", $row->dateModification);
$record->updated_at = $date[2].'-'.$date[1].'-'.$date[0];
}
if($row->datePublication != ""){
$row->datePublication = substr($row->datePublication, 0, 10);
$date = explode("/", $row->datePublication);
$record->published_at = $date[2].'-'.$date[1].'-'.$date[0];
}
$record->statut = config('services.statut.public_etendu');
// TODO lien avec les sites, marques et articles
$mediaFile = "/images/".$record->arcadia_id.".".$record->extension;
$fileExists = Storage::disk('arcadia')->exists($mediaFile);
if($fileExists){
$file = Storage::disk('arcadia')->get($mediaFile);
// Affectation d'un dossier et d'un uid
$destinationPath = $this->get_mediaFolder()."/";
$record->folder = $destinationPath;
$record->uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
// déplacement du média et renommage du fichier
$full_path_source = Storage::disk('arcadia')->getDriver()->getAdapter()->applyPathPrefix($mediaFile);
$full_path_dest = Storage::disk('local')->getDriver()->getAdapter()->applyPathPrefix($destinationPath.$record->uid. '.' .$record->extension);
File::move($full_path_source, $full_path_dest);
// calcul de la taille du média et durée
$record->taille = $this->formatBytes($this->get_file_size($full_path_dest));
$record->save();
// ---- Creation des vignettes de base
$this->create_sys_thumb($record);
// ---- Creation des vignettes en lien avec le sujet du média
$this->create_thumb($record);
}
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
$bar->advance();
}

View file

@ -0,0 +1,234 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;
use App\Http\Traits\MediaTools;
use App\Article;
use App\Marque;
use App\Media;
class ImportMedia extends Command
{
use MediaTools;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'medias:import';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Import des fichiers xml Média Visuel Arcadia';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->info('Démarrage du traitement');
$files = Storage::disk('arcadia')->files();
$this->line("-> Import du fichier DAM_MEDIA_VISUEL");
// ---- Traitement de l'import des XML Visuel
foreach ($files as $filename) {
if($filename == ".gitignore") continue;
// ---- Récupération du contenu
$oneFile = Storage::disk('arcadia')->get($filename);
$fileContent = simplexml_load_string($oneFile);
// ---- traitement du fichier
if (substr($filename, 0, 16) == "DAM_MEDIA_VISUEL") {
foreach ($fileContent->MEDIA_VISUEL as $row) {
$record = Media::where('arcadia_id', $row->code)->first();
if(!$record){ // Insert new record
$record = new Media();
$record->arcadia_id = $row->code;
if($row->extension != ""){
$record->extension = $row->extension->typeFichier->libExtension;
}
$record->libelle = $row->libelle;
$record->largeur = $row->nbPxLargeur;
$record->largeur_mm = $row->largeurMm;
$record->hauteur = $row->nbPxHauteur;
$record->hauteur_mm = $row->hauteurMm;
$record->resolution = $row->pppLargeur;
if($row->version != ""){
$record->version = $row->version;
}else{
$record->version = 1;
}
if($row->typemedia_id != ""){
$record->typemedia_id = $row->codeTypeMedia;
}else{
$record->typemedia_id = 1;
}
if($row->typevue_id != ""){
$record->typevue_id = $row->codeTypeVue;
}
$record->commentaire = $row->commentaire;
$record->sujet_id = $row->codeSujet;
if($row->langue != ""){
$record->langue_id = $row->langue;
}
if($row->copyright != ""){
$record->copyright_id = $row->copyright;
}
if($row->codeVariante != ""){
$record->variante_id = $row->codeVariante;
}
if($row->dateCreation != ""){
$row->dateCreation = substr($row->dateCreation, 0, 10);
$date = explode("/", $row->dateCreation);
$record->created_at = $date[2].'-'.$date[1].'-'.$date[0];
}
if($row->dateModification != ""){
$row->dateModification = substr($row->dateModification, 0, 10);
$date = explode("/", $row->dateModification);
$record->updated_at = $date[2].'-'.$date[1].'-'.$date[0];
}
if($row->datePublication != ""){
$row->datePublication = substr($row->datePublication, 0, 10);
$date = explode("/", $row->datePublication);
$record->published_at = $date[2].'-'.$date[1].'-'.$date[0];
}
$record->statut = config('services.statut.public_etendu');
$mediaFile = "/images/".$record->arcadia_id.".".$record->extension;
$fileExists = Storage::disk('arcadia')->exists($mediaFile);
if($fileExists){
$file = Storage::disk('arcadia')->get($mediaFile);
// Affectation d'un dossier et d'un uid
$destinationPath = $this->get_mediaFolder()."/";
$record->folder = $destinationPath;
$record->uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
// déplacement du média et renommage du fichier
$full_path_source = Storage::disk('arcadia')->getDriver()->getAdapter()->applyPathPrefix($mediaFile);
$full_path_dest = Storage::disk('local')->getDriver()->getAdapter()->applyPathPrefix($destinationPath.$record->uid. '.' .$record->extension);
File::move($full_path_source, $full_path_dest);
// calcul de la taille du média et durée
$record->taille = $this->formatBytes($this->get_file_size($full_path_dest));
$record->save();
// ---- Creation des vignettes de base
$this->create_sys_thumb($record);
// ---- Creation des vignettes en lien avec le sujet du média
$this->create_thumb($record);
}else{
$this->line("DAM_MEDIA_VISUEL : le visuel du media n°".$row->code. " n'a pas été trouvé");
}
}else{
$this->line("DAM_MEDIA_VISUEL : le media n°".$row->code. " existe déjà en base");
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}
}
// ---- Traitement de l'association media <-> article
$this->line("-> Import du fichier DAM_ASSO_ARTICLE");
foreach ($files as $filename) {
if($filename == ".gitignore") continue;
// ---- Récupération du contenu
$oneFile = Storage::disk('arcadia')->get($filename);
$fileContent = simplexml_load_string($oneFile);
// ---- traitement du fichier
if (substr($filename, 0, 16) == "DAM_ASSO_ARTICLE") {
foreach ($fileContent->mediaassoarticle as $row) {
$record = Media::where('arcadia_id', $row->codeVisuel)->first();
if($record){
$article = Article::where('noArt', $row->noArt)->first();
if($article){
$record->articles()->attach($article->id);
}else{
$this->line("DAM_ASSO_ARTICLE : le media n°".$row->codeVisuel. " ne peut être lié à l'article n°".$row->noArt);
}
}else{
$this->line("DAM_ASSO_ARTICLE : le media n°".$row->codeVisuel. " n'existe pas");
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}
}
// ---- Traitement de l'association media <-> marque
$this->line("-> Import du fichier DAM_ASSO_MARQUE");
foreach ($files as $filename) {
if($filename == ".gitignore") continue;
// ---- Récupération du contenu
$oneFile = Storage::disk('arcadia')->get($filename);
$fileContent = simplexml_load_string($oneFile);
// ---- traitement du fichier
if (substr($filename, 0, 15) == "DAM_ASSO_MARQUE") {
foreach ($fileContent->mediaassomarque as $row) {
$record = Media::where('arcadia_id', $row->codeVisuel)->first();
if($record){
$record->marques()->attach($row->codMarq);
}else{
$this->line("DAM_ASSO_MARQUE : le media n°".$row->codeVisuel. " n'existe pas");
}
}
// ---- Suppression du fichier
Storage::disk('arcadia')->delete($filename);
}
}
$this->line("");
$this->info('Fin du traitement');
}
}

View file

@ -22,6 +22,7 @@ class CommunController extends Controller
{
$user = Auth::user();
$sujets = $user->sujets;
$paniers = Auth::user()->paniersFavoris;
$recherches = Recherche::where('user_id', $user->id)
->with("sujet")
->limit(10)
@ -33,7 +34,7 @@ class CommunController extends Controller
})
->with("sujet")
->get();
return view('home')->with(['sujets'=> $sujets, 'recherches'=> $recherches, 'dossiers'=> $dossiers]);
return view('home')->with(['sujets'=> $sujets, 'recherches'=> $recherches, 'dossiers'=> $dossiers, 'paniers'=> $paniers]);
}
/**

View file

@ -19,6 +19,7 @@ use App\Tag;
use App\Article;
use App\Recherche;
use App\Historique;
use App\Panier;
use App\Http\Traits\MediaTools;
class MediaController extends Controller
@ -35,6 +36,7 @@ class MediaController extends Controller
{
$filters = "";
$sujets = Auth::user()->sujets;
$paniers = Auth::user()->paniersOwner;
$typemedias = Typemedia::all();
$langues = Langue::all();
$copyrights = Copyright::all();
@ -42,7 +44,6 @@ class MediaController extends Controller
$sites = Site::orderBy('libelle')->get();
$marques = Marque::all();
$dossier_id = $request->get('d');
$sujet_id = $request->get('s');
$textSearch = $request->get('t');
@ -83,6 +84,7 @@ class MediaController extends Controller
'currentFolder'=> $dossier_id,
'currentSujet'=> $sujet_id,
'currentFilters'=> $filters,
'paniers' => $paniers,
]);
}

View file

@ -0,0 +1,122 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Panier;
use App\Media;
class PanierController extends Controller
{
/**
* Pas principale des paniers
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$paniers = "";
return view('panier.index')->with([
'paniers'=> $paniers,
]);
}
/**
* Ajout de média à un panier
*/
public function addMediasBasket(Request $request)
{
$response = false;
$mediasToAdd = $request->input('medias');
$panierId = $request->input('panier_id');
$panier = Panier::where('id', $panierId)->with('medias')->first();
if($panier){
$result = $panier->medias()->syncWithoutDetaching($mediasToAdd);
$medias = Media::whereIn('id', $result['attached'])->get();
$response = $medias;
}
return json_encode($response);
}
/**
* Suppression de média à un panier
*/
public function removeMediasBasket(Request $request)
{
$response = false;
$mediaToRemove = $request->input('media_id');
$panierId = $request->input('panier_id');
$panier = Panier::where('id', $panierId)->with('medias')->first();
if($panier && $mediaToRemove != ""){
$panier->medias()->detach($mediaToRemove);
$response = true;
}
return json_encode($response);
}
/**
* Ajoute un panier
*/
public function addBasket(Request $request)
{
$response = false;
$title = $request->input('title');
if($title == ""){
$title = "Panier du ".date("d/m/Y");
}
$panier = new Panier();
$panier->owner = Auth::user()->id;
$panier->libelle = $title;
if($panier->save()){
$response = $panier;
}
return json_encode($response);
}
/**
* supprimer un panier
*
*/
public function removeBasket(Request $request)
{
$response = false;
$user_id = Auth::user()->id;
$basket_id = $request->input('basket_id');
$panier = Panier::where('id', $basket_id);
if($panier){
$panier->delete();
$response = true;
}
return json_encode($response);
}
/**
* Charge un panier
*/
public function loadBasket(Request $request)
{
$response = false;
$panierId = $request->input('panier_id');
$panier = Panier::where('id', $panierId)->with('medias')->first();
if($panier){
$response = $panier;
}
return json_encode($response);
}
}

View file

@ -241,7 +241,6 @@ class UserController extends Controller
*/
public function favorisFolder(Request $request)
{
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
$dossier_id = $request->input('dossier_id');
$favoris = $request->input('favoris');
@ -254,4 +253,23 @@ class UserController extends Controller
}
return json_encode(true);
}
/**
* ajouter un panier en favoris
*
*/
public function favorisBasket(Request $request)
{
$basket_id = $request->input('basket_id');
$favoris = $request->input('favoris');
$basketFav = Auth::user()->paniersFavoris()->where('id', $basket_id)->first();
if($favoris == "false" && $basketFav){
Auth::user()->paniersFavoris()->detach($basket_id);
}elseif ($favoris == "true" && !$basketFav) {
Auth::user()->paniersFavoris()->attach($basket_id);
}
return json_encode(true);
}
}

View file

@ -114,4 +114,12 @@ class Media extends Model
{
return $this->hasMany('App\Historique');
}
/**
* The paniers that belong to the media.
*/
public function paniers()
{
return $this->belongsToMany('App\Panier', 'paniers_medias', 'media_id', 'panier_id');
}
}

36
app/Panier.php Normal file
View file

@ -0,0 +1,36 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Panier extends Model
{
use SoftDeletes;
/**
* Get the user that owns the panier.
*/
public function owner()
{
return $this->belongsTo('App\User', 'owner');
}
/**
* The users that belong to the panier.
*/
public function usersFavoris()
{
return $this->belongsToMany('App\User', 'paniers_users', 'panier_id', 'user_id');
}
/**
* The medias that belong to the panier.
*/
public function medias()
{
return $this->belongsToMany('App\Media', 'paniers_medias', 'panier_id', 'media_id');
}
}

View file

@ -115,4 +115,20 @@ class User extends Authenticatable
{
return $this->hasMany('App\Recherche');
}
/**
* Get the paniers for the user.
*/
public function paniersOwner()
{
return $this->hasMany('App\Panier', 'owner');
}
/**
* The paniers that belong to the user.
*/
public function paniersFavoris()
{
return $this->belongsToMany('App\Panier', 'paniers_users', 'user_id', 'panier_id');
}
}

142
public/css/app.css vendored
View file

@ -13538,6 +13538,7 @@ a {
.heading a {
margin-left: 10px;
display: inline-block;
}
h1 {
@ -13720,6 +13721,8 @@ table tfoot tr:hover {
.media_manager {
height: calc(100% - 48px);
position: relative;
overflow: hidden;
}
.media_manager .main_content {
@ -13950,8 +13953,9 @@ table tfoot tr:hover {
.media_manager .main_content .media_container {
overflow-y: auto;
overflow-x: hidden;
scrollbar-color: #272626 #1a1a1a;
position: relative;
height: calc(100% - 180px);
height: calc(100% - 174px);
}
.media_manager .main_content .media_container .loader {
@ -14267,6 +14271,7 @@ table tfoot tr:hover {
.media_manager .side_menu .folder_container {
background-color: #333333;
height: calc(100% - 129px);
scrollbar-color: #272626 #1a1a1a;
overflow-y: auto;
position: relative;
}
@ -14345,6 +14350,141 @@ table tfoot tr:hover {
background: rgba(0, 0, 0, 0.2);
}
.media_manager .side_menu.panier_side_menu {
width: 380px;
}
.media_manager .side_menu.panier_side_menu .close_side_menu {
left: -17px;
border-radius: 3px 0 0 3px;
border-left: 1px solid #505050;
border-right: none;
}
.media_manager .side_menu.panier_side_menu.collapse {
-webkit-transform: translateX(100%);
transform: translateX(100%);
position: absolute;
right: 0;
}
.media_manager .side_menu.panier_side_menu header {
display: flex;
}
.media_manager .side_menu.panier_side_menu header a {
margin-left: 5px;
position: relative;
}
.media_manager .side_menu.panier_side_menu header .panier_menu {
width: 140px;
box-shadow: 0 4px 5px 3px rgba(0, 0, 0, 0.2);
position: absolute;
display: none;
background-color: #333333;
z-index: 1;
right: 12px;
top: 48px;
}
.media_manager .side_menu.panier_side_menu header .panier_menu .menu-options {
list-style: none;
padding: 10px 0;
}
.media_manager .side_menu.panier_side_menu header .panier_menu .menu-options .menu-option {
font-weight: 500;
font-size: 13px;
padding: 10px;
cursor: pointer;
}
.media_manager .side_menu.panier_side_menu header .panier_menu .menu-options .menu-option:hover {
background: rgba(0, 0, 0, 0.2);
}
.media_manager .side_menu.panier_side_menu .panier_content {
height: calc(100% - 59px);
overflow-y: auto;
scrollbar-color: #272626 #1a1a1a;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem {
display: inline-block;
border: 1px solid grey;
width: 202px;
margin: 2px 5px;
background-color: #333333;
transition: 0.3s ease-in-out;
position: relative;
cursor: pointer;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media {
height: 200px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
position: relative;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media::before {
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
display: block;
position: absolute;
left: 50%;
top: 50%;
text-align: center;
text-indent: 0;
color: #ffffff;
font-size: 59px;
z-index: 1;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media.video::before {
content: "\F167";
font-family: "Font Awesome 5 Brands";
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media.son::before {
content: "\F58F";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem .media.doc::before {
content: "\F15C";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem:hover {
background-color: #3b3b3b;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem .bar {
position: absolute;
opacity: 0;
transition: opacity 0.5s;
bottom: 0;
height: 29px;
width: 100%;
background-color: rgba(0, 0, 0, 0.7);
text-align: right;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem .bar a {
display: inline-block;
padding: 5px;
border: none;
}
.media_manager .side_menu.panier_side_menu .panier_content .imageItem:hover .bar {
opacity: 1;
}
/******************************************
POPUP EDITION MEDIA
******************************************/

337
public/js/app.js vendored
View file

@ -10934,6 +10934,7 @@ jQuery.fn.scrollParent = function () {
$(window).data('offset', 0);
$(window).data('limit', 50);
$(window).data('currentFolder', 0);
$(window).data('currentBasket', 0);
$(window).data('filter', {}); //confirm popup
$.fancyConfirm = function (opts) {
@ -10997,6 +10998,12 @@ $(document).mouseup(function (e) {
menuContextuel.hide();
}
var cartMenu = $(".panier_side_menu .panier_menu");
if (!cartMenu.is(e.target) && cartMenu.has(e.target).length === 0 && $("#menu_panier").has(e.target).length === 0) {
cartMenu.hide();
}
var filter_list = $(".filter_selector");
if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) {
@ -11305,14 +11312,14 @@ $(document).ready(function () {
$(".close_side_menu").on('click', function (event) {
event.preventDefault();
if ($(".side_menu ").hasClass('collapse')) {
$(".side_menu ").removeClass('collapse');
$(".close_side_menu i").removeClass('fa-chevron-right');
$(".close_side_menu i").addClass('fa-chevron-left');
if ($(this).parents(".side_menu ").hasClass('collapse')) {
$(this).parents(".side_menu ").removeClass('collapse');
$(this).find("i").removeClass('fa-chevron-right');
$(this).find("i").addClass('fa-chevron-left');
} else {
$(".side_menu ").addClass('collapse');
$(".close_side_menu i").removeClass('fa-chevron-left');
$(".close_side_menu i").addClass('fa-chevron-right');
$(this).parents(".side_menu ").addClass('collapse');
$(this).find("i").removeClass('fa-chevron-left');
$(this).find("i").addClass('fa-chevron-right');
}
}); // ---- init des dossiers lorsqu'on change de sujet
@ -11753,7 +11760,9 @@ $(document).ready(function () {
$("#form_download .medias").val(medias.join());
}
}).trigger("click");
} else if ($target.hasClass('addBasket')) {// ajouter le média au panier
} else if ($target.hasClass('addBasket')) {
// ajouter le média au panier
addMediasBasket([$(this).attr('data-id')]);
} else if ($target.hasClass('deleteItem')) {
// supprimer le média
removeMedias([$(this).attr('data-id')]);
@ -11866,7 +11875,7 @@ $(document).ready(function () {
var drPlugin = null;
var viewer = null;
$(".main_content .wrapper").on("dblclick", '.imageItem', function (event) {
$(".media_manager").on("dblclick", '.imageItem', function (event) {
event.preventDefault(); // récupère l'image de preview
var imgPreview = $(this).attr('data-preview') + '?t=' + new Date().getTime();
@ -12046,7 +12055,13 @@ $(document).ready(function () {
$(".tab_edit #commentaire").val(result.data.commentaire);
$(".tab_edit #version").val(result.data.version);
$(".tab_edit #created_at").val(result.data.created_at);
$(".tab_edit #created_by").val(result.data.owner.firstname + " " + result.data.owner.lastname);
if (result.data.owner != null) {
$(".tab_edit #created_by").val(result.data.owner.firstname + " " + result.data.owner.lastname);
} else {
$(".tab_edit #created_by").val("");
}
$(".tab_edit #updated_at").val(result.data.updated_at);
$(".tab_edit #published_at").val(result.data.published_at);
$(".tab_edit #statut").val(result.data.statut); // articles lié
@ -12246,6 +12261,7 @@ $(document).ready(function () {
$('.tab_edit .add_article').on('click', function (event) {
event.preventDefault();
var arcadia_id = prompt("Indiquez le code Arcadia de l'article.", arcadia_id);
if (arcadia_id === null) return false;
$.ajax({
url: '/ajax/get-article',
method: 'POST',
@ -13158,6 +13174,300 @@ window.create_UUID = function () {
/***/ }),
/***/ "./resources/js/panier.js":
/*!********************************!*\
!*** ./resources/js/panier.js ***!
\********************************/
/*! no static exports found */
/***/ (function(module, exports) {
$(document).ready(function () {
if ($(".panier_side_menu").length) {
// ---- collapse/expand panier side menu
$("#menu_panier").on('click', function (event) {
event.preventDefault();
$(".panier_side_menu .panier_menu").toggle();
}); // ---- Chargement par défaut du premier panier
if ($("#panier_selector").val()) {
$(window).data('currentBasket', $("#panier_selector").val());
loadBasket($(window).data('currentBasket'));
} // ---- chargement du panier on change du sélector
$("#panier_selector").on('change', function (event) {
$(window).data('currentBasket', $("#panier_selector").val());
loadBasket($(window).data('currentBasket'));
}); // ---- Ajout de média au panier en masse
$('.action_add_basket').on('click', function (event) {
event.preventDefault();
var medias = [];
$('.media_container .imageItem').each(function (index) {
if ($(this).attr("aria-grabbed") == "true") {
medias.push($(this).attr("data-id"));
}
});
addMediasBasket(medias);
}); // ---- Ajout un nouveau panier
$('.panier_side_menu .add_panier').on('click', function (event) {
event.preventDefault();
$(".panier_side_menu .panier_menu").hide();
var d = new Date();
var strDate = ("0" + d.getDate()).slice(-2) + "/" + ("0" + (d.getMonth() + 1)).slice(-2) + "/" + d.getFullYear();
var defaultTitle = "Panier du " + strDate;
var title = prompt("Indiquez le code Arcadia de ce média", defaultTitle);
$.ajax({
url: '/ajax/add-basket',
method: 'POST',
dataType: 'json',
data: {
title: title
},
success: function success(result) {
if (result) {
$("#panier_selector").append(new Option(result.libelle, result.id));
$("#panier_selector").val(result.id);
$("#panier_selector").trigger("change");
}
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de la création du panier, merci d'actualiser la page.",
type: "error"
});
}
});
}); // ---- Ajout un nouveau panier
$('.panier_side_menu .goto_panier').on('click', function (event) {
event.preventDefault();
$(".panier_side_menu .panier_menu").hide();
window.location.href = $(this).attr("data-url") + "?p=" + $(window).data('currentBasket');
}); // ---- Supprimer un média du panier
$('.panier_content').on('click', ".imageItem .media_remove_basket", function (event) {
event.preventDefault();
var $media = $(this).parents(".imageItem");
var media_id = $media.attr("data-id");
$.ajax({
url: '/ajax/remove-media-basket',
method: 'POST',
dataType: 'json',
data: {
media_id: media_id,
panier_id: $(window).data('currentBasket')
},
success: function success(result) {
if (result) {
$(".panier_side_menu .imageItem[data-id='" + media_id + "']").remove();
}
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de la suppression du média, merci d'actualiser la page.",
type: "error"
});
}
});
}); // ---- Supprimer un média du panier
$('.panier_content').on('click', ".imageItem .media_info", function (event) {
event.preventDefault();
var $media = $(this).parents(".imageItem");
$media.trigger('dblclick');
}); // ---- gestion du dragover
$(".panier_content").on("dragover", function (event) {
event.preventDefault();
event.stopPropagation();
}); // ---- gestion du dragleave
$(".panier_content").on("dragleave", function (event) {
event.preventDefault();
event.stopPropagation();
}); // ---- evt lorsque l'on drop des élements dans le widget panier
$(".panier_content").on("drop", function (event) {
event.preventDefault();
event.stopPropagation();
var isMediaDepot = false; // source
var medias = event.originalEvent.dataTransfer.getData("Text").split(","); // Contrôles
$.each(medias, function (index, media_id) {
if ($(".media_container .imageItem[data-id='" + media_id + "']").attr("data-depot") == "1") {
$.fancyMessage({
title: "Attention",
message: "Vous ne pouvez pas mettre les médias du dépôt dans un panier.",
type: "error"
});
isMediaDepot = true;
return false;
}
}); // Ajout des médias dans le panier
if (!isMediaDepot) {
$.ajax({
url: '/ajax/add-media-basket',
method: 'POST',
dataType: 'json',
data: {
medias: medias,
panier_id: $(window).data('currentBasket')
},
success: function success(result) {
if (result) {
$.each(result, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.",
type: "error"
});
}
});
}
});
}
}); // ---- Ajout de médias au panier
window.addMediasBasket = function (medias) {
var thumb = "";
var preview = "";
var content = "";
if (medias.length == 0) {
$.fancyMessage({
title: "Ajout de média au panier",
message: "Veuillez sélectionner les médias à ajouter.",
type: "info"
});
} else if ($(window).data('currentBasket') == 0) {
$.fancyMessage({
title: "Ajout de média au panier",
message: "Veuillez sélectionner un panier.",
type: "info"
});
} else {
$.ajax({
url: '/ajax/add-media-basket',
method: 'POST',
dataType: 'json',
data: {
medias: medias,
panier_id: $(window).data('currentBasket')
},
success: function success(result) {
if (result) {
$.each(result, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.",
type: "error"
});
}
});
}
}; // ---- Charge un panier dans le widget
function loadBasket(panierId) {
if (panierId != 0) {
$.ajax({
url: '/ajax/load-basket',
method: 'POST',
dataType: 'json',
data: {
panier_id: $(window).data('currentBasket')
},
success: function success(result) {
if (result) {
$(".panier_side_menu .panier_content").html("");
$.each(result.medias, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors du chargement du panier, merci d'actualiser la page.",
type: "error"
});
}
});
}
} // ---- Ajoute un média dans le widget panier
function addmediaBasketHtml(media) {
var thumb = "";
var preview = "";
var content = "";
var itemClass = "";
switch (media.typemedia_id) {
case 1:
itemClass = "";
if (media.extension == "pdf" || media.extension == "ai" || media.extension == "psd") {
thumb = media.folder + media.uid + "_thumb.png";
preview = media.folder + media.uid + "_preview.png";
} else {
thumb = media.folder + media.uid + "_thumb." + media.extension;
preview = media.folder + media.uid + "_preview." + media.extension;
}
break;
case 2:
itemClass = "";
thumb = media.folder + media.uid + "." + media.extension;
preview = media.folder + media.uid + "." + media.extension;
break;
case 3:
itemClass = "video";
thumb = "";
preview = media.folder + media.uid + "." + media.extension;
break;
case 4:
itemClass = "son";
thumb = "";
preview = media.folder + media.uid + "." + media.extension;
break;
default:
}
content = '<div class="imageItem" data-id="' + media.id + '" data-depot="' + media.isDepot + '" data-ext="' + media.extension + '" data-typemedia="' + media.typemedia_id + '" data-preview="' + preview + '" data-src="' + media.folder + media.uid + "." + media.extension + '" draggable="false" aria-grabbed="false">';
content += '<div class="media ' + itemClass + '" style="background-image:url(' + thumb + ')"></div>';
content += '<div class="bar"> <a href="#" class="media_info"><i class="far fa-info-circle"></i></a><a href="#" class="media_remove_basket"><i class="far fa-times-circle"></i></a></div>';
content += '</div>';
$(".panier_side_menu .panier_content").append(content);
}
/***/ }),
/***/ "./resources/js/searchengine.js":
/*!**************************************!*\
!*** ./resources/js/searchengine.js ***!
@ -13328,9 +13638,9 @@ window.updateFilter = function (filter) {
/***/ }),
/***/ 0:
/*!********************************************************************************************************************************************************************!*\
!*** multi ./resources/js/app.js ./resources/js/admin.js ./resources/js/media.js ./resources/js/depot.js ./resources/js/searchengine.js ./resources/sass/app.scss ***!
\********************************************************************************************************************************************************************/
/*!*********************************************************************************************************************************************************************************************!*\
!*** multi ./resources/js/app.js ./resources/js/admin.js ./resources/js/media.js ./resources/js/depot.js ./resources/js/panier.js ./resources/js/searchengine.js ./resources/sass/app.scss ***!
\*********************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
@ -13338,6 +13648,7 @@ __webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\app.js */"./resource
__webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\admin.js */"./resources/js/admin.js");
__webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\media.js */"./resources/js/media.js");
__webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\depot.js */"./resources/js/depot.js");
__webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\panier.js */"./resources/js/panier.js");
__webpack_require__(/*! D:\sources\www\ldc-dam\resources\js\searchengine.js */"./resources/js/searchengine.js");
module.exports = __webpack_require__(/*! D:\sources\www\ldc-dam\resources\sass\app.scss */"./resources/sass/app.scss");

6
resources/js/app.js vendored
View file

@ -25,6 +25,7 @@ jQuery.fn.scrollParent = function() {
$(window).data('offset', 0);
$(window).data('limit', 50);
$(window).data('currentFolder', 0);
$(window).data('currentBasket', 0);
$(window).data('filter', {});
//confirm popup
@ -122,6 +123,11 @@ $(document).mouseup(function(e) {
menuContextuel.hide();
}
var cartMenu = $(".panier_side_menu .panier_menu");
if (!cartMenu.is(e.target) && cartMenu.has(e.target).length === 0 && $("#menu_panier").has(e.target).length === 0) {
cartMenu.hide();
}
var filter_list = $(".filter_selector");
if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) {
$(".filter_selector .list").hide();

25
resources/js/media.js vendored
View file

@ -25,14 +25,14 @@ $(document).ready(function() {
// ---- collapse/expand side menu
$(".close_side_menu").on('click', function(event) {
event.preventDefault();
if($(".side_menu ").hasClass('collapse')){
$(".side_menu ").removeClass('collapse')
$(".close_side_menu i").removeClass('fa-chevron-right');
$(".close_side_menu i").addClass('fa-chevron-left');
if($(this).parents(".side_menu ").hasClass('collapse')){
$(this).parents(".side_menu ").removeClass('collapse')
$(this).find("i").removeClass('fa-chevron-right');
$(this).find("i").addClass('fa-chevron-left');
}else{
$(".side_menu ").addClass('collapse');
$(".close_side_menu i").removeClass('fa-chevron-left');
$(".close_side_menu i").addClass('fa-chevron-right');
$(this).parents(".side_menu ").addClass('collapse');
$(this).find("i").removeClass('fa-chevron-left');
$(this).find("i").addClass('fa-chevron-right');
}
});
@ -450,6 +450,7 @@ $(document).ready(function() {
}
}).trigger("click");
}else if ($target.hasClass('addBasket')) { // ajouter le média au panier
addMediasBasket([$(this).attr('data-id')]);
}else if ($target.hasClass('deleteItem')) { // supprimer le média
removeMedias([$(this).attr('data-id')]);
}else if ($target.hasClass('tagItem')) { // Appliquer une étiquette
@ -556,7 +557,7 @@ $(document).ready(function() {
// ---- double-clique sur un média
var drPlugin = null;
var viewer = null;
$(".main_content .wrapper").on("dblclick", '.imageItem' , function(event) {
$(".media_manager").on("dblclick", '.imageItem' , function(event) {
event.preventDefault();
// récupère l'image de preview
@ -722,7 +723,12 @@ $(document).ready(function() {
$(".tab_edit #commentaire").val(result.data.commentaire);
$(".tab_edit #version").val(result.data.version);
$(".tab_edit #created_at").val(result.data.created_at);
$(".tab_edit #created_by").val(result.data.owner.firstname+" "+result.data.owner.lastname);
if(result.data.owner != null){
$(".tab_edit #created_by").val(result.data.owner.firstname+" "+result.data.owner.lastname);
}else{
$(".tab_edit #created_by").val("");
}
$(".tab_edit #updated_at").val(result.data.updated_at);
$(".tab_edit #published_at").val(result.data.published_at);
$(".tab_edit #statut").val(result.data.statut);
@ -898,6 +904,7 @@ $(document).ready(function() {
$('.tab_edit .add_article').on('click', function(event){
event.preventDefault();
var arcadia_id = prompt("Indiquez le code Arcadia de l'article.", arcadia_id);
if(arcadia_id === null) return false;
$.ajax({
url: '/ajax/get-article',

266
resources/js/panier.js vendored Normal file
View file

@ -0,0 +1,266 @@
$(document).ready(function() {
if ( $( ".panier_side_menu" ).length ) {
// ---- collapse/expand panier side menu
$("#menu_panier").on('click', function(event) {
event.preventDefault();
$(".panier_side_menu .panier_menu").toggle();
});
// ---- Chargement par défaut du premier panier
if($("#panier_selector").val()){
$(window).data('currentBasket', $("#panier_selector").val());
loadBasket($(window).data('currentBasket'));
}
// ---- chargement du panier on change du sélector
$("#panier_selector").on('change', function(event) {
$(window).data('currentBasket', $("#panier_selector").val());
loadBasket($(window).data('currentBasket'));
});
// ---- Ajout de média au panier en masse
$('.action_add_basket').on('click',function(event){
event.preventDefault();
var medias = [];
$('.media_container .imageItem').each(function (index) {
if( $(this ).attr("aria-grabbed") == "true" ){
medias.push($(this ).attr("data-id"));
}
});
addMediasBasket(medias);
});
// ---- Ajout un nouveau panier
$('.panier_side_menu .add_panier').on('click',function(event){
event.preventDefault();
$(".panier_side_menu .panier_menu").hide();
var d = new Date();
var strDate = ("0" +d.getDate()).slice(-2)+ "/" + ("0" +(d.getMonth()+1)).slice(-2) + "/" + d.getFullYear();
var defaultTitle = "Panier du "+strDate;
var title = prompt("Indiquez le code Arcadia de ce média", defaultTitle);
$.ajax({
url: '/ajax/add-basket',
method: 'POST',
dataType : 'json',
data: {
title: title,
},
success: function(result){
if(result){
$("#panier_selector").append(new Option(result.libelle, result.id));
$("#panier_selector").val(result.id);
$("#panier_selector").trigger("change");
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de la création du panier, merci d'actualiser la page.", type : "error"});
}
});
});
// ---- Ajout un nouveau panier
$('.panier_side_menu .goto_panier').on('click',function(event){
event.preventDefault();
$(".panier_side_menu .panier_menu").hide();
window.location.href = $(this).attr("data-url")+"?p="+$(window).data('currentBasket');
});
// ---- Supprimer un média du panier
$('.panier_content').on('click', ".imageItem .media_remove_basket",function(event){
event.preventDefault();
var $media = $(this).parents(".imageItem");
var media_id = $media.attr("data-id");
$.ajax({
url: '/ajax/remove-media-basket',
method: 'POST',
dataType : 'json',
data: {
media_id: media_id,
panier_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
$(".panier_side_menu .imageItem[data-id='"+media_id+"']").remove();
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du média, merci d'actualiser la page.", type : "error"});
}
});
});
// ---- Supprimer un média du panier
$('.panier_content').on('click', ".imageItem .media_info",function(event){
event.preventDefault();
var $media = $(this).parents(".imageItem");
$media.trigger('dblclick');
});
// ---- gestion du dragover
$(".panier_content").on("dragover", function(event) {
event.preventDefault();
event.stopPropagation();
});
// ---- gestion du dragleave
$(".panier_content").on("dragleave", function(event) {
event.preventDefault();
event.stopPropagation();
});
// ---- evt lorsque l'on drop des élements dans le widget panier
$(".panier_content").on("drop", function(event) {
event.preventDefault();
event.stopPropagation();
var isMediaDepot = false;
// source
var medias = event.originalEvent.dataTransfer.getData("Text").split(",");
// Contrôles
$.each(medias, function (index, media_id) {
if($(".media_container .imageItem[data-id='"+media_id+"']").attr("data-depot") == "1"){
$.fancyMessage({title : "Attention", message : "Vous ne pouvez pas mettre les médias du dépôt dans un panier.", type : "error"});
isMediaDepot = true;
return false;
}
});
// Ajout des médias dans le panier
if(!isMediaDepot){
$.ajax({
url: '/ajax/add-media-basket',
method: 'POST',
dataType : 'json',
data: {
medias: medias,
panier_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
$.each(result, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", type : "error"});
}
});
}
});
}
});
// ---- Ajout de médias au panier
window.addMediasBasket = function(medias){
var thumb = "";
var preview = "";
var content = "";
if(medias.length == 0){
$.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner les médias à ajouter.", type : "info"});
}else if ($(window).data('currentBasket') == 0) {
$.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner un panier.", type : "info"});
}else{
$.ajax({
url: '/ajax/add-media-basket',
method: 'POST',
dataType : 'json',
data: {
medias: medias,
panier_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
$.each(result, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", type : "error"});
}
});
}
}
// ---- Charge un panier dans le widget
function loadBasket(panierId){
if(panierId != 0){
$.ajax({
url: '/ajax/load-basket',
method: 'POST',
dataType : 'json',
data: {
panier_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
$(".panier_side_menu .panier_content").html("");
$.each(result.medias, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors du chargement du panier, merci d'actualiser la page.", type : "error"});
}
});
}
}
// ---- Ajoute un média dans le widget panier
function addmediaBasketHtml(media){
var thumb = "";
var preview = "";
var content = "";
var itemClass = "";
switch (media.typemedia_id) {
case 1:
itemClass = "";
if(media.extension == "pdf" || media.extension == "ai" || media.extension == "psd"){
thumb = media.folder+media.uid+"_thumb.png";
preview = media.folder+media.uid+"_preview.png";
}else{
thumb = media.folder+media.uid+"_thumb."+media.extension;
preview = media.folder+media.uid+"_preview."+media.extension;
}
break;
case 2:
itemClass = "";
thumb = media.folder+media.uid+"."+media.extension;
preview = media.folder+media.uid+"."+media.extension;
break;
case 3:
itemClass = "video";
thumb = "";
preview = media.folder+media.uid+"."+media.extension;
break;
case 4:
itemClass = "son";
thumb = "";
preview = media.folder+media.uid+"."+media.extension;
break;
default:
}
content = '<div class="imageItem" data-id="'+media.id+'" data-depot="'+media.isDepot+'" data-ext="'+media.extension+'" data-typemedia="'+media.typemedia_id+'" data-preview="'+preview+'" data-src="'+media.folder+media.uid+"."+media.extension+'" draggable="false" aria-grabbed="false">';
content += '<div class="media '+itemClass+'" style="background-image:url('+thumb+')"></div>';
content += '<div class="bar"> <a href="#" class="media_info"><i class="far fa-info-circle"></i></a><a href="#" class="media_remove_basket"><i class="far fa-times-circle"></i></a></div>';
content += '</div>';
$(".panier_side_menu .panier_content").append(content);
}

View file

@ -107,6 +107,7 @@ a{
a{
margin-left: 10px;
display: inline-block;
}
}
h1{

View file

@ -2,6 +2,8 @@
.media_manager{
height: calc(100% - 48px);
position: relative;
overflow: hidden;
.main_content{
height: 100%;
@ -207,8 +209,9 @@
.media_container{
overflow-y: auto;
overflow-x: hidden;
scrollbar-color: #272626 #1a1a1a;
position: relative;
height: calc(100% - 180px);
height: calc(100% - 174px);
.loader{
position: sticky;
@ -513,6 +516,7 @@
.folder_container{
background-color: $grey3;
height: calc(100% - 129px);
scrollbar-color: #272626 #1a1a1a;
overflow-y: auto;
position: relative;
@ -586,6 +590,142 @@
}
&.panier_side_menu{
width: 380px;
.close_side_menu{
left: -17px;
border-radius : 3px 0 0 3px;
border-left: 1px solid #505050;
border-right: none;
}
&.collapse{
transform: translateX(100%);
position: absolute;
right: 0;
}
header{
display: flex;
a{
margin-left: 5px;
position: relative;
}
.panier_menu {
width: 140px;
box-shadow: 0 4px 5px 3px rgba(0, 0, 0, 0.2);
position: absolute;
display: none;
background-color: $grey3;
z-index: 1;
right: 12px;
top: 48px;
.menu-options {
list-style: none;
padding: 10px 0;
.menu-option {
font-weight: 500;
font-size: 13px;
padding: 10px;
cursor: pointer;
&:hover {
background: rgba(0, 0, 0, 0.2);
}
}
}
}
}
.panier_content{
height: calc(100% - 59px);
overflow-y: auto;
scrollbar-color: #272626 #1a1a1a;
.imageItem{
display: inline-block;
border: 1px solid grey;
width: 202px;
margin: 2px 5px;
background-color: $grey3;
transition: 0.3s ease-in-out;
position: relative;
cursor: pointer;
.media{
height: 200px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
position: relative;
&::before {
transform: translate(-50%,-50%);
display: block;
position: absolute;
left: 50%;
top: 50%;
text-align: center;
text-indent: 0;
color: $white;
font-size: 59px;
z-index: 1;
}
&.video{
&::before {
content: "\f167";
font-family: "Font Awesome 5 Brands";
}
}
&.son{
&::before {
content: "\f58f";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
}
}
&.doc{
&::before {
content: "\f15c";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
}
}
}
&:hover{
background-color: $grey;
}
.bar{
position: absolute;
opacity: 0;
transition: opacity 0.5s;
bottom: 0;
height: 29px;
width: 100%;
background-color: rgba(0,0,0,0.7);
text-align: right;
a{
display: inline-block;
padding: 5px;
border: none;
}
}
&:hover{
.bar{
opacity: 1;
}
}
}
}
}
}
}

View file

@ -37,6 +37,16 @@
@endforeach
</div>
</div>
<div class="item">
<header>
Mes paniers favoris
</header>
<div class="content">
@foreach ($paniers as $panier)
<a href="{{ route('paniers', ['p' => $panier->id]) }}" ><i class="fas fa-shopping-cart"></i> {{$panier->libelle}}</a>
@endforeach
</div>
</div>
</div>
</main>
@endsection

View file

@ -7,6 +7,11 @@
<a href="{{ route('media_manager') }}" class="{{(Route::currentRouteName() == 'media_manager') ? 'active' : '' }}">
<i class="fas fa-images"></i> Gestion des média
</a>
<!--
<a href="{{ route('paniers') }}" class="{{(Route::currentRouteName() == 'paniers') ? 'active' : '' }}">
<i class="fas fa-shopping-cart"></i> Paniers
</a>
-->
</nav>
<div class="userbar">
<i class="fas fa-user-circle"></i> {{ Auth::user()->firstname." ".Auth::user()->lastname}} <i class="fas fa-caret-down"></i>

View file

@ -85,7 +85,7 @@
<input type="text" id="published_at" name="published_at" readonly >
</div>
<div class="row">
<label for="typevues">Statut</label>
<label for="statut">Statut</label>
<select id="statut" name="statut">
<option value="0">Brouillon</option>
<option value="1">Public</option>

View file

@ -120,6 +120,27 @@
<div style="display:none;" class="loader"><i class="fal fa-circle-notch fa-spin"></i></div>
<div class="wrapper"></div>
</div>
</div>
<div class="side_menu panier_side_menu collapse">
<header>
<div class="close_side_menu"><i class="fas fa-shopping-cart"></i></div>
<select id="panier_selector" >
@foreach ($paniers as $panier)
<option value="{{$panier->id}}" >{{$panier->libelle}}</option>
@endforeach
</select>
<a id="menu_panier" href="#" class="btn btn-square"><i class="far fa-bars"></i></a>
<div class="panier_menu">
<ul class="menu-options">
<li class="menu-option goto_panier" data-url="{{ route('paniers') }}">Aller au panier</li>
<li class="menu-option add_panier" >Nouveau panier</li>
</ul>
</div>
</header>
<div class="panier_content">
</div>
</div>
</main>
<div id="form_folder_property" style="display: none;" data-id="" >

View file

@ -0,0 +1,114 @@
@extends('layouts.app')
@include('layouts.header')
@section('content')
<main class="paniers template_2col">
<div class="side_menu">
<header>
<h1><i class="fas fa-shopping-cart"></i> Gestion des paniers</h1>
<p>Créez des sélections d'éléments et partagez les avec d'autres utilisateurs.</p>
<hr>
</header>
<form class="form_search_basket" action="#" method="post">
<div class="row">
<label for="recherche">Recherche</label>
<input type="text" value="" id="recherche" name="recherche" >
</div>
<div class="row">
<label for="statut">Statut</label>
<select id="statut" name="statut">
<option value="">Tous</option>
<option value="1">Activés</option>
<option value="0">Désactivé</option>
</select>
</div>
<div class="row">
<label for="type">Type</label>
<select id="type" name="type">
<option value="">Tous</option>
<option value="1">Mes paniers</option>
<option value="0">Paniers partagés avec moi</option>
</select>
</div>
<div>
<input type="checkbox" id="favoris" name="favoris" value="1">
<label for="favoris">Paniers favoris</label>
</div>
</form>
</div>
<div class="main_content">
<div class="heading">
<a href="#" class=" btn"><i class="fal fa-plus"></i> Créer un nouveau panier</a>
<hr>
</div>
<div class="panier_list">
<div class="panier_item">
<div class="title">
<i class="fas fa-star"></i>
<p>Panier du 29/07/2019</p>
</div>
<div class="media" style="background-image:url(medias/5d2f2559ed5df/a3e47a74-f34b-4ed7-b26b-51282bf2c2db_thumb.png)"></div>
<div class="bar">
<a href="#" class="action_delete_basket"><i class="fas fa-trash-alt"></i></a>
<span class="count"></span>
</div>
</div>
<div class="panier_item">
<div class="title">
<i class="fas fa-star"></i>
<p>Panier du 29/07/2019</p>
</div>
<div class="media" style="background-image:url(medias/5d2f2559ed5df/a3e47a74-f34b-4ed7-b26b-51282bf2c2db_thumb.png)"></div>
<div class="bar">
<a href="#" class="action_delete_basket"><i class="fas fa-trash-alt"></i></a>
<span class="count"></span>
</div>
</div>
<div class="panier_item">
<div class="title">
<i class="fas fa-star"></i>
<p>Panier du 29/07/2019</p>
</div>
<div class="media" style="background-image:url(medias/5d2f2559ed5df/a3e47a74-f34b-4ed7-b26b-51282bf2c2db_thumb.png)"></div>
<div class="bar">
<a href="#" class="action_delete_basket"><i class="fas fa-trash-alt"></i></a>
<span class="count"></span>
</div>
</div>
<div class="panier_item">
<div class="title">
<i class="fas fa-star"></i>
<p>Panier du 29/07/2019</p>
</div>
<div class="media" style="background-image:url(medias/5d2f2559ed5df/a3e47a74-f34b-4ed7-b26b-51282bf2c2db_thumb.png)"></div>
<div class="bar">
<a href="#" class="action_delete_basket"><i class="fas fa-trash-alt"></i></a>
<span class="count"></span>
</div>
</div>
<div class="panier_item">
<div class="title">
<i class="fas fa-star"></i>
<p>Panier du 29/07/2019</p>
</div>
<div class="media" style="background-image:url(medias/5d2f2559ed5df/a3e47a74-f34b-4ed7-b26b-51282bf2c2db_thumb.png)"></div>
<div class="bar">
<a href="#" class="action_delete_basket"><i class="fas fa-trash-alt"></i></a>
<span class="count"></span>
</div>
</div>
<div class="panier_item">
<div class="title">
<i class="fas fa-star"></i>
<p>Panier du 29/07/2019</p>
</div>
<div class="media" style="background-image:url(medias/5d2f2559ed5df/a3e47a74-f34b-4ed7-b26b-51282bf2c2db_thumb.png)"></div>
<div class="bar">
<a href="#" class="action_delete_basket"><i class="fas fa-trash-alt"></i></a>
<span class="count"></span>
</div>
</div>
</div>
</div>
</main>
@endsection

View file

@ -15,6 +15,7 @@ Route::group(['middleware' => ['auth']], function(){
// Les pages Front
Route::get('/', 'CommunController@index')->name('home');
Route::get('/gestion-des-medias', 'MediaController@index')->name('media_manager');
Route::get('/paniers', 'PanierController@index')->name('paniers');
// Message de contact
Route::post('/send-message', 'CommunController@sendMessage');
@ -42,6 +43,13 @@ Route::group(['middleware' => ['auth']], function(){
Route::post('/ajax/download-media', 'MediaController@downloadMedia')->name('downloadMedia');
Route::post('/ajax/get-media-history', 'MediaController@getMediaHistory');
// Ajax pour la gestion des panier
Route::post('/ajax/add-media-basket', 'PanierController@addMediasBasket');
Route::post('/ajax/remove-media-basket', 'PanierController@removeMediasBasket');
Route::post('/ajax/load-basket', 'PanierController@loadBasket');
Route::post('/ajax/add-basket', 'PanierController@addBasket');
Route::post('/ajax/favoris-basket', 'UserController@favorisBasket');
// Back office
Route::resource('user', 'UserController');
Route::post('/check-matricule', 'UserController@checkMatricule');

1
webpack.mix.js vendored
View file

@ -16,6 +16,7 @@ mix.js([
'resources/js/admin.js',
'resources/js/media.js',
'resources/js/depot.js',
'resources/js/panier.js',
'resources/js/searchengine.js',
], 'public/js/app.js')
.sass('resources/sass/app.scss', 'public/css');