gestion des médias sans fichier, gestion des panier et divers fix

This commit is contained in:
Yann Gonidec 2019-08-06 14:18:36 +02:00
parent ca99267b1a
commit 212ca42f8c
23 changed files with 1669 additions and 156 deletions

View file

@ -83,12 +83,12 @@ class ImportMedia extends Command
$record->version = 1;
}
if($row->typemedia_id != ""){
if($row->codeTypeMedia != ""){
$record->typemedia_id = $row->codeTypeMedia;
}else{
$record->typemedia_id = 1;
}
if($row->typevue_id != ""){
if($row->codeTypeVue != ""){
$record->typevue_id = $row->codeTypeVue;
}
$record->commentaire = $row->commentaire;
@ -119,46 +119,40 @@ class ImportMedia extends Command
}
$record->statut = config('services.statut.public_etendu');
// Affectation d'un dossier et d'un uid
$destinationPath = $this->get_mediaFolder()."/";
$record->folder = $destinationPath;
$record->uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
$mediaFile = "/images/".$record->arcadia_id.".".$record->extension;
$fileExists = Storage::disk('arcadia')->exists($mediaFile);
if($fileExists){
// déplacement du média et renommage du fichier
$file = Storage::disk('arcadia')->get($mediaFile);
// Affectation d'un dossier et d'un uid
$destinationPath = $this->get_mediaFolder()."/";
$record->folder = $destinationPath;
$record->uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
// déplacement du média et renommage du fichier
$full_path_source = Storage::disk('arcadia')->getDriver()->getAdapter()->applyPathPrefix($mediaFile);
$full_path_dest = Storage::disk('local')->getDriver()->getAdapter()->applyPathPrefix($destinationPath.$record->uid. '.' .$record->extension);
File::move($full_path_source, $full_path_dest);
// calcul de la taille du média et durée
$record->taille = $this->formatBytes($this->get_file_size($full_path_dest));
$record->save();
// calcul de la taille du média
$record->taille = $this->formatBytes($this->get_file_size($full_path_dest));
// ---- Creation des vignettes de base
$this->create_sys_thumb($record);
// ---- Creation des vignettes en lien avec le sujet du média
$this->create_thumb($record);
}else{
$this->line("DAM_MEDIA_VISUEL : le visuel du media n°".$row->code. " n'a pas été trouvé");
// on applique une image par défaut
$record->extension = "jpg";
Storage::disk('local')->copy("images/default.jpg", $destinationPath.$record->uid. '.' .$record->extension);
// calcul de la taille du média
$record->taille = $this->formatBytes($this->get_file_size("public/".$destinationPath.$record->uid. '.' .$record->extension));
}
$record->save();
// ---- Creation des vignettes de base
$this->create_sys_thumb($record);
// ---- Creation des vignettes en lien avec le sujet du média
$this->create_thumb($record);
}else{
$this->line("DAM_MEDIA_VISUEL : le media n°".$row->code. " existe déjà en base");
}

View file

@ -353,9 +353,7 @@ class MediaController extends Controller
$media->langue_id = $mediaUpdate->langue_id;
$media->commentaire = $mediaUpdate->commentaire;
$media->version = $mediaUpdate->version;
if( ($mediaUpdate->statut == config('services.statut.public') || $mediaUpdate->statut == config('services.statut.public_etendu')) && $media->statut == config('services.statut.brouillon')){
$media->published_at = date("Y-m-d H:i:s");
}
$media->published_at = $mediaUpdate->published_at;
$media->statut = $mediaUpdate->statut;
$media->copyright_id = $mediaUpdate->copyright_id;
@ -651,4 +649,73 @@ class MediaController extends Controller
return json_encode($response);
}
/**
* Ajoute un média sans fichier
*
*/
public function addMedia(Request $request)
{
$response = false;
$sujet_id = $request->input('sujet_id');
$dossier_id = $request->input('dossier_id');
if($dossier_id == 0) $dossier_id = NULL;
// On déplace le média par défaut dans le répertoire des médias
$destinationPath = $this->get_mediaFolder()."/";
$uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
$filename = $uid.".jpg";
Storage::copy("images/default.jpg", $destinationPath.$filename);
// on créé un média en bdd
$media = new Media();
$media->dossier_id = $dossier_id;
$media->sujet_id = $sujet_id;
$media->libelle = "Nouveau média";
$media->folder = $destinationPath;
$media->taille = $this->formatBytes($this->get_file_size($destinationPath.$filename));
if($user = Auth::user()){
$media->created_by= $user->id;
}
$media->uid = $uid;
$media->extension = "jpg";
$media->typemedia_id = 1;
$im = new \imagick($destinationPath.$filename);
$resolutions = $im->getImageResolution();
$media->resolution = round($resolutions['x'] * 2.54, 2);
$imageprops = $im->getImageGeometry();
$media->largeur = $imageprops['width'];
$media->hauteur = $imageprops['height'];
if($media->resolution != 0){
$media->largeur_mm = ceil(($media->largeur * 2.54 / $media->resolution)*10);
$media->hauteur_mm = ceil(($media->hauteur * 2.54 / $media->resolution)*10);
}else{
$media->largeur_mm = "";
$media->hauteur_mm = "";
}
$media->save();
$response = $media;
$im->destroy();
// ---- Creation des vignettes de base
$this->create_sys_thumb($media);
// ---- Creation des vignettes en lien avec le sujet du média
if(isset($sujet_id) ){
$this->create_thumb($media);
}
// ---- Historique des actions
$historique = new historique();
if($user = Auth::user()){
$historique->user_id = $user->id;
}
$historique->media_id = $media->id;
$historique->type = "Création";
$historique->description = "Média ajouté";
$historique->save();
return json_encode($response);
}
}

View file

@ -6,23 +6,45 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Panier;
use App\Media;
use App\Format;
class PanierController extends Controller
{
/**
* Pas principale des paniers
* Page principale des paniers
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$paniers = "";
$paniers = Auth::user()->paniersOwner;
return view('panier.index')->with([
'paniers'=> $paniers,
]);
}
/**
* Page publique d'un panier
*
* @return \Illuminate\Http\Response
*/
public function showBasket(Request $request)
{
$panier_uid = $request->basket_uid;
$formats = Format::withoutGlobalScope('App\Scopes\SystemScope')->where('system', 1)->get();
$panier = Panier::where('uid', $panier_uid)->first();
if($panier && $panier->statut == 1){
return view('panier.show')->with([
'panier'=> $panier,
'formats' => $formats,
]);
}else{
abort(404, 'Page introuvable');
}
}
/**
* Ajout de média à un panier
*/
@ -69,6 +91,7 @@ class PanierController extends Controller
public function addBasket(Request $request)
{
$response = false;
$uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
$title = $request->input('title');
if($title == ""){
@ -78,6 +101,7 @@ class PanierController extends Controller
$panier = new Panier();
$panier->owner = Auth::user()->id;
$panier->libelle = $title;
$panier->uid = $uid;
if($panier->save()){
$response = $panier;
}
@ -86,13 +110,12 @@ class PanierController extends Controller
}
/**
* supprimer un panier
* Supprimer un panier
*
*/
public function removeBasket(Request $request)
{
$response = false;
$user_id = Auth::user()->id;
$basket_id = $request->input('basket_id');
@ -104,6 +127,24 @@ class PanierController extends Controller
return json_encode($response);
}
/**
* Obtenir un panier
*
*/
public function getBasket(Request $request)
{
$response = false;
$basket_id = $request->input('basket_id');
$host = $request->getSchemeAndHttpHost();
$panier = Panier::where('id', $basket_id)->first();
if($panier){
$response['basket'] = $panier;
$response['link'] = $host."/basket/".$panier->uid;
}
return json_encode($response);
}
/**
* Charge un panier
*/
@ -119,4 +160,25 @@ class PanierController extends Controller
return json_encode($response);
}
/**
* enregistre les propriétés d'un panier
*
*/
public function saveBasketProperty(Request $request)
{
$basket_id = $request->input('basket_id');
$libelle = $request->input('libelle');
$description = $request->input('description');
$statut = $request->input('statut');
$panier = Panier::where('id', $basket_id)->first();
if($panier){
$panier->libelle = $libelle;
$panier->description = $description;
$panier->statut = $statut;
$panier->save();
}
return json_encode(true);
}
}

View file

@ -31,6 +31,7 @@ class UploadController extends Controller {
$uid = $request->input('uid');
$sujet_id = $request->input('sujet_id');
$dossier_id = $request->input('dossier_id');
$replaceMediaId = $request->input('replaceMediaId');
if($dossier_id == 0) $dossier_id = NULL;
$headers = $request->headers->all();
@ -99,19 +100,36 @@ class UploadController extends Controller {
// si c'est le dernier morceau d'un fichier ou que c'est un envoi simple
if($is_last_chunk || !$is_chunked_upload ){
// On déplace le fichier dans le répertoire des médias
$destinationPath = $this->get_mediaFolder()."/";
Storage::move("uploads/".$filename, $destinationPath.$filename);
// on créé un média en bdd
$media = new Media();
$media->dossier_id = $dossier_id;
$media->sujet_id = $sujet_id;
$media->libelle = $originalName;
// si on upload un média pour remplacer un fichier par un autre
if($replaceMediaId != 0){
// on récupère le média à modifier
$media= Media::where('id', $replaceMediaId)->first();
// On déplace le fichier dans le répertoire des médias
Storage::move("uploads/".$filename, $destinationPath.$filename);
// supprime les fichiers médias stockés sur disque
$filesfF= Storage::files($media->folder."/");
$filepath = preg_quote($media->folder.$media->uid, '/');
$matchingFiles = preg_grep('/^'.$filepath.'/', $filesfF);
Storage::delete($matchingFiles);
}else{
// On déplace le fichier dans le répertoire des médias
Storage::move("uploads/".$filename, $destinationPath.$filename);
// on créé un média en bdd
$media = new Media();
$media->dossier_id = $dossier_id;
$media->sujet_id = $sujet_id;
}
$media->extension = $extension;
$media->folder = $destinationPath;
if($user = Auth::user()){
$media->created_by= $user->id;
if($replaceMediaId == 0){
$media->libelle = $originalName;
$media->created_by= Auth::user()->id;
}
$media->uid = $uid;
$media->taille = $this->formatBytes($this->get_file_size($destinationPath.$filename));
@ -188,8 +206,13 @@ class UploadController extends Controller {
$historique->user_id = $user->id;
}
$historique->media_id = $media->id;
$historique->type = "Création";
$historique->description = "Média ajouté";
if($replaceMediaId == 0){
$historique->type = "Création";
$historique->description = "Média ajouté";
}else{
$historique->type = "Modification";
$historique->description = "Le média a été remplacé";
}
$historique->save();
}

View file

@ -9,6 +9,8 @@ class Panier extends Model
{
use SoftDeletes;
protected $appends = array('mediacount', 'mediacover');
/**
* Get the user that owns the panier.
*/
@ -33,4 +35,35 @@ class Panier extends Model
return $this->belongsToMany('App\Media', 'paniers_medias', 'panier_id', 'media_id');
}
/**
* Get media linked
*/
public function getMediacountAttribute()
{
return $this->medias()->count();
}
/**
* Get media linked
*/
public function getMediacoverAttribute()
{
$cover = "";
$media = $this->medias()->where('typemedia_id', 1)->first();
if($media){
switch ($media->typemedia_id) {
case 1:
if($media->extension == "pdf" || $media->extension == "ai" || $media->extension == "psd"){
$cover = $media->folder.$media->uid."_thumb.png";
}else{
$cover = $media->folder.$media->uid."_thumb.".$media->extension;
}
break;
case 2:
$cover = $media->folder.$media->uid."_thumb.".$media->extension;
break;
}
}
return $cover;
}
}

370
public/css/app.css vendored
View file

@ -13030,6 +13030,55 @@ readers do not read off random characters that represent icons */
display: none;
}
#form_basket_property {
padding: 30px;
min-width: 550px;
}
#form_basket_property h3 {
font-size: 14px;
margin-bottom: 12px;
font-weight: bold;
color: #ffffff;
}
#form_basket_property hr {
color: #24272e;
border-bottom: 1px solid #2c2f36;
margin-bottom: 20px;
}
#form_basket_property p.button_bar {
text-align: right;
margin: 0;
}
#form_basket_property select,
#form_basket_property input,
#form_basket_property textarea {
width: 100%;
}
#form_basket_property textarea {
min-height: 200px;
}
#form_basket_property .btn {
margin-right: 10px;
}
#form_basket_property .form_basket_save .fa-spinner-third {
display: none;
}
#form_basket_property .form_basket_save.loading .fa-spinner-third {
display: inline-block;
}
#form_basket_property .form_basket_save.loading .fa-share {
display: none;
}
#form_etiquette {
padding: 30px;
min-width: 340px;
@ -13098,6 +13147,48 @@ readers do not read off random characters that represent icons */
margin-bottom: 40px;
}
#form_select_add_media {
padding: 30px;
min-width: 340px;
}
#form_select_add_media h3 {
font-size: 14px;
margin-bottom: 12px;
font-weight: bold;
color: #ffffff;
}
#form_select_add_media hr {
color: #24272e;
border-bottom: 1px solid #2c2f36;
margin-bottom: 20px;
}
#form_select_add_media .content {
margin: 10px 0;
}
#form_select_add_media .content a {
display: block;
color: #ffffff;
border-radius: 5px;
border: 1px solid #ffffff;
padding: 15px 15px;
margin-bottom: 5px;
font-size: 15px;
transition: background-color 200ms ease-in;
}
#form_select_add_media .content a i {
margin-right: 10px;
font-size: 20px;
}
#form_select_add_media .content a:hover {
background-color: #0a6fb7;
}
/******************************************
TEMPLATE
******************************************/
@ -13392,6 +13483,7 @@ p {
input[type=text],
input[type=number],
input[type=password],
input[type=date],
input[type=email],
input[type=url],
select {
@ -13403,6 +13495,7 @@ select {
input[type=text].is-invalid,
input[type=number].is-invalid,
input[type=password].is-invalid,
input[type=date].is-invalid,
input[type=email].is-invalid,
input[type=url].is-invalid,
select.is-invalid {
@ -13775,7 +13868,7 @@ table tfoot tr:hover {
min-width: 163px;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
z-index: 1;
z-index: 2;
}
.media_manager .main_content header .search_wrapper .search_filters > div .list.list_etiquette li label {
@ -14383,7 +14476,7 @@ table tfoot tr:hover {
position: absolute;
display: none;
background-color: #333333;
z-index: 1;
z-index: 2;
right: 12px;
top: 48px;
}
@ -14494,7 +14587,7 @@ table tfoot tr:hover {
height: 100%;
background-color: #333333;
position: absolute;
z-index: 99990;
z-index: 99;
left: 0;
top: 0;
}
@ -14553,17 +14646,21 @@ table tfoot tr:hover {
z-index: 1;
}
#form_media header .form_media_download {
#form_media header .form_media_download,
#form_media header .form_media_replace {
float: right;
font-size: 18px;
font-size: 26px;
margin-right: 5px;
position: relative;
padding: 12px;
padding: 8px;
border: none;
color: #ffffff;
}
#form_media header .form_media_download:hover {
#form_media header .form_media_download:hover,
#form_media header .form_media_replace:hover {
background-color: transparent;
color: #ffffff;
color: #aaaaaa;
}
#form_media .main_content {
@ -14706,6 +14803,263 @@ table tfoot tr:hover {
color: #aaaaaa;
}
/*********************
Widget Panier
**********************/
.panier_manager .side_menu header {
padding: 13px;
}
.panier_manager .side_menu header h1 {
font-size: 18px;
margin: 20px 0;
}
.panier_manager .side_menu header p {
color: white;
font-size: 14px;
}
.panier_manager .main_content .panier_list {
display: flex;
flex-wrap: wrap;
}
.panier_manager .main_content .panier_list .panier_item {
display: inline-block;
border: 1px solid grey;
width: 202px;
margin: 8px 10px;
background-color: #333333;
transition: 0.3s ease-in-out;
position: relative;
padding-bottom: 25px;
height: 200px;
background-size: cover;
background-position: center;
cursor: pointer;
}
.panier_manager .main_content .panier_list .panier_item::before {
content: "";
background-color: rgba(255, 255, 255, 0.6);
position: absolute;
width: 100%;
height: 100%;
left: 3px;
top: 3px;
z-index: -1;
}
.panier_manager .main_content .panier_list .panier_item::after {
content: "";
background-color: rgba(255, 255, 255, 0.3);
position: absolute;
z-index: 1;
width: 100%;
height: 100%;
}
.panier_manager .main_content .panier_list .panier_item .title {
position: absolute;
top: 0;
z-index: 2;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
padding: 5px;
}
.panier_manager .main_content .panier_list .panier_item .title i {
color: #ffed4a;
margin-right: 10px;
}
.panier_manager .main_content .panier_list .panier_item .title p {
margin: 0;
color: black;
}
.panier_manager .main_content .panier_list .panier_item .bar {
position: absolute;
bottom: 0;
padding: 4px;
font-size: 11px;
z-index: 2;
text-align: right;
width: 100%;
padding: 3px 8px;
}
.panier_manager .main_content .panier_list .panier_item .bar .action_delete_basket {
color: black;
margin-right: 6px;
font-size: 16px;
}
.panier_manager .main_content .panier_list .panier_item .bar .count {
background-color: #FFAB57;
color: #ffffff;
font-size: 14px;
font-weight: bold;
padding: 5px 6px;
border-radius: 10px;
display: inline-block;
}
/********************************
Page publique d'un panier
*********************************/
.public_basket {
height: 100%;
overflow: hidden;
}
.public_basket .main_content {
height: 100%;
padding: 0;
position: relative;
overflow: hidden;
}
.public_basket .main_content header {
height: 48px;
background-color: #3b3b3b;
display: flex;
align-items: center;
justify-content: space-between;
}
.public_basket .main_content header .basket_title {
margin-left: 10px;
font-size: 17px;
}
.public_basket .main_content header .basket_Info {
margin-right: 10px;
font-size: 27px;
}
.public_basket .main_content header .basket_Info a {
margin-right: 5px;
}
.public_basket .main_content .media_container {
overflow-y: auto;
overflow-x: hidden;
scrollbar-color: #272626 #1a1a1a;
position: relative;
height: calc(100% - 48px);
}
.public_basket .main_content .media_container .wrapper {
display: flex;
flex-wrap: wrap;
}
.public_basket .main_content .media_container .wrapper .imageItem {
display: inline-block;
border: 1px solid grey;
width: 202px;
margin: 8px 10px;
background-color: #333333;
transition: 0.3s ease-in-out;
position: relative;
padding-bottom: 25px;
cursor: pointer;
}
.public_basket .main_content .media_container .wrapper .imageItem .media {
height: 200px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
position: relative;
}
.public_basket .main_content .media_container .wrapper .imageItem .media::before {
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
display: block;
position: absolute;
left: 50%;
top: 50%;
text-align: center;
text-indent: 0;
color: #ffffff;
font-size: 59px;
z-index: 1;
}
.public_basket .main_content .media_container .wrapper .imageItem .media.video::before {
content: "\F167";
font-family: "Font Awesome 5 Brands";
}
.public_basket .main_content .media_container .wrapper .imageItem .media.son::before {
content: "\F58F";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
}
.public_basket .main_content .media_container .wrapper .imageItem .media.doc::before {
content: "\F15C";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
}
.public_basket .main_content .media_container .wrapper .imageItem .libelle {
padding: 4px;
text-align: center;
color: #ffffff;
margin: 0;
word-wrap: break-word;
}
.public_basket .main_content .media_container .wrapper .imageItem .info {
position: absolute;
bottom: 0;
padding: 4px;
font-size: 11px;
}
.public_basket .main_content .media_container .wrapper .imageItem .info i {
margin-right: 7px;
}
.public_basket .main_content .media_container .wrapper .imageItem[aria-grabbed=true]::before {
content: "\F058";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
display: block;
position: absolute;
left: 5px;
top: 5px;
text-align: center;
text-indent: 0;
color: #2489D1;
font-size: 25px;
z-index: 2;
}
.public_basket .main_content .media_container .wrapper .imageItem[aria-grabbed=true]::after {
content: "";
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
position: absolute;
left: 0px;
top: 0px;
z-index: 1;
}
.public_basket .main_content .media_container .wrapper .imageItem:hover {
background-color: #3b3b3b;
}
/******************************************
PAGE LOGIN
******************************************/

BIN
public/images/default.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

316
public/js/app.js vendored
View file

@ -10986,23 +10986,27 @@ $(".userbar").on('click', function (event) {
$(".submenu").toggle();
});
$(document).mouseup(function (e) {
// ---- Masque le menu utilisateur
var container = $(".userbar");
if (!container.is(e.target) && container.has(e.target).length === 0) {
$(".submenu").hide();
}
} // ---- Masque le menu contextuel des dossiers
var menuContextuel = $(".folder_container .folder_menu");
if (!menuContextuel.is(e.target) && menuContextuel.has(e.target).length === 0) {
menuContextuel.hide();
}
} // ---- Masque le menu des paniers
var cartMenu = $(".panier_side_menu .panier_menu");
if (!cartMenu.is(e.target) && cartMenu.has(e.target).length === 0 && $("#menu_panier").has(e.target).length === 0) {
cartMenu.hide();
}
} // ---- Masque les filtres de la bar de recherche
var filter_list = $(".filter_selector");
@ -11011,7 +11015,9 @@ $(document).mouseup(function (e) {
} // ---- déselectionne les éléments si on clique en dehors
if ($(e.target).hasClass('media_container') || $(e.target).hasClass('wrapper')) {
var parentOffset = $('.media_container').parent().offset();
if ($(e.target).hasClass('media_container') && event.pageX - parentOffset.left < $('.media_container')[0]['clientWidth'] || $(e.target).hasClass('wrapper')) {
$(".imageItem").attr("aria-grabbed", "false");
$(".imageItem").removeClass('flip');
}
@ -11602,6 +11608,17 @@ $(document).ready(function () {
var dossier_id = $("#form_folder_property").attr("data-id");
var libelle = $(".form_folder_libelle").val();
var description = $(".form_folder_description").val();
if (libelle == "") {
$.fancyMessage({
title: "Propriétés d'un dossier",
message: "Vous devez indiquer un nom de dossier.",
type: "error"
});
return false;
}
$(".form_folder_save").addClass('loading');
$.ajax({
url: '/ajax/save-folder-property',
method: 'POST',
@ -11612,10 +11629,12 @@ $(document).ready(function () {
description: description
},
success: function success(result) {
$(".form_folder_save").removeClass('loading');
$(".folder_container .dd3-item[data-id='" + dossier_id + "'] > .dd3-content span").html(libelle);
$.fancybox.close();
},
error: function error(jqXHR, textStatus, errorThrown) {
$(".form_folder_save").removeClass('loading');
$.fancybox.close();
$.fancyMessage({
title: "Attention",
@ -11834,7 +11853,7 @@ $(document).ready(function () {
}
}); // ---- Gestion de l'infinite scroll
$(".main_content .media_container").on("scroll resize", function () {
$(".media_manager .media_container").on("scroll resize", function () {
if ($(window).data('ajaxready') == false) return;
if ($(window).data('noMedia') == true) return;
@ -11980,7 +11999,7 @@ $(document).ready(function () {
var mediaId = $(window).data('current_edit_media');
var $media = $(".media_container .imageItem[data-id='" + mediaId + "'] .media");
var mediaBg = $media.css('background-image', 'url(' + result.folder + result.uid + "." + result.extension + '?t=' + new Date().getTime() + ')');
var mediaBg = $media.css('background-image', 'url(' + result.folder + result.uid + "_thumb." + result.extension + '?t=' + new Date().getTime() + ')');
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
@ -12402,6 +12421,13 @@ $(document).ready(function () {
}
}).trigger("click");
}
}); // ---- Bouton pour remplacer un média par un autre
$('.form_media_replace').on('click', function (event) {
event.preventDefault();
$('.upload_container').show("fast");
maxFiles = 1;
replaceMediaId = $(window).data('current_edit_media');
}); // ---- Bouton pour lancer le téléchargement d'un ou plusieurs médias
$('#form_download .btn_form_download').on('click', function (event) {
@ -12481,7 +12507,8 @@ $(document).ready(function () {
tags: $('#tag-editor').tagEditor('getTags')[0].tags,
sites: $(".tab_edit .selector_sites .selector_dataValues").val(),
marques: $(".tab_edit .selector_marques .selector_dataValues").val(),
articles: $(".tab_edit #articles").val()
articles: $(".tab_edit #articles").val(),
published_at: $(".tab_edit #published_at").val()
};
$.ajax({
url: '/ajax/save-media',
@ -12525,13 +12552,19 @@ $(document).ready(function () {
$('#close_upload_form').on('click', function (event) {
event.preventDefault();
$('.upload_container').hide("fast");
}); // ---- Ouvrir la popup d'upload
}); // ---- Ouvrir la popup de mode d'ajout
$('.action_add_media').on('click', function (event) {
event.preventDefault();
if ($(window).data('currentFolder') >= 0) {
$('.upload_container').show("fast");
$("#form_select_add_media").fancybox({
type: 'inline',
opts: {
animationDuration: 350,
animationEffect: 'material'
}
}).trigger("click");
} else {
$.fancyMessage({
title: "Ajout de média",
@ -12539,6 +12572,49 @@ $(document).ready(function () {
type: "error"
});
}
}); // ---- Ouvrir la popup d'upload
$('.add_media_by_upload').on('click', function (event) {
event.preventDefault();
$.fancybox.close();
$('.upload_container').show("fast");
maxFiles = 100;
replaceMediaId = 0;
}); // ---- Ajoute un élément sans média
$('.add_media_without_file').on('click', function (event) {
event.preventDefault();
$.fancybox.close();
$.ajax({
url: '/ajax/add-media',
method: 'POST',
dataType: 'json',
data: {
dossier_id: $(window).data('currentFolder'),
sujet_id: $("#sujet_selector").val()
},
success: function success(result) {
//---- Chargement des médias
var currentFolder = $(window).data('currentFolder');
if (currentFolder == 0 || currentFolder == "") {
var count = $(".folder_container .root_folder .count");
} else {
var count = $(".folder_container .dd3-item[data-id='" + currentFolder + "'] > .dd3-content .count");
}
count.html(parseInt(count.html()) + 1);
$(".reinit_search_btn").trigger("click");
},
error: function error(jqXHR, textStatus, errorThrown) {
$(".folder_container .loader").hide();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de la création du média. Merci d'actualiser la page.",
type: "error"
});
}
});
}); // ---- Initialisation du module d'upload
if ($('#fileupload').length) {
@ -12561,6 +12637,10 @@ $(document).ready(function () {
return false;
}
if (counter == 0) {
return false;
}
$("#submit").html('<i class="fal fa-circle-notch fa-spin"></i> Transférer');
$("#submit").css("pointer-events", "none");
$("#upload_errors").html("");
@ -12578,6 +12658,7 @@ $(document).ready(function () {
var currentfiles = [];
var maxFiles = 100;
var counter = 0;
var replaceMediaId = 0;
$('#fileupload').fileupload({
url: "/ajax/upload-media",
dataType: 'json',
@ -12593,7 +12674,7 @@ $(document).ready(function () {
} else {
$.fancyMessage({
title: "Attention",
message: "Vous ne pouvez pas ajouter plus de " + maxFiles + " fichiers",
message: "Vous ne pouvez pas ajouter plus de " + maxFiles + " fichier(s)",
type: "info"
});
return false;
@ -12641,7 +12722,8 @@ $(document).ready(function () {
data.formData = {
uid: create_UUID(),
sujet_id: $("#sujet_selector").val(),
dossier_id: $(window).data('currentFolder')
dossier_id: $(window).data('currentFolder'),
replaceMediaId: replaceMediaId
};
data.submit();
});
@ -12683,6 +12765,11 @@ $(document).ready(function () {
$(".reinit_search_btn").trigger("click");
$("#submit").html('Transférer');
$("#submit").css("pointer-events", "auto");
if (replaceMediaId != 0) {
// Fermeture de la popin d'édition de média
$(".form_media_close, .btn_tab_edit_cancel").trigger('click');
}
},
fail: function fail(e, data) {
$.each(data.files, function (index, file) {
@ -13182,6 +13269,9 @@ window.create_UUID = function () {
/***/ (function(module, exports) {
$(document).ready(function () {
/***************************
Widget panier
*****************************/
if ($(".panier_side_menu").length) {
// ---- collapse/expand panier side menu
$("#menu_panier").on('click', function (event) {
@ -13241,12 +13331,151 @@ $(document).ready(function () {
});
}
});
}); // ---- Ajout un nouveau panier
}); // ---- Aller au panier
$('.panier_side_menu .goto_panier').on('click', function (event) {
event.preventDefault();
$(".panier_side_menu .panier_menu").hide();
window.location.href = $(this).attr("data-url") + "?p=" + $(window).data('currentBasket');
}); // ---- Supprimer le panier
$('.panier_side_menu .remove_panier').on('click', function (event) {
event.preventDefault();
if ($(window).data('currentBasket') == 0) {
$.fancyMessage({
title: "Suppression de panier",
message: "Veuillez sélectionner un panier à supprimer.",
type: "info"
});
}
$.fancyConfirm({
title: "Suppression de panier",
message: "Êtes-vous sûr de vouloir supprimer ce panier ?",
okButton: 'Supprimer',
noButton: 'Annuler',
callback: function callback(value) {
if (value) {
// sauvegarde de l'image en base
$.ajax({
url: '/ajax/remove-basket',
method: 'POST',
dataType: 'json',
data: {
basket_id: $(window).data('currentBasket')
},
success: function success(result) {
$("#panier_selector option[value='" + $(window).data('currentBasket') + "']").remove();
$("#panier_selector").val($("#panier_selector option:first").val());
$("#panier_selector").trigger("change");
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({
title: "Suppression de panier",
message: "Erreur lors de la suppression, merci d'actualiser la page.",
type: "error"
});
}
});
}
}
});
}); // ---- Propriétés d'un panier
$('.panier_side_menu .info_panier').on('click', function (event) {
event.preventDefault();
if ($(window).data('currentBasket') == 0) {
$.fancyMessage({
title: "Propriétés du panier",
message: "Veuillez sélectionner un panier.",
type: "info"
});
}
$.ajax({
url: '/ajax/get-basket',
method: 'POST',
dataType: 'json',
data: {
basket_id: $(window).data('currentBasket')
},
success: function success(result) {
if (result) {
var basket = result.basket;
$.fancybox.open({
src: '#form_basket_property',
type: 'inline',
opts: {
animationDuration: 350,
animationEffect: 'material',
beforeShow: function beforeShow(instance, current) {
var date = new Date(basket.created_at);
$(".form_basket_datecreate").html(date.toLocaleDateString('fr-FR', {
'hour': '2-digit',
'minute': '2-digit'
}));
$(".form_basket_libelle").val(basket.libelle);
$(".form_basket_description").val(basket.description);
$(".form_basket_statut").val(basket.statut);
$(".form_basket_link").val(result.link);
}
}
});
}
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de la suppression du média, merci d'actualiser la page.",
type: "error"
});
}
});
}); // ---- enregistre les propriétés d'un panier
$("html").on('click', '.form_basket_save', function (event) {
event.preventDefault();
var libelle = $(".form_basket_libelle").val();
if (libelle == "") {
$.fancyMessage({
title: "Propriétés d'un dossier",
message: "Vous devez indiquer un nom de panier.",
type: "error"
});
return false;
}
$(".form_basket_save").addClass('loading');
$.ajax({
url: '/ajax/save-basket-property',
method: 'POST',
dataType: 'json',
data: {
basket_id: $(window).data('currentBasket'),
libelle: libelle,
description: $(".form_basket_description").val(),
statut: $(".form_basket_statut").val()
},
success: function success(result) {
$(".form_basket_save").removeClass('loading');
$("#panier_selector option[value='" + $(window).data('currentBasket') + "']").text(result.libelle);
$.fancybox.close();
},
error: function error(jqXHR, textStatus, errorThrown) {
$(".form_basket_save").removeClass('loading');
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de l'édition du panier, merci d'actualiser la page.",
type: "error"
});
}
});
}); // ---- Supprimer un média du panier
$('.panier_content').on('click', ".imageItem .media_remove_basket", function (event) {
@ -13340,6 +13569,69 @@ $(document).ready(function () {
}
});
}
/****************************************
Page publique des paniers
*****************************************/
if ($(".public_basket").length) {
// ---- Aperçu des médias du panier
$(".public_basket ").on("dblclick", '.imageItem', function (event) {
var imgPreview = $(this).attr('data-preview') + '?t=' + new Date().getTime();
if ($(this).attr('data-typemedia') == 1 || $(this).attr('data-typemedia') == 2) {
// image
$.fancybox.open('<img style="width: 640px; height:auto;" src="' + imgPreview + '" alt="" />');
} else if ($(this).attr('data-typemedia') == 3) {
// vidéo
$.fancybox.open('<video src="' + $(this).attr('data-src') + '" controls></video>');
} else if ($(this).attr('data-typemedia') == 4) {
// Audio
$.fancybox.open('<audio controls src="' + $(this).attr('data-src') + '"></audio>');
}
}); // ---- Propriétés d'un panier
$('.public_basket .btn_basket_Info').on('click', function (event) {
event.preventDefault();
$.fancybox.open({
src: '#form_basket_property',
type: 'inline',
opts: {
animationDuration: 350,
animationEffect: 'material'
}
});
}); // ---- Popup pour télécharger des médias en masse
$('.public_basket .btn_basket_download').on('click', function (event) {
event.preventDefault();
var medias = [];
$('.media_container .imageItem').each(function (index) {
if ($(this).attr("aria-grabbed") == "true") {
medias.push($(this).attr("data-id"));
}
});
if (medias.length == 0) {
$.fancyMessage({
title: "Télécharger des médias",
message: "Veuillez sélectionner au moins un média.",
type: "info"
});
} else {
$("#form_download").fancybox({
type: 'inline',
opts: {
animationDuration: 350,
animationEffect: 'material'
},
beforeShow: function beforeShow() {
$("#form_download .medias").val(medias.join());
}
}).trigger("click");
}
});
}
}); // ---- Ajout de médias au panier
window.addMediasBasket = function (medias) {

8
resources/js/app.js vendored
View file

@ -113,21 +113,26 @@ $(".userbar").on('click',function(event) {
});
$(document).mouseup(function(e) {
// ---- Masque le menu utilisateur
var container = $(".userbar");
if (!container.is(e.target) && container.has(e.target).length === 0) {
$(".submenu").hide();
}
// ---- Masque le menu contextuel des dossiers
var menuContextuel = $(".folder_container .folder_menu");
if (!menuContextuel.is(e.target) && menuContextuel.has(e.target).length === 0) {
menuContextuel.hide();
}
// ---- Masque le menu des paniers
var cartMenu = $(".panier_side_menu .panier_menu");
if (!cartMenu.is(e.target) && cartMenu.has(e.target).length === 0 && $("#menu_panier").has(e.target).length === 0) {
cartMenu.hide();
}
// ---- Masque les filtres de la bar de recherche
var filter_list = $(".filter_selector");
if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) {
$(".filter_selector .list").hide();
@ -135,7 +140,8 @@ $(document).mouseup(function(e) {
// ---- déselectionne les éléments si on clique en dehors
if ($(e.target).hasClass('media_container') || $(e.target).hasClass('wrapper')) {
var parentOffset = $('.media_container').parent().offset();
if ( ($(e.target).hasClass('media_container') && event.pageX- parentOffset.left < $('.media_container')[0]['clientWidth'] ) || $(e.target).hasClass('wrapper')) {
$(".imageItem").attr("aria-grabbed", "false");
$(".imageItem").removeClass('flip');
}

79
resources/js/media.js vendored
View file

@ -294,11 +294,16 @@ $(document).ready(function() {
// ---- enregistre les propriétés d'un dossier
$("html").on('click', '.form_folder_save', function(event) {
event.preventDefault();
var dossier_id = $("#form_folder_property").attr("data-id");
var libelle = $(".form_folder_libelle").val();
var description = $(".form_folder_description").val();
if(libelle == ""){
$.fancyMessage({title : "Propriétés d'un dossier", message : "Vous devez indiquer un nom de dossier.", type : "error"});
return false;
}
$(".form_folder_save").addClass('loading');
$.ajax({
url: '/ajax/save-folder-property',
method: 'POST',
@ -309,10 +314,12 @@ $(document).ready(function() {
description: description,
},
success: function(result){
$(".form_folder_save").removeClass('loading');
$(".folder_container .dd3-item[data-id='"+dossier_id+"'] > .dd3-content span").html(libelle);
$.fancybox.close();
},
error: function(jqXHR, textStatus, errorThrown) {
$(".form_folder_save").removeClass('loading');
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'édition du dossier, merci d'actualiser la page.", type : "error"});
}
@ -515,7 +522,7 @@ $(document).ready(function() {
});
// ---- Gestion de l'infinite scroll
$(".main_content .media_container").on("scroll resize", function() {
$(".media_manager .media_container").on("scroll resize", function() {
if ($(window).data('ajaxready') == false) return;
if ($(window).data('noMedia') == true) return;
@ -661,7 +668,7 @@ $(document).ready(function() {
// MAJ du visuel dans la Liste
var mediaId = $(window).data('current_edit_media')
var $media = $(".media_container .imageItem[data-id='"+mediaId+"'] .media");
var mediaBg = $media.css('background-image', 'url('+result.folder+result.uid+"."+result.extension+'?t='+ new Date().getTime()+')');
var mediaBg = $media.css('background-image', 'url('+result.folder+result.uid+"_thumb."+result.extension+'?t='+ new Date().getTime()+')');
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
@ -1033,6 +1040,14 @@ $(document).ready(function() {
}
});
// ---- Bouton pour remplacer un média par un autre
$('.form_media_replace').on('click',function(event){
event.preventDefault();
$('.upload_container').show("fast");
maxFiles = 1;
replaceMediaId =$(window).data('current_edit_media');
});
// ---- Bouton pour lancer le téléchargement d'un ou plusieurs médias
$('#form_download .btn_form_download').on('click',function(event){
event.preventDefault();
@ -1111,6 +1126,7 @@ $(document).ready(function() {
sites : $(".tab_edit .selector_sites .selector_dataValues").val(),
marques : $(".tab_edit .selector_marques .selector_dataValues").val(),
articles : $(".tab_edit #articles").val(),
published_at : $(".tab_edit #published_at").val(),
}
$.ajax({
@ -1151,16 +1167,57 @@ $(document).ready(function() {
$('.upload_container').hide("fast");
});
// ---- Ouvrir la popup d'upload
// ---- Ouvrir la popup de mode d'ajout
$('.action_add_media').on('click',function(event){
event.preventDefault();
if($(window).data('currentFolder') >=0){
$('.upload_container').show("fast");
$("#form_select_add_media").fancybox({type : 'inline', opts : { animationDuration : 350, animationEffect : 'material'}}).trigger("click");
}else{
$.fancyMessage({title : "Ajout de média", message : "Pour ajouter des médias, veuillez d'abord sélectionner un dossier de destination.", type : "error"});
}
});
// ---- Ouvrir la popup d'upload
$('.add_media_by_upload').on('click',function(event){
event.preventDefault();
$.fancybox.close();
$('.upload_container').show("fast");
maxFiles = 100;
replaceMediaId = 0;
});
// ---- Ajoute un élément sans média
$('.add_media_without_file').on('click',function(event){
event.preventDefault();
$.fancybox.close();
$.ajax({
url: '/ajax/add-media',
method: 'POST',
dataType : 'json',
data: {
dossier_id : $(window).data('currentFolder'),
sujet_id: $("#sujet_selector").val(),
},
success: function(result){
//---- Chargement des médias
var currentFolder = $(window).data('currentFolder');
if(currentFolder == 0 || currentFolder == ""){
var count = $(".folder_container .root_folder .count");
}else{
var count = $(".folder_container .dd3-item[data-id='"+currentFolder+"'] > .dd3-content .count");
}
count.html(parseInt(count.html())+1);
$(".reinit_search_btn").trigger("click");
},
error: function(jqXHR, textStatus, errorThrown) {
$(".folder_container .loader").hide();
$.fancyMessage({title : "Attention", message : "Erreur lors de la création du média. Merci d'actualiser la page.", type : "error"});
}
});
});
// ---- Initialisation du module d'upload
if($('#fileupload').length){
$.ajaxSetup({
@ -1182,6 +1239,9 @@ $(document).ready(function() {
$.fancyMessage({title : "Ajout de média", message : "Pour ajouter des médias, veuillez d'abord sélectionner un dossier de destination.", type : "error"});
return false;
}
if(counter ==0){
return false;
}
$("#submit").html('<i class="fal fa-circle-notch fa-spin"></i> Transférer');
$("#submit").css("pointer-events", "none");
$("#upload_errors").html("");
@ -1200,6 +1260,7 @@ $(document).ready(function() {
var currentfiles = [];
var maxFiles = 100;
var counter = 0;
var replaceMediaId = 0;
$('#fileupload').fileupload({
url: "/ajax/upload-media",
dataType: 'json',
@ -1214,7 +1275,7 @@ $(document).ready(function() {
if(counter < maxFiles){
counter++;
}else{
$.fancyMessage({title : "Attention", message : "Vous ne pouvez pas ajouter plus de "+maxFiles+" fichiers", type : "info"});
$.fancyMessage({title : "Attention", message : "Vous ne pouvez pas ajouter plus de "+maxFiles+" fichier(s)", type : "info"});
return false;
}
@ -1256,6 +1317,7 @@ $(document).ready(function() {
uid: create_UUID(),
sujet_id: $("#sujet_selector").val(),
dossier_id: $(window).data('currentFolder'),
replaceMediaId: replaceMediaId,
};
data.submit();
})
@ -1296,6 +1358,11 @@ $(document).ready(function() {
$(".reinit_search_btn").trigger("click");
$("#submit").html('Transférer');
$("#submit").css("pointer-events", "auto");
if(replaceMediaId != 0){
// Fermeture de la popin d'édition de média
$(".form_media_close, .btn_tab_edit_cancel").trigger('click');
}
},
fail: function (e, data) {
$.each(data.files, function (index, file) {

177
resources/js/panier.js vendored
View file

@ -1,5 +1,8 @@
$(document).ready(function() {
/***************************
Widget panier
*****************************/
if ( $( ".panier_side_menu" ).length ) {
// ---- collapse/expand panier side menu
@ -63,13 +66,126 @@ $(document).ready(function() {
});
// ---- Ajout un nouveau panier
// ---- Aller au panier
$('.panier_side_menu .goto_panier').on('click',function(event){
event.preventDefault();
$(".panier_side_menu .panier_menu").hide();
window.location.href = $(this).attr("data-url")+"?p="+$(window).data('currentBasket');
});
// ---- Supprimer le panier
$('.panier_side_menu .remove_panier').on('click',function(event){
event.preventDefault();
if($(window).data('currentBasket') == 0){
$.fancyMessage({title : "Suppression de panier", message : "Veuillez sélectionner un panier à supprimer.", type : "info"});
}
$.fancyConfirm({
title : "Suppression de panier",
message : "Êtes-vous sûr de vouloir supprimer ce panier ?",
okButton : 'Supprimer',
noButton : 'Annuler',
callback : function (value) {
if (value) {
// sauvegarde de l'image en base
$.ajax({
url: '/ajax/remove-basket',
method: 'POST',
dataType : 'json',
data: {
basket_id: $(window).data('currentBasket'),
},
success: function(result){
$("#panier_selector option[value='"+$(window).data('currentBasket')+"']").remove();
$("#panier_selector").val($("#panier_selector option:first").val());
$("#panier_selector").trigger("change");
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Suppression de panier", message : "Erreur lors de la suppression, merci d'actualiser la page.", type : "error"});
}
});
}
}
});
});
// ---- Propriétés d'un panier
$('.panier_side_menu .info_panier').on('click',function(event){
event.preventDefault();
if($(window).data('currentBasket') == 0){
$.fancyMessage({title : "Propriétés du panier", message : "Veuillez sélectionner un panier.", type : "info"});
}
$.ajax({
url: '/ajax/get-basket',
method: 'POST',
dataType : 'json',
data: {
basket_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
var basket = result.basket;
$.fancybox.open({
src : '#form_basket_property',
type : 'inline',
opts : {
animationDuration : 350,
animationEffect : 'material',
beforeShow : function( instance, current ) {
var date = new Date(basket.created_at);
$(".form_basket_datecreate").html(date.toLocaleDateString('fr-FR', {'hour': '2-digit', 'minute': '2-digit'} ));
$(".form_basket_libelle").val(basket.libelle);
$(".form_basket_description").val(basket.description);
$(".form_basket_statut").val(basket.statut);
$(".form_basket_link").val(result.link);
}
}
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du média, merci d'actualiser la page.", type : "error"});
}
});
});
// ---- enregistre les propriétés d'un panier
$("html").on('click', '.form_basket_save', function(event) {
event.preventDefault();
var libelle = $(".form_basket_libelle").val();
if(libelle == ""){
$.fancyMessage({title : "Propriétés d'un dossier", message : "Vous devez indiquer un nom de panier.", type : "error"});
return false;
}
$(".form_basket_save").addClass('loading');
$.ajax({
url: '/ajax/save-basket-property',
method: 'POST',
dataType : 'json',
data: {
basket_id: $(window).data('currentBasket'),
libelle: libelle,
description: $(".form_basket_description").val(),
statut: $(".form_basket_statut").val(),
},
success: function(result){
$(".form_basket_save").removeClass('loading');
$("#panier_selector option[value='"+$(window).data('currentBasket')+"']").text(result.libelle);
$.fancybox.close();
},
error: function(jqXHR, textStatus, errorThrown) {
$(".form_basket_save").removeClass('loading');
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'édition du panier, merci d'actualiser la page.", type : "error"});
}
});
});
// ---- Supprimer un média du panier
$('.panier_content').on('click', ".imageItem .media_remove_basket",function(event){
event.preventDefault();
@ -160,6 +276,65 @@ $(document).ready(function() {
}
/****************************************
Page publique des paniers
*****************************************/
if ( $( ".public_basket" ).length ) {
// ---- Aperçu des médias du panier
$(".public_basket ").on("dblclick", '.imageItem' , function(event) {
var imgPreview = $(this).attr('data-preview')+'?t='+ new Date().getTime();
if($(this).attr('data-typemedia') == 1|| $(this).attr('data-typemedia') == 2){ // image
$.fancybox.open('<img style="width: 640px; height:auto;" src="'+imgPreview+'" alt="" />');
}else if ($(this).attr('data-typemedia') == 3) { // vidéo
$.fancybox.open('<video src="'+$(this).attr('data-src')+'" controls></video>');
}else if ($(this).attr('data-typemedia') == 4) { // Audio
$.fancybox.open('<audio controls src="'+$(this).attr('data-src')+'"></audio>');
}
});
// ---- Propriétés d'un panier
$('.public_basket .btn_basket_Info').on('click',function(event){
event.preventDefault();
$.fancybox.open({
src : '#form_basket_property',
type : 'inline',
opts : {
animationDuration : 350,
animationEffect : 'material',
}
});
});
// ---- Popup pour télécharger des médias en masse
$('.public_basket .btn_basket_download').on('click',function(event){
event.preventDefault();
var medias = [];
$('.media_container .imageItem').each(function (index) {
if( $(this ).attr("aria-grabbed") == "true" ){
medias.push($(this ).attr("data-id"));
}
});
if(medias.length == 0){
$.fancyMessage({title : "Télécharger des médias", message : "Veuillez sélectionner au moins un média.", type : "info"});
}else{
$("#form_download").fancybox({
type : 'inline',
opts : {
animationDuration : 350,
animationEffect : 'material',
},
beforeShow : function() {
$("#form_download .medias").val(medias.join());
}
}).trigger("click");
}
});
}
});

View file

@ -15,4 +15,5 @@
'partials/common.scss',
'partials/form.scss',
'partials/media.scss',
'partials/panier.scss',
'partials/user.scss';

View file

@ -268,6 +268,49 @@
}
}
#form_basket_property{
padding: 30px;
min-width: 550px;
h3{
font-size: 14px;
margin-bottom: 12px;
font-weight: bold;
color: $white;
}
hr{
color: #24272e;
border-bottom: 1px solid #2c2f36;
margin-bottom: 20px;
}
p.button_bar{
text-align: right;
margin: 0;
}
select, input, textarea{
width: 100%;
}
textarea{
min-height: 200px;
}
.btn{
margin-right: 10px;
}
.form_basket_save {
.fa-spinner-third{
display: none;
}
&.loading{
.fa-spinner-third{
display: inline-block;
}
.fa-share{
display: none;
}
}
}
}
#form_etiquette{
padding: 30px;
min-width: 340px;
@ -333,6 +376,46 @@
}
}
#form_select_add_media{
padding: 30px;
min-width: 340px;
h3{
font-size: 14px;
margin-bottom: 12px;
font-weight: bold;
color: $white;
}
hr{
color: #24272e;
border-bottom: 1px solid #2c2f36;
margin-bottom: 20px;
}
.content{
margin: 10px 0;
a{
display: block;
color: $white;
border-radius: 5px;
border: 1px solid $white;
padding: 15px 15px;
margin-bottom: 5px;
font-size: 15px;
transition: background-color 200ms ease-in;
i{
margin-right: 10px;
font-size: 20px;
}
&:hover{
background-color: $blue;
}
}
}
}
/******************************************
TEMPLATE
******************************************/

View file

@ -7,7 +7,7 @@ p{
margin-bottom: 10px;
}
input[type="text"], input[type="number"], input[type="password"], , input[type="email"], input[type="url"], select{
input[type="text"], input[type="number"], input[type="password"], input[type="date"] , input[type="email"], input[type="url"], select{
border-radius: 3px;
padding: 5px 10px;
border: none;

View file

@ -44,7 +44,7 @@
padding: 9px;
min-width: 163px;
transform: translateX(-50%);
z-index: 1;
z-index: 2;
&.list_etiquette li label{
color: $white;
@ -617,7 +617,7 @@
position: absolute;
display: none;
background-color: $grey3;
z-index: 1;
z-index: 2;
right: 12px;
top: 48px;
@ -740,7 +740,7 @@
height: 100%;
background-color: $grey3;
position: absolute;
z-index: 99990;
z-index: 99;
left: 0;
top: 0;
@ -793,16 +793,18 @@
z-index: 1;
}
}
.form_media_download{
.form_media_download, .form_media_replace{
float: right;
font-size: 18px;
font-size: 26px;
margin-right: 5px;
position: relative;
padding: 12px;
padding: 8px;
border: none;
color: $white;
&:hover{
background-color: transparent;
color: $white;
color: $grey2;
}
}
}

262
resources/sass/partials/panier.scss vendored Normal file
View file

@ -0,0 +1,262 @@
/*********************
Widget Panier
**********************/
.panier_manager{
.side_menu{
header{
padding: 13px;
h1{
font-size: 18px;
margin: 20px 0;
}
p{
color: white;
font-size: 14px;
}
}
.form_search_basket{
}
}
.main_content{
.panier_list{
display: flex;
flex-wrap: wrap;
.panier_item{
display: inline-block;
border: 1px solid grey;
width: 202px;
margin: 8px 10px;
background-color: $grey3;
transition: 0.3s ease-in-out;
position: relative;
padding-bottom: 25px;
height: 200px;
background-size: cover;
background-position: center;
cursor: pointer;
&::before{
content: '';
background-color: rgba(255,255,255,0.6);
position: absolute;
width: 100%;
height: 100%;
left: 3px;
top: 3px;
z-index: -1;
}
&::after{
content: '';
background-color: rgba(255,255,255,0.3);
position: absolute;
z-index: 1;
width: 100%;
height: 100%;
}
.title{
position: absolute;
top: 0;
z-index: 2;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
padding: 5px;
i{
color: $yellow;
margin-right: 10px;
}
p{
margin: 0;
color: black;
}
}
.bar{
position: absolute;
bottom: 0;
padding: 4px;
font-size: 11px;
z-index: 2;
text-align: right;
width: 100%;
padding: 3px 8px;
.action_delete_basket{
color: black;
margin-right: 6px;
font-size: 16px;
}
.count{
background-color: $lightorange;
color: $white;
font-size: 14px;
font-weight: bold;
padding: 5px 6px;
border-radius: 10px;
display: inline-block;
}
}
}
}
}
}
/********************************
Page publique d'un panier
*********************************/
.public_basket{
height: 100%;
overflow: hidden;
.main_content{
height: 100%;
padding: 0;
position: relative;
overflow: hidden;
header{
height: 48px;
background-color: $grey;
display: flex;
align-items: center;
justify-content: space-between;
.basket_title{
margin-left: 10px;
font-size: 17px;
}
.basket_Info{
margin-right: 10px;
font-size: 27px;
a{
margin-right: 5px;
}
}
}
.media_container{
overflow-y: auto;
overflow-x: hidden;
scrollbar-color: #272626 #1a1a1a;
position: relative;
height: calc(100% - 48px);
.wrapper{
display: flex;
flex-wrap: wrap;
.imageItem{
display: inline-block;
border: 1px solid grey;
width: 202px;
margin: 8px 10px;
background-color: $grey3;
transition: 0.3s ease-in-out;
position: relative;
padding-bottom: 25px;
cursor: pointer;
.media{
height: 200px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
position: relative;
&::before {
transform: translate(-50%,-50%);
display: block;
position: absolute;
left: 50%;
top: 50%;
text-align: center;
text-indent: 0;
color: $white;
font-size: 59px;
z-index: 1;
}
&.video{
&::before {
content: "\f167";
font-family: "Font Awesome 5 Brands";
}
}
&.son{
&::before {
content: "\f58f";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
}
}
&.doc{
&::before {
content: "\f15c";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
}
}
}
.libelle{
padding: 4px;
text-align: center;
color: $white;
margin: 0;
word-wrap: break-word;
}
.info{
position: absolute;
bottom: 0;
padding: 4px;
font-size: 11px;
i{
margin-right: 7px;
}
}
&[aria-grabbed="true"] {
&::before {
content: "\f058";
font-family: "Font Awesome 5 Pro";
font-weight: 900;
display: block;
position: absolute;
left: 5px;
top: 5px;
text-align: center;
text-indent: 0;
color: $lightblue;
font-size: 25px;
z-index: 2;
}
&::after {
content: "";
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.5);
position: absolute;
left: 0px;
top: 0px;
z-index: 1;
}
}
&:hover{
background-color: $grey;
}
}
}
}
}
}

View file

@ -37,6 +37,7 @@
@endforeach
</div>
</div>
<!--
<div class="item">
<header>
Mes paniers favoris
@ -47,6 +48,7 @@
@endforeach
</div>
</div>
-->
</div>
</main>
@endsection

View file

@ -5,7 +5,7 @@
<i class="fas fa-home"></i>
</a>
<a href="{{ route('media_manager') }}" class="{{(Route::currentRouteName() == 'media_manager') ? 'active' : '' }}">
<i class="fas fa-images"></i> Gestion des média
<i class="fas fa-images"></i> Gestion des médias
</a>
<!--
<a href="{{ route('paniers') }}" class="{{(Route::currentRouteName() == 'paniers') ? 'active' : '' }}">

View file

@ -10,7 +10,8 @@
<a href="#" class="tabbtn form_media_history" data-tab="4">Historique</a>
<a href="#" class="form_media_close"><i class="fal fa-times"></i></a>
<a href="#" class="form_media_download" title="Télécharger ce média"><i class="fas fa-arrow-circle-down"></i></a>
<a href="#" class="form_media_download" title="Téléchargez ce média"><i class="fas fa-arrow-circle-down"></i></a>
<a href="#" class="form_media_replace" title="Chargez un autre média"><i class="fas fa-file-upload"></i></a>
</header>
<div class="main_content">
<div class="tab tab_preview active"></div>
@ -82,7 +83,7 @@
</div>
<div class="row">
<label for="published_at">Date de publication</label>
<input type="text" id="published_at" name="published_at" readonly >
<input type="date" id="published_at" name="published_at" >
</div>
<div class="row">
<label for="statut">Statut</label>

View file

@ -132,8 +132,13 @@
<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>
<li class="menu-option info_panier" >Propiétés du panier</li>
<li class="menu-option remove_panier" >Supprimer ce panier</li>
</ul>
</div>
</header>
@ -143,7 +148,7 @@
</div>
</main>
<div id="form_folder_property" style="display: none;" data-id="" >
<div id="form_folder_property" style="display: none;">
<h3>Propriétés du dossier</h3>
<hr/>
<p><input required type="text" class="form_folder_libelle" value="" maxlength="100" minlength="4" placeholder="Libellé du dossier" /></p>
@ -155,6 +160,27 @@
</p>
</div>
<div id="form_basket_property" style="display: none;" data-id="" >
<h3>Propriétés du panier</h3>
<hr/>
<p><input required type="text" class="form_basket_libelle" value="" maxlength="100" minlength="4" placeholder="Libellé du panier" /></p>
<p><textarea class="form_basket_description" placeholder="Description du panier"></textarea></p>
<p>Lien direct vers le panier : </p>
<p><input required type="text" class="form_basket_link" value="" readonly /></p>
<p>Ce lien est public. Toute personne disposant de ce lien pourra accéder au panier.</p>
<p>Statut :</p>
<p><select class="form_basket_statut" name="">
<option value="0">Désactivé</option>
<option value="1">Activé</option>
</select>
</p>
<p>Créé le : <span class="form_basket_datecreate"></span></p>
<hr/>
<p class="button_bar">
<a href="#" class="btn form_basket_save btn-square"><i class="fal fa-spinner-third fa-spin"></i><i class="fas fa-share"></i> Enregistrer</a><a href="#" class="btn close_popup btn-black btn-square">Fermer</a>
</p>
</div>
<div id="form_etiquette" style="display: none;" data-id="" >
<h3>Appliquez une étiquette</h3>
<hr/>
@ -165,6 +191,19 @@
</ul>
</div>
<div id="form_select_add_media" style="display: none;" >
<h3>Ajouter des médias</h3>
<hr/>
<div class="content">
<a class="add_media_by_upload" href="#"><i class="fas fa-file-upload"></i> Téléversez des éléments</a>
<a class="add_media_without_file" href="#"><i class="fas fa-file"></i> Ajouter un élément sans média</a>
</div>
<hr/>
<p class="button_bar">
<a href="#" class="btn close_popup btn-black btn-square">Fermer</a>
</p>
</div>
<div id="form_download" style="display: none;" data-id="" >
<h3>Téléchargez</h3>
<hr/>

View file

@ -1,13 +1,13 @@
@extends('layouts.app')
@include('layouts.header')
@section('content')
<main class="paniers template_2col">
<main class="panier_manager 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>
<hr>
<form class="form_search_basket" action="#" method="post">
<div class="row">
<label for="recherche">Recherche</label>
@ -41,72 +41,18 @@
<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>
@foreach ($paniers as $panier)
<div class="panier_item" data-id="{{$panier->id}}" style="background-image:url({{$panier->mediacover}})">
<div class="title">
<i class="fas fa-star"></i>
<p>{{$panier->libelle}}</p>
</div>
<div class="bar">
<a href="#" class="action_delete_basket" alt="Supprimez ce panier"><i class="fas fa-trash-alt"></i></a>
<span class="count">{{$panier->mediacount}}</span>
</div>
</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>
@endforeach
</div>
</div>
</main>

View file

@ -0,0 +1,97 @@
@extends('layouts.app')
@section('content')
<main class="public_basket ">
<div class="main_content">
<header>
<div class="basket_title">
{{ $panier->libelle }}
</div>
<div class="basket_Info">
<a href="#" class="btn_basket_download" title="Téléchargez des médias"><i class="fas fa-arrow-circle-down"></i></a>
<a class="btn_basket_Info"title="Informations sur ce panier" href="#"><i class="fas fa-info-circle"></i></a>
</div>
</header>
<div class="media_container">
<div class="wrapper">
@foreach ($panier->medias as $media )
@php
$ico = "";
$detail = "";
$statut = "";
$itemClass = "";
$thumb = "";
$preview = "";
switch ($media->typemedia_id) {
case 1:
$ico = '<i class="fas fa-file-image"></i>';
$detail = " - ".$media->largeur."x".$media->hauteur."px";
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:
$ico = '<i class="fas fa-file-image"></i>';
$thumb = "/".$media->folder+$media->uid.".".$media->extension;
$preview = "/".$media->folder+$media->uid.".".$media->extension;
break;
case 3:
$ico = '<i class="fas fa-file-video"></i>';
$detail = " - durée ".$media->duree;
$itemClass = "video";
break;
case 4:
$ico = '<i class="fas fa-file-audio"></i>';
$detail = " - durée ".$media->duree;
$itemClass = "son";
break;
default:
}
@endphp
<div class="imageItem" data-id="{{ $media->id }}" 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">
<div class="media {{ $itemClass }}" style="background-image:url({{ $thumb }})"></div>
<p class="libelle ">{{ $media->libelle }}</p>
<div class="info">{!! $ico !!}{{ $media->extension." - ".$media->taille.$detail." - v".$media->version }}</div>
</div>
@endforeach
</div>
</div>
</div>
</main>
<div id="form_download" style="display: none;" data-id="" >
<h3>Téléchargez</h3>
<hr/>
<p>Sélectionnez l'un des formats ci-dessous pour télécharger votre sélection.</p>
<form id="the_form_download" target="_blank" action="{{ route('downloadMedia') }}" method="post">
{{csrf_field()}}
<select class="download_format" name="format">$formats
<option value="0">Format original</option>
@foreach ($formats as $format)
<option value="{{$format->id }}">{{"Vignette ".$format->extension." ".strtoupper($format->libelle)." (".$format->largeur."px)" }}</option>
@endforeach
</select>
<input class="medias" type="hidden" name="medias" value="">
<button type="submit" class="btn btn_form_download ml-10"><i class="fas fa-arrow-circle-down"></i> Télécharger</button>
</form>
</div>
<div id="form_basket_property" style="display: none;" data-id="" >
<h3>Informations sur ce panier</h3>
<hr/>
<p>Libellé : {{ $panier->libelle }}</p>
<p>Description :</p>
<p>{{ $panier->description }}</p>
<p>Créé le : {{ $panier->created_at }}</p>
<hr/>
<p class="button_bar">
<a href="#" class="btn close_popup btn-black btn-square">Fermer</a>
</p>
</div>
@endsection

View file

@ -42,6 +42,7 @@ Route::group(['middleware' => ['auth']], function(){
Route::post('/ajax/get-article', 'MediaController@getArticle');
Route::post('/ajax/download-media', 'MediaController@downloadMedia')->name('downloadMedia');
Route::post('/ajax/get-media-history', 'MediaController@getMediaHistory');
Route::post('/ajax/add-media', 'MediaController@addMedia');
// Ajax pour la gestion des panier
Route::post('/ajax/add-media-basket', 'PanierController@addMediasBasket');
@ -49,6 +50,9 @@ Route::group(['middleware' => ['auth']], function(){
Route::post('/ajax/load-basket', 'PanierController@loadBasket');
Route::post('/ajax/add-basket', 'PanierController@addBasket');
Route::post('/ajax/favoris-basket', 'UserController@favorisBasket');
Route::post('/ajax/remove-basket', 'PanierController@removeBasket');
Route::post('/ajax/get-basket', 'PanierController@getBasket');
Route::post('/ajax/save-basket-property', 'PanierController@saveBasketProperty');
// Back office
Route::resource('user', 'UserController');
@ -70,3 +74,6 @@ Auth::routes([
// Ajax pour la gestion de l'upload de média
Route::post('/ajax/upload-media', 'UploadController@storeMedia');
// Les pages Front panier public
Route::get('/basket/{basket_uid}', 'PanierController@showBasket');