Commit 6c8abb0c authored by Clouard Regis's avatar Clouard Regis
Browse files

Revised course preview.

parent d4df2a46
......@@ -5,7 +5,6 @@
<path value="$PROJECT_DIR$/vendor/symfony/twig-bundle" />
<path value="$PROJECT_DIR$/vendor/doctrine/lexer" />
<path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
<path value="$PROJECT_DIR$/vendor/ocramius/package-versions" />
<path value="$PROJECT_DIR$/vendor/symfony/translation-contracts" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
<path value="$PROJECT_DIR$/vendor/symfony/twig-bridge" />
......
......@@ -34,7 +34,6 @@
<excludeFolder url="file://$MODULE_DIR$/vendor/michaeldegroot/doctrine-encrypt-bundle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
<excludeFolder url="file://$MODULE_DIR$/vendor/ocramius/package-versions" />
<excludeFolder url="file://$MODULE_DIR$/vendor/ocramius/proxy-manager" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/constant_time_encoding" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/halite" />
......
This diff is collapsed.
/* Style the tab */
.tab {
overflow: hidden;
border: 1px solid #ccc;
background-color: var(--secondary);
}
/* Style the buttons inside the tab */
.tab button {
background-color: inherit;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 10px 16px;
transition: 0.3s;
font-size: 17px;
}
/* Change background color of buttons on hover */
.tab button:hover {
background-color: #ddd;
}
/* Create an active/current tablink class */
.tab button.active {
background-color: var(--primary);
color: white;
}
/* Style the tab content */
.tab-content {
display: none;
padding: 6px 12px;
border: 1px solid #ccc;
border-top: none;
}
......@@ -156,7 +156,6 @@ class PlannerController extends AbstractController
public function preview($id)
{
$user = $this->security->getUser();
$entityManager = $this->getDoctrine()->getManager();
$course = $this->getDoctrine()->getRepository(Course::class)->find($id);
if (in_array($course, $user->getCourses()->toArray()) || in_array('ROLE_ADMIN', $user->getRoles())) {
return $this->render(
......
......@@ -48,11 +48,11 @@ class CreateCourse
$data = array();
$data["link"] = $this->router->generate("upload_course", ["id" => $this->id]);
if ($this->id != -1) {
$data["title"] = $this->translator->trans("modify.course");
$data["title"] = $this->translator->trans("course.modify");
$data["name"] = $this->course->getName();
$data["modify"] = true;
} else {
$data["title"] = $this->translator->trans("add.course");
$data["title"] = $this->translator->trans("course.add");
$data["modify"] = false;
}
......@@ -218,7 +218,7 @@ class CreateCourse
if (strpos($e->getMessage(), "Duplicate entry")) {
$data["error"] = $this->translator->trans("name.already.exist");
} elseif (strpos($e->getMessage(), "Integrity constraint violation")) {
$data["error"] = $this->translator->trans("data.is.incorrect.forgot.something");
$data["error"] = $this->translator->trans("error.incorrect_data");
} else {
$data["error"] = $e->getMessage();
}
......
{% extends 'base.html.twig' %}
{% block title %}Hello AdminController!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Hello {{ controller_name }}! ✅</h1>
This friendly message is coming from:
<ul>
<li>Your controller at <code><a href="{{ '/home/martin/site-vikazimute/src/Controller/AdminController.php'|file_link(0) }}">src/Controller/AdminController.php</a></code></li>
<li>Your template at <code><a href="{{ '/home/martin/site-vikazimute/templates/admin/index.html.twig'|file_link(0) }}">templates/admin/index.html.twig</a></code></li>
</ul>
</div>
{% endblock %}
......@@ -6,7 +6,7 @@
<div class="text-center">
<div class="container" style="padding-top: 20pt">
<h2>{% trans %}the.planners{% endtrans %}</h2>
<h2>{% trans %}planners.title{% endtrans %}</h2>
<div class="overflow-auto h-50" style="max-height: 400px;">
<ul class="list-group">
{% for user in users %}
......@@ -14,7 +14,7 @@
<h5>{{ user.username }}</h5>
<a href="{{ path('your_courses', {id: user.id}) }}">
<button class="btn btn-info">{% trans %}their.courses{% endtrans %}</button>
<button class="btn btn-info">{% trans %}courses.their{% endtrans %}</button>
</a>
{# Delete #}
......
<!DOCTYPE html>
<html lang="en">
<html lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
......@@ -36,20 +36,20 @@
<a class="nav-link" href="/index.php">{% trans %}home{% endtrans %}<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link active" href="{{path('course')}}">{% trans %}courses{% endtrans %}</a>
<a class="nav-link active" href="{{path('course')}}">{% trans %}menu.item.courses{% endtrans %}</a>
</li>
{% if app.user %}
<li class="nav-item">
<a class="nav-link active" href="{{ path('your_courses') }}">{% trans %}your.courses{% endtrans %}</a>
<a class="nav-link active" href="{{ path('your_courses') }}">{% trans %}menu.item.your_courses{% endtrans %}</a>
</li>
{% if is_granted('ROLE_ADMIN') %}
<li class="nav-item">
<a class="nav-link active" href="{{ path('all_planners') }}">{% trans %}the.planners{% endtrans %}</a>
<a class="nav-link active" href="{{ path('all_planners') }}">{% trans %}menu.item.planners{% endtrans %}</a>
</li>
{%endif %}
{% endif %}
<li class="nav-item active">
<a class="nav-link" href="{{ path('home') }}#team ">{% trans %}us{% endtrans %}</a>
<a class="nav-link" href="{{ path('home') }}#team ">{% trans %}menu.item.us{% endtrans %}</a>
</li>
<li>
<span style="padding-left:50pt"></span>
......
......@@ -4,12 +4,12 @@
{% block body %}
<div class="container" style="padding-top: 20pt">
<h2 class="text-center">{% trans %}The courses{% endtrans %}</h2>
<h2 class="text-center">{% trans %}courses.title{% endtrans %}</h2>
<div class="list-group">
{% for course in courses %}
<a href="{{ path('show_tracks', {id: course.id}) }}"
class="list-group-item d-flex justify-content-between align-items-center list-group-item-action list-group-item-secondary">{{ course.name }}
<span class="badge badge-primary badge-pill">{% trans %}Number of routes{% endtrans %}: {{ course.orienteer|length }}</span>
<span class="badge badge-primary badge-pill">{% trans %}course.number_of_routes{% endtrans %}: {{ course.orienteer|length }}</span>
</a>
{% endfor %}
</div>
......
......@@ -5,6 +5,7 @@
{% block stylesheets %}
<link rel="stylesheet" href="{{ asset('/public/leaflet/leaflet.css') }}"/>
<link rel="stylesheet" href="{{ asset('/public/leaflet/easy-button.css') }}"/>
<link rel="stylesheet" href="{{ asset('/public/css/tabs.css') }}"/>
<style>
.route {
width: 100%;
......@@ -19,44 +20,6 @@
cursor: pointer;
color: var(--primary);
}
/* Style the tab */
.tab {
overflow: hidden;
border: 1px solid #ccc;
background-color: var(--secondary);
}
/* Style the buttons inside the tab */
.tab button {
background-color: inherit;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 14px 16px;
transition: 0.3s;
font-size: 17px;
}
/* Change background color of buttons on hover */
.tab button:hover {
background-color: #ddd;
}
/* Create an active/current tablink class */
.tab button.active {
background-color: var(--primary);
color: white;
}
/* Style the tab content */
.tab-content {
display: none;
padding: 6px 12px;
border: 1px solid #ccc;
border-top: none;
}
</style>
{% endblock %}
......
......@@ -91,7 +91,7 @@
Ces données peuvent ensuite être envoyées au serveur pour une analyse du parcours réalisé
et une comparaison avec d'autres traces.</p>
<a href="https://play.google.com/store/apps/details?id=fr.ensicaen.vikazimut&hl=fr">
<button type="button" class="btn btn-outline-primary">Télécharger sur Google Play &raquo;</button>
<button type="button" class="btn btn-outline-primary">Télécharger l'application sur Google Play &raquo;</button>
</a>
</div>
<div class="row" style="padding-top: 50px">
......@@ -107,7 +107,7 @@
<div class="col-lg-6">
<h3 class="display-5">Règles de confidentialité et conditions d’utilisation</h3>
<p>Aucune donnée personnelle n'est enregistrée ni échangée avec l'application.
Seule la trace GPS anonymisée peut être envoyée au serveur à l'initiative de l'utilisateur.</p>
Seule la trace GPS anonymisée et intemporalisée peut être envoyée au serveur à l'initiative de l'utilisateur.</p>
<a href="/public/Conditions-generales-utilisation.html">
<button type="button" class="btn btn-outline-primary">Les conditions d'utilisation &raquo;</button>
</a>
......
......@@ -137,7 +137,7 @@
<div class="input-group-prepend">
<span class="input-group-text">{% trans %}name{% endtrans %}</span>
</div>
<input type="text" class="form-control" id="name" placeholder="{% trans %}name.course{% endtrans %}" aria-label="name" aria-describedby="name">
<input type="text" class="form-control" id="name" placeholder="{% trans %}course.name{% endtrans %}" aria-label="name" aria-describedby="name">
</div>
</div>
<div class="row" id="error">
......
......@@ -7,16 +7,20 @@
<div class="container text-center" style="padding-top: 20pt">
<h2>{% trans %}missing.control_point.title{% endtrans %}</h2>
<div class="overflow-auto h-50" style="max-height: 400px;">
<ul class="list-group">
{% for controlPoint in missingControlPoints %}
<li class="list-group-item">
<h3>{{ controlPoint.controlPointId }}</h3>
<a href="{{ path('delete_missing_control_point', {id: controlPoint.id}) }}">
<button class="btn btn-danger">{% trans %}delete{% endtrans %}</button>
</a>
</li>
{% endfor %}
</ul>
{% if missingControlPoints|length >0 %}
<ul class="list-group">
{% for controlPoint in missingControlPoints %}
<li class="list-group-item">
<h3>{{ controlPoint.controlPointId }}</h3>
<a href="{{ path('delete_missing_control_point', {id: controlPoint.id}) }}">
<button class="btn btn-danger">{% trans %}delete{% endtrans %}</button>
</a>
</li>
{% endfor %}
</ul>
{% else %}
Aucune balise manquante.
{% endif %}
</div>
</div>
{% endblock %}
\ No newline at end of file
{% extends 'base.html.twig' %}
{% block title %}{% trans %}preview.course{% endtrans %}{% endblock %}
{% block title %}{% trans %}course.preview{% endtrans %}{% endblock %}
{% block stylesheets %}
<link rel="stylesheet" href="{{ asset('/public/css/tabs.css') }}"/>
<link rel="stylesheet" href="{{ asset('/public/leaflet/leaflet.css') }}"/>
<link rel="stylesheet" href="{{ asset('/public/leaflet/easy-button.css') }}"/>
......@@ -15,8 +16,6 @@
<script src="{{ asset('/public/leaflet/ImageOverlay.rotated.js') }}"></script>
<script src="{{ asset('/public/leaflet/easy-button.js') }}"></script>
{{ parent() }} {# TODO Garder? #}
<script>
window.addEventListener("load", function (event) {
let divLeaflet = document.createElement("div");
......@@ -27,7 +26,7 @@
xhr.open("GET", "{{ course }}");
xhr.onload = function () {
let data = JSON.parse(xhr.response);
showPreview(data, document.getElementById("xml"), document.getElementById("map"), divLeaflet, map, overlay, new Image(0, 0));
showPreview(data, document.getElementById("xml-div"), document.getElementById("map-div"), divLeaflet, map, overlay, new Image(0, 0));
};
xhr.send()
});
......@@ -35,11 +34,37 @@
{% endblock %}
{% block body %}
<div class="container-fluid" style="margin-top:20pt">
<h3 class="text-center">{{ name }}</h3>
<div class="col" style="width:100%">
<div class="tab">
<button class="tab-links" onclick="openTab('tab1', 'map-tab')" id="tab1">Carte</button>
<button class="tab-links" onclick="openTab('tab2', 'xml-tab')" id="tab2">Balises</button>
</div>
<div class="container" style="padding-top: 75px;">
<h1>{{ name }}</h1>
<div id="xml"></div>
<div id="map"></div>
<div id="map-tab" class="tab-content">
<div id="map-div"></div>
</div>
<div id="xml-tab" class="tab-content">
<div id="xml-div"></div>
</div>
</div>
</div>
<script>
function openTab(tabTitle, tabId) {
let i, tabContent, tabLinks;
tabContent = document.getElementsByClassName("tab-content");
for (i = 0; i < tabContent.length; i++) {
tabContent[i].style.display = "none";
}
tabLinks = document.getElementsByClassName("tab-links");
for (i = 0; i < tabLinks.length; i++) {
tabLinks[i].className = tabLinks[i].className.replace(" active", "");
}
document.getElementById(tabId).style.display = "block";
document.getElementById(tabTitle).className += " active";
}
document.getElementById("tab1").click();
</script>
{% endblock %}
{% extends 'base.html.twig' %}
{% block title %}{% trans %}show.courses{% endtrans %}{% endblock %}
{% block title %}{% trans %}courses.show{% endtrans %}{% endblock %}
{% block body %}
<div class="container text-center" style="padding-top: 20pt">
<h2>{% trans %}your.courses{% endtrans %}</h2>
<h2>{% trans %}courses.your{% endtrans %}</h2>
<div class="overflow-auto h-50" style="max-height: 400px;margin-bottom: 20px">
<ul class="list-group">
{% for course in courses %}
......@@ -77,7 +77,7 @@
<div class="form-group row">
<div class="offset-2 col-8">
<a href="{{ path('add_course') }}">
<button class="btn btn-primary">{% trans %}add.course{% endtrans %}</button>
<button class="btn btn-primary">{% trans %}course.add{% endtrans %}</button>
</a>
</div>
</div>
......
......@@ -38,7 +38,7 @@
<input type="submit" class="btn btn-primary btn-md" value="Connexion">
</div>
<div id="register-link" class="text-right">
<a href="{{path('password_forgot')}}" class="text-primary">{%trans%}reinit.password{%endtrans%}</a>
<a href="{{path('password_forgot')}}" class="text-primary">{%trans%}password.reset{%endtrans%}</a>
</div>
{% endif %}
</form>
......
{% extends 'base.html.twig' %}
{% block title %}{% trans %}password.forgot{% endtrans %}{% endblock %}
{% block title %}{% trans %}password.forgotten{% endtrans %}{% endblock %}
{% block body %}
<div class="container" style="padding-top: 100pt">
<h1>{% trans %}reinit.your.password{% endtrans %}</h1>
{% if error is defined %}
<p class="alert alert-danger">{{error}}</p>
{% endif %}
{{form(form)}}
</div>
<div class="container" style="padding-top: 100pt">
<h1>{% trans %}password.reset_your_password{% endtrans %}</h1>
{% if error is defined %}
<p class="alert alert-danger">{{ error }}</p>
{% endif %}
{{ form(form) }}
</div>
{% endblock %}
home: Accueil
menu:
item:
courses: Parcours
your_courses: Mes parcours
us: Nous
planners: Les traceurs
password:
forgotten: Mot de passe oublié
reset_your_password: Réinitialiser votre mot de passe
reset: Réinitialiser le mot de passe
invalid_length: 'Mot de passe trop court (> {length} caractères)'
courses:
title: Les parcours
show: Afficher les Parcours
their: Leurs coursesh3BtVk33
your: Mes parcours
course:
add: Ajouter un parcours
modify: Modifier le parcours
name: Nom du parcours
preview: Aperçu du parcours
number_of_routes: 'Nombre de traces '
info:
submit.change: Valider les modifications
password: Nouveau mot de passe
home: Accueil
hello: Bonjour %name% !
planners:
title: Les traceurs
add:
course: Ajouter un parcours
user: Ajouter un traceur
planner:
title: Ajouter un traceur
......@@ -26,10 +52,6 @@ click:
clear: Nettoyer
Number of routes: 'Nombre de traces '
courses: Parcours
delete: Supprimer
log:
......@@ -40,40 +62,25 @@ modify: Modifier
modify.your:
info: Modifier vos données personnelles
password: Modifier votre mot de passe
name:
course: Nom du parcours
already:
exist: 'Nom de traceur déjà existant.'
preview: Aperçu
preview.course: Aperçu de la course
remove:
file: Supprimer le fichier
show:
courses: Montrer les Parcours
planner: Montrer les traceurs
the:
planners: Les traceurs
The courses: Les parcours
their:
courses: Leurs courses
info: informations personnelles
us: Nous
email: Adresse mail
phone: Numéro de téléphone
your:
courses: Mes parcours
email: 'Mail: %email%'
info: Informations personnelles
phone: 'Téléphone: %phone%'
......@@ -92,24 +99,13 @@ no:
xml:
submitted: 'Pas de fichier XML.'
reinit:
password: Réinitialiser le mot de passe
your:
password: Réinitialiser votre mot de passe
password:
forgot: Mot de passe oublié
invalid_length: 'Mot de passe trop court (> {length} caractères)'
user:
identifier: 'Identifiant'
email: 'Email'
phone: 'Téléphone'
error:
upload:
check:
type: 'Erreur durant le téléversement : vérifiez le type du fichier.'
upload.check.type: 'Erreur durant le téléversement : vérifiez le type du fichier.'
no: 'Aucune erreur.'
unknown: 'Erreur inconnue.'
course.name.invalid: 'Erreur : Nom de parcours invalide. Caractères autorisés : [a-z, A-Z, 0-9, _, (, ), [, ], \, -, '', espace]'
......@@ -123,7 +119,6 @@ error:
no.course.define: xml.no.course.define
no.start.end: 'Erreur : Il manque le départ et l''arrivée dans le fichier XML.'
invalid.control_point: 'Erreur : Les points de contrôle du fichier XML ne sont pas valides.'
kml:
empty: 'Erreur : Fichier KML vide.'
structure.invalid: 'Erreur : Fichier KML invalide.'
......@@ -133,8 +128,4 @@ error:
invalid: 'Nom d''utilisateur invalide'
email:
invalid: 'Adresse email invalide'
data:
is:
incorrect:
forgot:
something: 'messages'
incorrect_data: 'Données incorrecte. Quelque chose manque'
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment