front : suite popup édition de média

This commit is contained in:
Yann Gonidec 2019-06-17 09:22:10 +02:00
parent 00818c977d
commit ab44a4fa71
20 changed files with 831 additions and 110 deletions

15
app/Copyright.php Normal file
View file

@ -0,0 +1,15 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Copyright extends Model
{
/**
* The primary key associated with the table.
*
* @var string
*/
protected $primaryKey = 'copyright_id';
}

15
app/Etiquette.php Normal file
View file

@ -0,0 +1,15 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Etiquette extends Model
{
/**
* The primary key associated with the table.
*
* @var string
*/
protected $primaryKey = 'etiquette_id';
}

View file

@ -6,6 +6,7 @@ use App\Dossier;
use App\Sujet;
use App\Marque;
use App\Media;
use App\Typevue;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@ -22,7 +23,11 @@ class DossierController extends Controller
$dossiers = Dossier::whereNull('parent_id')
->get();
$sujets = Sujet::all();
return view('dossiers.index')->with(['dossiers'=> $dossiers, 'sujets'=> $sujets]);
return view('dossiers.index')->with([
'dossiers'=> $dossiers,
'sujets'=> $sujets,
]);
}
/**
@ -189,6 +194,7 @@ class DossierController extends Controller
$query->whereIn("marque_id", $marques);
})->get();
$response['count'] = Media::where('sujet_id', $sujetId)->whereNull('dossier_id')->count();
$response['typevues'] = Typevue::where('sujet_id', $sujetId)->get();
if(Auth::user()->hasRole([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')] )){
$response['draggable'] = true;

View file

@ -6,6 +6,10 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Sujet;
use App\Media;
use App\Typemedia;
use App\Langue;
use App\Copyright;
use App\Etiquette;
class MediaController extends Controller
{
@ -18,8 +22,18 @@ class MediaController extends Controller
*/
public function index()
{
$sujets = Sujet::all();
return view('media_manager')->with(['sujets'=> $sujets]);
$sujets = Auth::user()->sujets;
$typemedias = Typemedia::all();
$langues = Langue::all();
$copyrights = Copyright::all();
$etiquettes = Etiquette::all();
return view('media_manager')->with([
'sujets'=> $sujets,
'typemedias'=> $typemedias,
'langues'=> $langues,
'copyrights'=> $copyrights,
'etiquettes'=> $etiquettes,
]);
}
/**
@ -35,9 +49,14 @@ class MediaController extends Controller
$limit = $request->input('limit');
if($dossier_id == "0"){
$response['data'] = Media::where('sujet_id', $sujet_id)->whereNull('dossier_id')->offset($offset)->limit($limit)->orderBy('created_at', 'desc')->get();
$response['data'] = Media::where('sujet_id', $sujet_id)->whereNull('dossier_id')->with('Etiquette')->offset($offset)->limit($limit)->orderBy('created_at', 'desc')->get();
}else{
$response['data'] = Media::where('sujet_id', $sujet_id)->where('dossier_id', $dossier_id)->offset($offset)->limit($limit)->orderBy('created_at', 'desc')->get();
$response['data'] = Media::where('sujet_id', $sujet_id)->where('dossier_id', $dossier_id)->with('Etiquette')->offset($offset)->limit($limit)->orderBy('created_at', 'desc')->get();
}
if(Auth::user()->hasRole([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')] )){
$response['draggable'] = true;
}else{
$response['draggable'] = false;
}
return json_encode($response);
@ -49,6 +68,7 @@ class MediaController extends Controller
*/
public function moveMedia(Request $request)
{
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
$response = array();
$dossier_id = $request->input('dossier_id');
$data = $request->input('data');
@ -68,4 +88,33 @@ class MediaController extends Controller
return json_encode(true);
}
/**
* supprimer des médias
*
*/
public function removeMedia(Request $request)
{
Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]);
$medias = $request->input('medias');
Media::destroy($medias);
return json_encode(true);
}
/**
* Obtenir toutes les informations d'un média
*
*/
public function getOneMedia(Request $request)
{
$response = array();
$media_id = $request->input('media_id');
$media = Media::where('id', $media_id)->with('Sujet')->first();
if($media){
$response['data'] = $media;
}
return json_encode($response);
}
}

View file

@ -111,6 +111,11 @@ class UploadController extends Controller {
$media->largeur = $width;
$media->hauteur = $height;
$media->resolution = $this->get_dpi($destinationPath.$filename);
if($media->resolution != 0){
$media->largeur_mm = ceil(($width * 2.54 / $media->resolution)*10);
$media->hauteur_mm = ceil(($height * 2.54 / $media->resolution)*10);
}
$this->createThumbnail($destinationPath.$filename, $destinationPath.$uid.'_thumb.'.$extension, 200);
if($width >= 1500){
$this->createThumbnail($destinationPath.$filename, $destinationPath.$uid.'_preview.'.$extension, 1500);
@ -150,28 +155,34 @@ class UploadController extends Controller {
default:
$media->typemedia_id = 5;
if($extension == 'pdf'){
if(in_array($extension, array("pdf", "ai", "psd")) ){
$im = new \imagick();
$im->readImage($destinationPath.$filename.'[0]');
$im->setImageFormat('jpg');
$im->readImage($destinationPath.$filename);
if($extension == "pdf" || $extension == "psd"){
$im->setIteratorIndex(0);
}
//$im->setImageFormat('jpg');
//list($width,$height) = $im->getImageGeometry();
$imageprops = $im->getImageGeometry();
$width = $imageprops['width'];
$height = $imageprops['height'];
// create preview
$fp = $destinationPath.$uid.'_preview.jpg';
$fp = $destinationPath.$uid.'_preview.png';
if($width >= 1500){
$newHeight = (1500 * $height) / $width;
$im->resizeImage(1500,$newHeight, \imagick::FILTER_LANCZOS, 0.9, true);
//$newHeight = (1500 * $height) / $width;
//$im->resizeImage(1500,$newHeight, \imagick::FILTER_LANCZOS, 0.9, true);
$im->thumbnailImage(1500, 1500 , true);
}
$im->writeImage($fp);
// create thumb
$newHeight = (200 * $height) / $width;
$im->resizeImage(200, $newHeight, \imagick::FILTER_LANCZOS, 0.9, true);
$fp = $destinationPath.$uid.'_thumb.jpg';
//$newHeight = (200 * $height) / $width;
//$im->resizeImage(200, $newHeight, \imagick::FILTER_LANCZOS, 0.9, true);
$im->thumbnailImage(200, 200 , true);
$fp = $destinationPath.$uid.'_thumb.png';
$im->writeImage($fp);
}

View file

@ -110,12 +110,12 @@ trait MediaTools {
2 => [
'load' => 'imagecreatefromjpeg',
'save' => 'imagejpeg',
'quality' => 100
'quality' => 50
],
3 => [
'load' => 'imagecreatefrompng',
'save' => 'imagepng',
'quality' => 0
'quality' => 5
],
1 => [
'load' => 'imagecreatefromgif',

15
app/Langue.php Normal file
View file

@ -0,0 +1,15 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Langue extends Model
{
/**
* The primary key associated with the table.
*
* @var string
*/
protected $primaryKey = 'langue_id';
}

View file

@ -3,9 +3,11 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Media extends Model
{
use SoftDeletes;
protected $table = "medias";
/**
@ -31,4 +33,36 @@ class Media extends Model
{
return $this->belongsTo('App\Typemedia', 'typemedia_id');
}
/**
* Get the typevue that owns the media.
*/
public function typevue()
{
return $this->belongsTo('App\Typevue', 'typevue_id');
}
/**
* Get the langue that owns the media.
*/
public function langue()
{
return $this->belongsTo('App\Langue', 'typevue_id');
}
/**
* Get the copyright that owns the media.
*/
public function copyright()
{
return $this->belongsTo('App\Copyright', 'copyright_id');
}
/**
* Get the etiquette that owns the media.
*/
public function etiquette()
{
return $this->belongsTo('App\Etiquette', 'etiquette_id');
}
}

View file

@ -6,6 +6,8 @@ use Illuminate\Database\Eloquent\Model;
class Typemedia extends Model
{
protected $table = "typemedias";
/**
* The primary key associated with the table.
*

15
app/Typevue.php Normal file
View file

@ -0,0 +1,15 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Typevue extends Model
{
/**
* The primary key associated with the table.
*
* @var string
*/
protected $primaryKey = 'CODE_TYPEVUE';
}

View file

@ -1,3 +1,159 @@
# protection contre la lecture des répertoires
Options All -Indexes
# Masquer les informations du serveur
ServerSignature Off
# Protect .htaccess et .htpasswds
<Files ~ "^.*\.([Hh][Tt][AaPp])">
order allow,deny
deny from all
</Files>
# Protect sql files
<FilesMatch "\.sql">
Order allow,deny
Deny from all
</FilesMatch>
<IfModule mod_mime.c>
AddType application/vnd.ms-fontobject .eot
AddType application/x-font-opentype .otf
AddType image/svg+xml .svg
AddType application/x-font-ttf .ttf
AddType application/font-woff .woff
AddType application/font-woff2 .woff2
</IfModule>
### FILTRE CONTRE XSS, REDIRECTIONS HTTP, base64_encode, VARIABLE PHP GLOBALS VIA URL, MODIFIER VARIABLE _REQUEST VIA URL, TEST DE FAILLE PHP, INJECTION SQL SIMPLE
RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
RewriteCond %{QUERY_STRING} ^(.*)(%3C|<)/?script(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)?javascript(%3A|:)(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)document\.location\.href(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)(https?|ftp|mosConfig)(%3A|:)//(.*)$ [NC,OR] ## ATTENTION A CETTE REGLE. ELLE PEUT CASSER CERTAINES REDIRECTIONS RESSEMBLANT A: http://www.truc.fr/index.php?r=http://www.google.fr ##
RewriteCond %{QUERY_STRING} ^.*(_encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)GLOBALS(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)_REQUEST(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)(SELECT(%20|\+)|UNION(%20|\+)ALL|INSERT(%20|\+)|DELETE(%20|\+)|CHAR\(|UPDATE(%20|\+)|REPLACE(%20|\+)|LIMIT(%20|\+)|CONCAT(%20|\+)|DECLARE(%20|\+))(.*)$ [NC]
RewriteRule (.*) - [F]
<IfModule mod_headers.c>
# A TESTER la page n'accepte que les scripts provenant du même nom de domaine et de google.com (par exemple)
#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"
# Bloque la totalité du contenu lorsqu'une attaque XSS est suspectée
Header always set X-XSS-Protection "1; mode=block"
#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
</IfModule>
# BEGIN DEFLATE COMPRESSION
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/font-woff2
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
</IfModule>
# END DEFLATE COMPRESSION
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/pdf "access plus 0 seconds"
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType application/x-font-woff2 "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
ExpiresByType text/css "access plus 6 month"
ExpiresByType application/javascript "access plus 6 month"
ExpiresByType application/x-shockwave-flash "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 week"
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\\.(ico|jpe?g|png|gif|swf|svg)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
<FilesMatch "\\.(css)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\\.(js)$">
Header set Cache-Control "max-age=604800, private"
</FilesMatch>
<filesmatch "\\.(html|htm)$">
Header set Cache-Control "max-age=5, public"
</filesmatch>
<filesmatch "\\.(woff)$">
Header set Cache-Control "max-age=604800, public"
</filesmatch>
</IfModule>
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
Header unset Pragma
FileETag None
Header unset ETag
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes

33
public/css/app.css vendored
View file

@ -13674,6 +13674,28 @@ table tfoot tr:hover {
cursor: pointer;
}
.media_manager .main_content .media_container .wrapper .imageItem .etiquette {
position: absolute;
display: inline;
top: 38px;
left: 0;
z-index: 2;
color: #ffffff;
padding: 2px;
}
.media_manager .main_content .media_container .wrapper .imageItem .etiquette[data-id="0"] {
display: none;
}
.media_manager .main_content .media_container .wrapper .imageItem .etiquette i {
position: absolute;
right: -10px;
top: 0;
font-size: 30px;
line-height: 17px;
}
.media_manager .main_content .media_container .wrapper .imageItem .contextMenu {
position: absolute;
width: 100%;
@ -13810,7 +13832,7 @@ table tfoot tr:hover {
.media_manager .side_menu {
background-color: #3b3b3b;
position: relative;
width: 340px;
width: 450px;
height: 100%;
transition: 0.3s ease-in-out;
z-index: 1;
@ -13847,6 +13869,10 @@ table tfoot tr:hover {
border-radius: 50%;
}
.media_manager .side_menu header select {
width: 100%;
}
.media_manager .side_menu header .close_side_menu {
background-color: #3b3b3b;
position: absolute;
@ -14046,6 +14072,11 @@ table tfoot tr:hover {
height: 100%;
}
#form_media .main_content .tab.tab_preview embed {
width: 66%;
height: 99%;
}
#form_media .main_content .tab.tab_edit .tab_content {
overflow: auto;
height: calc(100% - 50px);

218
public/js/app.js vendored
View file

@ -10878,7 +10878,7 @@ function tableSearch(field, attr, search) {
function tableGlobalSearch(field, search, cols) {
var search = search.toUpperCase();
$(field).each(function (index, value) {
$row = $(this);
var $row = $(this);
var find = false;
$.each(cols, function (index, value) {
var dataCol = $row.find("td:nth-of-type(" + value + ")").text().toUpperCase();
@ -11014,7 +11014,7 @@ $(".contact_btn").on('click', function (event) {
$(".close_popup").on('click', function (event) {
event.preventDefault();
$.fancybox.getInstance().close();
$.fancybox.close();
}); // ---- Header : envoi formulaire de contact
$(".form_contact_send").on('click', function (event) {
@ -11356,10 +11356,10 @@ $(document).ready(function () {
},
success: function success(result) {
$(".folder_container .dd3-item[data-id='" + dossier_id + "'] > .dd3-content span").html(libelle);
$.fancybox.getInstance().close();
$.fancybox.close();
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.getInstance().close();
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de l'édition du dossier, merci d'actualiser la page.",
@ -11490,7 +11490,9 @@ $(document).ready(function () {
$(this).dblclick();
} else if ($target.hasClass('downloadItem')) {// Télécharger le média
} else if ($target.hasClass('addBasket')) {// ajouter le média au panier
} else if ($target.hasClass('deleteItem')) {// supprimer le média
} else if ($target.hasClass('deleteItem')) {
// supprimer le média
removeMedias([$(this).attr('data-id')]);
} else if ($target.hasClass('tagItem')) {// Appliquer une étiquette
}
@ -11562,13 +11564,14 @@ $(document).ready(function () {
event.preventDefault(); // initialise le nuage de Tags
$('#tag-editor').tagEditor({
initialTags: ['Paysage', 'Nature', 'Soleil'],
placeholder: 'Saissisez des tags',
removeDuplicates: false,
clickDelete: true
});
var minWidth = $(document).width();
var minHeight = $(document).height() - 43 - 40; // Mémorise le média courant
var minHeight = $(document).height() - 43 - 40; // récupère l'image de preview
var imgPreview = $(this).attr('data-preview'); // Mémorise le média courant
$(window).data('current_edit_media', $(this).attr('data-id')); // sélectionne la tab preview à l'ouverture
@ -11576,10 +11579,11 @@ $(document).ready(function () {
if ($(this).attr('data-typemedia') == 1) {
// média image
$("#form_media .form_media_retouch").show(); // on active l'onglet ressource
$("#form_media .form_media_retouch").show(); // on active l'onglet retouche
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge l'image de preview
$(".preview_img").val($(this).attr('data-preview'));
$(".tab_preview").html('<div id="openseadragon" ></div>');
$("#openseadragon").css('width', '100%');
$("#openseadragon").css('height', minHeight);
@ -11587,7 +11591,7 @@ $(document).ready(function () {
id: "openseadragon",
tileSources: {
type: "image",
url: $(".preview_img").val()
url: imgPreview
}
}); // charge l'image pour la retouche
@ -11602,14 +11606,13 @@ $(document).ready(function () {
save: {
callback: function callback() {
var newImage = this.darkroom.sourceCanvas.toDataURL();
$(".preview_img").val(newImage);
viewer.destroy();
viewer = null;
viewer = OpenSeadragon({
id: "openseadragon",
tileSources: {
type: "image",
url: $(".preview_img").val()
url: newImage
}
});
}
@ -11619,6 +11622,8 @@ $(document).ready(function () {
} else if ($(this).attr('data-typemedia') == 2) {
// média svg
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge le svg
$(".tab_preview").html('<img class="svgElt" src=""/>');
@ -11626,6 +11631,8 @@ $(document).ready(function () {
} else if ($(this).attr('data-typemedia') == 4) {
// média audio
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge l'audio
$(".tab_preview").html('<audio controls src=""></audio>');
@ -11633,6 +11640,8 @@ $(document).ready(function () {
} else if ($(this).attr('data-typemedia') == 3) {
// média video
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge la vidéo
$(".tab_preview").html('<video src="" controls></video>');
@ -11640,14 +11649,96 @@ $(document).ready(function () {
} else if ($(this).attr('data-typemedia') == 5) {
// média document
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
// charge l'aperçu
// pdf : on affiche le lecteur pdf
$(".tab_preview").html('<img class="svgElt" src=""/>');
$(".tab_preview img").attr("src", $(this).attr('data-preview'));
} // affiche la popin
if ($(this).attr('data-ext') == 'pdf') {
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge l'aperçu
$(".tab_preview").html('<embed src="" type="application/pdf">');
$(".tab_preview embed").attr("src", $(this).attr('data-src')); // psd et ai : on affiche la preview classique
} else if ($(this).attr('data-ext') == 'psd' || $(this).attr('data-ext') == 'ai') {
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge l'aperçu
$(".tab_preview").html('<div id="openseadragon" ></div>');
$("#openseadragon").css('width', '100%');
$("#openseadragon").css('height', minHeight);
viewer = OpenSeadragon({
id: "openseadragon",
tileSources: {
type: "image",
url: imgPreview
}
}); // autre document : pas d'aperçu
} else {
$("#form_media .form_media_preview").hide(); // masque l'onglet aperçu
$("#form_media .form_media_edit").trigger("click"); // sélectionne la tab d'édition à l'ouverture
}
} // chargement des données du média
$("#form_media").fadeIn('fast');
$.ajax({
url: '/ajax/get-media',
method: 'POST',
dataType: 'json',
data: {
media_id: $(window).data('current_edit_media')
},
success: function success(result) {
// chargement des données
$(".tab_edit #arcadia_id").val(result.data.arcadia_id);
$(".tab_edit #libelle").val(result.data.libelle);
$(".tab_edit #sujetLibelle").val(result.data.sujet.LIBELLE);
$(".tab_edit #typevues").val(result.data.typevue_id);
$(".tab_edit #typemedias").val(result.data.typemedia_id); //$(".tab_edit #variantes").val(result.data.etiquette_id);
$(".tab_edit #langues").val(result.data.langue_id);
$(".tab_edit #commentaire").val(result.data.commentaire); //$(".tab_edit #version").val(result.data.version);
$(".tab_edit #created_at").val(result.data.created_at);
$(".tab_edit #updated_at").val(result.data.updated_at);
$(".tab_edit #published_at").val(result.data.published_at); // liste des produits liés
// marque lié
// site lié
// tags $('#demo3').tagEditor('addTag', 'example');
$(".tab_edit #etiquettes").val(result.data.etiquette_id);
$(".tab_edit #extension").val(result.data.extension);
$(".tab_edit #copyrights").val(result.data.copyright_id);
$(".tab_edit #largeur").val(result.data.largeur);
$(".tab_edit #hauteur").val(result.data.hauteur);
$(".tab_edit #resolution").val(result.data.resolution);
$(".tab_edit #largeur_mm").val(result.data.largeur_mm);
$(".tab_edit #hauteur_mm").val(result.data.hauteur_mm); // affiche la popin
$("#form_media").fadeIn('fast');
},
error: function error(jqXHR, textStatus, errorThrown) {
// si le plugin de retouche a déjà été chargé
if (drPlugin !== null) {
drPlugin.selfDestroy();
drPlugin = null; // on détruit le plugin de retouche
} // si le plugin de preview a déjà été chargé
if (viewer !== null) {
viewer.destroy();
viewer = null; // on détruit le plugin de preview
}
$('#tag-editor').tagEditor('destroy');
$('.ed_on').hide();
$('.ed_off').show(); // on détruit le plugin de tag
$.fancyMessage({
title: "Edition d'un média",
message: "Ouverture du média impossible. Merci d'actualiser la page.",
type: "error"
});
}
});
}); // ---- fermeture de la popup d'édition
$(".form_media_close, .btn_tab_edit_cancel").on("click", function (event) {
@ -11658,7 +11749,10 @@ $(document).ready(function () {
if (drPlugin !== null) {
drPlugin.selfDestroy();
drPlugin = null; // on détruit le plugin de retouche
} // si le plugin de preview a déjà été chargé
if (viewer !== null) {
viewer.destroy();
viewer = null; // on détruit le plugin de preview
}
@ -11675,6 +11769,17 @@ $(document).ready(function () {
if ($(".tab_preview audio").length) {
$(".tab_preview audio").get(0).pause();
}
}); // ---- Suppression de média en masse
$('.action_delete_media').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"));
}
});
removeMedias(medias);
}); // ---- gestion des onglets de la popup d'édition
$("#form_media .tabbtn").on("click", function (event) {
@ -11745,7 +11850,7 @@ $(document).ready(function () {
url: "/ajax/upload-media",
dataType: 'json',
limitMultiFileUploads: 10,
maxChunkSize: 10000000,
maxChunkSize: 8000000,
dragover: function dragover(e, data) {
$(".uploader-window").fadeIn("fast");
},
@ -11867,10 +11972,18 @@ function initFolderManager(sujetId) {
},
success: function success(result) {
var output = '';
var draggable = result.draggable;
var data = result.data;
var draggable = result.draggable; // initialisation de la liste type vues
var typevues = result.typevues;
$("#typevues").find('option').remove();
$.each(typevues, function (index, typevue) {
$("#typevues").append('<option value="' + typevue.CODE_TYPEVUE + '">' + typevue.LIBELLE + '</option>');
}); // ajout du total à la racine
var total = result.count;
$(".root_folder .count").html(total);
$(".root_folder .count").html(total); // construction des dossiers
var data = result.data;
$.each(data, function (index, item) {
output += buildItem(item);
});
@ -11982,6 +12095,7 @@ function loadMedia(dossier_id, sujet_id) {
$(window).data('noMedia', true);
}
var draggable = result.draggable;
$.each(data, function (index, item) {
var ico = "";
var detail = "";
@ -12018,9 +12132,9 @@ function loadMedia(dossier_id, sujet_id) {
case 5:
ico = '<i class="fas fa-file"></i>';
if (item.extension = "pdf") {
thumb = item.source.split('.')[0] + "_thumb.jpg";
preview = item.source.split('.')[0] + "_preview.jpg";
if (item.extension == "pdf" || item.extension == "ai" || item.extension == "psd") {
thumb = item.source.split('.')[0] + "_thumb.png";
preview = item.source.split('.')[0] + "_preview.png";
} else {
itemClass = "doc";
}
@ -12030,7 +12144,8 @@ function loadMedia(dossier_id, sujet_id) {
default:
}
output += '<div class="imageItem" data-id="' + item.id + '" data-typemedia="' + item.typemedia_id + '" data-preview="' + preview + '" data-src="' + item.source + '" draggable="true" aria-grabbed="false">';
output += '<div class="imageItem" data-id="' + item.id + '" data-ext="' + item.extension + '" data-typemedia="' + item.typemedia_id + '" data-preview="' + preview + '" data-src="' + item.source + '" draggable="' + draggable + '" aria-grabbed="false">';
output += '<div class="etiquette" style="background-color:' + item.etiquette.color + ';" data-id="' + item.etiquette.etiquette_id + '" >' + item.etiquette.libelle + '<i style="color:' + item.etiquette.color + ';" class="fas fa-caret-right"></i></div>';
output += '<div class="contextMenu"><ul>';
output += '<li class="menu-option editItem"><i class="fas fa-edit"></i> Editer</li>';
output += '<li class="menu-option downloadItem"><i class="fas fa-file-download"></i> Télécharger</li>';
@ -12055,6 +12170,59 @@ function loadMedia(dossier_id, sujet_id) {
$(window).data('ajaxready', true);
}
});
} // ---- Supression de médias
function removeMedias(medias) {
if (medias.length == 0) {
$.fancyMessage({
title: "Attention",
message: "Veuillez sélectionner les médias à supprimer.",
type: "error"
});
} else {
$.fancyConfirm({
title: "Suppression de média",
message: "Êtes-vous sûr de vouloir supprimer " + medias.length + " média(s) ?",
okButton: 'Supprimer',
noButton: 'Annuler',
callback: function callback(value) {
if (value) {
$.ajax({
url: '/ajax/remove-media',
method: 'POST',
dataType: 'json',
data: {
medias: medias
},
success: function success(result) {
$.each(medias, function (index, value) {
$(".media_container .imageItem[data-id='" + value + "']").remove();
}); // ---- MAJ du nb de média dans le dossier
var currentFolder = $(".currentFolder").val();
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()) - medias.length);
},
error: function error(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({
title: "Attention",
message: "Erreur lors de la suppression du média, merci d'actualiser la page.",
type: "error"
});
}
});
}
}
});
}
} // ---- contruction de l'arborescence des dossiers

View file

@ -187,7 +187,7 @@ function tableGlobalSearch(field, search, cols){
var search = search.toUpperCase();
$(field).each(function (index, value) {
$row = $(this);
var $row = $(this);
var find = false;
$.each(cols, function (index, value) {
var dataCol = $row.find("td:nth-of-type("+value+")").text().toUpperCase();

2
resources/js/app.js vendored
View file

@ -142,7 +142,7 @@ $(".contact_btn").on('click',function(event) {
// ---- Header : fermeture de la popup
$(".close_popup").on('click',function(event) {
event.preventDefault();
$.fancybox.getInstance().close();
$.fancybox.close();
});
// ---- Header : envoi formulaire de contact

194
resources/js/media.js vendored
View file

@ -272,10 +272,10 @@ $(document).ready(function() {
},
success: function(result){
$(".folder_container .dd3-item[data-id='"+dossier_id+"'] > .dd3-content span").html(libelle);
$.fancybox.getInstance().close();
$.fancybox.close();
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.getInstance().close();
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'édition du dossier, merci d'actualiser la page.", type : "error"});
}
});
@ -399,6 +399,7 @@ $(document).ready(function() {
}else if ($target.hasClass('downloadItem')) { // Télécharger le média
}else if ($target.hasClass('addBasket')) { // ajouter le média au panier
}else if ($target.hasClass('deleteItem')) { // supprimer le média
removeMedias([$(this).attr('data-id')]);
}else if ($target.hasClass('tagItem')) { // Appliquer une étiquette
}
return false;
@ -466,7 +467,6 @@ $(document).ready(function() {
// initialise le nuage de Tags
$('#tag-editor').tagEditor({
initialTags: ['Paysage', 'Nature', 'Soleil'],
placeholder: 'Saissisez des tags',
removeDuplicates : false,
clickDelete : true
@ -475,25 +475,27 @@ $(document).ready(function() {
var minWidth = $(document).width();
var minHeight = $(document).height()-43-40;
// récupère l'image de preview
var imgPreview = $(this).attr('data-preview');
// Mémorise le média courant
$(window).data('current_edit_media', $(this).attr('data-id'));
// sélectionne la tab preview à l'ouverture
$("#form_media .form_media_preview").trigger("click");
if($(this).attr('data-typemedia') == 1){ // média image
$("#form_media .form_media_retouch").show(); // on active l'onglet ressource
$("#form_media .form_media_retouch").show(); // on active l'onglet retouche
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge l'image de preview
$(".preview_img").val($(this).attr('data-preview'));
$(".tab_preview").html('<div id="openseadragon" ></div>');
$("#openseadragon").css('width', '100%');
$("#openseadragon").css('height', minHeight);
viewer = OpenSeadragon({
id: "openseadragon",
tileSources: {
type: "image",
url: $(".preview_img").val(),
url: imgPreview,
}
});
@ -510,13 +512,12 @@ $(document).ready(function() {
save: {
callback: function() {
var newImage = this.darkroom.sourceCanvas.toDataURL();
$(".preview_img").val(newImage);
viewer.destroy(); viewer = null;
viewer = OpenSeadragon({
id: "openseadragon",
tileSources: {
type: "image",
url: $(".preview_img").val(),
url: newImage,
}
});
}
@ -525,27 +526,108 @@ $(document).ready(function() {
});
}else if ($(this).attr('data-typemedia') == 2) { // média svg
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge le svg
$(".tab_preview").html('<img class="svgElt" src=""/>');
$(".tab_preview img").attr("src", $(this).attr('data-src'));
}else if ($(this).attr('data-typemedia') == 4) { // média audio
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge l'audio
$(".tab_preview").html('<audio controls src=""></audio>');
$(".tab_preview audio").attr("src", $(this).attr('data-src'));
}else if ($(this).attr('data-typemedia') == 3) { // média video
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge la vidéo
$(".tab_preview").html('<video src="" controls></video>');
$(".tab_preview video").attr("src", $(this).attr('data-src'));
}else if ($(this).attr('data-typemedia') == 5) { // média document
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
// charge l'aperçu
$(".tab_preview").html('<img class="svgElt" src=""/>');
$(".tab_preview img").attr("src", $(this).attr('data-preview'));
// pdf : on affiche le lecteur pdf
if($(this).attr('data-ext') == 'pdf'){
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge l'aperçu
$(".tab_preview").html('<embed src="" type="application/pdf">');
$(".tab_preview embed").attr("src", $(this).attr('data-src'));
// psd et ai : on affiche la preview classique
}else if ($(this).attr('data-ext') == 'psd' || $(this).attr('data-ext') == 'ai') {
$("#form_media .form_media_preview").show(); // on active l'onglet aperçu
// charge l'aperçu
$(".tab_preview").html('<div id="openseadragon" ></div>');
$("#openseadragon").css('width', '100%');
$("#openseadragon").css('height', minHeight);
viewer = OpenSeadragon({
id: "openseadragon",
tileSources: {
type: "image",
url: imgPreview,
}
});
// autre document : pas d'aperçu
}else{
$("#form_media .form_media_preview").hide(); // masque l'onglet aperçu
$("#form_media .form_media_edit").trigger("click"); // sélectionne la tab d'édition à l'ouverture
}
}
// affiche la popin
$("#form_media").fadeIn('fast');
// chargement des données du média
$.ajax({
url: '/ajax/get-media',
method: 'POST',
dataType : 'json',
data: {
media_id : $(window).data('current_edit_media'),
},
success: function(result){
// chargement des données
$(".tab_edit #arcadia_id").val(result.data.arcadia_id);
$(".tab_edit #libelle").val(result.data.libelle);
$(".tab_edit #sujetLibelle").val(result.data.sujet.LIBELLE);
$(".tab_edit #typevues").val(result.data.typevue_id);
$(".tab_edit #typemedias").val(result.data.typemedia_id);
//$(".tab_edit #variantes").val(result.data.etiquette_id);
$(".tab_edit #langues").val(result.data.langue_id);
$(".tab_edit #commentaire").val(result.data.commentaire);
//$(".tab_edit #version").val(result.data.version);
$(".tab_edit #created_at").val(result.data.created_at);
$(".tab_edit #updated_at").val(result.data.updated_at);
$(".tab_edit #published_at").val(result.data.published_at);
// liste des produits liés
// marque lié
// site lié
// tags $('#demo3').tagEditor('addTag', 'example');
$(".tab_edit #etiquettes").val(result.data.etiquette_id);
$(".tab_edit #extension").val(result.data.extension);
$(".tab_edit #copyrights").val(result.data.copyright_id);
$(".tab_edit #largeur").val(result.data.largeur);
$(".tab_edit #hauteur").val(result.data.hauteur);
$(".tab_edit #resolution").val(result.data.resolution);
$(".tab_edit #largeur_mm").val(result.data.largeur_mm);
$(".tab_edit #hauteur_mm").val(result.data.hauteur_mm);
// affiche la popin
$("#form_media").fadeIn('fast');
},
error: function(jqXHR, textStatus, errorThrown) {
// si le plugin de retouche a déjà été chargé
if(drPlugin !== null){
drPlugin.selfDestroy(); drPlugin = null; // on détruit le plugin de retouche
}
// si le plugin de preview a déjà été chargé
if(viewer !== null){
viewer.destroy(); viewer = null; // on détruit le plugin de preview
}
$('#tag-editor').tagEditor('destroy'); $('.ed_on').hide();$('.ed_off').show(); // on détruit le plugin de tag
$.fancyMessage({title : "Edition d'un média", message : "Ouverture du média impossible. Merci d'actualiser la page.", type : "error"});
}
});
});
@ -557,6 +639,9 @@ $(document).ready(function() {
// si le plugin de retouche a déjà été chargé
if(drPlugin !== null){
drPlugin.selfDestroy(); drPlugin = null; // on détruit le plugin de retouche
}
// si le plugin de preview a déjà été chargé
if(viewer !== null){
viewer.destroy(); viewer = null; // on détruit le plugin de preview
}
$('#tag-editor').tagEditor('destroy'); $('.ed_on').hide();$('.ed_off').show(); // on détruit le plugin de tag
@ -569,6 +654,18 @@ $(document).ready(function() {
}
});
// ---- Suppression de média en masse
$('.action_delete_media').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"));
}
});
removeMedias(medias);
});
// ---- gestion des onglets de la popup d'édition
$("#form_media .tabbtn").on("click" , function(event) {
event.preventDefault();
@ -649,7 +746,7 @@ $(document).ready(function() {
url: "/ajax/upload-media",
dataType: 'json',
limitMultiFileUploads: 10,
maxChunkSize: 10000000,
maxChunkSize: 8000000,
dragover: function (e, data) {
$(".uploader-window").fadeIn( "fast");
},
@ -772,10 +869,20 @@ function initFolderManager(sujetId){
success: function(result){
var output = '';
var draggable = result.draggable;
var data = result.data;
// initialisation de la liste type vues
var typevues = result.typevues;
$("#typevues").find('option').remove();
$.each(typevues, function (index, typevue) {
$("#typevues").append('<option value="'+typevue.CODE_TYPEVUE+'">'+typevue.LIBELLE+'</option>')
});
// ajout du total à la racine
var total = result.count;
$(".root_folder .count").html(total);
// construction des dossiers
var data = result.data;
$.each(data, function (index, item) {
output += buildItem(item);
});
@ -866,6 +973,7 @@ function loadMedia(dossier_id, sujet_id){
if(data.length == 0){
$(window).data('noMedia', true);
}
var draggable = result.draggable;
$.each(data, function (index, item) {
var ico = "";
@ -897,9 +1005,9 @@ function loadMedia(dossier_id, sujet_id){
break;
case 5:
ico = '<i class="fas fa-file"></i>';
if(item.extension = "pdf"){
thumb = item.source.split('.')[0]+"_thumb.jpg";
preview = item.source.split('.')[0]+"_preview.jpg";
if(item.extension == "pdf" || item.extension == "ai" || item.extension == "psd"){
thumb = item.source.split('.')[0]+"_thumb.png";
preview = item.source.split('.')[0]+"_preview.png";
}else{
itemClass = "doc";
}
@ -908,7 +1016,8 @@ function loadMedia(dossier_id, sujet_id){
}
output += '<div class="imageItem" data-id="'+item.id+'" data-typemedia="'+item.typemedia_id+'" data-preview="'+preview+'" data-src="'+ item.source+'" draggable="true" aria-grabbed="false">';
output += '<div class="imageItem" data-id="'+item.id+'" data-ext="'+item.extension+'" data-typemedia="'+item.typemedia_id+'" data-preview="'+preview+'" data-src="'+ item.source+'" draggable="'+draggable+'" aria-grabbed="false">';
output += '<div class="etiquette" style="background-color:'+item.etiquette.color+';" data-id="'+item.etiquette.etiquette_id+'" >'+item.etiquette.libelle+'<i style="color:'+item.etiquette.color+';" class="fas fa-caret-right"></i></div>';
output += '<div class="contextMenu"><ul>';
output += '<li class="menu-option editItem"><i class="fas fa-edit"></i> Editer</li>';
output += '<li class="menu-option downloadItem"><i class="fas fa-file-download"></i> Télécharger</li>';
@ -934,6 +1043,51 @@ function loadMedia(dossier_id, sujet_id){
});
}
// ---- Supression de médias
function removeMedias(medias){
if(medias.length == 0){
$.fancyMessage({title : "Attention", message : "Veuillez sélectionner les médias à supprimer.", type : "error"});
}else{
$.fancyConfirm({
title : "Suppression de média",
message : "Êtes-vous sûr de vouloir supprimer "+medias.length+" média(s) ?",
okButton : 'Supprimer',
noButton : 'Annuler',
callback : function (value) {
if (value) {
$.ajax({
url: '/ajax/remove-media',
method: 'POST',
dataType : 'json',
data: {
medias: medias
},
success: function(result){
$.each(medias, function (index, value) {
$(".media_container .imageItem[data-id='"+value+"']").remove();
});
// ---- MAJ du nb de média dans le dossier
var currentFolder = $(".currentFolder").val();
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())-medias.length);
},
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"});
}
});
}
}
});
}
}
// ---- contruction de l'arborescence des dossiers
function buildItem(item) {
var parentClass = "";

View file

@ -127,6 +127,28 @@
padding-bottom: 25px;
cursor: pointer;
.etiquette{
position: absolute;
display: inline;
top: 38px;
left:0;
z-index: 2;
color: $white;
padding: 2px;
&[data-id='0']{
display: none;
}
i{
position: absolute;
right: -10px;
top: 0;
font-size: 30px;
line-height: 17px;
}
}
.contextMenu{
position: absolute;
width: 100%;
@ -265,7 +287,7 @@
.side_menu{
background-color: $grey;
position: relative;
width: 340px;
width: 450px;
height: 100%;
transition: 0.3s ease-in-out;
z-index: 1;
@ -298,6 +320,9 @@
border-radius: 50%;
}
}
select{
width: 100%;
}
.close_side_menu{
background-color: $grey;
position: absolute;
@ -484,6 +509,12 @@
width: auto;
height: 100%;
}
embed {
width: 66%;
height: 99%;
}
}
&.tab_edit{

View file

@ -9,67 +9,66 @@
<a href="#" class="form_media_close"><i class="fal fa-times"></i></a>
</header>
<div class="main_content">
<input type="hidden" class="preview_img" name="" value="">
<div class="tab tab_preview active"></div>
<div class="tab tab_edit">
<div class="tab_content">
<div class="wrapper">
<h3>Informations générales</h3>
<div class="row">
<label for="codearcadia">Code Arcadia</label>
<input type="text" value="" name="codearcadia" disabled >
<label for="arcadia_id">Code Arcadia</label>
<input type="text" value="" id="arcadia_id" name="arcadia_id" @if (!Auth::user()->hasRole(config('roles.const.ADMIN'))) disabled @endif >
</div>
<div class="row">
<label for="libelle">Intitulé <span>*</span></label>
<input type="text" value="" name="libelle" required >
<input type="text" value="" id="libelle" name="libelle" required >
</div>
<div class="row">
<label for="typesujet">Type de sujet</label>
<input type="text" value="Visuel article" name="typesujet" disabled >
<input id="sujetLibelle" type="text" value="" name="sujetLibelle" disabled >
</div>
<div class="row">
<label for="typevue">Type de vue</label>
<select class="" name="typevue">
<option value="">Vue de face</option>
<label for="typevues">Type de vue</label>
<select id="typevues" name="typevues"></select>
</div>
<div class="row">
<label for="typemedias">Type de média</label>
<select id="typemedias" name="typemedias" disabled>
@foreach ($typemedias as $typemedia)
<option value="{{$typemedia->CODE_TYPEMEDIA}}" >{{$typemedia->LIBELLE}}</option>
@endforeach
</select>
</div>
<div class="row">
<label for="typemedia">Type de média</label>
<select class="" name="typemedia">
<option value="">Photo</option>
</select>
<label for="variantes">Type de variante</label>
<select id="variantes" name="variantes"></select>
</div>
<div class="row">
<label for="typevariante">Type de variante</label>
<select class="" name="typevariante">
<option value="">Permanent</option>
</select>
</div>
<div class="row">
<label for="langue">Langue</label>
<select class="" name="langue">
<option value="">Français</option>
<label for="langues">Langue</label>
<select id="langues" name="langues">
@foreach ($langues as $langue)
<option value="{{$langue->langue_id}}" >{{$langue->libelle}}</option>
@endforeach
</select>
</div>
<div class="row">
<label for="commentaire">Commentaire</label>
<textarea name="commentaire" ></textarea>
<textarea id="commentaire" name="commentaire" ></textarea>
</div>
<div class="row">
<label for="version">Version</label>
<input type="text" value="" name="version" disabled >
<input type="text" id="version" name="version" disabled >
</div>
<div class="row">
<label for="datecreation">Date de création</label>
<input type="text" value="" name="datecreation" disabled >
<label for="created_at">Date de création</label>
<input type="text" id="created_at" name="created_at" disabled >
</div>
<div class="row">
<label for="datemodification">Date de modification</label>
<input type="text" value="" name="datemodification" disabled >
<label for="updated_at">Date de modification</label>
<input type="text" id="updated_at" name="updated_at" disabled >
</div>
<div class="row">
<label for="datepublication">Date de publication</label>
<input type="text" value="" name="datepublication" disabled >
<label for="published_at">Date de publication</label>
<input type="text" id="published_at" name="published_at" disabled >
</div>
</div>
<div class="wrapper">
@ -124,9 +123,11 @@
</div>
</div>
<div class="row">
<label for="etiquette">Etiquette</label>
<select class="" name="etiquette">
<option value="">Validé</option>
<label for="etiquettes">Etiquette</label>
<select id="etiquettes" name="etiquettes">
@foreach ($etiquettes as $etiquette)
<option value="{{$etiquette->etiquette_id}}" >{{$etiquette->libelle}}</option>
@endforeach
</select>
</div>
</div>
@ -134,33 +135,35 @@
<h3>Informations techniques</h3>
<div class="row">
<label for="extension">Extension</label>
<input type="text" value="" name="extension" disabled >
<input type="text" id="extension" name="extension" disabled >
</div>
<div class="row">
<label for="copyright">Copyright</label>
<select class="" name="copyright">
<option value="">Aucun</option>
<label for="copyrights">Copyright</label>
<select id="copyrights" name="copyrights">
@foreach ($copyrights as $copyright)
<option value="{{$copyright->copyright_id}}" >{{$copyright->libelle}}</option>
@endforeach
</select>
</div>
<div class="row">
<label for="largeur">Largeur</label>
<input type="text" value="" name="largeur" >
<input type="text" id="largeur" name="largeur" disabled >
</div>
<div class="row">
<label for="hauteur">Hauteur</label>
<input type="text" value="" name="hauteur" >
<input type="text" id="hauteur" name="hauteur" disabled >
</div>
<div class="row">
<label for="resolution">Résolution</label>
<input type="text" value="" name="resolution" >
<input type="text" id="resolution" name="resolution" disabled >
</div>
<div class="row">
<label for="largeurmm">Largeur en mm</label>
<input type="text" value="" name="largeurmm" >
<label for="largeur_mm">Largeur en mm</label>
<input type="text" id="largeur_mm" name="largeur_mm" disabled >
</div>
<div class="row">
<label for="hauteurmm">Hauteur en mm</label>
<input type="text" value="" name="hauteurmm" >
<label for="hauteur_mm">Hauteur en mm</label>
<input type="text" id="hauteur_mm" name="hauteur_mm" disabled >
</div>
</div>
</div>

View file

@ -53,11 +53,17 @@
</div>
</div>
<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_tag_media"><i class="fas fa-tags"></i> Etiquette</a>
@endif
</div>
</header>
<div style="display:none;" class="scrollLoader"><div class="animated slideInUp"><i class="fal fa-circle-notch fa-spin"></i> Chargements des médias</div></div>

View file

@ -12,10 +12,15 @@
*/
Route::group(['middleware' => ['auth']], function(){
// Les pages Front
Route::get('/', 'CommunController@index')->name('home');
Route::get('/gestion-des-medias', 'MediaController@index')->name('media_manager');
Route::get('/upload', 'UploadController@index');
// Message de contact
Route::post('/send-message', 'CommunController@sendMessage');
Route::get('/gestion-des-medias', 'MediaController@index')->name('media_manager');
// Ajax pour la gestion des dossiers
Route::post('/ajax/load-folder', 'DossierController@loadFolder');
Route::post('/ajax/add-folder', 'DossierController@addFolder');
Route::post('/ajax/remove-folder', 'DossierController@removeFolder');
@ -24,12 +29,17 @@ Route::group(['middleware' => ['auth']], function(){
Route::post('/ajax/favoris-folder', 'UserController@favorisFolder');
Route::post('/ajax/get-folder-property', 'DossierController@getFolderProperty');
Route::post('/ajax/save-folder-property', 'DossierController@saveFolderProperty');
// Ajax pour la gestion des médias
Route::post('/ajax/load-media', 'MediaController@loadMedia');
Route::post('/ajax/move-media', 'MediaController@moveMedia');
Route::post('/ajax/remove-media', 'MediaController@removeMedia');
Route::post('/ajax/get-media', 'MediaController@getOneMedia');
Route::get('/upload', 'UploadController@index');
// Ajax pour la gestion de l'upload de média
Route::post('/ajax/upload-media', 'UploadController@storeMedia');
// Back office
Route::resource('user', 'UserController');
Route::post('/check-matricule', 'UserController@checkMatricule');
Route::resource('dossier', 'DossierController');