{% extends 'base.html.twig' %}
{% block title %}Agenda!{% endblock %}
{% block body %}
{# Affiche le JSON de data #}
{# {{dump(data)}} #}
<h1>Calendrier des séances {{ categoryTitle }}</h1>
<div class="calendaraccueil">
<img class="imgsite" src="{{ asset('uploads/images/' ~ image['image']) }}" alt="{{ categoryTitle }} Baie de Somme">
<div class="milieu">
<p class="milieu">Prix par personne/ 60€</p>
<p class="milieu">48€ pour les moins de 25 ans</p>
<p class="milieu">À partir de 11 ans et 1,40 m</p>
</div>
</div>
<p class="milieu">Cliquez sur la séance où vous souhaitez réserver.</p>
<div id="calendrier" style="display:none;"> </div>
<style>
#calendrier {
min-height: 135em;
}
.fc-event-main {
text-align: left;
}
</style>
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script>
document.addEventListener("DOMContentLoaded", function() {
let calendarElt = document.getElementById('calendrier');
let calendar;
let eventsData = {{ data.events|json_encode|raw }};
let visibleStatus = {{ visible ? 'true' : 'false' }};
console.log('Initial visibility status:', visibleStatus);
console.log('Initial events data:', eventsData);
if (visibleStatus) {
calendarElt.style.display = 'block';
let mediaQuery = window.matchMedia("(max-width: 1000px)");
function updateCalendarDuration() {
if (calendar && mediaQuery.matches) {
console.log('Switching to 3-day view');
calendar.changeView('timeGridThreeDay');
} else if (calendar) {
console.log('Switching to weekly view');
calendar.changeView('timeGridWeek');
}
}
window.onload = () => {
// Filter events based on visibility
let filteredEvents = eventsData.filter(event => {
console.log('Event visibility:', event.visible, 'Title:', event.title);
return event.visible;
});
console.log('Filtered events:', filteredEvents);
calendar = new FullCalendar.Calendar(calendarElt, {
slotMinTime: '06:00',
events: filteredEvents,
eventContent: function (arg) {
let stockg = arg.event.extendedProps.stock;
let visible = arg.event.extendedProps.visible;
console.log('Event visibility:', visible);
if (stockg === null || stockg === undefined || isNaN(stockg)) {
stockg = 0;
}
let stock = parseInt(stockg, 10);
let stockHtml = '<div class="event-stock">Il reste : ' + stock + ' places</div>';
let titleStyle = 'font-weight: bold; text-align:left; font-size: 20px;';
return {
html: '<div style="' + titleStyle + '">' + arg.event.title + '</div>' + stockHtml
};
},
initialView: 'timeGridWeek',
views: {
timeGridWeek: {
type: 'timeGrid',
duration: { days: 7 }
},
timeGridThreeDay: {
type: 'timeGrid',
duration: { days: 3 }
},
timeGridOneDay: {
type: 'timeGrid',
duration: { days: 1 }
},
},
locale: 'fr',
timeZone: 'Europe/Paris',
headerToolbar: {
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridThreeDay,timeGridOneDay'
},
buttonText: {
today: 'Aujourd\'hui',
timeGridOneDay: '1 jour',
timeGridThreeDay: '3 jours',
timeGridWeek: '7 jours',
month: 'Mois',
},
});
calendar.on('eventClick', (e) => {
let encodedId = encodeURIComponent(e.event.id);
let url = "https://127.0.0.1:8000/activitieshow/" + encodedId;
window.location.href = url;
});
calendar.render();
updateCalendarDuration();
};
mediaQuery.addEventListener('change', () => {
updateCalendarDuration();
});
} else {
console.error('Calendar element not visible!');
}
});
</script>
{% endblock %}