mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-06-20 01:44:42 +02:00
stats up
This commit is contained in:
parent
9ae7c0d3e4
commit
a1c5647b43
9 changed files with 172 additions and 83 deletions
|
@ -495,12 +495,14 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
const historyDiv = document.getElementById('userChangesHistory');
|
const historyDiv = document.getElementById('userChangesHistory');
|
||||||
if (historyDiv) {
|
if (historyDiv) {
|
||||||
historyDiv.innerHTML = `
|
historyDiv.innerHTML = `
|
||||||
|
<div id="changesets_history">
|
||||||
<p>Changesets créés :</p>
|
<p>Changesets créés :</p>
|
||||||
<ul>
|
<div class="row">
|
||||||
<li>Dernières 24h : ${stats.last24h}</li>
|
<div class="col-6">Dernières 24h :</div> <div class="col-6 text-right">${stats.last24h}</div>
|
||||||
<li>7 derniers jours : ${stats.last7days}</li>
|
<div class="col-6">7 derniers jours :</div> <div class="col-6 text-right">${stats.last7days}</div>
|
||||||
<li>30 derniers jours : ${stats.last30days}</li>
|
<div class="col-6">30 derniers jours :</div> <div class="col-6 text-right">${stats.last30days}</div>
|
||||||
</ul>
|
</div>
|
||||||
|
</div>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -513,5 +515,35 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function updateCompletionProgress() {
|
||||||
|
const inputs = document.querySelectorAll('input[type="text"]');
|
||||||
|
let filledInputs = 0;
|
||||||
|
let totalInputs = inputs.length;
|
||||||
|
|
||||||
|
inputs.forEach(input => {
|
||||||
|
if (input.value.trim() !== '') {
|
||||||
|
filledInputs++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const completionPercentage = (filledInputs / totalInputs) * 100;
|
||||||
|
const progressBar = document.querySelector('#completion_progress .progress-bar');
|
||||||
|
progressBar.style.width = completionPercentage + '%';
|
||||||
|
progressBar.setAttribute('aria-valuenow', completionPercentage);
|
||||||
|
|
||||||
|
document.querySelector('#completion_display').innerHTML = `Votre commerce est complété à ${Math.round(completionPercentage)}%`;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelectorAll('input[type="text"]').forEach(input => {
|
||||||
|
input.addEventListener('blur', updateCompletionProgress);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector('form').addEventListener('submit', check_validity);
|
||||||
|
document.addEventListener('DOMContentLoaded', updateCompletionProgress);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -173,6 +173,13 @@ class PublicController extends AbstractController
|
||||||
#[Route('/modify/{osm_object_id}/{version}/{changesetID}', name: 'app_public_submit')]
|
#[Route('/modify/{osm_object_id}/{version}/{changesetID}', name: 'app_public_submit')]
|
||||||
public function submit($osm_object_id, $version, $changesetID): Response
|
public function submit($osm_object_id, $version, $changesetID): Response
|
||||||
{
|
{
|
||||||
|
|
||||||
|
$place = $this->entityManager->getRepository(Place::class)->findOneBy(['osmId' => $osm_object_id]);
|
||||||
|
if (!$place) {
|
||||||
|
$this->addFlash('warning', 'Ce commerce n\'existe pas.');
|
||||||
|
return $this->redirectToRoute('app_public_index');
|
||||||
|
}
|
||||||
|
|
||||||
// Récupérer les données POST
|
// Récupérer les données POST
|
||||||
$request = Request::createFromGlobals();
|
$request = Request::createFromGlobals();
|
||||||
|
|
||||||
|
@ -227,7 +234,7 @@ class PublicController extends AbstractController
|
||||||
|
|
||||||
$tag = $changeset->addChild('tag');
|
$tag = $changeset->addChild('tag');
|
||||||
$tag->addAttribute('k', 'comment');
|
$tag->addAttribute('k', 'comment');
|
||||||
$tag->addAttribute('v', 'Modification des tags via l\'interface web #MonCommerceOSM');
|
$tag->addAttribute('v', 'Modification dans #MonCommerceOSM');
|
||||||
|
|
||||||
$changesetResponse = $client->put('https://api.openstreetmap.org/api/0.6/changeset/create', [
|
$changesetResponse = $client->put('https://api.openstreetmap.org/api/0.6/changeset/create', [
|
||||||
'body' => $changesetXml->asXML(),
|
'body' => $changesetXml->asXML(),
|
||||||
|
@ -306,6 +313,27 @@ class PublicController extends AbstractController
|
||||||
$commerce = $this->motocultrice->get_osm_object_data($osm_kind, $osm_object_id);
|
$commerce = $this->motocultrice->get_osm_object_data($osm_kind, $osm_object_id);
|
||||||
|
|
||||||
|
|
||||||
|
$place->update_place_from_overpass_data($commerce);
|
||||||
|
$this->entityManager->persist($place);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
|
|
||||||
|
$stats = $place->getStats();
|
||||||
|
if(!$stats) {
|
||||||
|
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zip_code' => $place->getZipCode()]);
|
||||||
|
}
|
||||||
|
if(!$stats) {
|
||||||
|
$stats = new Stats();
|
||||||
|
$stats->setZipCode($place->getZipCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
$stats->addPlace($place);
|
||||||
|
$place->setStats($stats);
|
||||||
|
|
||||||
|
$stats->computeCompletionPercent();
|
||||||
|
$this->entityManager->persist($stats);
|
||||||
|
$this->entityManager->persist($place);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
return $this->render('public/view.html.twig', [
|
return $this->render('public/view.html.twig', [
|
||||||
'controller_name' => 'PublicController',
|
'controller_name' => 'PublicController',
|
||||||
|
|
|
@ -7,7 +7,7 @@ use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use Doctrine\Common\Collections\Collection;
|
use Doctrine\Common\Collections\Collection;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
// use App\Service\Motocultrice;
|
||||||
#[ORM\Entity(repositoryClass: PlaceRepository::class)]
|
#[ORM\Entity(repositoryClass: PlaceRepository::class)]
|
||||||
class Place
|
class Place
|
||||||
{
|
{
|
||||||
|
@ -76,6 +76,40 @@ class Place
|
||||||
#[ORM\Column(nullable: true)]
|
#[ORM\Column(nullable: true)]
|
||||||
private ?bool $has_note = null;
|
private ?bool $has_note = null;
|
||||||
|
|
||||||
|
public function update_place_from_overpass_data(array $overpass_data) {
|
||||||
|
$overpass_data = $overpass_data['tags_converted'] ;
|
||||||
|
|
||||||
|
// Remplir les clés attendues avec des valeurs par défaut si non définies
|
||||||
|
$overpass_data = array_merge([
|
||||||
|
'id' => '',
|
||||||
|
'type' => '',
|
||||||
|
'name' => '',
|
||||||
|
'postcode' => '',
|
||||||
|
'email' => '',
|
||||||
|
'opening_hours' => '',
|
||||||
|
'addr:housenumber' => '',
|
||||||
|
'addr:street' => '',
|
||||||
|
'website' => '',
|
||||||
|
'wheelchair' => '',
|
||||||
|
'note' => ''
|
||||||
|
], $overpass_data);
|
||||||
|
|
||||||
|
$this
|
||||||
|
// ->setOsmId($overpass_data['id'])
|
||||||
|
// ->setOsmKind($overpass_data['type'])
|
||||||
|
->setName($overpass_data['name'])
|
||||||
|
->setZipCode(\intval($overpass_data['postcode']))
|
||||||
|
->setEmail($overpass_data['email'])
|
||||||
|
// ->setUuidForUrl( Motocultrice::uuid_create_static())
|
||||||
|
// ->setOptedOut(false)
|
||||||
|
// ->setDead(false)
|
||||||
|
->setHasOpeningHours($overpass_data['opening_hours'] ? true : false)
|
||||||
|
->setHasAddress($overpass_data['addr:housenumber'] && $overpass_data['addr:street'] ? true : false)
|
||||||
|
->setHasWebsite($overpass_data['website'] ? true : false)
|
||||||
|
->setHasWheelchair($overpass_data['wheelchair'] and $overpass_data['wheelchair'] != '' ? true : false)
|
||||||
|
->setHasNote($overpass_data['note'] and $overpass_data['note'] != '' ? true : false);
|
||||||
|
}
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->histories = new ArrayCollection();
|
$this->histories = new ArrayCollection();
|
||||||
|
|
|
@ -15,6 +15,8 @@ class Motocultrice
|
||||||
'name',
|
'name',
|
||||||
'wheelchair',
|
'wheelchair',
|
||||||
'harassment_prevention',
|
'harassment_prevention',
|
||||||
|
'image',
|
||||||
|
'panoramax',
|
||||||
];
|
];
|
||||||
// les tags OSM que l'on estime nécessaires pour un commerce
|
// les tags OSM que l'on estime nécessaires pour un commerce
|
||||||
public $base_tags = [
|
public $base_tags = [
|
||||||
|
@ -279,6 +281,10 @@ QUERY;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static function uuid_create_static() {
|
||||||
|
return $this->uuid_create();
|
||||||
|
}
|
||||||
|
|
||||||
public function uuid_create() {
|
public function uuid_create() {
|
||||||
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||||||
// 32 bits for "time_low"
|
// 32 bits for "time_low"
|
||||||
|
|
|
@ -4,27 +4,24 @@
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="card mt-4 p-4">
|
<div class="mt-4 p-4">
|
||||||
<h1 class="card-title">{{ 'display.stats'|trans }}</h1>
|
<h1 class="title">{{ 'display.stats'|trans }}</h1>
|
||||||
<p>
|
<p>
|
||||||
{{ stats.zone }}
|
{{ stats.zone }}
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
{# {{ dump(stats) }} #}
|
|
||||||
</p>
|
</p>
|
||||||
{{ stats.getCompletionPercent() }} % complété sur les critères donnés.
|
{{ stats.getCompletionPercent() }} % complété sur les critères donnés.
|
||||||
<br>
|
<br>
|
||||||
{{ stats.getPlacesCount() }} commerces dans la zone.
|
<i class="bi bi-building"></i> {{ stats.getPlacesCount() }} commerces dans la zone.
|
||||||
<br>
|
<br>
|
||||||
{{ stats.getAvecHoraires() }} commerces avec horaires.
|
<i class="bi bi-clock"></i> {{ stats.getAvecHoraires() }} commerces avec horaires.
|
||||||
<br>
|
<br>
|
||||||
{{ stats.getAvecAdresse() }} commerces avec adresse.
|
<i class="bi bi-map"></i> {{ stats.getAvecAdresse() }} commerces avec adresse.
|
||||||
<br>
|
<br>
|
||||||
{{ stats.getAvecSite() }} commerces avec site web renseigné.
|
<i class="bi bi-globe"></i> {{ stats.getAvecSite() }} commerces avec site web renseigné.
|
||||||
<br>
|
<br>
|
||||||
{{ stats.getAvecAccessibilite() }} commerces avec accessibilité renseignée.
|
<i class="bi bi-wheelchair"></i> {{ stats.getAvecAccessibilite() }} commerces avec accessibilité renseignée.
|
||||||
<br>
|
<br>
|
||||||
{{ stats.getAvecNote() }} commerces avec note renseignée.
|
<i class="bi bi-chat-dots"></i> {{ stats.getAvecNote() }} commerces avec note renseignée.
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -47,14 +47,7 @@
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div id="completion_progress" class="d-none">
|
|
||||||
<div class="container">
|
|
||||||
<div id="completion_display" class="mb-2"></div>
|
|
||||||
<div class="progress" role="progressbar" aria-label="Progression de complétion" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
|
|
||||||
<div class="progress-bar" style="width: 0%"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<main class="body-landing">
|
<main class="body-landing">
|
||||||
{% block body %}{% endblock %}
|
{% block body %}{% endblock %}
|
||||||
|
@ -86,6 +79,11 @@
|
||||||
<a href="https://www.openstreetmap.org/copyright">Sources du logiciel</a>
|
<a href="https://www.openstreetmap.org/copyright">Sources du logiciel</a>
|
||||||
</p>
|
</p>
|
||||||
<div id="userChangesHistory"></div>
|
<div id="userChangesHistory"></div>
|
||||||
|
<div id="qr-share">
|
||||||
|
partagez cette page :
|
||||||
|
<br>
|
||||||
|
<div id="qrcode"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -94,6 +92,17 @@
|
||||||
{% block javascripts %}
|
{% block javascripts %}
|
||||||
{{ encore_entry_script_tags('app') }}
|
{{ encore_entry_script_tags('app') }}
|
||||||
<script src="{{ asset('js/main.js') }}"></script>
|
<script src="{{ asset('js/main.js') }}"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js" integrity="sha512-CNgIRecGo7nphbeZ04Sc13ka07paqdeTu0WR1IM4kNcpmBAUSHSQX0FslNhTDadL4O5SAGapGt4FodqL8My0mA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
|
<script>
|
||||||
|
const qrcode = new QRCode(document.getElementById('qrcode'), {
|
||||||
|
text: window.location.href,
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
colorDark : '#000000',
|
||||||
|
colorLight : '#ffffff',
|
||||||
|
correctLevel : QRCode.CorrectLevel.H
|
||||||
|
});
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -30,29 +30,11 @@
|
||||||
{% if commerce_overpass is not empty %}
|
{% if commerce_overpass is not empty %}
|
||||||
<form action="{{ path('app_public_submit', {'osm_object_id': commerce_overpass['@attributes'].id, 'version': commerce_overpass['@attributes'].version, 'changesetID': commerce_overpass['@attributes'].changeset }) }}" method="post" class="needs-validation">
|
<form action="{{ path('app_public_submit', {'osm_object_id': commerce_overpass['@attributes'].id, 'version': commerce_overpass['@attributes'].version, 'changesetID': commerce_overpass['@attributes'].changeset }) }}" method="post" class="needs-validation">
|
||||||
<input type="hidden" name="osm_kind" value="{{ osm_kind }}">
|
<input type="hidden" name="osm_kind" value="{{ osm_kind }}">
|
||||||
<div class="mb-4">
|
{# nom #}
|
||||||
<label for="commerce_id" class="form-label">{{ 'display.modify_commerce'|trans }}:
|
|
||||||
<strong>
|
|
||||||
{% if commerce_overpass.tags_converted.name is defined %}
|
|
||||||
{{ commerce_overpass.tags_converted.name }}
|
|
||||||
{% elseif commerce_overpass['@attributes'].name is defined %}
|
|
||||||
{{ commerce_overpass['@attributes'].name }}
|
|
||||||
{% else %}
|
|
||||||
{{ 'display.unknown'|trans }}
|
|
||||||
{% endif %}
|
|
||||||
</strong>
|
|
||||||
</label>
|
|
||||||
<div class="mt-2">
|
|
||||||
<a class="btn btn-info" href="{{ path('app_public_index') }}">{{ 'display.contact_humans'|trans }}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if commerce.tags_converted.image is defined %}
|
|
||||||
<img class="img-fluid mb-4" src="{{ commerce.tags_converted.image }}" alt="Image du lieu">
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<h2 class="h3 mb-3">{{ 'display.attributes'|trans }}</h2>
|
|
||||||
<div class="row g-3 mb-4">
|
<div class="row g-3 mb-4">
|
||||||
|
<div class="d-none">
|
||||||
|
{{ dump(commerce_overpass.tags_converted) }}
|
||||||
|
</div>
|
||||||
<div class="col-12 col-md-4">
|
<div class="col-12 col-md-4">
|
||||||
<label for="commerce_tag_value__name" class="form-label">{{'display.keys.name'|trans}}</label>
|
<label for="commerce_tag_value__name" class="form-label">{{'display.keys.name'|trans}}</label>
|
||||||
</div>
|
</div>
|
||||||
|
@ -61,6 +43,18 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{# {{ dump(commerce_overpass.tags_converted) }} #}
|
||||||
|
{% if commerce_overpass.tags_converted.image is defined %}
|
||||||
|
<img class="img-fluid img-thumbnail mb-3" src="{{ commerce_overpass.tags_converted.image }}" />
|
||||||
|
|
||||||
|
|
||||||
|
<input type="text" class="form-control" name="commerce_tag_value__image" value="{{ commerce_overpass.tags_converted.image }}">
|
||||||
|
|
||||||
|
<input type="text" class="form-control" name="commerce_tag_value__panoramax" value="{{ commerce_overpass.tags_converted.panoramax is defined ? commerce_overpass.tags_converted.panoramax : '' }}">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
{% if hide_filled_inputs and
|
{% if hide_filled_inputs and
|
||||||
(commerce_overpass.tags_converted['addr:street']) is defined and commerce_overpass.tags_converted['addr:street'] is empty
|
(commerce_overpass.tags_converted['addr:street']) is defined and commerce_overpass.tags_converted['addr:street'] is empty
|
||||||
and (commerce_overpass.tags_converted['addr:housenumber']) is defined and commerce_overpass.tags_converted['addr:housenumber'] is empty
|
and (commerce_overpass.tags_converted['addr:housenumber']) is defined and commerce_overpass.tags_converted['addr:housenumber'] is empty
|
||||||
|
@ -112,6 +106,9 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 mt-4">
|
<div class="col-12 mt-4">
|
||||||
<div class="actions-modification">
|
<div class="actions-modification">
|
||||||
|
|
||||||
|
<a class="btn btn-info" href="{{ path('app_public_index') }}">{{ 'display.contact_humans'|trans }}</a>
|
||||||
|
|
||||||
<button id="showAllFields" class="btn btn-secondary mx-4">
|
<button id="showAllFields" class="btn btn-secondary mx-4">
|
||||||
<i class="bi bi-eye"></i>
|
<i class="bi bi-eye"></i>
|
||||||
Voir aussi les champs déjà remplis
|
Voir aussi les champs déjà remplis
|
||||||
|
@ -152,6 +149,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="completion_progress" class="">
|
||||||
|
<div class="container">
|
||||||
|
<div id="completion_display" class="mb-2"></div>
|
||||||
|
<div class="progress" role="progressbar" aria-label="Progression de complétion" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
|
||||||
|
<div class="progress-bar" style="width: 0%"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% block javascripts %}
|
{% block javascripts %}
|
||||||
|
@ -210,33 +216,6 @@
|
||||||
.addTo(map);
|
.addTo(map);
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
function updateCompletionProgress() {
|
|
||||||
const inputs = document.querySelectorAll('input[type="text"]');
|
|
||||||
let filledInputs = 0;
|
|
||||||
let totalInputs = inputs.length;
|
|
||||||
|
|
||||||
inputs.forEach(input => {
|
|
||||||
if (input.value.trim() !== '') {
|
|
||||||
filledInputs++;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const completionPercentage = (filledInputs / totalInputs) * 100;
|
|
||||||
const progressBar = document.querySelector('#completion_progress .progress-bar');
|
|
||||||
progressBar.style.width = completionPercentage + '%';
|
|
||||||
progressBar.setAttribute('aria-valuenow', completionPercentage);
|
|
||||||
|
|
||||||
document.querySelector('#completion_display').innerHTML = `Votre commerce est complété à ${Math.round(completionPercentage)}%`;
|
|
||||||
}
|
|
||||||
|
|
||||||
document.querySelectorAll('input[type="text"]').forEach(input => {
|
|
||||||
input.addEventListener('blur', updateCompletionProgress);
|
|
||||||
});
|
|
||||||
|
|
||||||
document.querySelector('form').addEventListener('submit', check_validity);
|
|
||||||
document.addEventListener('DOMContentLoaded', updateCompletionProgress);
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -3,14 +3,20 @@
|
||||||
<fieldset >
|
<fieldset >
|
||||||
<h2>{{ 'display.ask_angela'|trans }}</h2>
|
<h2>{{ 'display.ask_angela'|trans }}</h2>
|
||||||
<div class="p-4">
|
<div class="p-4">
|
||||||
<img src="https://i0.wp.com/askforangela.co.uk/wp-content/uploads/2022/10/Ask-for-Angela-primary.png?fit=300%2C300&ssl=1" class="img-fluid img-thumbnail mb-3" alt="Image du lieu">
|
|
||||||
<p class="description"><label for="custom__ask_angela">{{ 'display.ask_angela_description'|trans }} </label></p>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col-md-5">
|
<div class="col-4">
|
||||||
|
<img src="https://i0.wp.com/askforangela.co.uk/wp-content/uploads/2022/10/Ask-for-Angela-primary.png?fit=300%2C300&ssl=1" class="img-fluid img-thumbnail mb-3" alt="Image du lieu">
|
||||||
|
<p class="more-info">
|
||||||
|
<a href="https://arretonslesviolences.gouv.fr/focus/plan-angela" target="_blank">{{ 'display.ask_angela_more_info'|trans }}</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
|
||||||
|
<p class="description"><label for="custom__ask_angela">{{ 'display.ask_angela_description'|trans }} </label></p>
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="radio" name="custom__ask_angela" id="ask_angela_yes" value="ask_angela" {% if commerce_overpass.tags_converted.harassment_prevention is defined and commerce_overpass.tags_converted.harassment_prevention == 'ask_angela' %}checked{% endif %}>
|
<input class="form-check-input" type="radio" name="custom__ask_angela" id="ask_angela_yes" value="ask_angela" {% if commerce_overpass.tags_converted.harassment_prevention is defined and commerce_overpass.tags_converted.harassment_prevention == 'ask_angela' %}checked{% endif %}>
|
||||||
<label class="form-check-label" for="ask_angela_yes">
|
<label class="form-check-label" for="ask_angela_yes">
|
||||||
|
@ -28,9 +34,7 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="more-info">
|
|
||||||
<a href="https://www.openstreetmap.fr/contact/" target="_blank">{{ 'display.ask_angela_more_info'|trans }}</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
@ -40,7 +40,7 @@ display:
|
||||||
cuisine: "Cuisine"
|
cuisine: "Cuisine"
|
||||||
keys:
|
keys:
|
||||||
tags: "étiquettes"
|
tags: "étiquettes"
|
||||||
name: "Nom"
|
name: "Nom du lieu, ne pas décrire le lieu"
|
||||||
address: "Adresse"
|
address: "Adresse"
|
||||||
phone: "Téléphone"
|
phone: "Téléphone"
|
||||||
building: "Bâtiment"
|
building: "Bâtiment"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue