Ajout de l'historique + fix divers

This commit is contained in:
Yann Gonidec 2019-07-22 14:54:42 +02:00
parent 4b08a9feeb
commit b30180717a
19 changed files with 276 additions and 53 deletions

View file

@ -280,7 +280,7 @@ class ImportArcadiaFiles extends Command
}
// ---- Suppression du fichier
//Storage::disk('arcadia')->delete($filename);
Storage::disk('arcadia')->delete($filename);
$bar->advance();
}

View file

@ -28,7 +28,18 @@ class Dossier extends Model
*/
public function getMediacountAttribute()
{
return $this->medias()->count();
$userId = Auth::user()->id;
if($this->parent_id != 1 && $this->id != 1){ // dossier classic
return $this->medias()
->where(function ($query) use ( $userId ) {
$query->where('statut', '<>', config('services.statut.brouillon'))
->orWhere('created_by', $userId);
})
->count();
}else{ // dossier dépôt
return $this->medias()->count();
}
}
/**

26
app/Historique.php Normal file
View file

@ -0,0 +1,26 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Historique extends Model
{
public $timestamps = false;
/**
* Get the user that owns the historique.
*/
public function user()
{
return $this->belongsTo('App\User', 'user_id');
}
/**
* Get the media that owns the historique.
*/
public function media()
{
return $this->belongsTo('App\Media', 'media_id');
}
}

View file

@ -210,10 +210,11 @@ class DossierController extends Controller
$response['count'] = Media::where('sujet_id', $sujetId)
->whereNull('dossier_id')
->where(function ($query) use ( $userId ) {
$query->where('statut', '<>', 0)
$query->where('statut', config('services.statut.public_etendue'))
->orWhere('statut', config('services.statut.public'))
->orWhere('created_by', $userId);
})
->count();
->count();
$response['typevues'] = Typevue::where('sujet_id', $sujetId)->get();
$response['variantes'] = Variante::where('sujet_id', $sujetId)->get();
@ -247,7 +248,7 @@ class DossierController extends Controller
// ---- Le dossier
$dossier = new Dossier();
$dossier->libelle = $libelle;
$dossier->libelle = htmlspecialchars($libelle);
$dossier->description = $description;
$dossier->parent_id = $parent_id;
if($parent_id == 1){ // dossier de dépôt
@ -272,7 +273,7 @@ class DossierController extends Controller
// ---- Le dossier
$dossier = new Dossier();
$dossier->libelle = $libelle;
$dossier->libelle = htmlspecialchars($libelle);
$dossier->description = $description;
$dossier->parent_id = 1;
$dossier->system = 1;

View file

@ -17,6 +17,7 @@ use App\Marque;
use App\Dossier;
use App\Tag;
use App\Article;
use App\Historique;
use App\Http\Traits\MediaTools;
class MediaController extends Controller
@ -68,11 +69,16 @@ class MediaController extends Controller
if($dossier_id == "0"){ // dossier racine
$query= Media::where('sujet_id', $sujet_id)
->whereNull('dossier_id');
}elseif($dossier_id == "-1"){
->whereNull('dossier_id')
->where(function ($query) use ( $userId ) {
$query->where('statut', config('services.statut.public_etendue'))
->orWhere('statut', config('services.statut.public'))
->orWhere('created_by', $userId);
});
}elseif($dossier_id == "-1"){ // recherche global
$query = Media::where('sujet_id', $sujet_id)
->where(function ($query) use ( $userId ) {
$query->where('statut', '<>', 0)
$query->where('statut', config('services.statut.public_etendue'))
->orWhere('created_by', $userId);
});
}else{
@ -81,7 +87,7 @@ class MediaController extends Controller
$query = Media::where('sujet_id', $sujet_id)
->where('dossier_id', $dossier_id)
->where(function ($query) use ( $userId ) {
$query->where('statut', '<>', 0)
$query->where('statut', '<>', config('services.statut.brouillon'))
->orWhere('created_by', $userId);
});
}else{ // dossier dépôt
@ -152,25 +158,43 @@ class MediaController extends Controller
public function moveMedia(Request $request)
{
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
$response = array();
$response = false;
$dossier_id = $request->input('dossier_id');
$data = $request->input('data');
$sujet_id = $request->input('sujet_id');
$data = explode(",", $data);
foreach ($data as $key => $media_id) {
$media = Media::where('id', $media_id)->first();
if($media){
$media->sujet_id = $sujet_id;
if($dossier_id > 0){
$media->dossier_id = $dossier_id;
}else{
$media->dossier_id = null;
}
$media->save();
$user_id = Auth::user()->id;
$libelle = "";
if($dossier_id > 0){
$dossier = Dossier::where('id', $dossier_id)->first();
if($dossier){
$libelle = $dossier->libelle;
}
}
return json_encode(true);
foreach ($data as $key => $media_id) {
$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;
}else{
$media->dossier_id = null;
$historique->description = "Média déplacé à la racine";
}
$media->save();
$historique->save();
}
}
return json_encode($response);
}
/**
@ -181,12 +205,21 @@ class MediaController extends Controller
{
$deletedMediasList = array();
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
$user_id = Auth::user()->id;
$deleteMedias = $request->input('medias');
$medias = Media::whereIn('id', $deleteMedias)->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->save();
$media->delete();
}
@ -249,6 +282,7 @@ class MediaController extends Controller
public function saveMedia(Request $request)
{
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR'), config('roles.const.CONTRIBUTEUR')]);
$user_id = Auth::user()->id;
$response = array();
$mediaUpdate = (object) $request->input('media');
@ -265,7 +299,21 @@ class MediaController extends Controller
}
$media->statut = $mediaUpdate->statut;
$media->copyright_id = $mediaUpdate->copyright_id;
$media->etiquette_id = $mediaUpdate->etiquette_id;
// ---- Historique des actions (etiquette seulement)
if($media->etiquette_id != $mediaUpdate->etiquette_id){
$curEtiquette = Etiquette::where('etiquette_id', $media->etiquette_id)->first();
$newEtiquette = Etiquette::where('etiquette_id', $mediaUpdate->etiquette_id)->first();
$historique = new historique();
$historique->user_id = $user_id;
$historique->media_id = $media->id;
$historique->type = "Etiquette";
$historique->description = $curEtiquette->libelle." -> ".$newEtiquette->libelle;
$historique->save();
$media->etiquette_id = $mediaUpdate->etiquette_id;
}
$media->save();
// MAJ des tags
@ -312,6 +360,15 @@ class MediaController extends Controller
$media->articles()->attach($articleId);
}
}
// ---- Historique des actions
$historique = new historique();
$historique->user_id = $user_id;
$historique->media_id = $media->id;
$historique->type = "Modification";
$historique->description = "Les informations du média on été modificées";
$historique->save();
}
$response = true;
@ -328,6 +385,7 @@ class MediaController extends Controller
$response = array();
$medias = $request->input('medias');
$etiquette_id = $request->input('etiquette_id');
$user_id = Auth::user()->id;
$etiquette = Etiquette::where('etiquette_id', $etiquette_id)->first();
$response = $etiquette;
@ -335,6 +393,16 @@ class MediaController extends Controller
foreach ($medias as $media_id) {
$media = Media::where('id', $media_id)->first();
if($media){
// ---- Historique des actions
$curEtiquette = Etiquette::where('etiquette_id', $media->etiquette_id)->first();
$historique = new historique();
$historique->user_id = $user_id;
$historique->media_id = $media->id;
$historique->type = "Etiquette";
$historique->description = $curEtiquette->libelle." -> ".$etiquette->libelle;
$historique->save();
// ---- Sauvegarde de la nouvelle étiquette
$media->etiquette_id = $etiquette_id;
$media->save();
}
@ -379,6 +447,13 @@ class MediaController extends Controller
$media->taille = $this->formatBytes($this->get_file_size($mediaPath));
$media->save();
$historique = new historique();
$historique->user_id = Auth::user()->id;;
$historique->media_id = $media->id;
$historique->type = "Retouche";
$historique->description = "Retouche de l'image";
$historique->save();
// Regénération des miniatures de base
$this->create_sys_thumb($media);
// ---- Creation des vignettes en lien avec le sujet du média
@ -399,9 +474,17 @@ class MediaController extends Controller
$response = false;
$media_id = $request->input('media_id');
$arcadia_id = $request->input('arcadia_id');
$historique = new historique();
$historique->user_id = Auth::user()->id;
$historique->media_id = $media_id;
$historique->type = "Modification";
if($arcadia_id == "" || $arcadia_id == 0){
$arcadia_id = NULL;
$historique->description = "Suppression de la référence Arcadia";
}else{
$historique->description = "Ajout de la référence Arcadia ".$arcadia_id;
$media = Media::where('arcadia_id', $arcadia_id)->first();
if($media) return json_encode($response);
}
@ -411,6 +494,7 @@ class MediaController extends Controller
$media->arcadia_id = $arcadia_id;
$media->save();
$response = true;
$historique->save();
}
return json_encode($response);
@ -422,6 +506,7 @@ class MediaController extends Controller
*/
public function getArticle(Request $request)
{
if(!$user = Auth::user()) abort(401, 'Cette action n\'est pas autorisée.');
$response = array();
$arcadia_id = $request->input('arcadia_id');
@ -435,7 +520,7 @@ class MediaController extends Controller
}
/**
* Renvoie un article par ID Arcadia
* Téléchargement des médias
*
*/
public function downloadMedia(Request $request)
@ -479,4 +564,20 @@ class MediaController extends Controller
return response()->download($fp)->deleteFileAfterSend($deleteFileAfterSend);
}
/**
* Renvoie l'historique des actions d'un média
*
*/
public function getMediaHistory(Request $request)
{
$response = array();
if(!$user = Auth::user()) abort(401, 'Cette action n\'est pas autorisée.');
$media_id = $request->input('media_id');
$media = Historique::where('media_id', $media_id)->with('user')->orderBy("created_date", "DESC")->get();
$response = $media;
return json_encode($response);
}
}

View file

@ -6,6 +6,7 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
use App\Media;
use App\Site;
use App\Historique;
use App\Http\Traits\MediaTools;
@ -180,6 +181,16 @@ class UploadController extends Controller {
$media->save();
break;
}
// ---- Historique des actions
$historique = new historique();
if($user = Auth::user()){
$historique->user_id = $user->id;
}
$historique->media_id = $media->id;
$historique->type = "Création";
$historique->description = "Média ajouté";
$historique->save();
}
$filest = array();

View file

@ -12,7 +12,7 @@ class TrustProxies extends Middleware
*
* @var array
*/
protected $proxies;
protected $proxies = '*';
/**
* The headers that should be used to detect proxies.

View file

@ -106,4 +106,12 @@ class Media extends Model
{
return $this->belongsTo('App\User', 'created_by');
}
/**
* Get the historiques for the media.
*/
public function historiques()
{
return $this->hasMany('App\Historique');
}
}

View file

@ -99,4 +99,12 @@ class User extends Authenticatable
{
return $this->hasMany('App\Media');
}
/**
* Get the historiques for the user.
*/
public function historiques()
{
return $this->hasMany('App\Historique');
}
}

View file

@ -143,7 +143,7 @@ return [
|
*/
'hosts' => explode(' ', env('LDAP_HOSTS', '10.1.3.89')),
'hosts' => explode(' ', env('LDAP_HOSTS', 'dtys05403.svlidc.com')),
/*
|--------------------------------------------------------------------------
@ -154,8 +154,7 @@ return [
|
*/
'port' => env('LDAP_PORT', 389),
// 'port' => env('LDAP_PORT', 636),
'port' => env('LDAP_PORT', 636),
/*
|--------------------------------------------------------------------------
@ -232,7 +231,7 @@ return [
|
*/
'use_ssl' => env('LDAP_USE_SSL', false),
'use_ssl' => env('LDAP_USE_SSL', true),
'use_tls' => env('LDAP_USE_TLS', false),
],

View file

@ -49,7 +49,7 @@ ServerSignature Off
#Header set Content-Security-Policy "script-src 'self' https://www.google.com"
# Protection contre le clickjacking. Interdit que le site soit intégré en iframe
#Header always set X-FRAME-OPTIONS "DENY"
Header always set X-FRAME-OPTIONS "SAMEORIGIN"
# Bloque la totalité du contenu lorsqu'une attaque XSS est suspectée
Header always set X-XSS-Protection "1; mode=block"
@ -57,9 +57,8 @@ ServerSignature Off
#Désactive la détection automatique du type des ressources
Header always set X-Content-Type-Options "nosniff"
# protege les cookies d'être modifiés par le client
#Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
</IfModule>
# BEGIN DEFLATE COMPRESSION

1
public/css/app.css vendored
View file

@ -14386,6 +14386,7 @@ table tfoot tr:hover {
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 80%;
}
#form_media .main_content .tab.tab_preview .svgElt {

41
public/js/app.js vendored
View file

@ -11001,6 +11001,12 @@ $(document).mouseup(function (e) {
if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) {
$(".filter_selector .list").hide();
} // ---- déselectionne les éléments si on clique en dehors
if ($(e.target).hasClass('media_container') || $(e.target).hasClass('wrapper')) {
$(".imageItem").attr("aria-grabbed", "false");
$(".imageItem").removeClass('flip');
}
}); // ---- Header : Ouverture formulaire de contact
@ -11712,12 +11718,6 @@ $(document).ready(function () {
if (!$(event.target).hasClass('imageItem')) {
return false;
}
}); // ---- déselectionne les éléments si on clique en dehors
$(".main_content .media_container").on("click", function (event) {
if (event.target !== this) return;
$(".imageItem").attr("aria-grabbed", "false");
$(".imageItem").removeClass('flip');
}); // ---- clique droit sur un média
$(".main_content .wrapper").on("contextmenu", '.imageItem', function (event) {
@ -12419,6 +12419,33 @@ $(document).ready(function () {
if ($(".tab_preview audio").length) {
$(".tab_preview audio").get(0).pause();
} // ---- Chargement de l'historique des actions
if ($(this).hasClass('form_media_history')) {
$(".tab_history table tbody").html('<tr><td colspan="4" style="text-align:center;"><i class="fal fa-circle-notch fa-spin"></i> Chargements de l\'historique</td></tr>');
$.ajax({
url: '/ajax/get-media-history',
method: 'POST',
dataType: 'json',
data: {
media_id: $(window).data('current_edit_media')
},
success: function success(result) {
if (result) {
$(".tab_history table tbody").html('');
$.each(result, function (index, history) {
var username = "";
if (null !== history.user) {
username = history.user.firstname + ' ' + history.user.lastname;
}
$(".tab_history table tbody").append('<tr><td>' + history.created_date + '</td><td>' + username + '</td><td>' + history.type + '</td><td>' + history.description + '</td></tr>');
});
}
}
});
}
}); // ---- sauvegarde de la popup d'édition
@ -12692,7 +12719,7 @@ function initFolderManager(sujetId) {
$("#variantes").find('option').remove();
$.each(variantes, function (index, variante) {
$("#variantes").append('<option value="' + variante.codeVariante + '" data-typevue="' + variante.typevue_id + '" >' + variante.libelle + '</option>');
}); // initialisation des formats de vignette disponibles autéléchargement
}); // initialisation des formats de vignette disponibles au téléchargement
$(window).data('formats', result.formats);
$('#form_download .download_format').html('');

8
resources/js/app.js vendored
View file

@ -126,6 +126,14 @@ $(document).mouseup(function(e) {
if (!filter_list.is(e.target) && filter_list.has(e.target).length === 0) {
$(".filter_selector .list").hide();
}
// ---- déselectionne les éléments si on clique en dehors
if ($(e.target).hasClass('media_container') || $(e.target).hasClass('wrapper')) {
$(".imageItem").attr("aria-grabbed", "false");
$(".imageItem").removeClass('flip');
}
});
// ---- Header : Ouverture formulaire de contact

34
resources/js/media.js vendored
View file

@ -421,13 +421,6 @@ $(document).ready(function() {
}
});
// ---- déselectionne les éléments si on clique en dehors
$(".main_content .media_container").on("click", function(event) {
if (event.target !== this) return;
$(".imageItem").attr("aria-grabbed", "false");
$(".imageItem").removeClass('flip');
});
// ---- clique droit sur un média
$(".main_content .wrapper").on("contextmenu", '.imageItem' , function(event) {
event.preventDefault();
@ -1075,6 +1068,31 @@ $(document).ready(function() {
if($(".tab_preview audio").length){
$(".tab_preview audio").get(0).pause()
}
// ---- Chargement de l'historique des actions
if($(this).hasClass('form_media_history')){
$(".tab_history table tbody").html('<tr><td colspan="4" style="text-align:center;"><i class="fal fa-circle-notch fa-spin"></i> Chargements de l\'historique</td></tr>');
$.ajax({
url: '/ajax/get-media-history',
method: 'POST',
dataType : 'json',
data: {
media_id : $(window).data('current_edit_media'),
},
success: function(result){
if(result){
$(".tab_history table tbody").html('');
$.each(result, function (index, history) {
var username = "";
if(null !== history.user){
username = history.user.firstname+' '+history.user.lastname;
}
$(".tab_history table tbody").append('<tr><td>'+history.created_date+'</td><td>'+username+'</td><td>'+history.type+'</td><td>'+history.description+'</td></tr>');
});
}
}
});
}
});
// ---- sauvegarde de la popup d'édition
@ -1338,7 +1356,7 @@ function initFolderManager(sujetId){
$("#variantes").append('<option value="'+variante.codeVariante+'" data-typevue="'+variante.typevue_id+'" >'+variante.libelle+'</option>');
});
// initialisation des formats de vignette disponibles autéléchargement
// initialisation des formats de vignette disponibles au téléchargement
$(window).data('formats', result.formats);
$('#form_download .download_format').html('');
$('#form_download .download_format').append('<option value="0">Format original</option>');

View file

@ -666,6 +666,7 @@
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 80%;
}
.svgElt{
width: auto;

View file

@ -260,13 +260,16 @@
<div class="wrapper">
<h3>Historique des actions</h3>
<table>
<thead>
<tr>
<th>DATE</th>
<th>UTILISATEUR</th>
<th>TYPE</th>
<th>COMMENTAIRE</th>
</tr>
<!-- <tr><td>02/05/2019 10:02</td><td>Sandrine Bellaud</td><td>Ajout</td><td>création du média</td></tr> -->
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td colspan="4">

View file

@ -102,14 +102,14 @@
<div class="order">
<span>Trier par : </span>
<select id="order_select" >
<option value="created_at" data-order="desc" >Date de création &#9660;</option>
<option value="created_at" data-order="asc" >Date de création &#9650;</option>
<option value="updated_at" data-order="desc" >Date de modification &#9660;</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="libelle" data-order="desc" >Libellé &#9660;</option>
<option value="updated_at" data-order="desc" >Date de modification &#9660;</option>
<option value="libelle" data-order="asc" >Libellé &#9650;</option>
<option value="version" data-order="desc" >Version &#9660;</option>
<option value="libelle" data-order="desc" >Libellé &#9660;</option>
<option value="version" data-order="asc" >Version &#9650;</option>
<option value="version" data-order="desc" >Version &#9660;</option>
</select>
</div>
</div>

View file

@ -40,6 +40,7 @@ Route::group(['middleware' => ['auth']], function(){
Route::post('/ajax/set-id-arcadia', 'MediaController@setIdArcdadia');
Route::post('/ajax/get-article', 'MediaController@getArticle');
Route::post('/ajax/download-media', 'MediaController@downloadMedia')->name('downloadMedia');
Route::post('/ajax/get-media-history', 'MediaController@getMediaHistory')->name('downloadMedia');
// Back office
Route::resource('user', 'UserController');