- VUEJS sans Suppression
This commit is contained in:
parent
ad1a380f62
commit
10cb439c40
29 changed files with 1070 additions and 71465 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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){
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
15602
public/css/app.css
vendored
File diff suppressed because one or more lines are too long
54095
public/js/app.js
vendored
54095
public/js/app.js
vendored
File diff suppressed because one or more lines are too long
37
resources/js/app.js
vendored
37
resources/js/app.js
vendored
|
|
@ -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) {
|
||||
|
|
|
|||
339
resources/js/components/media-manager/ActionsComponent.vue
Normal file
339
resources/js/components/media-manager/ActionsComponent.vue
Normal 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>
|
||||
297
resources/js/components/media-manager/BasketComponent.vue
Normal file
297
resources/js/components/media-manager/BasketComponent.vue
Normal 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>
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -61,6 +61,8 @@
|
|||
}).catch(error => {
|
||||
console.log(error);
|
||||
});
|
||||
}else{
|
||||
this.links = [];
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
975
resources/js/media.js
vendored
975
resources/js/media.js
vendored
File diff suppressed because it is too large
Load diff
390
resources/js/panier.js
vendored
390
resources/js/panier.js
vendored
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
168
resources/js/searchengine.js
vendored
168
resources/js/searchengine.js
vendored
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
1
resources/sass/partials/media.scss
vendored
1
resources/sass/partials/media.scss
vendored
|
|
@ -422,6 +422,7 @@
|
|||
|
||||
&.inline{
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
.imageItem{
|
||||
width: 96%;
|
||||
padding: 4px 10px;
|
||||
|
|
|
|||
68
resources/views/dossiers/create-sub.blade.php
Normal file
68
resources/views/dossiers/create-sub.blade.php
Normal 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
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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() !!}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
1
webpack.mix.js
vendored
|
|
@ -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');
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue