{% extends 'backfront.html.twig' %}
{% block title %}Sessions de formation SIP Academy - Calendrier et inscription{% endblock %}
{% block meta_description %}
Inscrivez-vous aux prochaines sessions de formation chez SIP Academy. Consultez le calendrier de nos cours en ligne et en présentiel et planifiez votre avenir.
{% endblock %}
{% block body %}
<style>
#captcha > div {
width: 100%; /* Default width for non-mobile devices */
/* Media query for screens with a maximum width of 768 pixels (adjust as needed) */
@media (max-width: 768px) {
width: 200px; /* Adjust the width for mobile devices */
margin: 0 auto; /* Center the reCAPTCHA element */
}
}
</style>
<script>
var recaptchaCallback = function (){
var btnSubmitt = document.getElementById("button-confirm");
var captcha = document.getElementById("captcha");
captcha.classList.add("hidden");
if ( btnSubmitt.disabled ) {
btnSubmitt.disabled = false;
}
console.log('checked !');
}
</script>
<!--Event Area Start-->
<div class="event-details-area section-padding">
<div class="container">
{% for flashMessages in app.flashes('success') %}
<div class="alert alert-success alert-dismissible fade show">
<i class="bi-check-circle-fill"></i>
<strong class="mx-2"> {{ flashMessages }}</strong>
<!--begin::Close-->
<button type="button" class="position-absolute m-2 m-sm-0 top-0 end-0 btn btn-icon ms-sm-auto" data-bs-dismiss="alert">
<span class="svg-icon svg-icon-2x svg-icon-muted">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect opacity="0.3" x="2" y="2" width="20" height="20" rx="10" fill="currentColor"/>
<rect x="7" y="15.3137" width="12" height="2" rx="1" transform="rotate(-45 7 15.3137)" fill="currentColor"/>
<rect x="8.41422" y="7" width="12" height="2" rx="1" transform="rotate(45 8.41422 7)" fill="currentColor"/>
</svg>
</span>
</button>
<!--end::Close-->
</div>
{% endfor %}
<div class="row">
<div class="col-lg-9 col--12">
<div class="events-details-right-sidebar">
<div class="events-details-img1 img-full">
<h3>{{ evenement.titre }}</h3>
{% if evenement.imgdetail %}
<img alt="" src="{{asset('uploads/evenement/'~ evenement.imgdetail )}}">
{% elseif evenement.formation %}
<img alt="" src="{{asset('uploads/formation/'~ evenement.formation.affiche )}}">
{% else %}
{% endif %}
</div>
<div class="events-details-all">
<div class="events-details-time">
<div class="time-icon">
<i class="zmdi zmdi-time"></i>
</div>
<div class="time-text">
<span>Date Début</span>
<p class="time-mrg">{{ evenement.starttime |date('d-m-Y H:i') }}</p>
</div>
</div>
<div class="events-details-time mrg-xs">
<div class="time-icon">
<i class="zmdi zmdi-time"></i>
</div>
<div class="time-text">
<span>Date Fin</span>
<p class="time-mrg">{{ evenement.endtime |date('d-m-Y H:i') }}</p>
{# <p>Monday,July 09,2016</p>#}
</div>
</div>
<div class="events-details-time mrg-xs">
<div class="time-icon">
<i class="zmdi zmdi-pin"></i>
</div>
<div class="time-text">
<span>Adresse</span>
<p class="time-mrg">{{ evenement.adresse }}</p>
</div>
</div>
<div class="events-details-time mrg-xs">
<div class="time-icon">
<i class="zmdi zmdi-money"></i>
</div>
<div class="time-text">
{% if evenement.prixpromo == null %}
<span>Prix</span>
{% if evenement.formation %}
<p > {{ evenement.formation.prix }}DT</p>
{% endif %}
{% else %}
<span>Prix Promo</span>
<p style="color: green"> {{ evenement.prixpromo }}DT</p>
{% endif %}
</div>
</div>
</div>
{% if evenement.lienprog %}
<div class="programme-section ">
<div class="programme-header d-flex flex-wrap align-items-center justify-content-between gap-3">
<div class="programme-title">
<div class="d-flex align-items-center gap-3">
<div class="programme-icon">
<i class="zmdi zmdi-file-text"></i>
</div>
<div>
<h3 class="mb-0 fw-bold" style="color: #1F3971;">Programme Détaillé</h3>
<p class="text-muted small mb-0">Téléchargez le programme complet de la formation</p>
</div>
</div>
</div>
<div class="programme-download">
<a href="{{ asset('uploads/evenement/' ~ evenement.lienprog) }}"
download
class="btn-download-programme"
title="Télécharger le programme">
<i class="zmdi zmdi-download"></i>
<span>Télécharger le programme</span>
<i class="zmdi zmdi-file-pdf"></i>
</a>
</div>
</div>
</div>
<style>
.programme-section {
background: linear-gradient(135deg, #f8faff 0%, #f0f4ff 100%);
border-radius: 20px;
padding: 25px 30px;
margin: 30px 0;
border: 1px solid rgba(31,57,113,0.1);
transition: all 0.3s ease;
}
.programme-section:hover {
box-shadow: 0 10px 30px rgba(31,57,113,0.1);
transform: translateY(-2px);
}
.programme-icon {
width: 50px;
height: 50px;
background: linear-gradient(135deg, #1F3971, #2d52b0);
border-radius: 15px;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
}
.btn-download-programme {
display: inline-flex;
align-items: center;
gap: 12px;
background: linear-gradient(135deg, #FFAE27, #e09500);
color: #1F3971;
padding: 12px 28px;
border-radius: 50px;
text-decoration: none;
font-weight: 600;
font-size: 14px;
transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
border: none;
cursor: pointer;
box-shadow: 0 4px 15px rgba(255,174,39,0.2);
}
.btn-download-programme:hover {
background: linear-gradient(135deg, #e09500, #FFAE27);
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(255,174,39,0.35);
color: #1F3971;
}
.btn-download-programme i {
font-size: 20px;
}
.btn-download-programme i:first-child {
font-size: 18px;
}
.btn-download-programme i:last-child {
font-size: 22px;
}
.programme-info {
padding-top: 15px;
border-top: 1px solid rgba(31,57,113,0.1);
}
.info-item {
display: inline-flex;
align-items: center;
gap: 8px;
color: #6c757d;
font-size: 13px;
}
.info-item i {
color: #FFAE27;
font-size: 16px;
}
@media (max-width: 768px) {
.programme-section {
padding: 20px;
}
.programme-header {
flex-direction: column;
text-align: center;
}
.programme-title {
width: 100%;
}
.programme-title .d-flex {
justify-content: center;
}
.btn-download-programme {
width: 100%;
justify-content: center;
}
.programme-info {
justify-content: center;
}
}
</style>
{% endif %}
<div class="about-lectures">
<h3>Description</h3>
{{ evenement.description|raw}}
</div>
<br>
{% if sections != null %}
<div class="course-duration " style="margin-bottom: 20px">
<div class="duration-title">
<div class="text"><span>Sections</span> <span class="text-right"> Durée</span></div>
</div>
<div class="duration-text">
{% for section in sections %}
<div class="text"><span >{{ section.titre }}</span> <span class="text-right">{{ section.duree }}</span></div>
{% endfor %}
</div>
</div>
{% endif %}
{% if evenement.imgprog %}
{# {{ evenement.imgprog }}#}
<div class="events-details-img1 img-full">
<img alt="" src="{{asset('uploads/evenement/'~ evenement.imgprog )}}">
</div>
{% endif %}
<div class=" yellow-bg">
<div class="contact-form-wrap">
<h2 class="contact-title">Formulaire Inscription</h2>
{{ form_start(form) }}
<div class="row">
<div class="col-6">
<div class="contact-form-style mb-20">
{{ form_widget(form.nom,{'attr':{'class':'form-control form-control-solid','rows':'3', 'placeholder':"Nom*",'required':'true'}}) }}
</div>
</div>
<div class="col-6">
<div class="contact-form-style mb-20">
{{ form_widget(form.prenom,{'attr':{'class':'form-control form-control-solid','rows':'3', 'placeholder':"Prénom*",'required':'true'}}) }}
</div>
</div>
<div class="col-12">
<div class="contact-form-style mb-20">
{{ form_widget(form.email,{'attr':{'class':'form-control form-control-solid','rows':'3', 'placeholder':"Email*",'required':'true'}}) }}
</div>
</div>
<div class="col-6">
<div class="contact-form-style mb-20">
{{ form_widget(form.phone,{'attr':{'class':'form-control form-control-solid','rows':'3', 'placeholder':"Téléphone*",'required':'true'}}) }}
</div>
</div>
<div class="col-6">
<div class="contact-form-style mb-20">
{{ form_widget(form.whatsapp,{'attr':{'class':'form-control form-control-solid','rows':'3', 'placeholder':"WhatsApp"}}) }}
</div>
</div>
<div class="col-12">
<div class="contact-form-style mb-20">
{{ form_widget(form.adresse,{'attr':{'class':'form-control form-control-solid','rows':'3', 'placeholder':"Adresse*",'required':'true'}}) }}
</div>
</div>
<div class="col-12">
<div class="form-check form-check-inline">
{% for op in form.mode %}
<label class="form-check-label">
{{ form_errors(op) }}
{{ form_widget(op ,{'attr':{'class':'form-check-input','rows':'2' }}) }}
<h4 style="color: white">{{ op.vars.label }}</h4>
</label>
{% endfor %}
</div>
</div>
<div class="mb-3 d-flex align-items-center flex-wrap gap-3">
{{ form_label(form.disponibilte, 'Disponibilité', {
'label_attr': {'class': 'form-label mb-0 me-3 text-gray fs-6'}
}) }}
{% for op in form.disponibilte %}
<div class="form-check form-check-inline mb-0">
{{ form_widget(op, {'attr': {'class': 'form-check-input'}}) }}
{{ form_label(op, null, {'label_attr': {'class': 'form-check-label ms-1 mb-0 text-light fs-6'}}) }}
{{ form_errors(op) }}
</div>
{% endfor %}
</div>
<div class="col-12">
<div class="contact-form-style mb-20">
<input name="idvoucher" class="form-control form-control-solid" placeholder="Voucher si vous avez">
</div>
</div>
<div class="col-md-12">
<div class="contact-form-style">
{{ form_widget(form.message,{'attr':{'class':'form-control form-control-solid','rows':'3', 'placeholder':"Message*",'required':'true'}}) }}</div>
</div>
<div class="col-md-6">
<div style="width: 100px;" id="captcha" class="g-recaptcha"
data-sitekey="6LeIOc0lAAAAAHX9N25sC0hFU8IjprSY1GH7cVOp"
data-callback="recaptchaCallback">
</div>
</div>
<button class="button-default"
disabled
id="button-confirm" type="submit"><span>Valider </span></button>
</div>
{{ form_end(form) }}
<p class="form-messege"></p>
</div>
</div>
{# <div class="event-content">#}
{# <h3 class="content2">Event Content</h3>#}
{# <ul>#}
{# <li>Over 40 lectures and 60 hours of content</li>#}
{# <li>Live Project End to End Software Testing Training Included</li>#}
{# <li>Information packed practical training starting from basics to advanced testing techniques.</li>#}
{# <li>Course content designed by considering current software testing technology and the job market.</li>#}
{# <li>Best suitable for beginners to advanced level users and who learn faster when demonstrated.</li>#}
{# <li>Practical assignments at the end of every session.</li>#}
{# </ul>#}
{# </div>#}
{# <div class="event-participants">#}
{# <h3 class="content2">Event Participants</h3>#}
{# <div class="row">#}
{# <div class="col-lg-3 col-md-3 col-12">#}
{# <div class="participants-details text-center img-full mb-30">#}
{# <a href="#">#}
{# <img src="img/teacher/l-1.jpg" alt="">#}
{# </a>#}
{# <h3>T Rayed</h3>#}
{# <p>Chif Principal</p>#}
{# </div>#}
{# </div>#}
{# <div class="col-lg-3 col-md-3 col-12">#}
{# <div class="participants-details text-center img-full mb-30">#}
{# <a href="#">#}
{# <img src="img/teacher/l-2.jpg" alt="">#}
{# </a>#}
{# <h3>S Tasnim</h3>#}
{# <p>Head Teacher</p>#}
{# </div>#}
{# </div>#}
{# <div class="col-lg-3 col-md-3 col-12">#}
{# <div class="participants-details text-center img-full mb-30">#}
{# <a href="#">#}
{# <img src="img/teacher/l-3.jpg" alt="">#}
{# </a>#}
{# <h3>FH Shuvo</h3>#}
{# <p>Chif Principal</p>#}
{# </div>#}
{# </div>#}
{# <div class="col-lg-3 col-md-3 col-12">#}
{# <div class="participants-details text-center img-full mb-30">#}
{# <a href="#">#}
{# <img src="img/teacher/l-4.jpg" alt="">#}
{# </a>#}
{# <h3>Lalen</h3>#}
{# <p>Head Teacher</p>#}
{# </div>#}
{# </div>#}
{# </div>#}
{# </div>#}
</div>
</div>
<div class="col-lg-3">
<div class="sidebar-widget">
<div class="single-sidebar-widget">
<h4 class="title">Prochaines Sessions</h4>
<div class="recent-content">
{% for eve in evenements|sort|reverse %}
{# {% if evenement.id != eve.id %}#}
<div class="recent-content-item">
<a href="{{ path('app_details_session',{'slug':eve.slug}) }}">
{% if eve.imgdetail %}
<img alt="" style="width: 70px;height: 65px" src="{{asset('uploads/evenement/'~ eve.imgdetail )}}">
{% elseif eve.formation %}
<img alt="" style="width: 70px;height: 65px" src="{{asset('uploads/formation/'~ eve.formation.affiche )}}">
{% else %}
{% endif %}
</a>
<div class="recent-text">
<h4><a href="{{ path('app_details_session',{'slug':eve.slug}) }}">{{ eve.titre }}</a></h4>
<div class="single-item-comment-view">
<span><i class="zmdi zmdi-time"></i>{{ eve.starttime |date('d M H:i') }}</span>
<span><i class="zmdi zmdi-time"></i>{{ eve.endtime |date('d M H:i') }}</span>
</div>
</div>
</div>
{# {% endif %}#}
{% endfor %}
</div>
</div>
<div class="single-sidebar-widget">
<h4 class="title">Anciennes Sessions</h4>
<div class="recent-content">
{% for eve in ancienevents|sort|reverse %}
{% if evenement.id != eve.id %}
<div class="recent-content-item">
<a href="{{ path('app_details_session',{'slug':eve.slug}) }}">
{% if eve.imgdetail %}
<img alt="" style="width: 70px;height: 65px" src="{{asset('uploads/evenement/'~ eve.imgdetail )}}">
{% elseif eve.formation %}
<img alt="" style="width: 70px;height: 65px" src="{{asset('uploads/formation/'~ eve.formation.affiche )}}">
{% else %}
{% endif %}
</a>
<div class="recent-text">
<h4><a href="{{ path('app_details_session',{'slug':eve.slug}) }}">{{ eve.titre }}</a></h4>
<div class="single-item-comment-view">
<span><i class="zmdi zmdi-time"></i>{{ eve.starttime |date('d M H:i') }}</span>
<span><i class="zmdi zmdi-time"></i>{{ eve.endtime |date('d M H:i') }}</span>
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</div>
<div class="single-sidebar-widget">
<h4 class="title">Dernières Actualités</h4>
<div class="recent-content">
{% for actualite in actualites %}
<div class="recent-content-item">
<a href="{{ path('app_details_actualite',{'slug':actualite.slug}) }}"><img src="{{asset('uploads/actualite/'~ actualite.image )}}" style="width: 70px;height: 65px" alt=""></a>
<div class="recent-text">
<h4><a href="{{ path('app_details_actualite',{'slug':actualite.slug}) }}">{{ actualite.titre }}</a></h4>
<a class="single-item-comment-view" style="height: 20px;margin-bottom: 0px;color: darkblue;font-size: 13px"
href="{{ path('app_details_actualite',{'slug':actualite.slug}) }}"
>Lire la suite</a>
<div class="single-item-comment-view">
<span><i class="zmdi zmdi-eye"></i>{{ actualite.nbvue }}</span>
<span><i class="zmdi zmdi-comments"></i>{{ actualite.nbcommentaire }}</span>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="single-sidebar-widget">
<div class="widget-banner img-full">
<a href="#"><img src="img/banner/event-banner1.jpg" alt=""></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--End of Event Area-->
{# Dans votre formulaire d'inscription, ajoutez ce script #}
<script>
document.addEventListener('DOMContentLoaded', function() {
const emailInput = document.querySelector('input[name="inscrit_session[email]"]');
const voucherInput = document.querySelector('input[name="idvoucher"]');
let couponChecked = false;
if (emailInput && voucherInput) {
emailInput.addEventListener('blur', function() {
const email = this.value;
const slug = '{{ evenement.slug }}';
if (email && email.includes('@') && !couponChecked) {
// Afficher un loader
voucherInput.placeholder = 'Vérification en cours...';
voucherInput.disabled = true;
fetch('{{ path("app_check_available_coupon") }}', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: email,
slug: slug
})
})
.then(response => response.json())
.then(data => {
if (data.success && data.coupon_code) {
voucherInput.value = data.coupon_code;
couponChecked = true;
// Afficher une notification
showNotification(
'🎉 Bonne nouvelle !',
`Un coupon de réduction de ${data.reduction}% a été automatiquement appliqué à votre inscription.`,
'success'
);
// Ajouter une classe de succès au champ
voucherInput.classList.add('is-valid');
voucherInput.style.borderColor = '#28a745';
} else {
voucherInput.placeholder = 'Voucher si vous avez';
showNotification(
'ℹ️ Information',
'Aucun coupon disponible pour le moment. Vous pouvez toujours en utiliser un manuellement.',
'info'
);
}
voucherInput.disabled = false;
})
.catch(error => {
console.error('Erreur:', error);
voucherInput.disabled = false;
voucherInput.placeholder = 'Voucher si vous avez';
});
}
});
}
function showNotification(title, message, type) {
// Créer la notification
const notification = document.createElement('div');
notification.className = `alert alert-${type} alert-dismissible fade show position-fixed top-0 end-0 m-3`;
notification.style.zIndex = '9999';
notification.style.minWidth = '300px';
notification.innerHTML = `
<strong>${title}</strong><br>
<small>${message}</small>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
`;
document.body.appendChild(notification);
// Auto-supprimer après 5 secondes
setTimeout(() => {
notification.remove();
}, 5000);
}
});
</script>
<style>
.is-valid {
border-color: #28a745 !important;
background-color: #f0fff0 !important;
}
</style>
{% endblock %}