Skip to content

Commit

Permalink
Horaires d'ouverture : pouvoir générer un widget (#931)
Browse files Browse the repository at this point in the history
* Page to generate OpeningHour widget

* Add widget partial

* Display as table or list
  • Loading branch information
raphodn committed Aug 5, 2023
1 parent f8778cf commit 3e907ef
Show file tree
Hide file tree
Showing 8 changed files with 185 additions and 34 deletions.
5 changes: 5 additions & 0 deletions app/Resources/views/admin/openinghour/_partial/card.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{% set openingHourJoinString = "&" %}

<div class="card-panel">
{% include "/admin/openinghour/_partial/table.html.twig" with { openingHours: openingHours } %}
</div>
19 changes: 19 additions & 0 deletions app/Resources/views/admin/openinghour/_partial/list.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{% set openingHourJoinString = "&" %}

<ul>
{% set dayOfWeek = -1 %}
{% for openingHour in openingHours %}
{% if openingHour.dayOfWeek != dayOfWeek %}
{# close previous day #}
{% if loop.index > 0 %}</li>{% endif %}
{# open new day #}
<li>{{ openingHour.dayOfWeekString | capitalize }} :
{{ openingHour.start | time_short }}-{{ openingHour.end | time_short }}
{% else %}
{# continue existing day #}
{{ openingHourJoinString | raw }} {{ openingHour.start | time_short }}-{{ openingHour.end | time_short }}
{% endif %}
{% set dayOfWeek = openingHour.dayOfWeek %}
{% endfor %}
</li>
</ul>
23 changes: 23 additions & 0 deletions app/Resources/views/admin/openinghour/_partial/table.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{% set openingHourJoinString = "&" %}

<table style=" width: max-content; margin-left: auto; margin-right: auto; border-collapse: separate; border-spacing: 10px 0px" class="no-padding">
<tbody>
{% set dayOfWeek = -1 %}
{% for openingHour in openingHours %}
{% if openingHour.dayOfWeek != dayOfWeek %}
{# close previous day #}
{% if loop.index > 0 %}</td></tr>{% endif %}
{# open new day #}
<tr>
<td class="no-padding" style="text-align:right">{{ openingHour.dayOfWeekString | capitalize }} :</td>
<td class="no-padding">{{ openingHour.start | time_short }}-{{ openingHour.end | time_short }}
{% else %}
{# continue existing day #}
{{ openingHourJoinString | raw }} {{ openingHour.start | time_short }}-{{ openingHour.end | time_short }}
{% endif %}
{% set dayOfWeek = openingHour.dayOfWeek %}
{% endfor %}
</td>
</tr>
</tbody>
</table>
35 changes: 11 additions & 24 deletions app/Resources/views/admin/openinghour/_partial/widget.html.twig
Original file line number Diff line number Diff line change
@@ -1,25 +1,12 @@
{% set openingHourJoinString = "&" %}
{% extends 'layoutlight.html.twig' %}

<div class="card-panel">
<table style=" width: max-content; margin-left: auto; margin-right: auto; border-collapse: separate; border-spacing: 10px 0px" class="no-padding">
<tbody>
{% set dayOfWeek = -1 %}
{% for openingHour in openingHours %}
{% if openingHour.dayOfWeek != dayOfWeek %}
{# close previous day #}
{% if loop.index > 0 %}</td></tr>{% endif %}
{# open new day #}
<tr>
<td class="no-padding" style="text-align:right">{{ openingHour.dayOfWeekString | capitalize }} :</td>
<td class="no-padding">{{ openingHour.start | time_short }}-{{ openingHour.end | time_short }}
{% else %}
{# continue existing day #}
{{ openingHourJoinString | raw }} {{ openingHour.start | time_short }}-{{ openingHour.end | time_short }}
{% endif %}
{% set dayOfWeek = openingHour.dayOfWeek %}
{% endfor %}
</td>
</tr>
</tbody>
</table>
</div>
{% block content %}
{% if title %}
<p {% if align != "left" %}style="text-align:center"{% endif %}>Horaires d'ouverture :</p>
{% endif %}
{% if align == "left" %}
{% include "/admin/openinghour/_partial/list.html.twig" with { openingHours: openingHours } %}
{% else %}
{% include "/admin/openinghour/_partial/table.html.twig" with { openingHours: openingHours } %}
{% endif %}
{% endblock %}
5 changes: 4 additions & 1 deletion app/Resources/views/admin/openinghour/index.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
{% if openingHours %}
<div class="row">
<div class="col m6">
{% include "/admin/openinghour/_partial/widget.html.twig" with { openingHours: openingHours } %}
{% include "/admin/openinghour/_partial/card.html.twig" with { openingHours: openingHours } %}
</div>
</div>
{% else %}
Expand Down Expand Up @@ -54,4 +54,7 @@
<a href="{{ path('admin_openinghour_new') }}" class="btn">
<i class="material-icons left">add</i>Ajouter une horaire d'ouverture
</a>
<a href="{{ path('admin_openinghour_widget_generator') }}" class="btn">
<i class="material-icons left">tune</i>Générer un widget
</a>
{% endblock %}
57 changes: 57 additions & 0 deletions app/Resources/views/admin/openinghour/widget_generator.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{% extends 'layout.html.twig' %}

{% block title %}Générer un widget (horaires d'ouverture) - {{ site_name }}{% endblock %}

{% block breadcrumbs %}
<a href="{{ path('homepage') }}"><i class="material-icons">home</i></a><i class="material-icons">chevron_right</i>
<a href="{{ path('admin') }}"><i class="material-icons">build</i>&nbsp;Administration</a><i class="material-icons">chevron_right</i>
<a href="{{ path('admin_openinghour_index') }}"><i class="material-icons">schedule</i>&nbsp;Horaires d'ouverture</a><i class="material-icons">chevron_right</i>
<i class="material-icons">tune</i>&nbsp;Générer un widget (horaires d'ouverture)
{% endblock %}

{% block content %}
<h4>Générer un widget (horaires d'ouverture)</h4>

{{ form_start(form) }}
<div class="errors">
{{ form_errors(form) }}
</div>
<div class="row">
<div class="col m6">
{{ form.title.vars.label }}
<div class="switch">
<label>
masquer le titre
{{ form_widget(form.title) }}
<span class="lever"></span>
afficher le titre
</label>
</div>
</div>
</div>
<div class="row">
<div class="col m6">
{{ form_label(form.align) }}
{{ form_widget(form.align) }}
</div>
</div>
<br />
{{ form_widget(form.generate, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
{{ form_end(form) }}

{% if query_string is defined %}
<br />
<h4>Résultat</h4>
<div class="row">
<div class="col m4">
<iframe src="{{ path('admin_openinghour_widget') }}?{{ query_string }}" frameborder="0" style="border: 2px solid green;"></iframe>
</div>
<div class="col m8">
texte à copier-coller 👇
<div class="card-panel" style="overflow:scroll;">
<pre>&lt;iframe src="{{ absolute_url(path('admin_openinghour_widget')) }}?{{ query_string }}" frameborder="0"&gt;&lt;/iframe&gt;</pre>
</div>
</div>
</div>
{% endif %}
{% endblock %}
2 changes: 1 addition & 1 deletion src/AppBundle/Controller/BookingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ private function adminFilterFormFactory($em, Request $request): array
'required' => false,
'choices' => array_combine($years, $years),
'label' => 'Année',
'data' => $defaultYear,
'data' => $defaultYear,
'placeholder' => false,
))
->add('week', IntegerType::class, array(
Expand Down
73 changes: 65 additions & 8 deletions src/AppBundle/Controller/OpeningHourController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,56 @@

namespace AppBundle\Controller;


use AppBundle\Entity\OpeningHour;
use AppBundle\Form\OpeningHourType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Form;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\Session\Session;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;

/**
* OpeningHour controller.
* OpeningHour controller
*
* @Route("admin/openinghours")
*/
class OpeningHourController extends Controller
{
/**
* List all opening hours.
* Opening hours widget display
*
* @Route("/widget", name="admin_openinghour_widget", methods={"GET"})
*/
public function widgetAction(Request $request)
{
$em = $this->getDoctrine()->getManager();

$filter_title = $request->query->has('title') ? ($request->get('title') == 1) : true;
$filter_align = $request->query->has('align') ? $request->get('align') : 'center';

$openingHours = $em->getRepository('AppBundle:OpeningHour')->findAll();

return $this->render('admin/openinghour/_partial/widget.html.twig', [
'openingHours' => $openingHours,
'title' => $filter_title,
'align' => $filter_align,
]);
}

/**
* List all opening hours
*
* @Route("/", name="admin_openinghour_index", methods={"GET"})
* @Security("has_role('ROLE_ADMIN')")
*/
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();

$openingHours = $em->getRepository('AppBundle:OpeningHour')->findAll();

return $this->render('admin/openinghour/index.html.twig', array(
Expand All @@ -37,7 +60,7 @@ public function indexAction(Request $request)
}

/**
* Add new opening hour.
* Add new opening hour
*
* @Route("/new", name="admin_openinghour_new", methods={"GET","POST"})
* @Security("has_role('ROLE_ADMIN')")
Expand Down Expand Up @@ -71,7 +94,7 @@ public function newAction(Request $request)
}

/**
* Edit opening hour.
* Edit opening hour
*
* @Route("/edit/{id}", name="admin_openinghour_edit", methods={"GET","POST"})
* @Security("has_role('ROLE_ADMIN')")
Expand Down Expand Up @@ -109,7 +132,7 @@ public function editAction(Request $request, OpeningHour $openingHour)
}

/**
* Delete opening hour.
* Delete opening hour
*
* @Route("/{id}", name="admin_openinghour_delete", methods={"DELETE"})
* @Security("has_role('ROLE_ADMIN')")
Expand All @@ -133,6 +156,40 @@ public function deleteAction(Request $request, OpeningHour $openingHour)
return $this->redirectToRoute('admin_openinghour_index');
}

/**
* Opening hours widget generator
*
* @Route("/widget_generator", name="admin_openinghour_widget_generator", methods={"GET","POST"})
* @Security("has_role('ROLE_ADMIN')")
*/
public function widgetGeneratorAction(Request $request)
{
$form = $this->createFormBuilder()
->add('title', CheckboxType::class, array('required' => false, 'data' => true, 'label' => 'Afficher le titre du widget ?'))
->add('align', ChoiceType::class, array(
'label' => 'Alignement',
'choices' => array('centré' => 'center', 'gauche' => 'left'),
'data' => 'center'
))
->add('generate', SubmitType::class, array('label' => 'Générer'))
->getForm();

if ($form->handleRequest($request)->isValid()) {
$data = $form->getData();

$widgetQueryString = 'title='.($data['title'] ? 1 : 0) . '&align=' . $data['align'];

return $this->render('admin/openinghour/widget_generator.html.twig', array(
'query_string' => $widgetQueryString,
'form' => $form->createView(),
));
}

return $this->render('admin/openinghour/widget_generator.html.twig', array(
'form' => $form->createView(),
));
}

/**
* @param OpeningHour $openingHour
* @return \Symfony\Component\Form\FormInterface
Expand Down

0 comments on commit 3e907ef

Please sign in to comment.