Commit 9da1c86c authored by Patrick Etcheverry's avatar Patrick Etcheverry

travail ergonomique

parent 7aef6c20
......@@ -53,6 +53,7 @@ menu:
formations: "Formations"
utilisateurs: "Users"
parametres: "Settings"
scenarisation: "Scenarisation"
scenarisationProcess: "Scenarisation Process"
scenarisationStages: "Scenarisation Stages"
questions: "Questions"
......
......@@ -53,6 +53,7 @@ menu:
formations: ""
utilisateurs: "Utilizadores"
parametres: "Configuraciones"
scenarisation: ""
scenarisationProcess: "Scenarisation Processus"
scenarisationStages: "Etapes de scenarisation"
questions: "Preguntas"
......
......@@ -53,6 +53,7 @@ menu:
formations: "Formations"
utilisateurs: "Utilisateurs"
parametres: "Paramètres"
scenarisation: "Scénarisation"
scenarisationProcess: "Démarches de scénarisation"
scenarisationStages: "Etapes de scénarisation"
questions: "Questions"
......
......@@ -11,82 +11,117 @@
{% endif %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}{{ appName }}{% endblock %}</title>
{% block stylesheets %}
<link rel="stylesheet" href="{{ asset('css/general.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/font-awesome.min.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/bootstrap.min.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/style_vue_mere.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/menu.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/pageLogin.css')}}" type="text/css">
{% endblock %}
{% block others_stylesheets %}
{% endblock %}
{% block javascripts %}
<script type="text/javascript" src="{{ asset('js/jquery-3.2.1.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/bootstrap.min.js') }}"></script>
{% endblock %}
{% block others_javascripts %}
{% endblock %}
</head>
<body>
<div class="container-fluid">
<div class="row">
{# Le bandeau #}
<div class="col-md-12" style="background: #eeeeee;">
<div class="page-header">
<p class="grandTitre">
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'fr'})) }}">Français</a>
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'es'})) }}">Español</a>
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'en'})) }}">English</a>
</p>
<h1 class="grandTitre">Plateforme de conception d'enseignement</h1>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
{% block title %}{{ appName }}{% endblock %}
</title>
{% block stylesheets %}
<link rel="stylesheet" href="{{ asset('css/font-awesome.min.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/bootstrap.min.css')}}" type="text/css">
{% endblock %}
{% block others_stylesheets %}{% endblock %}
{% block javascripts %}
<script type="text/javascript" src="{{ asset('js/jquery-3.2.1.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/bootstrap.min.js') }}"></script>
{% endblock %}
{% block others_javascripts %}{% endblock %}
</head>
<body>
<div class="container-fluid">
<div class="row">
{# Zone haute #}
<div class="col-md-12" style="background: #eeeeee;">
<div class="page-header">
<h1 class="text-center">Plateforme de conception d'enseignement</h1>
<p style="text-align : right;">
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'fr'})) }}">Français</a>
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'es'})) }}">Español</a>
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'en'})) }}">English</a>
</p>
</div>
</div>
</div>
</div>
<div class="row">
{# Le menu #}
{% if currentRole != null %}
<div class="col-md-2">
{% block menu %}
{{ include("::menu.html.twig") }}
{% endblock %}
</div>
{# Le contenu central #}
<div class="col-md-10">
<a class="pull-right" id="boutonDeco" href="{{ path('logout')}}">
<button type="button" class="btn btn-default btn-sm">
<span class="glyphicon glyphicon-log-out" aria-hidden="true"></span>{{ 'deconnexion'|trans }}
</button>
</a>
{% else %}
<div class="col-md-12">
{% endif %}
{% block body %}
{% endblock %}
</div>
</div>
</div>
<div class="row" id="piedDePage">
<div class="col-md-12">
<footer>
<hr>
<p class="text-center">
L'application {{ appName }} est hébergée par l'<a href="http://www.univ-pau.fr" >Université de Pau et des Pays de l'Adour</a><br/>
<a href="http://liuppa.univ-pau.fr">LIUPPA</a> - <a href="#">T2I</a> - <a href="#">CDA</a>
</p>
</footer>
</div>
</div>
</body>
</html>
<div class="row" style="padding-top : 15px;">
{# Zone gauche #}
<div class="col-md-3">
{% block menu %}
{{ include("::menu.html.twig") }}
{% endblock %}
</div>
{# Zone centrale #}
{# Navbar #}
<div class="col-md-9">
<nav class="navbar navbar-default">
<div class="container-fluid">
<ul class="nav navbar-nav">
<li class="active">
<a href="#">Home</a>
</li>
<li>
<a href="#">Page 1</a>
</li>
<li>
<p> > </p>
</li>
<li>
<a href="#">Page 2</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<a href="{{ path('user_show', {'id': app.user.id}) }}">
<span class="glyphicon glyphicon-user"></span>
{{app.user.firstname}}
{{app.user.lastname}}</a>
</li>
<li>
<a href="{{ path('logout')}}">
<span class="glyphicon glyphicon-log-out"></span>
{{ 'deconnexion'|trans }}
</a>
</li>
</ul>
</div>
</nav>
<div class="panel panel-default">
{% block body %}{% endblock %}
</div>
</div>
</div>
<div class="row" id="piedDePage">
<div class="col-md-12">
<footer>
<hr>
<p class="text-center">
L'application
{{ appName }}
est hébergée par l'<a href="http://www.univ-pau.fr">Université de Pau et des Pays de l'Adour</a><br/>
<a href="http://liuppa.univ-pau.fr">LIUPPA</a>
-
<a href="#">T2I</a>
-
<a href="#">CDA</a>
</p>
</footer>
</div>
</div>
</body>
</html>
{# app/Resources/views/base.html.twig #}
{% set appName = "Txuleton" %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}{{ appName }}{% endblock %}</title>
{% block stylesheets %}
<link rel="stylesheet" href="{{ asset('css/general.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/bootstrap.min.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/style_vue_mere.css')}}" type="text/css">
<link rel="stylesheet" href="{{ asset('css/pageLogin.css')}}" type="text/css">
{% endblock %}
{% block others_stylesheets %}
{% endblock %}
{% block javascripts %}
<script type="text/javascript" src="{{ asset('js/jquery-3.2.1.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/bootstrap.min.js') }}"></script>
{% endblock %}
{% block others_javascripts %}
{% endblock %}
</head>
<body>
<div class="container-fluid">
<div class="row">
{# Le bandeau #}
<div class="col-md-12" style="background: #eeeeee;">
<div class="page-header">
<p class="grandTitre">
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'fr'})) }}">Français</a>
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'es'})) }}">Español</a>
<a href="{{ path(app.request.get('_route'),app.request.get('_route_params')|merge({'_locale':'en'})) }}">English</a>
</p>
<h1 class="grandTitre">Plateforme de conception d'enseignement</h1>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% block body %}
{% endblock %}
</div>
</div>
</div>
<div class="row" id="piedDePage">
<div class="col-md-12">
<footer>
<hr>
<p class="text-center">
L'application {{ appName }} est hébergée par l'<a href="http://www.univ-pau.fr" >Université de Pau et des Pays de l'Adour</a><br/>
<a href="http://liuppa.univ-pau.fr">LIUPPA</a> - <a href="#">T2I</a> - <a href="#">CDA</a>
</p>
</footer>
</div>
</div>
</body>
</html>
<!-- Sidebar -->
<div class="sidebar">
<ul class="nav nav-sidebar">
<li class="entete">{{'menu.scenariosAndUsers'|trans}}</li>
<li><hr></li>
<li>
{# Bidouille avec la couleur bleu pas bleu parce que j'ai des icones qui se foutent en bleu
et d'autres pas parce que je ne prends pas uniquement des composants de Bootstrap.
En mettant la balise <a> uniquement autour du texte {{}}, le rendu est foiné #}
<a class="lienNonBleu" href="{{ path('pedagogicalscenario_index', { 'userRole': currentRole })}}">
<span class="glyphicon glyphicon-book" aria-hidden="true"></span>
<span class="couleurBleuLien">{{'menu.scenariopedagogique'|trans}} </span>
</a>
</li>
{% if currentRole == "pedagogical-engineer" %}
<li>
<a class="lienNonBleu" href="{{ path('project_index', { 'userRole': currentRole })}}">
<i class="fa fa-briefcase" aria-hidden="true"></i>
<span class="couleurBleuLien">{{'menu.projets'|trans}} </span>
</a>
</li>
<li>
<a class="lienNonBleu" href="{{ path('formation_index', { 'userRole': currentRole })}}">
<img src="https://maxcdn.icons8.com/windows8/PNG/26/Business/graduation_cap-26.png" title="Chapeau de diplôme" width="16" height="16">
<span class="couleurBleuLien">{{'menu.formations'|trans}} </span>
</a>
</li>
<li>
<a class="lienNonBleu" href="{{ path('user_index')}}">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>
<span class="couleurBleuLien">{{'menu.utilisateurs'|trans}} </span>
</a>
</li>
</ul>
<ul class="nav nav-sidebar">
<li>
<a class="lienNonBleu" href="#">
<img src="https://maxcdn.icons8.com/iOS7/PNG/25/Very_Basic/support_filled-25.png" title="Support Filled" width="16" height="16">
<span class="couleurBleuLien">{{'menu.parametres'|trans}} </span>
</a>
</li>
</ul>
<div class="panel panel-default">
<div class="panel-heading"><strong>{{'menu.scenariosAndUsers'|trans}}</strong></div>
<div class="panel-body">
<ul class="nav nav-sidebar">
<li class="entete">{{'menu.scenarisationProcess'|trans}}</li>
<li><hr></li>
<li>
{# Bidouille avec la couleur bleu pas bleu parce que j'ai des icones qui se foutent en bleu
et d'autres pas parce que je ne prends pas uniquement des composants de Bootstrap.
En mettant la balise <a> uniquement autour du texte {{}}, le rendu est foiné #}
<a class="lienNonBleu" href="{{ path('scenarisation_process_index')}}">
<span class="glyphicon glyphicon-book" aria-hidden="true"></span>
<span class="couleurBleuLien">{{'menu.scenarisationProcess'|trans}} </span>
</a>
</li>
<li>
<a class="lienNonBleu" href="{{ path('scenarisation_stage_index')}}">
<img src="https://maxcdn.icons8.com/windows8/PNG/26/Business/graduation_cap-26.png" width="16" height="16">
<span class="couleurBleuLien">{{'menu.scenarisationStages'|trans}} </span>
</a>
</li>
<li>
<a class="lienNonBleu" href="{{ path('question_index')}}">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>
<span class="couleurBleuLien">{{'menu.questions'|trans}} </span>
</a>
</li>
</ul>
{% endif %}
</ul>
<ul class="list-group">
<li class="list-group-item {{app.session.get('menu').pedagogical_scenario}}">
<a href="{{ path('pedagogicalscenario_index', { 'userRole': currentRole })}}">
<span class="glyphicon glyphicon-book" style="color : black;" aria-hidden="true"></span>
{{'menu.scenariopedagogique'|trans}}
</a>
</li>
{% if currentRole == "pedagogical-engineer" %}
<li class="list-group-item {{app.session.get('menu').projects}}" style="text-decoration: none;">
<a href="{{ path('project_index', { 'userRole': currentRole })}}">
<i class="fa fa-briefcase" style="color : black;" aria-hidden="true"></i>
{{'menu.projets'|trans}}
</a>
</li>
<li class="list-group-item {{app.session.get('menu').formation}}">
<a href="{{ path('formation_index', { 'userRole': currentRole })}}">
<i class="fa fa-graduation-cap" style="color : black;" aria-hidden="true"></i>
{{'menu.formations'|trans}}
</a>
</li>
<li class="list-group-item {{app.session.get('menu').user}}">
<a href="{{ path('user_index')}}">
<span class="glyphicon glyphicon-user" style="color : black;" aria-hidden="true"></span>
{{'menu.utilisateurs'|trans}}
</a>
</li>
<li class="list-group-item {{app.session.get('menu').parameters}}">
<a href="#">
<img src="https://maxcdn.icons8.com/iOS7/PNG/25/Very_Basic/support_filled-25.png" title="Support Filled" width="16" height="16">
{{'menu.parametres'|trans}}
</a>
</li>
</ul>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><strong>{{'menu.scenarisation'|trans}}</strong></div>
<div class="panel-body">
<ul class="list-group">
<li class="list-group-item {{app.session.get('menu').scenarisation_process}}">
<a href="{{ path('scenarisation_process_index')}}">
<i class="fa fa-cogs" style="color : black;" aria-hidden="true"></i>
{{'menu.scenarisationProcess'|trans}}
</a>
</li>
<li class="list-group-item {{app.session.get('menu').scenarisation_stage}}">
<a href="{{ path('scenarisation_stage_index')}}">
<i class="fa fa-cog" style="color : black;" aria-hidden="true"></i>
{{'menu.scenarisationStages'|trans}}
</a>
</li>
<li class="list-group-item {{app.session.get('menu').question}}">
<a href="{{ path('question_index')}}">
<i class="fa fa-question" style="color : black;" aria-hidden="true"></i>
{{'menu.questions'|trans}}
</a>
</li>
</ul>
{% endif %}
</div>
</div>
......@@ -21,6 +21,18 @@ class FormationController extends Controller
*/
public function indexAction(Request $request)
{
// Mise en évidence du menu, changement du menu sélectionné
$menu = array('pedagogical_scenario' => "",
'projects' => "",
'formation' => "list-group-item-info",
'user' => "",
'parameters' => "",
'scenarisation_process'=> "",
'scenarisation_stage' => "",
'question' => "");
// Mise en session du menu
$this->get('session')->set('menu',$menu);
$em = $this->getDoctrine()->getManager();
//$formations = $em->getRepository('ScenarioBundle:Formation')->findAll();
......@@ -38,6 +50,7 @@ class FormationController extends Controller
return $this->render('ScenarioBundle:formation:index.html.twig', array(
'formations' => $formations,
'menu' => $menu
));
}
......
......@@ -5,6 +5,7 @@ namespace ScenarioBundle\Controller;
use ScenarioBundle\Entity\PedagogicalScenario;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
// To use Security annotations on the top of fuctions
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
......@@ -34,6 +35,19 @@ class PedagogicalScenarioController extends Controller
*/
public function indexAction(Request $request)
{
// Mise en évidence du menu, changement du menu sélectionné
$menu = array('pedagogical_scenario' => "list-group-item-info",
'projects' => "",
'formation' => "",
'user' => "",
'parameters' => "",
'scenarisation_process'=> "",
'scenarisation_stage' => "",
'question' => "");
// Mise en session du menu
$this->get('session')->set('menu',$menu);
$em = $this->getDoctrine()->getManager();
// Si l'utilisateur est un ingénieur pédagogique, on affiche tous les scénarios pédagogiques
......@@ -57,7 +71,7 @@ class PedagogicalScenarioController extends Controller
5/*limit per page*/
);
return $this->render('ScenarioBundle:pedagogicalscenario:index.html.twig', array(
'pedagogicalScenarios' => $pedagogicalScenarios,
'pedagogicalScenarios' => $pedagogicalScenarios
));
}
......@@ -144,6 +158,8 @@ class PedagogicalScenarioController extends Controller
*/
public function deleteAction(Request $request, PedagogicalScenario $pedagogicalScenario)
{
$form = $this->createDeleteForm($pedagogicalScenario);
$form->handleRequest($request);
......@@ -414,9 +430,7 @@ class PedagogicalScenarioController extends Controller
$sequencesPrecedementSpecifiees = null;
// On récupère la réponse séquence si on y a déjà répondu auparavant
if ($reponseAlaQuestionCourante != null && !empty($reponseAlaQuestionCourante->getSequencesArray()))
// array filter pour se débarasser des éléments 'null'
$sequencesPrecedementSpecifiees = array_filter($reponseAlaQuestionCourante->getSequencesArray());
$sequencesPrecedementSpecifiees = $reponseAlaQuestionCourante->getSequencesArray();
$createurFormulaires->add("answer_$i", 'collection', array(
'data' => $sequencesPrecedementSpecifiees,
......@@ -490,8 +504,11 @@ class PedagogicalScenarioController extends Controller
$answer->setSequenceQuestion($Questions[$i]->getQuestion());
}
$tableauApresRetraitDesNull = $this->removeNullElementsEndOfTab($tabbReponses["answer_$i"]);
// Fonction "Array Filter" au cas où l'utilisateur aurait laissé des cases vides (null)
$answer->setSequencesArray(array_filter($tabbReponses["answer_$i"]));
$answer->setSequencesArray($tableauApresRetraitDesNull);
}
// La remarque ingé et la validité sont propores à tous les types de questions
......@@ -508,6 +525,11 @@ class PedagogicalScenarioController extends Controller
$em->persist($Questions[$i]);
$em->flush();
}
// On doit rechercher la page sinon les nouvelles données ne seront pas affichées correctement (on aura celles avant enregistrement)
// Alors que les modifications auront bien été prises en compte
$request = $this->getRequest();
return $this->redirect($request->getUri());
}
}
else {
......@@ -549,4 +571,62 @@ class PedagogicalScenarioController extends Controller
return $reponseTrouvee;
}
private function removeNullElementsEndOfTab($tab)
{
if (!empty($tab))
{
end($tab);
$indiceCourant = sizeof($tab);
$termine = false;
while($termine == false && sizeof($tab) > 0)
{
if ($indiceCourant % 2 == 0)
{
if($tab[key($tab)] == null)
{
prev($tab);
if($tab[key($tab)] == null)
{
$cle1 = key($tab);
next($tab);
$cle2 = key($tab);
prev($tab);
prev($tab);
unset($tab[$cle1]);
unset($tab[$cle2]);
}
else
{
$termine = true;
}
}
else
{
$termine = true;
}
$indiceCourant-=2;
}
else
{
if($tab[key($tab)] == null)
{
$cle = key($tab);
prev($tab);
unset($tab[$cle]);
}
else
{
$termine = true;
}
$indiceCourant--;
}
}
}
return $tab;
}
}
......@@ -21,6 +21,18 @@ class ProjectController extends Controller
*/
public function indexAction(Request $request)
{
// Mise en évidence du menu, changement du menu sélectionné
$menu = array('pedagogical_scenario' => "",
'projects' => "list-group-item-info",
'formation' => "",
'user' => "",
'parameters' => "",
'scenarisation_process'=> "",