Ticket 552: Delete files reactivation (except locked ones)

This commit is contained in:
Jérémy Munsch 2022-04-04 18:28:55 +02:00
parent aad92ff352
commit 5d69546de5
No known key found for this signature in database
GPG key ID: 55196BEE445F6049
8 changed files with 191 additions and 90 deletions

View file

@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Http\Requests\Bo\AjaxDeleteMediaRequest;
use App\Http\Traits\ArcadiaLink;
use Elasticquent\ElasticquentTrait;
use Illuminate\Support\Facades\Auth;
@ -643,41 +644,45 @@ class MediaController extends Controller
/**
* supprimer des médias
*
* @param AjaxDeleteMediaRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function removeMedia(Request $request)
public function removeMedia(AjaxDeleteMediaRequest $request)
{
$deletedMediasList = array();
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
$user_id = Auth::user()->id;
$deleteMedias = $request->input('medias');
$deletedMediasList = [];
if (Auth::user()->hasRole(config('roles.const.ADMIN'))){
$medias = Media::whereIn('id', $deleteMedias)->get();
}else{
$medias = Media::whereIn('id', $deleteMedias)->whereNull('arcadia_id')->get();
/** @var \App\User $user */
$user = auth()->user();
$user->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
$user_id = Auth::user()->id;
if ($user->hasRole(config('roles.const.ADMIN'))) {
$medias = Media::whereIn('id', $request->medias)->get();
} else {
$medias = Media::whereIn('id', $request->medias)->whereNull('arcadia_id')->get();
}
foreach ($medias as $media) {
$deletedMediasList[] = $media->id;
// Historique des actions
$historique = new historique();
$historique->user_id = $user_id;
$historique->media_id = $media->id;
$historique->type = "Suppression";
$historique->description = "Le média a été supprimé";
// * Historique des actions
$historique = new Historique();
$historique->user_id = $user->id;
$historique->media_id = $media->id;
$historique->type = 'Suppression';
$historique->description = 'Le média a été supprimé';
$historique->save();
// Elasticsearch
// * Elasticsearch
$media->removeFromIndex();
$media->delete();
// Lien Arcadia
// * Lien Arcadia
ArcadiaLink::delete($media);
}
return json_encode($deletedMediasList);
return response()->json($deletedMediasList);
}
/**

View file

@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Bo;
use Illuminate\Foundation\Http\FormRequest;
class AjaxDeleteMediaRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function authorize()
{
return auth()->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'medias' => 'required|array',
'medias.*' => 'exists:medias,id,deleted_at,NULL'
];
}
}

3
resources/js/app.js vendored
View file

@ -302,6 +302,7 @@ $.fancyMessage = function( opts ) {
title: 'Are you sure?',
message: '',
type: '',
callback: $.noop
}, opts || {})
return $.fancybox.open({
@ -317,7 +318,7 @@ $.fancyMessage = function( opts ) {
'</p>' +
'</div>',
opts: {
afterClose: opts.afterClose,
afterClose: opts.callback,
animationDuration: 350,
animationEffect: 'material',
modal: false,

View file

@ -1,11 +1,10 @@
<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="fa fa-copy"></i> Dupliquer</a>
<a v-if="storeRole !== 2" @click="applySticker" href="#" class="action_tag_media"><i class="fas fa-tags"></i>
<a v-if="storeRole !== 2" v-on:click.prevent="openUploadFrom" href="#" class="action_add_media"><i class="fas fa-file-upload"></i> Ajouter un média</a>
<a href="#" v-on:click.prevent="download" class="action_download_media"><i class="fas fa-file-download"></i> Télécharger</a>
<a v-if="(storeRole === 1 || storeRole === 4) && !selectionContainsLockedMedias" v-on:click.prevent="deleteMedias" class="action_delete_media"><i class="fas fa-trash-alt"></i> Supprimer</a>
<a v-if="storeRole !== 2 && !selectionContainsLockedMedias" v-on:click.prevent="duplicateMedia" href="#" class="action_duplicate_media"><i class="fa fa-copy"></i> Dupliquer</a>
<a v-if="storeRole !== 2" v-on:click.prevent="applySticker" href="#" class="action_tag_media"><i class="fas fa-tags"></i>
Etiquette</a>
<div id="form_etiquette" style="display: none;">
@ -112,7 +111,8 @@
data: function () {
return {
files: [],
uploadedFiles: []
uploadedFiles: [],
selectionContainsLockedMedias : true
}
},
methods: {
@ -159,6 +159,58 @@
});
}
},
deleteMedias() {
let self = this, medias = this.storeGrabbed
if (Object.keys(medias).length === 0) {
$.fancyMessage({
title: "Supprimer un média",
message: "Veuillez sélectionner un média.",
type: "info"
});
} else {
$.fancyConfirm({
title: "Suppression de panier",
message: 'Etes-vous sûr de vouloir supprimer ces média ?',
okButton: 'Supprimer',
noButton: 'Annuler',
callback: function (value) {
if(!value) {
return;
}
$.ajax({
url: '/ajax/remove-media',
method: 'POST',
dataType : 'json',
data: {
medias: medias.map(function(obj) { return obj.id })
},
success: function(result) {
let reload = function() {
self.$store.commit({
type: 'Reload',
reload: Math.random()
})
}
if(result.length != medias.length) {
$.fancybox.close()
if(medias.length == 1) {
$.fancyMessage({title : "Attention", message : "Ce média est lié à Arcadia. Suppression refusée. ", type : "error"})
}else{
$.fancyMessage({title : "Attention", message : "Votre sélection contient des médias liés à Arcadia. Ces médias ne seront pas supprimés.", type : "info", callback: reload})
}
} else {
$.fancyMessage({title : "Suppression de média", message : "Le média a été supprimé.", type : "info", callback: reload})
}
},
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"})
}
})
}
})
}
},
applySticker() {
if (Object.keys(this.storeGrabbed).length === 0) {
$.fancyMessage({
@ -375,6 +427,19 @@
}
});
}
},
storeGrabbed() {
let self = this
self.selectionContainsLockedMedias = false
this.storeGrabbed.map((obj) => {
if(obj.isLocked) {
self.selectionContainsLockedMedias = true
}
})
if(!this.storeGrabbed.length) {
// * Hide if empty selection
self.selectionContainsLockedMedias = true
}
}
},
}

View file

@ -161,13 +161,14 @@
}else{
if (response.data.data.length){
this.medias.data.push(...response.data.data);
$state.loaded();
console.log($state)
$state.loaded()
this.$store.commit({
type: 'updateRole',
role: response.data.role
});
}else{
$state.complete();
$state.complete()
}
this.scrollLoader = false;
}
@ -189,6 +190,7 @@
this.offset = this.offset + this.limit;
})
.catch(function (error) {
console.log(error)
if(error.response.status === 419) {
__DAM.methods.sessionTimedOut()
return;
@ -197,7 +199,7 @@
});
},
infiniteScroll($state) {
this.loadMedias($state);
this.loadMedias($state)
},
resetInfiniteScroll() {
this.infiniteId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);

View file

@ -16,7 +16,7 @@
</header>
<div class="main_content">
<mm-me-tab-preview :currentTab="currentTab"></mm-me-tab-preview>
<mm-me-tab-edit :currentTab="currentTab" :typemedias="typemedias" :langues="langues" :societes="societes" :marques="marques" :etiquettes="etiquettes" :copyrights="copyrights"></mm-me-tab-edit>
<mm-me-tab-edit :currentTab="currentTab" :typemedias="typemedias" :langues="langues" :societes="societes" :marques="marques" :etiquettes="etiquettes" :copyrights="copyrights" @closeEdit="close"></mm-me-tab-edit>
<mm-me-tab-links :currentTab="currentTab"></mm-me-tab-links>
<mm-me-tab-history :currentTab="currentTab"></mm-me-tab-history>
</div>

View file

@ -196,9 +196,8 @@
</div>
</div>
<div class="button_bar">
<!--<button v-if="this.storeMedia.role === 1 || this.storeMedia.role === 3" class="btn btn-red btn_tab_edit_delete" type="button" name="button" :disabled="this.oMedia.isLocked === 1">Supprimer</button>-->
<button @click="CheckForm" v-if="storeRole !== 2" class="btn btn_tab_edit_save" type="button" name="button"
:disabled="this.oMedia.isLocked === 1">Sauvegarder
<button v-if="this.storeRole === 1 || this.storeRole === 3" class="btn btn-red btn_tab_edit_delete" v-on:click.prevent="DeleteMedia" type="button" name="button" :disabled="oMedia.isLocked === 1">Supprimer</button>
<button @click="CheckForm" v-if="storeRole !== 2" class="btn btn_tab_edit_save" type="button" name="button" :disabled="oMedia.isLocked === 1">Sauvegarder
</button>
<!-- <a href="#" class="btn btn-black mr-10 btn_tab_edit_cancel">Fermer</a>-->
</div>
@ -415,6 +414,48 @@
console.log(error);
});
},
DeleteMedia() {
let self = this
$.fancyConfirm({
title: "Suppression de panier",
message: 'Etes-vous sûr de vouloir supprimer ce média ? ' + (self.oMedia.arcadia_id ? '(Lié à Arcadia)' : ''),
okButton: 'Supprimer',
noButton: 'Annuler',
callback: function (value) {
if(!value) {
return;
}
$.ajax({
url: '/ajax/remove-media',
method: 'POST',
dataType : 'json',
data: {
medias: [self.oMedia.id]
},
success: function(result){
if(result.length != 1) {
$.fancybox.close()
if(medias.length == 1) {
$.fancyMessage({title : "Attention", message : "Ce média est lié à Arcadia. Suppression refusée. ", type : "error"})
}else{
$.fancyMessage({title : "Attention", message : "Votre sélection contient des médias liés à Arcadia. Ces médias ne seront pas supprimés.", type : "info"})
}
} else {
self.$emit('closeEdit')
$.fancyMessage({title : "Suppression de média", message : "Le média a été supprimé.", type : "info"})
$.each(result, function (index, value) {
self.DeleteArticles(value)
})
}
},
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"})
}
})
}
})
},
AddArticles() {
if (this.oMedia.isLocked === 1)
return;
@ -474,8 +515,9 @@
});
},
DeleteArticles(article_id) {
if (this.oMedia.isLocked === 1)
if (this.oMedia.isLocked === 1) {
return;
}
this.oMedia.articles = this.oMedia.articles.filter(e => e.id !== article_id);
},
AddMarques(marque) {
@ -504,6 +546,15 @@
}
</script>
<style scoped>
<style lang="scss">
.main_content {
button:disabled,
button:disabled:hover,
button[disabled],
button[disabled]:hover {
border: 1px solid #999999 !important;
background-color: #cccccc !important;
color: #666666 !important;
}
}
</style>

54
resources/js/media.js vendored
View file

@ -153,60 +153,6 @@ $(document).ready(function () {
removeMedias(medias);
});
// Suppression d'un média
$(".btn_tab_edit_delete").on("click", function (event) {
event.preventDefault();
if ($(".tab_edit #arcadia_id").val().length) {
var r = confirm("Etes-vous sûr de vouloir supprimer ce média ? (Lié à Arcadia)");
} else {
var r = confirm("Etes-vous sûr de vouloir supprimer ce média ?");
}
if (r == true) {
var medias = [$(window).data('current_edit_media')];
$.ajax({
url: '/ajax/remove-media',
method: 'POST',
dataType : 'json',
data: {
medias: medias
},
success: function(result){
$.each(result, function (index, value) {
$(".media_container .imageItem[data-id='"+value+"']").remove();
});
// ---- MAJ du nb de média dans le dossier
var currentFolder = $(window).data('currentFolder');
if(currentFolder == 0 || currentFolder == ""){
var count = $(".folder_container .root_folder .count");
}else{
var count = $(".folder_container .dd3-item[data-id='"+currentFolder+"'] > .dd3-content .count");
}
count.html(parseInt(count.html())-result.length);
if(result.length != medias.length){
$.fancybox.close();
if(medias.length == 1){
$.fancyMessage({title : "Attention", message : "Ce média est lié à Arcadia. Suppression refusée. ", type : "error"});
}else{
$.fancyMessage({title : "Attention", message : "Votre sélection contient des médias liés à Arcadia. Ces médias ne seront pas supprimés.", type : "info"});
}
}else{
$(".form_media_close").trigger('click');
$.fancyMessage({title : "Suppression de média", message : "Le média a été supprimé.", type : "info"});
}
},
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"});
}
});
}
});
// ---- gestion des onglets de la popup d'édition
$("#form_media .tabbtn").on("click" , function(event) {
return;