- Add duplicateMedia

This commit is contained in:
Vincent BRIDIER 2019-12-06 17:16:21 +01:00
parent 9ad02ead8c
commit ee2fe4676c
5 changed files with 196 additions and 3 deletions

View file

@ -863,6 +863,82 @@ class MediaController extends Controller
return json_encode($response);
}
/**
* Duplique un média sans l'image
*/
public function duplicateMedia(Request $request)
{
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR'), config('roles.const.CONTRIBUTEUR')]);
$media_id = $request->input('media_id');
$media = Media::where('id', $media_id)->first();
if ($media){
if ($media->isLocked === 1){
return json_encode(array('status' => false, 'error' => "Le média est en attente d'un retour d'Arcadia."));
}
$n = $media->replicate();
$n->push();
foreach ($media->articles as $article) {
$n->articles()->attach($article);
}
foreach ($media->marques as $marque) {
$n->marques()->attach($marque);
}
foreach ($media->societes as $societe) {
$n->societes()->attach($societe);
}
foreach ($media->tags as $tag) {
$n->tags()->attach($tag);
}
$destinationPath = $this->get_mediaFolder() . "/";
$uid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
$filename = $uid . ".jpg";
Storage::copy("images/default.jpg", $destinationPath . $filename);
$n->arcadia_id = NULL;
$n->libelle = $n->libelle . '_copy';
$n->folder = $destinationPath;
$n->uid = $uid;
$n->extension = 'jpg';
$n->taille = $this->formatBytes($this->get_file_size($destinationPath . $filename));
$im = new \imagick($destinationPath . $filename);
$resolutions = $im->getImageResolution();
$n->resolution = round($resolutions['x'] * 2.54, 2);
$imageprops = $im->getImageGeometry();
$n->largeur = $imageprops['width'];
$n->hauteur = $imageprops['height'];
$n->largeur_mm = ceil(($n->largeur * 2.54 / $n->resolution) * 10);
$n->hauteur_mm = ceil(($n->hauteur * 2.54 / $n->resolution) * 10);
$n->duree = '';
$n->version = 1;
$n->isDefault = 1;
$n->statut = 0;
$n->created_at = NOW();
$n->updated_at = NOW();
$n->created_by = Auth::user()->id;
$n->save();
// ---- Creation des vignettes de base
$this->create_sys_thumb($n);
// ---- Creation des vignettes en lien avec le sujet du média
$this->create_thumb($n);
$media = Media::find($n->id);
$media->addToIndex();
return json_encode(array('status' => true, 'sujet_id' => $media->sujet_id, 'datas' => $media));
}
}
/**
* Sauvegarde toutes les informations d'un média
*

63
public/js/app.js vendored
View file

@ -12340,6 +12340,62 @@ $(document).ready(function () {
}
}).trigger("click");
}
});
$('.action_duplicate_media').on('click', function (e) {
e.preventDefault();
var medias = [];
$('.media_container .imageItem').each(function (index) {
if ($(this).attr("aria-grabbed") === "true") {
medias.push($(this).attr("data-id"));
}
});
if (medias.length === 0) {
$.fancyMessage({
title: "Dupliquer un média",
message: "Veuillez sélectionner un média.",
type: "info"
});
} else if (medias.length > 1) {
$.fancyMessage({
title: "Dupliquer un média",
message: "Vous ne pouvez dupliquer qu'un média à la fois.",
type: "info"
});
} else {
$(".media_container .loader").show();
$.ajax({
url: '/ajax/duplicate-media',
method: 'POST',
dataType: 'json',
data: {
media_id: medias[0]
},
success: function success(result) {
if (result.status === true) {
openEditor({
id: result.datas.id,
preview: result.datas.folder + result.datas.uid + "_preview." + result.datas.extension,
src: result.datas.folder + result.datas.uid + "." + result.datas.extension,
depot: 0,
typemedia: result.datas.typemedia_id,
ext: result.datas.extension
}, drPlugin, viewer);
$("#form_media .form_media_edit").trigger("click"); // On replace l'offset pour recharger
$(window).data('offset', $(window).data('offset') - $(window).data('limit'));
loadMedia(result.sujet_id);
$(".media_container .loader").hide();
} else {
$.fancyMessage({
title: "Dupliquer un média",
message: result.error,
type: "error"
});
}
}
});
}
}); // ---- Bouton pour remplacer un média par un autre
$('.form_media_replace').on('click', function (event) {
@ -13267,6 +13323,7 @@ window.create_UUID = function () {
};
window.openEditor = function (obj, drPlugin, viewer) {
var tab = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
console.log("openEditor Called"); // si le plugin de retouche a déjà été chargé
if (drPlugin != null) {
@ -13575,7 +13632,11 @@ window.openEditor = function (obj, drPlugin, viewer) {
$linkItem.find('.link_libelle').html(vignette.libelle + " " + vignette.extension + " " + vignette.resolution);
$linkItem.find('.link_input input').val(vignette.url);
$(".tab_links .table_links tbody").append($linkItem);
}); // affiche la popin
});
/*if (tab && tab == 'edit'){
$("#form_media .form_media_edit").trigger("click");
}*/
// affiche la popin
$("#form_media").fadeIn('fast');
},

54
resources/js/media.js vendored
View file

@ -911,6 +911,53 @@ $(document).ready(function() {
}
});
$('.action_duplicate_media').on('click', function (e) {
e.preventDefault();
let medias = [];
$('.media_container .imageItem').each(function (index) {
if( $(this ).attr("aria-grabbed") === "true" ){
medias.push($(this ).attr("data-id"));
}
});
if (medias.length === 0){
$.fancyMessage({title : "Dupliquer un média", message : "Veuillez sélectionner un média.", type : "info"});
}else if(medias.length > 1){
$.fancyMessage({title : "Dupliquer un média", message : "Vous ne pouvez dupliquer qu'un média à la fois.", type : "info"});
}else{
$(".media_container .loader").show();
$.ajax({
url: '/ajax/duplicate-media',
method: 'POST',
dataType : 'json',
data: {
media_id : medias[0],
},
success: function(result){
if (result.status === true){
openEditor({
id: result.datas.id,
preview: result.datas.folder + result.datas.uid + "_preview." + result.datas.extension,
src: result.datas.folder + result.datas.uid + "." + result.datas.extension,
depot: 0,
typemedia: result.datas.typemedia_id,
ext: result.datas.extension,
}, drPlugin, viewer);
$("#form_media .form_media_edit").trigger("click");
// On replace l'offset pour recharger
$(window).data('offset', $(window).data('offset')-$(window).data('limit'));
loadMedia(result.sujet_id);
$(".media_container .loader").hide();
}else{
$.fancyMessage({title : "Dupliquer un média", message : result.error, type : "error"});
}
}
});
}
});
// ---- Bouton pour remplacer un média par un autre
$('.form_media_replace').on('click',function(event){
event.preventDefault();
@ -1782,7 +1829,7 @@ window.create_UUID = function(){
return uuid;
}
window.openEditor = function (obj, drPlugin, viewer) {
window.openEditor = function (obj, drPlugin, viewer, tab = false) {
console.log("openEditor Called");
// si le plugin de retouche a déjà été chargé
@ -1826,6 +1873,7 @@ window.openEditor = function (obj, drPlugin, viewer) {
// Mémorise le média courant
$(window).data('current_edit_media', obj.id);
// sélectionne la tab preview à l'ouverture
$("#form_media .form_media_preview").trigger("click");
@ -2070,6 +2118,10 @@ window.openEditor = function (obj, drPlugin, viewer) {
$(".tab_links .table_links tbody").append($linkItem);
});
/*if (tab && tab == 'edit'){
$("#form_media .form_media_edit").trigger("click");
}*/
// affiche la popin
$("#form_media").fadeIn('fast');
},

View file

@ -93,6 +93,9 @@
@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>
@ -109,7 +112,7 @@
<option value="created_at" data-order="asc" >Date de création &#9650;</option>
<option value="created_at" data-order="desc" >Date de création &#9660;</option>
<option value="updated_at" data-order="asc" >Date de modification &#9650;</option>
<option value="updated_at" data-order="desc" >Date de modification &#9660;</option>
<option value="updated_at" data-order="desc" selected>Date de modification &#9660;</option>
<option value="libelle.keyword" data-order="asc" >Libellé &#9650;</option>
<option value="libelle.keyword" data-order="desc" >Libellé &#9660;</option>
<option value="version" data-order="asc" >Version &#9650;</option>

View file

@ -37,6 +37,7 @@ Route::group(['middleware' => ['auth']], function(){
Route::post('/ajax/recover-media', 'MediaController@recoverMedia');
Route::post('/ajax/get-media', 'MediaController@getOneMedia');
Route::post('/ajax/save-media', 'MediaController@saveMedia');
Route::post('/ajax/duplicate-media', 'MediaController@duplicateMedia');
Route::post('/ajax/apply-sticker', 'MediaController@applySticker');
Route::post('/ajax/edit-photo', 'MediaController@editPhoto');
Route::post('/ajax/set-id-arcadia', 'MediaController@setIdArcdadia');