migration symfo

This commit is contained in:
2025-09-04 19:30:58 +02:00
parent efea97228b
commit 48781d086e
20 changed files with 515 additions and 65 deletions

View File

@@ -0,0 +1 @@
<iframe src="{{ iframeUrl }}" style="width:100%; height:600px; border:0;"></iframe>

View File

@@ -4,12 +4,44 @@
{%block body%}
<h2>Projets</h2>
<a href="{{ path('app_user_project_submit') }}" class="btn btn-success mb-3">Ajouter</a>
<ul id="tabProjects" class="nav nav-tabs">
<li class="me-5">
<a href="{{ path('app_user_project_submit') }}" class="btn btn-success">Ajouter</a>
</li>
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#" data-status="A Voter"">A Voter</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#" data-status="Brouillon">Brouillon</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#" data-status="Voté">Voté</a>
</li>
<li class="nav-item ms-auto">
<a class="nav-link" href="#" data-status="Archivé">Archivé</a>
</li>
<li class="nav-item">
<a class="nav-link text-success nav-tome" href="#">Mes Projets</a>
</li>
</ul>
<div class='d-flex flex-wrap' style='justify-content: left'>
<div id="containerdraft" data-status="Brouillon" class='containerStatus d-flex flex-wrap mt-3' style='justify-content: left'>
<h3 style="width:100%">Brouillon</h3>
</div>
<div id="containervoted" data-status="A Voter" class='containerStatus d-flex flex-wrap mt-3' style='justify-content: left'>
<h3 style="width:100%">A Voter</h3>
</div>
<div id="containertovote" data-status="Voté" class='containerStatus d-flex flex-wrap mt-3' style='justify-content: left'>
<h3 style="width:100%">Voté</h3>
</div>
<div id="containerarchived" data-status="Archivé" class='containerStatus d-flex flex-wrap mt-3' style='justify-content: left'>
<h3 style="width:100%">Archivé</h3>
</div>
<div style="display:none">
{% for project in projects %}
{% if is_granted('VIEW', project) %}
<div class='card' style='width:300px; margin-right:10px;'>
<div class='card cardProject' data-status="{{project.status}}" data-tome="{{is_granted('TOME', project)}}" style='width:300px; margin-right:10px;'>
<div class='card-header d-flex justify-content-between align-items-center'>
<h5>{{project.title}}</h5>
@@ -20,9 +52,12 @@
<div class='card-body'>
{{project.summary|nl2br}}
</div>
<div class='card-footer'>
<div class='card-footer' style="line-height:14px">
<small><em>
<b>Statut</b> = {{ project.status }}<br>
{% if project.dueDate %}
<b>A Voter pour le</b> = {{ project.dueDate|date("d/m/Y") }}<br>
{% endif %}
<b>Nature</b> = {{ project.nature }}<br>
<b>Propriétaires</b> =
{%for user in project.users%}
{{loop.first ? user.username : ' - '~user.username}}
@@ -32,7 +67,68 @@
</div>
{% endif %}
{% endfor %}
</div>
{%endblock%}
{% block localscript %}
<script>
$(document).ready(function() {
// Cacher tous les containers sauf celui actif au chargement
let initialStatus = $('.nav-link.active').data('status');
$('.containerStatus').removeClass("d-flex");
$('.containerStatus').hide();
$('.cardProject').each(function () {
const $card = $(this);
const status = $card.data('status');
const $container = $('.containerStatus[data-status="' + status + '"]')
if ($container.length) {
$container.append($card);
}
});
console.log(initialStatus);
$('.containerStatus[data-status="' + initialStatus + '"]').addClass("d-flex");
$('#tabProjects .nav-link').on('click', function (e) {
e.preventDefault();
// Gère les onglets actifs
$('.nav-link').removeClass('active');
$(this).addClass('active');
if ($(this).hasClass('nav-tome')) {
// On masque tt les cardProject
$(".cardProject").hide();
// On affiche que les cardProject avec tome
$(".cardProject[data-tome='1']").show();
$('.containerStatus').each(function () {
const $container = $(this);
const hasTome = $container.find('.cardProject[data-tome="1"]').length > 0;
if (hasTome) {
$container.addClass('d-flex').show();
} else {
$container.removeClass('d-flex').hide();
}
});
}
else {
// On affiche tt les cardProject
$(".cardProject").show();
// Récupère le data-status sélectionné
let status = $(this).data('status');
// Cache tous les containers, puis affiche celui correspondant au data-status
$('.containerStatus').removeClass('d-flex').hide();
$('.containerStatus[data-status="' + status + '"]').addClass("d-flex").show();
}
});
});
</script>
{% endblock %}
{%endblock%}

View File

@@ -18,9 +18,9 @@
<div class="row">
<div class="col-md-4 mx-auto">
<div class="card mt-3">
<div class="card-header">Information</div>
<div class="card-header">Titre</div>
<div class="card-body">
{{ form_row(form.title) }}
{{ form_widget(form.title) }}
</div>
</div>
</div>
@@ -30,17 +30,17 @@
<div class="col-md-2"></div>
<div class="col-md-4">
<div class="card mt-3">
<div class="card-header">Information</div>
<div class="card-header">Pourquoi Voter Pour</div>
<div class="card-body">
{{ form_row(form.whyYes) }}
{{ form_widget(form.whyYes) }}
</div>
</div>
</div>
<div class="col-md-4">
<div class="card mt-3">
<div class="card-header">Information</div>
<div class="card-header">Pourquoi Voter Contre</div>
<div class="card-body">
{{ form_row(form.whyNot) }}
{{ form_widget(form.whyNot) }}
</div>
</div>
</div>

View File

@@ -22,6 +22,7 @@
<div class="card-body">
{{ form_row(form.title) }}
{{ form_row(form.nature) }}
{{ form_row(form.dueDate) }}
{{ form_row(form.users) }}
{{ form_row(form.summary) }}
</div>
@@ -51,7 +52,9 @@
<thead>
<tr>
<th width="100px" class="no-sort">Action</th>
<th>Title</th>
<th>Titre</th>
<th width="35%" class="no-sort">Pour</th>
<th width="35%" class="no-sort">Contre</th>
</tr>
</thead>
<tbody>
@@ -61,6 +64,8 @@
<a href="{{ path(routeupdateoption,{idproject:project.id,id:option.id}) }}" class="me-2"><i class="fas fa-file fa-2x"></i></a>
</td>
<td>{{option.title}}</td>
<td>{{option.whyYes?option.whyYes|markdown_to_html:""}}</td>
<td>{{option.whyNot?option.whyNot|markdown_to_html:""}}</td>
</tr>
{% endfor %}
</tbody>
@@ -85,6 +90,13 @@
<script>
$(document).ready(function() {
$("#project_title").focus();
$('#dataTables').DataTable({
columnDefs: [ { "targets": "no-sort", "orderable": false }, { "targets": "no-string", "type" : "num" } ],
responsive: true,
iDisplayLength: 100,
order: [[ 1, "asc" ]]
});
});
</script>
{% endblock %}

View File

@@ -1,12 +1 @@
{% if is_granted('MOVEDRAFT', project) %}
<a href="{{ path(routemove,{id:project.id, status:"DRAFT"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le passage au vote ?')">Mettre en Brouillon</a>
{% endif %}
{% if is_granted('MOVETOVOTE', project) %}
<a href="{{ path(routemove,{id:project.id, status:"TOVOTE"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le passage au vote ?')">Mettre au Vote</a>
{% endif %}
{% if is_granted('MOVEVOTED', project) %}
<a href="{{ path(routemove,{id:project.id, status:"VOTED"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le vote ?')">Voter</a>
{% endif %}
{% if is_granted('DELETE', project) %}
<a href="{{ path(routedelete,{id:project.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">Supprimer</a>
{% endif %}

View File

@@ -8,32 +8,59 @@
<div class="">{{project.status}}</div>
</h1>
{% if is_granted('UPDATE', project) %}
<a href="{{ path(routeupdate,{id:project.id}) }}" class="btn btn-success me-1">Modifier</a>
{% endif %}
<div class="mb-3">
{% if is_granted('UPDATE', project) %}
<a href="{{ path(routeupdate,{id:project.id}) }}" class="btn btn-success me-1">Modifier</a>
{% endif %}
<a href="{{ path(routecancel) }}" class="btn btn-secondary me-5">Retour</a>
<a href="{{ path(routecancel) }}" class="btn btn-secondary me-5">Retour</a>
{% if is_granted('MOVETOVOTE', project) and project.status=="Brouillon"%}
<a href="{{ path(routemove,{id:project.id, status:"TOVOTE"}) }}" class="btn btn-primary me-1" onclick="return confirm('Statut = à Voter ?')">
<i class="fas fa-angle-double-right"></i> Statut = à Voter
</a>
{% endif %}
{% if is_granted('MOVEVOTED', project) and project.status=="A Voter" %}
<a href="{{ path(routemove,{id:project.id, status:"VOTED"}) }}" class="btn btn-primary me-1" onclick="return confirm('Statut = Voté ?')">
<i class="fas fa-angle-double-right"></i> Statut = Voté
</a>
{% endif %}
{% if is_granted('MOVEARCHIVED', project) and project.status=="Voté" %}
<a href="{{ path(routemove,{id:project.id, status:"ARCHIVED"}) }}" class="btn btn-primary me-1" onclick="return confirm('Statut = Archivé ?')">
<i class="fas fa-angle-double-right"></i> Statut = Archivé
</a>
{% endif %}
{% if is_granted('DELETE', project) %}
<a href="{{ path(routedelete,{id:project.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">
Supprimer
</a>
{% endif %}
{% if is_granted('MOVEDRAFT', project) and project.status=="A Voter"%}
<a href="{{ path(routemove,{id:project.id, status:"DRAFT"}) }}" class="btn btn-warning me-1 float-end" onclick="return confirm('Statut = Brouillon ?')">
<i class="fas fa-angle-double-left"></i> Statut = Brouillon
</a>
{% endif %}
{% if is_granted('MOVETOVOTE', project) and project.status=="Voté"%}
<a href="{{ path(routemove,{id:project.id, status:"TOVOTE"}) }}" class="btn btn-warning me-1 float-end" onclick="return confirm('Statut = à Voter ?')">
<i class="fas fa-angle-double-left"></i> Statut = à Voter
</a>
{% endif %}
{% if is_granted('MOVEVOTED', project) and project.status=="Archivé"%}
<a href="{{ path(routemove,{id:project.id, status:"VOTED"}) }}" class="btn btn-warning me-1 float-end" onclick="return confirm('Statut = Voté ?')">
<i class="fas fa-angle-double-left"></i> Statut = Voté
</a>
{% endif %}
</div>
{% if is_granted('MOVEDRAFT', project) %}
<a href="{{ path(routemove,{id:project.id, status:"DRAFT"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le passage au vote ?')">Mettre en Brouillon</a>
{% endif %}
{% if is_granted('MOVETOVOTE', project) %}
<a href="{{ path(routemove,{id:project.id, status:"TOVOTE"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le passage au vote ?')">Mettre au Vote</a>
{% endif %}
{% if is_granted('MOVEVOTED', project) %}
<a href="{{ path(routemove,{id:project.id, status:"VOTED"}) }}" class="btn btn-primary me-1" onclick="return confirm('Confirmez-vous le vote ?')">Voter</a>
{% endif %}
{% if is_granted('DELETE', project) %}
<a href="{{ path(routedelete,{id:project.id}) }}" class="btn btn-danger float-end" onclick="return confirm('Confirmez-vous la suppression de cet enregistrement ?')">Supprimer</a>
{% endif %}
<div class="row">
<div class="col-md-4 mx-auto">
<div class="card mt-3">
<div class="card mt-3">
<div class="card-header">Information</div>
<div class="card-body">
<b>Titre</b> = {{ project.title }}<br>
<b>Nature</b> = {{ project.nature }}<br><br>
<b>Nature</b> = {{ project.nature }}<br>
<b>A Voter pour le</b> = {{ project.dueDate ? project.dueDate|date("d/m/Y"):"" }}
</div>
</div>
@@ -55,6 +82,23 @@
</div>
<div class="col-md-8 mx-auto">
<div style="display:flex;" class="mt-3">
{% for option in project.options %}
<div class="card" style="flex:1 1 0">
<center><h2>{{ option.title }}</h2></center>
<div style="display:flex;">
<div style="flex:auto; padding:10px;">
<center><i class="fas fa-plus"></i></center>
{{option.whyYes?option.whyYes|markdown_to_html:""}}
</div>
<div style="flex:auto; padding:10px;">
<center><i class="fas fa-minus"></i></center>
{{option.whyNot?option.whyNot|markdown_to_html:""}}
</div>
</div>
</div>
{% endfor %}
</div>
<div class="card mt-3">
<div class="card-header">Description du Projet</div>
<div class="card-body">