Merge branch 'develop' into trunk

This commit is contained in:
Olivier Legat 2022-01-24 17:07:44 +01:00
commit ef798a07ae
12 changed files with 109154 additions and 4962 deletions

View file

@ -47,11 +47,16 @@ class reindexElasticMedia extends Command
} else {
$startFrom = 1;
}
if (Media::indexExists() && !$bReprise)
$this->info('Test Présence...');
if (Media::indexExists() && !$bReprise) {
$this->info('Suppression index...');
Media::deleteIndex();
}
if(!$bReprise)
if(!$bReprise) {
$this->info('Création...');
Media::createIndex();
}
$medias = Media::all();
$bar = $this->output->createProgressBar(count($medias));

View file

@ -94,12 +94,14 @@ class Media extends Model
'fielddata' => true
),
'created_at' => array(
'type' => 'text',
'fielddata' => true
'type' => 'date',
"format" => "yyyy-MM-dd HH:mm:ss",
//'fielddata' => true
),
'updated_at' => array(
'type' => 'text',
'fielddata' => true
'type' => 'date',
"format" => "yyyy-MM-dd HH:mm:ss",
//'fielddata' => true
),
'version' => array(
'type' => 'text',

10656
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -17,6 +17,7 @@
"jquery": "^3.2",
"laravel-mix": "^4.0.7",
"lodash": "^4.17.5",
"moment": "^2.29.1",
"popper.js": "^1.12",
"resolve-url-loader": "^2.3.1",
"sass": "^1.15.2",

15651
public/css/app.css vendored

File diff suppressed because one or more lines are too long

76317
public/js/app.js vendored

File diff suppressed because one or more lines are too long

67
resources/js/app.js vendored
View file

@ -4,6 +4,73 @@ window.axios.defaults.headers.common = {
'X-CSRF-TOKEN' : document.querySelector('meta[name="csrf-token"]').getAttribute('content')
};
let _ = require('lodash');
import moment from 'moment'
// Configure moment
moment.locale('fr', {
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
monthsParseExact : true,
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY HH:mm',
LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[Aujourd’hui à] LT',
nextDay : '[Demain à] LT',
nextWeek : 'dddd [à] LT',
lastDay : '[Hier à] LT',
lastWeek : 'dddd [dernier à] LT',
sameElse : 'L'
},
relativeTime : {
future : 'dans %s',
past : 'il y a %s',
s : 'quelques secondes',
m : 'une minute',
mm : '%d minutes',
h : 'une heure',
hh : '%d heures',
d : 'un jour',
dd : '%d jours',
M : 'un mois',
MM : '%d mois',
y : 'un an',
yy : '%d ans'
},
dayOfMonthOrdinalParse : /\d{1,2}(er|e)/,
ordinal : function (number) {
return number + (number === 1 ? 'er' : 'e');
},
meridiemParse : /PD|MD/,
isPM : function (input) {
return input.charAt(0) === 'M';
},
// In case the meridiem units are not separated around 12, then implement
// this function (look at locale/id.js for an example).
// meridiemHour : function (hour, meridiem) {
// return /* 0-23 hour, given meridiem token and hour 1-12 */ ;
// },
meridiem : function (hours, minutes, isLower) {
return hours < 12 ? 'PD' : 'MD';
},
week : {
dow : 1, // Monday is the first day of the week.
doy : 4 // Used to determine first week of the year.
}
});
moment.locale('fr');
Vue.prototype.moment = moment
// Vue
import Vue from 'vue';
// Vuex

View file

@ -3,28 +3,31 @@
<div v-show="scrollLoader" class="scrollLoader"><div class="animated slideInUp"><i class="fal fa-circle-notch fa-spin"></i> Chargements des médias</div></div>
<div class="media_container">
<div v-show="loader" class="loader"><i class="fal fa-circle-notch fa-spin"></i></div>
<div class="wrapper">
<div v-for="media in medias.data" @dragstart="dragStart(media, $event)" v-on:dblclick="edit(media)" @click="select(media)" :class=" isCAQuery && media.id !== lastVersion.id ? 'imageItem not-last-version' : 'imageItem'" :draggable="medias.draggable" :aria-grabbed="storeGrabbed.filter(e => e.id === media.id).length > 0">
<div class="wrapper" v-if="medias.data">
<div v-if="showDateSeparators()" class="date-separator">{{formatDate(medias.data[0].updated_at)}}</div>
<template v-for="media,index in medias.data">
<div v-if="showDateSeparators() && !isSameDay(media,medias.data[Math.max(index-1,0)])" class="date-separator">{{formatDate(media[dateSorted])}}</div>
<div @dragstart="dragStart(media, $event)" v-on:dblclick="edit(media)" @click="select(media)" :class=" isCAQuery && media.id !== lastVersion.id ? 'imageItem not-last-version' : 'imageItem'" :draggable="medias.draggable" :aria-grabbed="storeGrabbed.filter(e => e.id === media.id).length > 0">
<div class="etiquette" :style="'background-color:' + media.etiquette.color + '; border-color:' + media.etiquette.color + ';'" :data-id="media.etiquette.etiquette_id" >{{media.etiquette.libelle}}</div>
<div class="etiquette" :style="'background-color:' + media.etiquette.color + '; border-color:' + media.etiquette.color + ';'" :data-id="media.etiquette.etiquette_id" >{{media.etiquette.libelle}}</div>
<div v-if="(media.typemedia_id === 1 || media.typemedia_id === 5) && media.extension !== 'pdf'" class="media" :style="'background-image:url('+ media.folder + media.uid +'_thumb.'+ media.extension +')'"></div>
<div v-if="(media.typemedia_id === 1 || media.typemedia_id === 5) && media.extension === 'pdf'" class="media" :style="'background-image:url('+ media.folder + media.uid +'_thumb.png)'"></div>
<div v-if="media.typemedia_id === 2" class="media" :style="'background-image:url('+ media.folder + media.uid + media.extension + ')'"></div>
<div v-if="media.typemedia_id === 3" class="media video"></div>
<div v-if="media.typemedia_id === 4" class="media son"></div>
<div v-if="(media.typemedia_id === 1 || media.typemedia_id === 5) && media.extension !== 'pdf'" class="media" :style="'background-image:url('+ media.folder + media.uid +'_thumb.'+ media.extension +')'"></div>
<div v-if="(media.typemedia_id === 1 || media.typemedia_id === 5) && media.extension === 'pdf'" class="media" :style="'background-image:url('+ media.folder + media.uid +'_thumb.png)'"></div>
<div v-if="media.typemedia_id === 2" class="media" :style="'background-image:url('+ media.folder + media.uid + media.extension + ')'"></div>
<div v-if="media.typemedia_id === 3" class="media video"></div>
<div v-if="media.typemedia_id === 4" class="media son"></div>
<p class="libelle">{{media.libelle}}</p>
<p class="libelle">{{media.libelle}}</p>
<div v-if="media.typemedia_id === 1 || media.typemedia_id === 5" class="info"><i class="fas fa-file-image"></i> {{media.extension}} - {{media.taille}} - {{media.largeur}}x{{media.hauteur}}px - v{{media.version}}</div>
<div v-if="media.typemedia_id === 2" class="info"><i class="fas fa-file-image"></i> {{media.extension}} - {{media.taille}} - v{{media.version}}</div>
<div v-if="media.typemedia_id === 3" class="info"><i class="fas fa-file-video"></i> {{media.extension}} - {{media.taille}} - durée {{media.duree}} - v{{media.version}}</div>
<div v-if="media.typemedia_id === 4" class="info"><i class="fas fa-file-audio"></i> {{media.extension}} - {{media.taille}} - durée {{media.duree}} - v{{media.version}}</div>
<div v-if="media.typemedia_id === 1 || media.typemedia_id === 5" class="info"><i class="fas fa-file-image"></i> {{media.extension}} - {{media.taille}} - {{media.largeur}}x{{media.hauteur}}px - v{{media.version}}</div>
<div v-if="media.typemedia_id === 2" class="info"><i class="fas fa-file-image"></i> {{media.extension}} - {{media.taille}} - v{{media.version}}</div>
<div v-if="media.typemedia_id === 3" class="info"><i class="fas fa-file-video"></i> {{media.extension}} - {{media.taille}} - durée {{media.duree}} - v{{media.version}}</div>
<div v-if="media.typemedia_id === 4" class="info"><i class="fas fa-file-audio"></i> {{media.extension}} - {{media.taille}} - durée {{media.duree}} - v{{media.version}}</div>
<div v-if="media.statut === 0" class="statut stat0">Brouillon</div>
<div v-if="media.statut === 1" class="statut stat1">Public</div>
<div v-if="media.statut === 2" class="statut stat2">Public étendu</div>
</div>
<div v-if="media.statut === 0" class="statut stat0">Brouillon</div>
<div v-if="media.statut === 1" class="statut stat1">Public</div>
<div v-if="media.statut === 2" class="statut stat2">Public étendu</div>
</div>
</template>
<infinite-loading @infinite="infiniteScroll" :identifier="infiniteId">
<div slot="spinner"></div>
<div slot="no-more"></div>
@ -59,6 +62,7 @@
}
},
mounted() {
console.log('DisplayComponent Mounted.');
this.resetInfiniteScroll();
},
data: function () {
@ -70,6 +74,7 @@
loader: false,
infiniteId: '',
isCAQuery: false,
dateSorted: false,
lastVersion: {
version: 0,
id: 0
@ -98,6 +103,24 @@
this.offset = 0;
this.resetInfiniteScroll();
this.loadMedias(this.$store.state);
//set dateSorted
this.dateSorted = false;
const _that = this;
_.each(this.storeFilters, function (value) {
if(value.type == "order") {
if(value.value == "updated_at" || value.value == "created_at") {
_that.dateSorted = value.value;
}
}
});
if(!this.dateSorted) {
//show/hide date toggler
$(".action_wrapper .display i.fa-calendar-check").hide();
} else {
//par défaut c'est selected
$(".action_wrapper .display i.fa-calendar-check").addClass('selected');
$(".action_wrapper .display i.fa-calendar-check").show();
}
},
loadMedias($state) {
this.$store.commit({
@ -206,6 +229,19 @@
}else{
return false;
}
},
showDateSeparators() {
return this.dateSorted;
},
formatDate(str) {
return this.moment(str).format('DD/MM/YYYY');
},
isSameDay(current,previous) {
let currentdate = current[this.dateSorted];
let previousdate = previous[this.dateSorted];
let dateToCompare = this.moment(currentdate);
let datePrevious = this.moment(previousdate);
return dateToCompare.startOf('day').isSame(datePrevious.startOf('day'));
}
},
}

38
resources/js/media.js vendored
View file

@ -71,19 +71,31 @@ $(document).ready(function() {
// ---- Mode d'affichage
$(".action_wrapper .display i").on("click", function(event) {
if($(this).hasClass('fa-th')){ // mode mosaique
if(!$(this).hasClass('selected')){
$(".action_wrapper .display .fa-list").removeClass('selected');
$(this).addClass('selected');
$(".media_container .wrapper").removeClass('inline');
}
}else{ // mode liste
if(!$(this).hasClass('selected')){
$(".action_wrapper .display .fa-th").removeClass('selected');
$(this).addClass('selected');
$(".media_container .wrapper").addClass('inline');
}
}
if($(this).hasClass('fa-calendar-check')){
//toggle affichage des dates
if(!$(this).hasClass('selected')){
$(this).addClass('selected');
$(".media_container .wrapper .date-separator").removeClass('hide');
} else {
$(this).removeClass('selected');
$(".media_container .wrapper .date-separator").addClass('hide');
}
} else {
if($(this).hasClass('fa-th')){ // mode mosaique
if(!$(this).hasClass('selected')){
$(".action_wrapper .display .fa-th-list").removeClass('selected');
$(this).addClass('selected');
$(".media_container .wrapper").removeClass('inline');
}
}else{ // mode liste
if(!$(this).hasClass('selected')){
$(".action_wrapper .display .fa-th").removeClass('selected');
$(this).addClass('selected');
$(".media_container .wrapper").addClass('inline');
}
}
}
});
/******************************

View file

@ -234,6 +234,19 @@
flex-wrap: wrap;
justify-content: space-evenly;
.date-separator{
width: 100%;
font-size: 19px;
margin: 19px 0px;
font-weight: 700;
color: #FFF;
padding: 0 0 0 10px;
border-bottom: 2px solid;
&.hide {
display: none;
}
}
.imageItem{
display: inline-block;
border: 1px solid grey;

View file

@ -13,8 +13,9 @@
<div class="action_wrapper group">
<mm-actions csrf="{{csrf_token()}}" etiquettes='@json($etiquettes)'></mm-actions>
<div class="display">
<i class="fas fa-th selected"></i>
<i class="fal fa-list"></i>
<i class="fal fa-calendar-check selected"></i>
<i class="fal fa-th selected"></i>
<i class="fal fa-th-list"></i>
</div>
<mm-sorter></mm-sorter>
</div>

11277
yarn.lock

File diff suppressed because it is too large Load diff