Ticket 552: Delete files reactivation (except locked ones)
This commit is contained in:
parent
aad92ff352
commit
5d69546de5
8 changed files with 191 additions and 90 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
31
app/Http/Requests/Bo/AjaxDeleteMediaRequest.php
Normal file
31
app/Http/Requests/Bo/AjaxDeleteMediaRequest.php
Normal 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
3
resources/js/app.js
vendored
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
54
resources/js/media.js
vendored
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue