- VUEJS sans Suppression

This commit is contained in:
Vincent BRIDIER 2020-07-17 11:17:54 +02:00
parent ad1a380f62
commit 10cb439c40
29 changed files with 1070 additions and 71465 deletions

View file

@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Models\Format;
use App\Models\Typevue;
use App\Models\Variante;
use Illuminate\Support\Facades\Auth;
@ -45,8 +46,6 @@ class CommunController extends Controller
*/
public function sendMessage(Request $request)
{
$data = $request->all(); // This will get all the request data.
$type = $request->input('type');
$url = $request->input('url');
$message = $request->input('message');
@ -61,8 +60,11 @@ class CommunController extends Controller
public function getDatasBySujet(Request $request) {
$sujet_id = $request->sujet_id;
$response['typesvue'] = Typevue::where('sujet_id', $sujet_id)->get();
$response['typesvariantes'] = Variante::where('sujet_id', $sujet_id)->get();
$sujet = Sujet::findOrFail($sujet_id);
$response['typesvue'] = $sujet->typeVues;
$response['typesvariantes'] = $sujet->variantes;
$response['formats'] = array_merge(Format::withoutGlobalScope('App\Scopes\SystemScope')->where('system', 1)->get()->toArray(), $sujet->formats->toArray());
return response()->json($response);
}

View file

@ -22,8 +22,7 @@ class DossierController extends Controller
public function index()
{
Auth::user()->authorizeRoles(config('roles.const.ADMIN'));
$dossiers = Dossier::whereNull('parent_id')->where('system', 0)
->get();
$dossiers = Dossier::whereNull('parent_id')->where('system', 0)->orderBy('libelle', 'asc')->get();
$sujets = Sujet::where('sujet_dam', 1)->get();
return view('dossiers.index')->with([
@ -45,6 +44,12 @@ class DossierController extends Controller
return view('dossiers.create')->with(['marques' => $marques, 'sujets' => $sujets]);
}
public function createSub()
{
$dossiers = Dossier::whereNull('parent_id')->where('system', 0)->orderBy('libelle', 'asc')->get();
return view('dossiers.create-sub')->with(['dossiers' => $dossiers]);
}
/**
* Store a newly created resource in storage.
*
@ -92,6 +97,39 @@ class DossierController extends Controller
}
}
public function storeSub(Request $request)
{
Auth::user()->authorizeRoles(config('roles.const.ADMIN'));
$validatedData = $request->validate([
'libelle' => 'required',
'parent_id' => 'required',
]);
$dossierExist = Dossier::where('libelle', $request->libelle)->first();
$parent_dossier = Dossier::findOrFail($request->parent_id);
if ($dossierExist) {
session()->flash('error', "Ce nom de dossier est déjà présent dans l'application pour ce sujet. Ajout impossible.");
return redirect()->route('dossier.create');
} else {
// ---- Le dossier
$dossier = new Dossier();
$dossier->libelle = $request->libelle;
$dossier->description = $request->description;
$dossier->is_private = 0;
$dossier->parent_id = $request->parent_id;
$dossier->sujet_id = $parent_dossier->sujet_id;
if ($dossier->save()) {
session()->flash('message', "Le dossier à été enregistré");
return redirect()->route('dossier.edit', ['dossier' => $dossier]);
} else {
session()->flash('error', "Une erreur s'est produite, ajout impossible");
return redirect()->route('dossier.create');
}
}
}
/**
* Display the specified resource.
*
@ -129,41 +167,67 @@ class DossierController extends Controller
public function update(Request $request, Dossier $dossier)
{
Auth::user()->authorizeRoles(config('roles.const.ADMIN'));
$validatedData = $request->validate([
'libelle' => 'required',
'sujet' => 'required',
'status' => 'required'
]);
$dossierExist = Dossier::where('libelle', $request->libelle)->where('sujet_id', $request->sujet)->where('id', '<>', $dossier->id)->first();
if ($dossierExist) {
session()->flash('error', "Ce nom de dossier est déjà présent dans l'application pour ce sujet. Ajout impossible.");
return redirect()->route('dossier.edit', ['dossier' => $dossier]);
} else {
// ---- Le dossier
$dossier->libelle = $request->libelle;
$dossier->description = $request->description;
$dossier->is_private = $request->status;
$dossier->sujet()->dissociate();
$dossier->sujet()->associate($request->sujet);
if ($dossier->parent_id === null) {
if ($dossier->save()) {
$validatedData = $request->validate([
'libelle' => 'required',
'sujet' => 'required',
'status' => 'required'
]);
// ---- Les marques
$dossier->marques()->detach();
$sMarques = $request->marques;
if ($sMarques != "") {
$marques = explode(",", $sMarques);
foreach ($marques as $marqueId) {
$dossier->marques()->attach($marqueId);
}
}
session()->flash('message', "Le dossier à été mis à jour");
$dossierExist = Dossier::where('libelle', $request->libelle)->where('sujet_id', $request->sujet)->where('id', '<>', $dossier->id)->first();
if ($dossierExist) {
session()->flash('error', "Ce nom de dossier est déjà présent dans l'application pour ce sujet. Ajout impossible.");
return redirect()->route('dossier.edit', ['dossier' => $dossier]);
} else {
session()->flash('error', "Une erreur s'est produite, enregistrement impossible");
return redirect()->route('dossier.edit');
// ---- Le dossier
$dossier->libelle = $request->libelle;
$dossier->description = $request->description;
$dossier->is_private = $request->status;
$dossier->sujet()->dissociate();
$dossier->sujet()->associate($request->sujet);
if ($dossier->save()) {
// ---- Les marques
$dossier->marques()->detach();
$sMarques = $request->marques;
if ($sMarques != "") {
$marques = explode(",", $sMarques);
foreach ($marques as $marqueId) {
$dossier->marques()->attach($marqueId);
}
}
session()->flash('message', "Le dossier à été mis à jour");
return redirect()->route('dossier.edit', ['dossier' => $dossier]);
} else {
session()->flash('error', "Une erreur s'est produite, enregistrement impossible");
return redirect()->route('dossier.edit');
}
}
}else{
$validatedData = $request->validate([
'libelle' => 'required',
]);
$dossierExist = Dossier::where('libelle', $request->libelle)->where('sujet_id', $request->sujet)->where('id', '<>', $dossier->id)->first();
if ($dossierExist) {
session()->flash('error', "Ce nom de dossier est déjà présent dans l'application pour ce sujet. Ajout impossible.");
return redirect()->route('dossier.edit', ['dossier' => $dossier]);
} else {
// ---- Le dossier
$dossier->libelle = $request->libelle;
$dossier->description = $request->description;
if ($dossier->save()) {
session()->flash('message', "Le dossier à été mis à jour");
return redirect()->route('dossier.edit', ['dossier' => $dossier]);
} else {
session()->flash('error', "Une erreur s'est produite, enregistrement impossible");
return redirect()->route('dossier.edit');
}
}
}
}

View file

@ -591,9 +591,8 @@ class MediaController extends Controller
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
$response = false;
$dossier_id = $request->input('dossier_id');
$data = $request->input('data');
$sujet_id = $request->input('sujet_id');
$data = explode(",", $data);
$medias = $request->input('medias');
$user_id = Auth::user()->id;
$libelle = "";
@ -604,15 +603,14 @@ class MediaController extends Controller
}
}
foreach ($data as $key => $media_id) {
$media = Media::where('id', $media_id)->first();
foreach ($medias as $media) {
$media = Media::where('id', $media['id'])->first();
if ($media) {
$historique = new historique();
$historique->user_id = $user_id;
$historique->media_id = $media->id;
$historique->type = "Déplacement";
$media->sujet_id = $sujet_id;
if ($dossier_id > 0) {
$media->dossier_id = $dossier_id;
$historique->description = "Déplacement dans le dossier " . $libelle;
@ -941,7 +939,6 @@ class MediaController extends Controller
public function applySticker(Request $request)
{
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR'), config('roles.const.CONTRIBUTEUR')]);
$response = array();
$medias = $request->input('medias');
$etiquette_id = $request->input('etiquette_id');
$user_id = Auth::user()->id;
@ -949,7 +946,8 @@ class MediaController extends Controller
$etiquette = Etiquette::where('etiquette_id', $etiquette_id)->first();
$response = $etiquette;
if ($etiquette) {
foreach ($medias as $media_id) {
foreach ($medias as $item) {
$media_id = $item['id'];
$media = Media::where('id', $media_id)->first();
if ($media) {
// ---- Historique des actions
@ -1076,6 +1074,7 @@ class MediaController extends Controller
$fp = $this->get_mediaPath($media, $format);
if (!file_exists($fp))
abort(404, 'Fichier inconnu.');
return response()->download($fp, str_replace(' ', '_', $media->libelle)."_". $format->libelle ."_". $format->largeur ."x". $format->hauteur ."px.".pathinfo($fp, PATHINFO_EXTENSION))->deleteFileAfterSend($deleteFileAfterSend);
}
} else {
// create zip archive
@ -1093,14 +1092,14 @@ class MediaController extends Controller
unlink($zip_file);
abort(404, 'Fichier(s) inconnu(s).');
}
$zip->addFile($fp, basename($fp));
$zip->addFile($fp, str_replace(' ', '_', $media->libelle)."_". $format->libelle ."_". $format->largeur ."x". $format->hauteur ."px.".pathinfo($fp, PATHINFO_EXTENSION));
}
}
$deleteFileAfterSend = true;
$zip->close();
$fp = $zip_file;
return response()->download($fp)->deleteFileAfterSend($deleteFileAfterSend);
}
return response()->download($fp)->deleteFileAfterSend($deleteFileAfterSend);
}

View file

@ -24,6 +24,10 @@ class PanierController extends Controller
}
public function getBaskets(Request $request)
{
return Auth::user()->paniersOwner;
}
/**
* Page publique d'un panier
@ -57,9 +61,10 @@ class PanierController extends Controller
$panier = Panier::where('id', $panierId)->with('medias')->first();
if($panier){
$result = $panier->medias()->syncWithoutDetaching($mediasToAdd);
$medias = Media::whereIn('id', $result['attached'])->get();
$response = $medias;
foreach ($mediasToAdd as $media) {
$panier->medias()->attach($media['id']);
}
$response = true;
}
return json_encode($response);
@ -127,40 +132,6 @@ 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
*/
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);
}
/**
* enregistre les propriétés d'un panier
*

View file

@ -267,7 +267,6 @@ class UploadController extends Controller {
$extension = strtolower($file->getClientOriginalExtension());
$originalName = str_replace( ".".$extension, "", $file->getClientOriginalName());
if (!in_array($extension, $acceptFileTypes)) return array("false");
$filename = $uid . '.' . $extension;
if (!in_array($extension, $acceptFileTypes)) return array("error" => "Ce type de fichier n'est pas accepté.");
@ -292,6 +291,7 @@ class UploadController extends Controller {
if (!move_uploaded_file($file->getPathname(), $dest_file)) {
Log::error('Error saving (move_uploaded_file) chunk ' . $request->resumableChunkNumber.' for file ' . $request->resumableFilename);
} else {
$filename = $uid . '.' . $extension;
// check if all the parts present, and create the final destination file
$isLast = $this->createFileFromChunks($temp_dir, $request->resumableFilename, $request->resumableChunkSize, $request->resumableTotalSize, $request->resumableTotalChunks, $filename);
if ($isLast){

View file

@ -246,9 +246,9 @@ class UserController extends Controller
$dossierFav = Auth::user()->dossiers()->where('id', $dossier_id)->first();
if($favoris == "false" && $dossierFav){
if($favoris === false && $dossierFav){
Auth::user()->dossiers()->detach($dossier_id);
}elseif ($favoris == "true" && !$dossierFav) {
}elseif ($favoris === true && !$dossierFav) {
Auth::user()->dossiers()->attach($dossier_id);
}
return json_encode(true);

View file

@ -35,7 +35,7 @@ class Sujet extends Model
*/
public function variantes()
{
return $this->hasMany('App\Models\Variante');
return $this->hasMany('App\Models\Variante', 'sujet_id', 'codeSujet');
}
/**
@ -43,7 +43,7 @@ class Sujet extends Model
*/
public function typeVues()
{
return $this->hasMany('App\Models\Typevue');
return $this->hasMany('App\Models\Typevue', 'sujet_id', 'codeSujet');
}
/**

View file

@ -121,7 +121,7 @@ class User extends Authenticatable
*/
public function paniersOwner()
{
return $this->hasMany('App\Models\Panier', 'owner');
return $this->hasMany('App\Models\Panier', 'owner')->with('medias');
}
/**

15602
public/css/app.css vendored

File diff suppressed because one or more lines are too long

54095
public/js/app.js vendored

File diff suppressed because one or more lines are too long

37
resources/js/app.js vendored
View file

@ -31,6 +31,12 @@ const FolderComponent = Vue.component(
'mm-folder',
require('./components/media-manager/FolderComponent.vue').default
);
// Basket Component
const BasketComponent = Vue.component(
'mm-basket',
require('./components/media-manager/BasketComponent.vue').default
);
// Search
const SideHeaderComponent = Vue.component(
'mm-side-header',
require('./components/media-manager/SideHeaderComponent.vue').default
@ -43,10 +49,15 @@ const SorterComponent = Vue.component(
'mm-sorter',
require('./components/media-manager/SorterComponent.vue').default
);
// Display
const DisplayComponent = Vue.component(
'mm-display',
require('./components/media-manager/DisplayComponent.vue').default
);
const ActionsComponent = Vue.component(
'mm-actions',
require('./components/media-manager/ActionsComponent.vue').default
);
/* MEDIA EDITOR */
const EditorComponent = Vue.component(
'mm-me-edit',
@ -78,15 +89,22 @@ Vue.use(Dialog, {
const store = new Vuex.Store({
state: {
reload: '',
sujet: 0,
folder: -1,
filters: [],
role: 2,
media: {},
typesvue: [],
typesvariantes: []
typesvariantes: [],
formats: [],
grabbed: [],
baskets: []
},
mutations: {
Reload (state, payload) {
state.reload = payload.reload;
},
updateSujet (state, payload) {
state.sujet = payload.sujet;
},
@ -107,6 +125,15 @@ const store = new Vuex.Store({
},
updateRole (state, payload) {
state.role = payload.role;
},
updateGrabbed (state, payload) {
state.grabbed = payload.grabbed;
},
updateBaskets (state, payload) {
state.baskets = payload.baskets;
},
updateFormats (state, payload) {
state.formats = payload.formats;
}
}
});
@ -116,7 +143,7 @@ new Vue({
store,
components: {
OpenSeaDragonComponent, DarkroomComponent,
FolderComponent, SideHeaderComponent, FiltersComponent, SorterComponent, DisplayComponent,
BasketComponent, FolderComponent, SideHeaderComponent, FiltersComponent, SorterComponent, DisplayComponent, ActionsComponent,
EditorComponent, EditorTabPreviewComponent, EditorTabEditComponent, EditorTabLinksComponent, EditorTabHistoryComponent
}
});
@ -243,12 +270,6 @@ $(document).mouseup(function(e) {
$(".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) {

View file

@ -0,0 +1,339 @@
<template>
<div>
<a v-if="storeRole !== 2" @click="openUploadFrom" href="#" class="action_add_media"><i class="fas fa-file-upload"></i> Ajouter un média</a>
<a href="#" @click="download" class="action_download_media"><i class="fas fa-file-download"></i> Télécharger</a>
<!--<a v-if="storeRole === 1 || storeRole === 4" href="#" class="action_delete_media"><i class="fas fa-trash-alt"></i> Supprimer</a>-->
<a v-if="storeRole !== 2" @click="duplicateMedia" href="#" class="action_duplicate_media"><i
class="far fa-copy"></i> Dupliquer</a>
<a v-if="storeRole !== 2" @click="applySticker" href="#" class="action_tag_media"><i class="fas fa-tags"></i>
Etiquette</a>
<div id="form_etiquette" style="display: none;">
<h3>Appliquez une étiquette</h3>
<hr/>
<ul>
<li v-for="item in JSON.parse(etiquettes)"><a class="etiquette"
@click="selectSticker(item.etiquette_id)" href="#"
:style="'background-color:' + item.color + '; border-color:' + item.color + ';'">{{item.libelle}}</a>
</li>
</ul>
</div>
<div id="form_download" style="display: none;">
<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="/ajax/download-media" method="POST">
<select class="download_format" name="format">
<option v-for="item in storeFormats" :value="item.id">{{item.libelle}}
{{item.largeur}}x{{item.hauteur}}px {{item.extension}}
</option>
</select>
<input type="hidden" name="_token" :value="csrf">
<input class="medias" type="hidden" name="medias" :value="this.storeGrabbed.map(e => e.id).join(',')">
<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 class="upload_container high-level">
<span class="fileinput-button" @click="addFiles">
<a class="btn btn-primary basic-style"><i class="fas fa-plus-circle" style="background-color: unset;"></i><span> Ajouter vos médias</span></a>
</span>
<div class="content_wrapper">
<!-- The container for the uploaded errors -->
<div id="upload_errors"></div>
<!-- The container for the uploaded files -->
<div id="files" class="files">
<div v-for="(file, key) in files">
<div>
<span>{{file.fileName}}</span>
<button v-on:click="removeFile(file)" class="cancel"><i class="fal fa-times"></i></button>
</div>
<div>
<span>{{FileConvertSize(file.size)}}</span>
<button class="upload" style="display: none;"></button>
</div>
</div>
</div>
</div>
<div class="upload_bar">
<a id="submit" class="btn basic-style" href="#" @click="createMedias">Transférer</a>
<a id="close_upload_form" class="basic-style" href="#" @click="closeUploadFrom">Fermer</a>
</div>
<br>
<input style="display: none;" ref="fileupload" type="file" name="files[]" multiple>
</div>
<div id="ListUploadedFiles" style="display: none;" >
<h3><i class="fas fa-user-cog"></i> Gestion des médias téléversés</h3>
<hr/>
<div class="list_uploaded_files">
<p class="list_uploaded_files_p" v-for="file in uploadedFiles">{{file.libelle}}.{{file.extension}} <button class="btn btn-sm btn-primary" @click="openMedia(file)">Editer</button></p>
</div>
<hr/>
<div style="margin-top: 20px; text-align: center;">
<a @click="CloseListUploadedFiles" class="btn" href="#">Fermer</a>
</div>
</div>
</div>
</template>
<script>
import Resumable from "resumablejs";
export default {
name: "ActionsComponent",
props: [
'csrf',
'etiquettes'
],
computed: {
storeRole() {
return this.$store.state.role;
},
storeFolder() {
return this.$store.state.folder;
},
storeGrabbed() {
return this.$store.state.grabbed;
},
storeFormats() {
return this.$store.state.formats;
},
storeSujet() {
return this.$store.state.sujet;
},
storeMedia() {
return this.$store.state.media;
}
},
data: function () {
return {
files: [],
uploadedFiles: []
}
},
methods: {
duplicateMedia() {
if (Object.keys(this.storeGrabbed).length === 0) {
$.fancyMessage({
title: "Dupliquer un média",
message: "Veuillez sélectionner un média.",
type: "info"
});
} else if (Object.keys(this.storeGrabbed).length > 1) {
$.fancyMessage({
title: "Dupliquer un média",
message: "Vous ne pouvez dupliquer qu'un média à la fois.",
type: "info"
});
} else {
this.$loading.show({delay: 0});
axios.post('/ajax/duplicate-media', {
media_id: this.storeGrabbed[0].id
}).then(response => {
this.$loading.hide();
if (response.data.status === true) {
this.$store.commit({
type: 'updateMedia',
media: response.data.datas
});
} else {
$.fancyMessage({title: "Dupliquer un média", message: response.data.error, type: "error"});
}
}).catch(error => {
this.$loading.hide();
$.fancyMessage({title: "Dupliquer un média", message: error, type: "error"});
console.log(error);
});
}
},
applySticker() {
if (Object.keys(this.storeGrabbed).length === 0) {
$.fancyMessage({
title: "Appliquer une étiquette",
message: "Veuillez sélectionner au moins un média.",
type: "info"
});
} else {
$("#form_etiquette").fancybox({
type: 'inline',
opts: {
animationDuration: 350,
animationEffect: 'material',
}
}).trigger("click");
}
},
selectSticker(sticker_id) {
axios.post('/ajax/apply-sticker', {
medias: this.storeGrabbed,
etiquette_id: sticker_id
}).then(response => {
this.$store.commit({
type: 'updateGrabbed',
grabbed: []
});
this.$store.commit({
type: 'Reload',
reload: Math.random()
});
$.fancybox.close();
}).catch(error => {
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors du changement d'étiquette, merci d'actualiser la page.",
type: "error"
});
console.log(error);
});
},
download() {
if (Object.keys(this.storeGrabbed).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',
}
}).trigger("click");
}
},
openUploadFrom() {
if (this.storeFolder < 0){
$.fancyMessage({title : "Ajout de média", message : "Pour ajouter des médias, veuillez d'abord sélectionner un dossier de destination.", type : "error"});
}else{
this.setupResumable();
$('.upload_container').show("fast");
}
},
closeUploadFrom() {
this.files = [];
$('.upload_container').hide("fast");
},
addFiles(){
this.$refs.fileupload.click();
},
removeFile(file){
this.r.removeFile(file);
this.files = this.r.files;
},
/**
* @return {string}
*/
FileConvertSize(aSize){
aSize = Math.abs(parseInt(aSize, 10));
let def = [[1, 'octets'], [1024, 'ko'], [1024*1024, 'Mo'], [1024*1024*1024, 'Go'], [1024*1024*1024*1024, 'To']];
for(let i=0; i<def.length; i++){
if(aSize<def[i][0]) return (aSize/def[i-1][0]).toFixed(2)+' '+def[i-1][1];
}
},
setupResumable() {
this.r = new Resumable({
target: '/ajax-v2/upload-media',
simultaneousUploads: 1,
maxFiles: 8,
testChunks: false,
fileParameterName: 'files',
headers: {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
},
query: {
sujet_id: this.storeSujet,
dossier_id: this.storeFolder,
replaceMediaId: 0
}
});
this.r.on('fileAdded', this.uploadFileAdded);
this.r.on('fileSuccess', this.uploadFileSuccess);
this.r.on('complete', this.uploadFileComplete);
this.r.assignBrowse(this.$refs.fileupload);
},
uploadFileAdded(file, event){
const acceptFileTypes = /^(gif|jpe?g|png|mp4|mp3|psd|ai|svg|pdf)$/i;
if(file.fileName.split('.').pop().length && !acceptFileTypes.test(file.fileName.split('.').pop())) {
this.r.removeFile(file);
}
if(file.size.length && file.size > 5000000) {
this.r.removeFile(file);
}
this.files = this.r.files;
},
uploadFileSuccess(file, message) {
this.uploadedFiles.push(JSON.parse(message));
},
uploadFileComplete() {
this.closeUploadFrom();
this.$loading.hide();
$.fancybox.close();
$.fancybox.open({
src : '#ListUploadedFiles',
type : 'inline',
opts : {
modal: true,
animationDuration : 350,
animationEffect : 'material',
}
});
},
createMedias() {
this.$loading.show({delay: 0});
this.r.upload();
},
openMedia(media) {
$.fancybox.close();
this.$store.commit({
type: 'updateMedia',
media: media
});
},
CloseListUploadedFiles() {
if (confirm( "En cliquant sur OK, vous confirmez que vous avez édité tous vos fichiers." ) ) {
$.fancybox.close();
this.uploadedFiles = [];
this.setupResumable();
}
}
},
watch: {
storeMedia() {
if (Object.keys(this.storeMedia).length === 0 && this.uploadedFiles.length > 0){
$.fancybox.open({
src : '#ListUploadedFiles',
type : 'inline',
opts : {
modal: true,
animationDuration : 350,
animationEffect : 'material',
}
});
}
}
},
}
</script>
<style scoped>
.basic-style {
font-size: inherit !important;
padding: 9px 19px !important;
display: inline-flex !important;
border: 0 !important;
float: unset !important;
transition: none !important;
}
</style>

View file

@ -0,0 +1,297 @@
<template>
<div class="side_menu panier_side_menu collapse">
<header>
<div class="close_side_menu"><i class="fas fa-shopping-basket"></i></div>
<select id="panier_selector" v-model="selectedBasket">
<option v-for="item in storeBaskets" :value="item">{{item.libelle}}</option>
</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" @click="addBasket">Nouveau panier</li>
<li class="menu-option info_panier" @click="showBasketProperties">Propiétés du panier</li>
<li class="menu-option remove_panier" @click="deleteBasket">Supprimer ce panier</li>
</ul>
</div>
</header>
<div class="panier_content" @drop="addMedia($event)" @dragover.prevent @dragenter.prevent>
<div v-for="media in selectedBasket.medias" class="imageItem" draggable="false" aria-grabbed="false">
<div v-if="media.typemedia_id === 1 || media.typemedia_id === 1" class="media"
:style="'background-image:url('+ media.folder+media.uid +'_thumb.png)'"></div>
<div v-if="media.typemedia_id === 2" class="media"
:style="'background-image:url('+ media.folder + media.uid + media.extension +')'"></div>
<div v-if="media.typemedia_id === 3" class="media video"></div>
<div v-if="media.typemedia_id === 4" class="media son"></div>
<div class="bar">
<a href="#" class="media_info" @click="openMedia(media)"><i class="far fa-info-circle"></i></a>
<a href="#" class="media_remove_basket" @click="removeMedia(media.id)"><i
class="far fa-times-circle"></i></a>
</div>
</div>
</div>
<div v-if="Object.keys(this.selectedBasket).length > 0" id="form_basket_property" style="display: none;">
<h3>Propriétés du panier</h3>
<hr/>
<p><input required type="text" class="form_basket_libelle" v-model="selectedBasket.libelle" maxlength="100"
minlength="4" placeholder="Libellé du panier"/></p>
<p><textarea class="form_basket_description" placeholder="Description du panier"
v-model="selectedBasket.description"></textarea></p>
<p>Lien direct vers le panier : </p>
<p><input required type="text" class="form_basket_link"
:value="'https://dam.lesidc.com/basket/' + selectedBasket.uid" 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" v-model="selectedBasket.statut">
<option value="0">Désactivé</option>
<option value="1">Activé</option>
</select>
</p>
<p>Créé le : <span class="form_basket_datecreate">{{new Date(this.selectedBasket.created_at).toLocaleDateString('fr-FR', {'hour': '2-digit', 'minute': '2-digit'})}}</span>
</p>
<hr/>
<p class="button_bar">
<a @click="saveBasketProperties" href="#" class="btn form_basket_save btn-square"><i
class="fas fa-share"></i> Enregistrer</a>
<a @click="closeBasketProperties" href="#" class="btn close_popup btn-black btn-square">Fermer</a>
</p>
</div>
</div>
</template>
<script>
export default {
name: "BasketComponent",
computed: {
storeBaskets() {
return this.$store.state.baskets;
},
storeGrabbed () {
return this.$store.state.grabbed;
},
},
mounted() {
this.init();
},
data() {
return {
selectedBasket: {},
}
},
watch: {},
methods: {
init(toSelectId = false) {
axios.post('/ajax/get-baskets')
.then(response => {
this.$store.commit({
type: 'updateBaskets',
baskets: response.data
});
if (toSelectId !== false) {
this.selectedBasket = this.storeBaskets.find(e => e.id === toSelectId);
} else {
if (this.storeBaskets.length >= 1) {
this.selectedBasket = this.storeBaskets[0];
}
}
}).catch(error => {
console.log(error);
})
},
showBasketProperties() {
if (this.selectedBasket === null) {
$.fancyMessage({
title: "Propriétés du panier",
message: "Veuillez sélectionner un panier.",
type: "info"
});
} else {
$.fancybox.open({
src: '#form_basket_property',
type: 'inline',
opts: {
animationDuration: 350,
animationEffect: 'material'
}
});
}
},
closeBasketProperties() {
$.fancybox.close();
},
saveBasketProperties() {
if (this.selectedBasket.libelle.length === 0) {
$.fancyMessage({
title: "Propriétés d'un dossier",
message: "Vous devez indiquer un nom de panier.",
type: "error"
});
} else {
this.$loading.show({delay:0});
axios.post('/ajax/save-basket-property', {
basket_id: this.selectedBasket.id,
libelle: this.selectedBasket.libelle,
description: this.selectedBasket.description,
statut: this.selectedBasket.statut,
}).then(response => {
this.$loading.hide();
$.fancybox.close();
$.fancyMessage({
title: "Propriétés du panier",
message: "Propriétés sauvgardées !",
type: "info"
});
}).catch(error => {
this.$loading.hide();
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de l'édition du panier, merci d'actualiser la page.",
type: "error"
});
console.log(error);
});
}
},
deleteBasket() {
if (this.selectedBasket.libelle.length === 0) {
$.fancyMessage({
title: "Suppression de panier",
message: "Veuillez sélectionner un panier à supprimer.",
type: "info"
});
} else {
const _this2 = this;
$.fancyConfirm({
title: "Suppression de panier",
message: "Êtes-vous sûr de vouloir supprimer ce panier ?",
okButton: 'Supprimer',
noButton: 'Annuler',
callback: function (value) {
if (value) {
this.$loading.show({delay:0});
axios.post('/ajax/remove-basket', {
basket_id: _this2.selectedBasket.id,
}).then(response => {
_this2.init();
this.$loading.hide();
$.fancybox.close();
$.fancyMessage({
title: "Suppression de panier",
message: "Panier supprimé !",
type: "info"
});
}).catch(error => {
this.$loading.hide();
$.fancybox.close();
$.fancyMessage({
title: "Suppression de panier",
message: "Erreur lors de la suppression, merci d'actualiser la page.",
type: "error"
});
console.log(error);
});
}
}
});
}
},
addBasket() {
const _this2 = this;
let d = new Date();
let strDate = ("0" + d.getDate()).slice(-2) + "/" + ("0" + (d.getMonth() + 1)).slice(-2) + "/" + d.getFullYear();
let defaultTitle = "Panier du " + strDate;
let title = prompt("Indiquez le libellé de votre nouveau panier", defaultTitle);
if (title !== "") {
this.$loading.show({delay:0});
axios.post('/ajax/add-basket', {
title: title,
}).then(response => {
_this2.init(response.data.id);
this.$loading.hide();
$.fancyMessage({
title: "Ajout de panier",
message: "Panier ajouté !",
type: "info"
});
}).catch(error => {
this.$loading.hide();
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de la création du panier, merci d'actualiser la page.",
type: "error"
});
console.log(error);
});
}
},
openMedia(media) {
this.$store.commit({
type: 'updateMedia',
media: media
});
},
removeMedia(media_id) {
this.$loading.show({delay:0});
const _this2 = this;
axios.post('/ajax/remove-media-basket', {
media_id: media_id,
panier_id: this.selectedBasket.id
}).then(response => {
if (response.data === true){
_this2.init(this.selectedBasket.id);
this.$loading.hide();
}else{
this.$loading.hide();
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du média, merci d'actualiser la page.", type : "error"});
}
}).catch(error => {
this.$loading.hide();
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du média, merci d'actualiser la page.", type : "error"});
console.log(error);
});
},
addMedia(evt) {
const _this2 = this;
if (Object.keys(this.selectedBasket).length === 0) {
$.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner un panier.", type : "info"});
}else{
const isDepot = this.storeGrabbed.filter(e => e.dossier_id === 1);
if (isDepot.length > 0){
$.fancyMessage({title : "Attention", message : "Vous ne pouvez pas mettre les médias du dépôt dans un panier.", type : "error"});
}else{
this.$loading.show({delay:0});
axios.post('/ajax/add-media-basket', {
medias: this.storeGrabbed,
panier_id : this.selectedBasket.id,
}).then(response => {
_this2.init(this.selectedBasket.id);
this.$store.commit({
type: 'updateGrabbed',
grabbed: []
});
this.$loading.hide();
}).catch(error => {
this.$loading.hide();
console.log(error);
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", type : "error"});
});
}
}
}
}
}
</script>
<style scoped>
</style>

View file

@ -4,20 +4,10 @@
<div class="media_container">
<div v-show="loader" class="loader"><i class="fal fa-circle-notch fa-spin"></i></div>
<div class="wrapper">
<div v-for="media in medias.data" v-on:dblclick="edit(media)" class="imageItem" :draggable="medias.draggable" aria-grabbed="false">
<div v-for="media in medias.data" @dragstart="dragStart(media, $event)" v-on:dblclick="edit(media)" @click="select(media)" class="imageItem" :draggable="medias.draggable" :aria-grabbed="storeGrabbed.filter(e => e.id === media.id).length > 0">
<div class="etiquette" :style="'background-color:' + media.etiquette.color + '; border-color:' + media.etiquette.color + ';'" :data-id="media.etiquette.etiquette_id" >{{media.etiquette.libelle}}</div>
<div class="contextMenu">
<ul>
<li class="menu-option editItem"><i class="fas fa-edit"></i> Editer</li>
<li class="menu-option downloadItem"><i class="fas fa-file-download"></i> Télécharger</li>
<li class="menu-option addBasket"><i class="fas fa-shopping-basket"></i> Ajouter au panier</li>
<!--<li v-if="medias.role === 1 || medias.role === 4" class="menu-option deleteItem"><i class="fas fa-trash-alt"></i> Supprimer</li>-->
<li v-if="medias.role !== 2" class="menu-option tagItem"><i class="fas fa-tags"></i> Etiquette</li>
</ul>
</div>
<div v-if="media.typemedia_id === 1 || media.typemedia_id === 5" class="media" :style="'background-image:url('+ media.folder + media.uid +'_thumb.png)'"></div>
<div v-if="media.typemedia_id === 2" class="media" :style="'background-image:url('+ media.folder + media.uid + media.extension + ')'"></div>
<div v-if="media.typemedia_id === 3" class="media video"></div>
@ -59,6 +49,12 @@
},
storeMedia () {
return this.$store.state.media;
},
storeGrabbed () {
return this.$store.state.grabbed;
},
storeReload () {
return this.$store.state.reload;
}
},
mounted() {
@ -71,7 +67,7 @@
limit: 50,
scrollLoader: false,
loader: false,
infiniteId: '',
infiniteId: ''
}
},
watch: {
@ -79,9 +75,16 @@
this.init();
},
storeMedia() {
if (Object.keys(this.storeMedia).length > 0){
if (Object.keys(this.storeMedia).length === 0){
this.init();
this.$store.commit({
type: 'updateGrabbed',
grabbed: []
});
}
},
storeReload() {
this.init();
}
},
methods: {
@ -91,6 +94,10 @@
this.loadMedias(this.$store.state);
},
loadMedias($state) {
this.$store.commit({
type: 'updateGrabbed',
grabbed: []
});
if (this.offset === 0){
this.medias = [];
this.loader = true;
@ -142,6 +149,42 @@
type: 'updateMedia',
media: media
});
},
select(media) {
let grabbed = this.storeGrabbed;
const index = grabbed.find(e => e.id === media.id);
if (!index) {
grabbed.push(media);
}else{
grabbed = grabbed.filter(e => e.id !== media.id);
}
this.$store.commit({
type: 'updateGrabbed',
grabbed: grabbed
});
},
dragStart(media, evt) {
// ---- Restreint le Drag aux images
if (media.typemedia_id === 1 || media.typemedia_id === 2 || media.typemedia_id === 5) {
evt.dataTransfer.dropEffect = 'move';
evt.dataTransfer.effectAllowed = 'move';
if (this.storeGrabbed.length === 0){
this.select(media);
}else{
let grabbed = this.storeGrabbed;
const index = grabbed.find(e => e.id === media.id);
if (!index) {
grabbed.push(media);
this.$store.commit({
type: 'updateGrabbed',
grabbed: grabbed
});
}
}
}else{
return false;
}
}
},
}

View file

@ -3,17 +3,8 @@
<div :style="isLoading === true ? 'display:block' : 'display:none;'" class="loader">
<i class="fal fa-circle-notch fa-spin"></i>
</div>
<div class="folder_menu" data-id="">
<ul class="menu-options">
<li class="menu-option propertyItem">Propriétés</li>
<!-- SI ADMIN -->
<li class="menu-option renameItem">Renommer</li>
<li class="menu-option removeItem">Supprimer</li>
<li class="menu-option addItem">Ajouter un dossier</li>
<!-- END SI ADMIN -->
</ul>
</div>
<a href="#" @click="selectFolder({id: 0, libelle: 'racine'})" ondragstart="return false;" :class="storeFolder === 0 ? 'root_folder selected' : 'root_folder'" data-id="0">/racine <span class="count">{{racineCount}}</span></a>
<a href="#" @click="selectFolder({id: 0, libelle: 'racine'})" ondragstart="return false;"
:class="storeFolder === 0 ? 'root_folder selected' : 'root_folder'" data-id="0">/racine <span class="count">{{racineCount}}</span></a>
<div class="dd">
<ol class="dd-list dd3-list root">
<li v-for="item in folders"
@ -21,11 +12,13 @@
:data-id="item.id">
<div
:class="item.parent_id === null ? 'dd-handle dd3-handle no-handle' : 'dd-handle dd3-handle'"></div>
<div @click="selectFolder(item)" :class="item.id === storeFolder ? 'dd3-content selected' : 'dd3-content'">
<div @click="selectFolder(item)" @drop="moveMedia($event, item.id)" @dragover.prevent @dragenter.prevent
:class="item.id === storeFolder ? 'dd3-content selected' : 'dd3-content'">
<input type="text" value="" class="input_rename" maxlength="100">
<span>{{item.libelle}}</span>
<div class="count">{{item.mediacount}}</div>
<i v-if="item.system === 0" :class="item.favoris === true ? 'fas fa-star' : 'fal fa-star'"></i>
<i v-if="item.system === 0" :class="item.favoris === true ? 'fas fa-star' : 'fal fa-star'"
@click="toggleFav(item)"></i>
</div>
<ol v-if="item.sousdossiers.length > 0" class='dd-list'>
<li v-for="item2 in item.sousdossiers"
@ -33,12 +26,14 @@
:data-id="item2.id">
<div
:class="item2.parent_id === null ? 'dd-handle dd3-handle no-handle' : 'dd-handle dd3-handle'"></div>
<div @click="selectFolder(item2)" :class="item2.id === storeFolder ? 'dd3-content selected' : 'dd3-content'">
<div @click="selectFolder(item2)" @drop="moveMedia($event, item2.id)" @dragover.prevent @dragenter.prevent
:class="item2.id === storeFolder ? 'dd3-content selected' : 'dd3-content'">
<input type="text" value="" class="input_rename" maxlength="100">
<span>{{item2.libelle}}</span>
<div class="count">{{item2.mediacount}}</div>
<i v-if="item2.system === 0"
:class="item2.favoris === true ? 'fas fa-star' : 'fal fa-star'"></i>
:class="item2.favoris === true ? 'fas fa-star' : 'fal fa-star'"
@click="toggleFav(item2)"></i>
</div>
<ol v-if="item2.sousdossiers.length > 0" class='dd-list'>
<li v-for="item3 in item2.sousdossiers"
@ -46,12 +41,14 @@
:data-id="item3.id">
<div
:class="item3.parent_id === null ? 'dd-handle dd3-handle no-handle' : 'dd-handle dd3-handle'"></div>
<div @click="selectFolder(item3)" :class="item3.id === storeFolder ? 'dd3-content selected' : 'dd3-content'">
<div @click="selectFolder(item3)" @drop="moveMedia($event, item3.id)" @dragover.prevent @dragenter.prevent
:class="item3.id === storeFolder ? 'dd3-content selected' : 'dd3-content'">
<input type="text" value="" class="input_rename" maxlength="100">
<span>{{item3.libelle}}</span>
<div class="count">{{item3.mediacount}}</div>
<i v-if="item3.system === 0"
:class="item3.favoris === true ? 'fas fa-star' : 'fal fa-star'"></i>
:class="item3.favoris === true ? 'fas fa-star' : 'fal fa-star'"
@click="toggleFav(item3)"></i>
</div>
</li>
</ol>
@ -76,6 +73,12 @@
storeFilters() {
return this.$store.state.filters;
},
storeRole() {
return this.$store.state.role
},
storeGrabbed() {
return this.$store.state.grabbed
}
},
data() {
return {
@ -90,13 +93,13 @@
this.initFolders();
},
storeFolder() {
if (this.storeFolder === 0){
if (this.storeFolder === 0) {
this.selectFolder({id: 0, libelle: 'racine'});
}
}
},
methods: {
initFolders() {
initFolders(toSelectFolder = false) {
this.isLoading = true;
this.folders = [];
this.racineCount = 0;
@ -109,6 +112,12 @@
this.racineCount = response.data.racineCount;
this.renderItems();
this.isLoading = false;
// TODO : Séléction du dossier ou sous-dossiers dans le paramètres. /!\ il faut une récursive pour trouver le dossier enfant
if (toSelectFolder !== false){
//console.log(toSelectFolder);
}
}).catch(function (error) {
console.log(error);
});
@ -127,10 +136,15 @@
},
selectFolder(item) {
let filter = this.storeFilters.findIndex(e => e.type === 'dossier_id');
if (filter !== -1){
if (filter !== -1) {
this.$delete(this.storeFilters, filter);
}
this.storeFilters.push({ type: 'dossier_id', legend: 'Dossier : ', value: item.id, libelle: item.libelle });
this.storeFilters.push({
type: 'dossier_id',
legend: 'Dossier : ',
value: item.id,
libelle: item.libelle
});
this.$store.commit({
type: 'updateFilters',
filters: this.storeFilters
@ -140,6 +154,52 @@
type: 'updateFolder',
folder: item.id
});
},
toggleFav(folder) {
const _this2 = this;
axios.post('/ajax/favoris-folder', {
dossier_id: folder.id,
favoris: !folder.favoris,
}).then(response => {
_this2.initFolders();
}).catch(error => {
$.fancyMessage({
title: "Dossiers",
message: "Une erreur est survenue, veuillez recharger la page (Ctrl + F5).",
type: "error"
});
console.log(error);
});
},
moveMedia(evt, folder_id) {
// Si on déplace dans un autre dossier que le dossier actuel du/des media(s) séléctionné(s)
if (this.storeGrabbed[0].dossier_id !== folder_id) {
const _this2 = this;
this.$loading.show({delay:0});
axios.post('/ajax/move-media', {
medias: this.storeGrabbed,
dossier_id : folder_id,
}).then(response => {
// On met un timeout pour être sûr qu'Elatic est update lors du reload du DisplayComponent
setTimeout(function(){
_this2.initFolders(folder_id);
_this2.$store.commit({
type: 'Reload',
reload: Math.random()
});
_this2.$store.commit({
type: 'updateGrabbed',
grabbed: []
});
_this2.$loading.hide();
}, 1000);
}).catch(error => {
_this2.$loading.hide();
console.log(error);
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors du déplacement, merci d'actualiser la page.", type : "error"});
});
}
}
}
}

View file

@ -44,6 +44,10 @@
type: 'updateTypesVariantes',
typesvariantes: response.data.typesvariantes
});
this.$store.commit({
type: 'updateFormats',
formats: response.data.formats
});
}).catch(function (error) {
console.log(error);
});

View file

@ -21,7 +21,7 @@
<label>Type de média <span>*</span> : {{this.oMedia.typemedia.libelle}}</label>
<label>Date de création : {{this.oMedia.created_at}}</label>
<label>Date de modification : {{this.oMedia.updated_at}}</label>
<label>Créé par : {{this.oMedia.owner.firstname + ' ' + this.oMedia.owner.lastname + ' (' +
<label v-if="this.oMedia.owner !== null">Créé par : {{this.oMedia.owner.firstname + ' ' + this.oMedia.owner.lastname + ' (' +
this.oMedia.owner.matricule + ')'}}</label>
</div>
<div class="row">
@ -345,6 +345,7 @@
type: "error"
});
} else {
this.$loading.show({delay:0});
// Si c'est lié a Arcadia on check les clés refs
if (this.oMedia.arcadia_id !== null) {
this.CheckRefKey(this.SaveMedia);
@ -358,6 +359,7 @@
axios.post('/ajax/save-media', {
media: this.oMedia
}).then(response => {
this.$loading.hide();
if (response.data.status === true) {
_this2.oMedia = response.data.datas;
this.$store.commit({
@ -373,6 +375,7 @@
$.fancyMessage({title: "Sauvegarde d'un média", message: response.data.error, type: "error"});
}
}).catch(function (error) {
this.$loading.hide();
$.fancybox.close();
$.fancyMessage({
title: "Sauvegarde d'un média",

View file

@ -61,6 +61,8 @@
}).catch(error => {
console.log(error);
});
}else{
this.links = [];
}
}
},

975
resources/js/media.js vendored

File diff suppressed because it is too large Load diff

390
resources/js/panier.js vendored
View file

@ -1,290 +1,4 @@
$(document).ready(function() {
/***************************
Widget panier
*****************************/
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 libellé de votre nouveau panier", defaultTitle);
if(title != ""){
$.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"});
}
});
}
});
// ---- 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') == null){
$.fancyMessage({title : "Suppression de panier", message : "Veuillez sélectionner un panier à supprimer.", type : "info"});
return false;
}
$.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_side_menu .panier_content").html("");
$("#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') == null){
$.fancyMessage({title : "Propriétés du panier", message : "Veuillez sélectionner un panier.", type : "info"});
return false;
}
$.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();
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;
if ($(window).data('currentBasket') == null) {
$.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner un panier.", type : "info"});
return 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"});
}
});
}
});
}
/****************************************
Page publique des paniers
*****************************************/
@ -344,107 +58,3 @@ $(document).ready(function() {
});
}
});
// ---- 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') == null) {
$.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 != null){
$.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:
case 5:
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

@ -1,168 +0,0 @@
$(document).ready(function() {
/******************************
Moteur de recherche de médias
**********************************/
// ---- Initialisation du module de recherche
if($('.search_wrapper').length){
// ---- Initialisation des listes
$(".filter_selector .filter_btn").on('click',function(event) {
$(".filter_selector .list").not($(this).parent().find(".list")).hide();
$(this).parent().find(".list").toggle();
});
// ---- Initialisation du champ de recherche
/*$(".search_filters .search_value").on('keypress',function(event) {
if (event.keyCode == 13) {
$(".search_filters .search_btn").trigger('click');
}
});*/
/*// ---- Clique sur le bouton de recherche
$(".search_filters .search_btn").on('click', function(event) {
// on créé un object filtre
var filter = {
type: "search",
legend : "Recherche : ",
value: $(".search_filters .search_value").val(),
libelle: [$(".search_filters .search_value").val()],
};
// MAJ du filtre principal et de l'affichage
//updateFilter(filter);
// On lance la recherche
var sujet_id = $("#sujet_selector").val();
$(window).data('offset', 0);
loadMedia(sujet_id, 1);
});*/
/*// ---- Clique sur un filtre
$(".filter").on('click', 'input[type="checkbox"]', function(event) {
var values = [];
var libelles = [];
// on créé un object filtre
var filter = {
type: $(this).parents(".filter").attr('data-type'),
legend : $(this).parents(".filter").attr('data-lib-type'),
value: [],
libelle: [],
};
// on y insère toutes les valeurs de ce même type de filtre
$(this).parents(".filter").find('input[type="checkbox"]').each(function (index, cb){
if($(this).is(':checked')){
filter.value.push($(this).val());
filter.libelle.push($(this).next("label").html());
}
});
// MAJ du filtre principal et de l'affichage
//updateFilter(filter);
// On lance la recherche
var sujet_id = $("#sujet_selector").val();
$(window).data('offset', 0);
loadMedia(sujet_id);
});*/
/*// ---- Réinitialisation de la recherche
$(".reinit_search_btn").on('click', function(event) {
event.preventDefault();
// Vide la barre recherche
$(".search_filters .search_value").val('');
$.each(Object.keys($(window).data('filter')), function (index, value) {
if(value != "currentFolder")
$(".search_filters_list #"+value).remove();
});
// supprime tous les éléments de recherche
$(window).data('filter', {});
// masque le bouton de reinitialisation
$(".filter_wrapper .reinit_search_btn").hide();
// ---- Initialisation des listes
$(".filter").find('input[type="checkbox"]').prop( "checked", false );
// On lance la recherche
var sujet_id = $("#sujet_selector").val();
$(window).data('offset', 0);
loadMedia(sujet_id);
});*/
// ---- Suppression d'un filtre
/*$(".search_filters_list").on('click', '.filter_item', function(event) {
event.preventDefault();
var filters = $(window).data('filter');
var type = $(this).attr('id');
// Supprime l'élément dans la bar recherche
$(".search_filters_list #"+type).remove();
if(type == "currentFolder"){
$(".folder_container .dd3-content").removeClass('selected');
$(".folder_container .root_folder").removeClass('selected');
$(window).data('currentFolder', -1);
}else{
// supprime la propriété dans l'objet
if("undefined" !== typeof(filters[type]) ){ // si l'object à cette propriété
delete filters[type]; // on l'a supprime
}
$(window).data('filter', filters);
// ---- Initialisation des listes
$(".search_filters .filter[data-type='"+type+"']").find('input[type="checkbox"]').prop( "checked", false );
}
// masque le bouton de reinitialisation
if(Object.keys($(window).data('filter')).length == 0){
$(".filter_wrapper .reinit_search_btn").hide();
}
// On lance la recherche
var sujet_id = $("#sujet_selector").val();
$(window).data('offset', 0);
loadMedia(sujet_id);
});*/
}
});
window.updateFilter = function(filter){
var filters = $(window).data('filter');
// si ce filtre n'a pas de valeur
if(filter.value.length == 0 ){
$(".search_filters_list #"+filter.type).remove(); // on supprime le filtre de la liste
if("undefined" !== typeof(filters[filter.type]) ){ // si l'object à cette propriété
delete filters[filter.type]; // on l'a supprime
}
// si on a des valeurs pour ce filtre
}else{
// on met à jour l'objet filtre
filters[filter.type] = filter;
$(window).data('filter', filters);
// si le filtre n'existe pas dans la liste on l'ajoute
/*if(!$(".search_filters_list #"+filter.type).length){
var output = '<a id="'+filter.type+'" class="filter_item" href="#">';
output += '<span class="libelle">'+filter.legend+'</span>';
output += '<span class="value"></span>';
output += '<i class="delete_filter fal fa-times"></i>';
output += '</a>';
$(".search_filters_list").append(output);
}*/
//$(".search_filters_list #"+filter.type+" .value").html(filter.libelle.join());
}
// affiche/masque le bouton de reinitialisation
if(Object.keys($(window).data('filter')).length > 0){
$(".filter_wrapper .reinit_search_btn").show();
}else{
$(".filter_wrapper .reinit_search_btn").hide();
}
}

View file

@ -422,6 +422,7 @@
&.inline{
flex-direction: column;
align-items: center;
.imageItem{
width: 96%;
padding: 4px 10px;

View file

@ -0,0 +1,68 @@
@extends('layouts.app')
@include('layouts.header')
@section('content')
<main class="user_index template_2col">
<div class="side_menu">
<a href="{{ route('user.index') }}"><span>Gestion des utilisateurs</span><i class="fas fa-users-cog"></i></a>
<a class="active" href="{{ route('dossier.index') }}"><span>Gestion des dossiers</span><i class="fas fa-folders"></i></a>
<a href="{{ route('recovery.index') }}"><span>Récupération des médias</span><i class="fas fa-undo-alt"></i></a>
<a href="{{ route('arcadialink.index') }}"><span>Anomalies du lien Arcadia</span><i class="fas fa-bug"></i></a>
</div>
<div class="main_content">
@if ($errors->any())
<div class="alert alert-danger">
<i class="fas fa-times"></i>
<ul>
@foreach ($errors->all() as $error)
<li>{{ __($error) }}</li>
@endforeach
</ul>
</div>
@endif
@if (session()->has('error'))
<div class="alert alert-danger">
<i class="fas fa-times"></i>
<ul>
<li>{{ Session::get('error') }}</li>
</ul>
</div>
@endif
@if (session()->has('message'))
<div class="alert alert-ok">
<i class="fas fa-check"></i>
<ul>
<li>{{ Session::get('message') }}</li>
</ul>
</div>
@endif
<div class="heading">
<h1>Ajouter un sous-dossier</h1>
</div>
{!! Form::open( ['route' => 'dossier.store-sub', 'class' => 'dataform']) !!}
@method('POST')
<div class="form-field">
{!! Form::label('libelle', 'Libellé') !!}
{!! Form::text('libelle', null, ['required', 'maxlength' => '100' , 'minlength' => '4']) !!}
</div>
<div class="form-field">
{!! Form::label('description', 'Description') !!}
{!! Form::textarea('description', null) !!}
</div>
<div class="form-field">
<label for="parent">Parent</label>
<select name="parent_id" id="parent" required>
@foreach($dossiers as $dossier)
<option value="{{$dossier->id}}">{{$dossier->libelle}}</option>
@foreach($dossier->sousdossiers as $dossier2)
<option value="{{$dossier2->id}}">-- {{$dossier2->libelle}}</option>
@endforeach
@endforeach
</select>
</div>
<div class="button-row">
{!! Form::submit('Enregistrer', [ 'class' => 'btn']) !!} <a href="{{ route('user.index') }}" class="btn btn-black ml-10">Retour</a>
</div>
{!! Form::close() !!}
</div>
</main>
@endsection

View file

@ -83,7 +83,7 @@
</div>
<div class="button-row">
{!! Form::submit('Enregistrer', [ 'class' => 'btn']) !!} <a href="{{ route('user.index') }}" class="btn btn-black ml-10">Annuler</a>
{!! Form::submit('Enregistrer', [ 'class' => 'btn']) !!} <a href="{{ route('user.index') }}" class="btn btn-black ml-10">Retour</a>
</div>
{!! Form::close() !!}
</div>

View file

@ -48,6 +48,7 @@
{!! Form::label('description', 'Description') !!}
{!! Form::textarea('description', $dossier->description) !!}
</div>
@if ($dossier->parent_id === null)
<div class="form-section">
{!! Form::label('sujet', 'Sujet associé') !!}
</div>
@ -84,9 +85,9 @@
</div>
</div>
</div>
@endif
<div class="button-row">
{!! Form::submit('Enregistrer', [ 'class' => 'btn']) !!} <a href="{{ route('dossier.index') }}" class="btn btn-black ml-10">Annuler</a>
{!! Form::submit('Enregistrer', [ 'class' => 'btn']) !!} <a href="{{ route('dossier.index') }}" class="btn btn-black ml-10">Retour</a>
<a href="#" class="btn btn-black floatr btn_delete_dossier">Supprimer ce dossier</a>
</div>
{!! Form::close() !!}

View file

@ -12,6 +12,7 @@
<div class="heading">
<h1>Gestion des dossiers</h1>
<a href="{{ route('dossier.create') }}" class=" btn"><i class="fal fa-plus"></i> Ajouter</a>
<a href="{{ route('dossier.create-sub') }}" class=" btn"><i class="fal fa-plus"></i> Ajouter sous-dossier</a>
</div>
<div class="filter_row group">
@ -44,6 +45,20 @@
<td>{{ $dossier->sujet->libelle }}</td>
<td>{{ $dossier->marques->implode('libMarq', ', ') }}</td>
</tr>
@foreach($dossier->sousdossiers as $dossier2)
<tr class="data_row" attr-sujet="{{ $dossier2->sujet->codeSujet}}">
<td><a href="{{ route('dossier.edit', $dossier2) }}">-- {{ $dossier2->libelle }}</a></td>
<td>{{ $dossier2->sujet->libelle }}</td>
<td>{{ $dossier2->marques->implode('libMarq', ', ') }}</td>
</tr>
@foreach($dossier2->sousdossiers as $dossier3)
<tr class="data_row" attr-sujet="{{ $dossier3->sujet->codeSujet}}">
<td><a href="{{ route('dossier.edit', $dossier3) }}">---- {{ $dossier3->libelle }}</a></td>
<td>{{ $dossier3->sujet->libelle }}</td>
<td>{{ $dossier3->marques->implode('libMarq', ', ') }}</td>
</tr>
@endforeach
@endforeach
@endforeach
<tfoot>
<tr>

View file

@ -11,21 +11,7 @@
<header>
<mm-filters typemedias='@json($typemedias)' etiquettes='@json($etiquettes)'></mm-filters>
<div class="action_wrapper group">
@if (Auth::user()->hasRole([config('roles.const.CONTRIBUTEUR'), config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]))
<a href="#" class="action_add_media"><i class="fas fa-file-upload"></i> Ajouter un média</a>
@endif
<a href="#" class="action_download_media"><i class="fas fa-file-download"></i> Télécharger</a>
<a href="#" class="action_add_basket"><i class="fas fa-shopping-basket"></i> Ajouter au panier</a>
@if (Auth::user()->hasRole([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]))
{{--<a href="#" class="action_delete_media"><i class="fas fa-trash-alt"></i> Supprimer</a>--}}
@endif
@if (Auth::user()->hasRole([config('roles.const.CONTRIBUTEUR'), config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]))
<a href="#" class="action_duplicate_media"><i class="far fa-copy"></i> Dupliquer</a>
@endif
@if (Auth::user()->hasRole([config('roles.const.CONTRIBUTEUR'), config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]))
<a href="#" class="action_tag_media"><i class="fas fa-tags"></i> Etiquette</a>
@endif
<mm-actions csrf="{{csrf_token()}}" etiquettes='@json($etiquettes)'></mm-actions>
<div class="display">
<i class="fas fa-th selected"></i>
<i class="fal fa-list"></i>
@ -35,131 +21,9 @@
</header>
<mm-display></mm-display>
</div>
<div class="side_menu panier_side_menu collapse">
<header>
<div class="close_side_menu"><i class="fas fa-shopping-basket"></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>
<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>
<div class="panier_content">
</div>
</div>
<mm-basket></mm-basket>
</main>
<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>
<p><textarea class="form_folder_description" placeholder="Description du dossier"></textarea></p>
<p>Créé le : <span class="form_folder_datecreate"></span></p>
<hr/>
<p class="button_bar">
<a href="#" class="btn form_folder_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_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/>
<ul>
@foreach ($etiquettes as $etiquette)
<li><a class="etiquette" data-id="{{$etiquette->etiquette_id}}" href="#" style="background-color:{{$etiquette->color}}; border-color:{{$etiquette->color}}" >{{$etiquette->libelle}}</a></li>
@endforeach
</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/>
<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"></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 class="upload_container high-level">
<span class="fileinput-button">
<a class="btn btn-primary"><i class="fas fa-plus-circle"></i><span> Ajouter vos médias</span></a>
<input id="fileupload" type="file" name="files[]" multiple>
</span>
<div class="content_wrapper">
<!-- The container for the uploaded errors -->
<div id="upload_errors"></div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
</div>
<div class="upload_bar">
<a id="submit" class="btn" href="#">Transférer</a>
<a id="close_upload_form" class="" href="#">Fermer</a>
<!-- The global progress bar -->
<div id="progress" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
</div>
<br>
</div>
<div id="ListUploadedFiles" style="display: none;" >
<h3><i class="fas fa-user-cog"></i> Gestion des médias téléversés</h3>
<hr/>
<div class="list_uploaded_files"></div>
<hr/>
<div style="margin-top: 20px; text-align: center;">
<a id="CloseListUploadedFiles" class="btn" href="#">Fermer</a>
</div>
</div>
@endsection
@section('scripts')
@if (session('autoOpen'))
@ -188,5 +52,4 @@
<script src="{{ asset('js/darkroom.js') }}"></script>
<script src="{{ asset('js/openseadragon.min.js') }}"></script>
<script src="{{ asset('js/jquery.caret.min.js') }}"></script>
<script src="{{ asset('js/jquery.tag-editor.min.js') }}"></script>
@endsection

View file

@ -55,11 +55,14 @@ Route::group(['middleware' => ['auth']], function () {
Route::post('/ajax/favoris-basket', 'UserController@favorisBasket');
Route::post('/ajax/remove-basket', 'PanierController@removeBasket');
Route::post('/ajax/get-basket', 'PanierController@getBasket');
Route::post('/ajax/get-baskets', 'PanierController@getBaskets');
Route::post('/ajax/save-basket-property', 'PanierController@saveBasketProperty');
// Back office
Route::resource('user', 'UserController');
Route::post('/check-matricule', 'UserController@checkMatricule');
Route::get('/dossier/create-sub', 'DossierController@createSub')->name('dossier.create-sub');
Route::post('/dossier/store-sub', 'DossierController@storeSub')->name('dossier.store-sub');
Route::resource('dossier', 'DossierController');
Route::get('/recovery', 'RecoveryController@index')->name('recovery.index');
Route::post('/check-arcadia-id', 'RecoveryController@checkArcadiaId');

1
webpack.mix.js vendored
View file

@ -17,6 +17,5 @@ mix.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');