From e18790790b05e17bcb95d61fade32f2a9ee749dd Mon Sep 17 00:00:00 2001 From: afornerot Date: Tue, 9 Jun 2020 09:53:25 +0200 Subject: [PATCH] ajout compteur visite utilisateur (ref #150) --- .../Controller/SecurityController.php | 6 + .../Controller/ConfigController.php | 113 ++++++++++++------ .../CoreBundle/Controller/CoreController.php | 1 - .../CoreBundle/Controller/UserController.php | 46 ++++++- .../src/Cadoles/CoreBundle/Entity/User.php | 58 +++++++++ .../EventListener/sessionListener.php | 13 ++ .../src/Cadoles/CoreBundle/Form/UserType.php | 18 +++ .../Resources/views/User/edit.html.twig | 20 +++- .../Resources/views/User/list.html.twig | 1 + .../Resources/views/User/view.html.twig | 6 +- 10 files changed, 236 insertions(+), 46 deletions(-) diff --git a/src/ninegate-1.0/src/Cadoles/CASBundle/Controller/SecurityController.php b/src/ninegate-1.0/src/Cadoles/CASBundle/Controller/SecurityController.php index 664fc84e..c351f5d5 100644 --- a/src/ninegate-1.0/src/Cadoles/CASBundle/Controller/SecurityController.php +++ b/src/ninegate-1.0/src/Cadoles/CASBundle/Controller/SecurityController.php @@ -156,6 +156,12 @@ class SecurityController extends Controller $dispatcher = new EventDispatcher(); $dispatcher->dispatch("security.interactive_login", $event); + // On enregistre sa visite + $user->setVisitedate(new \DateTime()); + $user->setVisitecpt($user->getVisitecpt()+1); + $em->persist($user); + $em->flush(); + if($redirect) return $this->redirect($redirect); else diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/ConfigController.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/ConfigController.php index 6326ccf9..c4c5cf2e 100755 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/ConfigController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/ConfigController.php @@ -203,66 +203,94 @@ class ConfigController extends Controller $session=$this->get('session'); $config=$em->getRepository('CadolesCoreBundle:Config')->find("datauser"); $fields=$config->getValue(); + $fields=json_decode($fields,true); + if(!is_array($fields)) $fields=[]; - if($fields=="") { - // Valeur par défaut 0=caché / 1=falcultatif / 2=obligatoire + // Valeur par défaut 0=caché / 1=falcultatif / 2=obligatoire + if(!array_key_exists("firstname",$fields)) { $fields["firstname"]["perm"]=1; $fields["firstname"]["label"]="Prénom"; + } + if(!array_key_exists("visible",$fields)) { $fields["visible"]["perm"]=2; $fields["visible"]["label"]="Visible"; + } + if(!array_key_exists("authlevel",$fields)) { $fields["authlevel"]["perm"]=2; $fields["authlevel"]["label"]="Niveau d'authentification"; + } + if(!array_key_exists("belongingpopulation",$fields)) { $fields["belongingpopulation"]["perm"]=2; $fields["belongingpopulation"]["label"]="Population d'appartenance"; + } + if(!array_key_exists("job",$fields)) { $fields["job"]["perm"]=1; $fields["job"]["label"]="Métier"; + } + if(!array_key_exists("position",$fields)) { $fields["position"]["perm"]=1; $fields["position"]["label"]="Fonction"; + } + if(!array_key_exists("niveau02",$fields)) { $fields["niveau02"]["perm"]=1; - $fields["niveau02"]["label"]="Niveau 02"; + $fields["niveau02"]["label"]=$session->get('labelniveau02'); + } + if(!array_key_exists("usualname",$fields)) { $fields["usualname"]["perm"]=1; $fields["usualname"]["label"]="Nom d'Usage"; + } + if(!array_key_exists("gender",$fields)) { $fields["gender"]["perm"]=1; $fields["gender"]["label"]="Sexe"; + } + if(!array_key_exists("givensname",$fields)) { $fields["givensname"]["perm"]=1; $fields["givensname"]["label"]="Autre Prénom"; + } + if(!array_key_exists("telephonenumber",$fields)) { $fields["telephonenumber"]["perm"]=1; $fields["telephonenumber"]["label"]="Téléphone"; + } + if(!array_key_exists("postaladress",$fields)) { $fields["postaladress"]["perm"]=1; $fields["postaladress"]["label"]="Adresse"; + } + if(!array_key_exists("birthdate",$fields)) { $fields["birthdate"]["perm"]=1; $fields["birthdate"]["label"]="Date de Naissance"; + } + if(!array_key_exists("birthcountry",$fields)) { $fields["birthcountry"]["perm"]=1; $fields["birthcountry"]["label"]="Pays de Naissance"; + } + if(!array_key_exists("birthplace",$fields)) { $fields["birthplace"]["perm"]=1; $fields["birthplace"]["label"]="Ville de Naissance"; - } - else { - $fields=json_decode($fields, true); - } + } + + if(!array_key_exists("visite",$fields)) { + $fields["visite"]["perm"]=1; + $fields["visite"]["label"]="Visite"; + } - if($session->get('viewniveau02')&&!array_key_exists("niveau02",$fields)) - $fields["niveau02"]["perm"]=1; - elseif(!$session->get('viewniveau02')) + if(!$session->get('viewniveau02')) unset($fields["niveau02"]); - if(array_key_exists("niveau02",$fields)) - $fields["niveau02"]["label"]=$session->get('labelniveau02'); - + $form = $this->createForm(DatauserType::class,$config,array("mode"=>"datauser","fields" => $fields)); @@ -311,59 +339,66 @@ class ConfigController extends Controller $config=$em->getRepository('CadolesCoreBundle:Config')->find("datausers"); $fields=$config->getValue(); - if($fields=="") { - // Valeur par défaut 0=caché / 3=visible + $fields=json_decode($fields, true); + if(!is_array($fields)) $fields=[]; + + // Valeur par défaut 0=caché / 3=visible + if(!array_key_exists("avatar",$fields)) { $fields["avatar"]["perm"]=1; $fields["avatar"]["label"]="Avatar"; - + } + if(!array_key_exists("login",$fields)) { $fields["login"]["perm"]=1; $fields["login"]["label"]="Login"; - + } + if(!array_key_exists("lastname",$fields)) { $fields["lastname"]["perm"]=1; $fields["lastname"]["label"]="Nom"; - + } + if(!array_key_exists("firstname",$fields)) { $fields["firstname"]["perm"]=1; $fields["firstname"]["label"]="Prenom"; - + } + if(!array_key_exists("email",$fields)) { $fields["email"]["perm"]=1; $fields["email"]["label"]="Email"; - + } + if(!array_key_exists("niveau01",$fields)) { $fields["niveau01"]["perm"]=1; - $fields["niveau01"]["label"]="Niveau 01"; - + $fields["niveau01"]["label"]=$session->get('labelniveau01'); + } + if(!array_key_exists("niveau02",$fields)) { $fields["niveau02"]["perm"]=1; - $fields["niveau02"]["label"]="Niveau 02"; - + $fields["niveau02"]["label"]=$session->get('labelniveau02'); + } + if(!array_key_exists("group",$fields)) { $fields["group"]["perm"]=1; $fields["group"]["label"]="Groupes"; - + } + if(!array_key_exists("job",$fields)) { $fields["job"]["perm"]=1; $fields["job"]["label"]="Métier"; - + } + if(!array_key_exists("position",$fields)) { $fields["position"]["perm"]=1; $fields["position"]["label"]="Fonction"; - + } + if(!array_key_exists("role",$fields)) { $fields["role"]["perm"]=1; $fields["role"]["label"]="Rôles"; - + } + if(!array_key_exists("telephonenumber",$fields)) { $fields["telephonenumber"]["perm"]=1; $fields["telephonenumber"]["label"]="Téléphone"; } - else { - $fields=json_decode($fields, true); + if(!array_key_exists("visitedate",$fields)) { + $fields["visitedate"]["perm"]=1; + $fields["visitedate"]["label"]="Visite"; } - $fields["niveau01"]["label"]=$session->get('labelniveau01'); - if($session->get('viewniveau02')&&!array_key_exists("niveau02",$fields)) - $fields["niveau02"]["perm"]=1; - elseif(!$session->get('viewniveau02')) + if(!$session->get('viewniveau02')) unset($fields["niveau02"]); - if(array_key_exists("niveau02",$fields)) - $fields["niveau02"]["label"]=$session->get('labelniveau02'); - - - $form = $this->createForm(DatauserType::class,$config,array("mode"=>"datausers","fields" => $fields)); // Récupération des data du formulaire diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/CoreController.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/CoreController.php index 87190a93..73e03010 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/CoreController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/CoreController.php @@ -102,7 +102,6 @@ class CoreController extends Controller } } } - if($toprofil) { return $this->redirect($this->generateUrl('cadoles_core_user',array("info"=>"Merci de compléter votre profil"))); } diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/UserController.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/UserController.php index 0203c579..5f14647d 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/UserController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/UserController.php @@ -225,6 +225,10 @@ class UserController extends Controller break; case 12 : + $qb->orderBy('user.visitedate',$order[0]["dir"]); + break; + + case 13 : $qb->orderBy('user.role',$order[0]["dir"]); break; } @@ -264,6 +268,10 @@ class UserController extends Controller break; case 10 : + $qb->orderBy('user.visitedate',$order[0]["dir"]); + break; + + case 11 : $qb->orderBy('user.role',$order[0]["dir"]); break; } @@ -300,6 +308,7 @@ class UserController extends Controller array_push($tmp,$groups); array_push($tmp,$data->getJob()); array_push($tmp,$data->getPosition()); + array_push($tmp,($data->getVisitedate()?$data->getVisitedate()->format("d/m/Y H:i")."
nb = ".$data->getVisitecpt():"")); array_push($tmp,$data->getRole()); array_push($output["data"],$tmp); @@ -1147,55 +1156,88 @@ class UserController extends Controller $config=$em->getRepository('CadolesCoreBundle:Config')->find("datauser"); $fields=$config->getValue(); $fields=json_decode($fields,true); + if(!is_array($fields)) $fields=[]; - if($fields=="") { - // Valeur par défaut 0=caché / 1=falcultatif / 2=obligatoire + // Valeur par défaut 0=caché / 1=falcultatif / 2=obligatoire + if(!array_key_exists("firstname",$fields)) { $fields["firstname"]["perm"]=1; $fields["firstname"]["label"]="Prénom"; + } + if(!array_key_exists("visible",$fields)) { $fields["visible"]["perm"]=2; $fields["visible"]["label"]="Visible"; + } + if(!array_key_exists("authlevel",$fields)) { $fields["authlevel"]["perm"]=2; $fields["authlevel"]["label"]="Niveau d'authentification"; + } + if(!array_key_exists("belongingpopulation",$fields)) { $fields["belongingpopulation"]["perm"]=2; $fields["belongingpopulation"]["label"]="Population d'appartenance"; + } + if(!array_key_exists("job",$fields)) { $fields["job"]["perm"]=1; $fields["job"]["label"]="Métier"; + } + if(!array_key_exists("position",$fields)) { $fields["position"]["perm"]=1; $fields["position"]["label"]="Fonction"; + } + if(!array_key_exists("niveau02",$fields)) { $fields["niveau02"]["perm"]=1; $fields["niveau02"]["label"]="Niveau 02"; + } + if(!array_key_exists("usualname",$fields)) { $fields["usualname"]["perm"]=1; $fields["usualname"]["label"]="Nom d'Usage"; + } + if(!array_key_exists("gender",$fields)) { $fields["gender"]["perm"]=1; $fields["gender"]["label"]="Sexe"; + } + if(!array_key_exists("givensname",$fields)) { $fields["givensname"]["perm"]=1; $fields["givensname"]["label"]="Autre Prénom"; + } + if(!array_key_exists("telephonenumber",$fields)) { $fields["telephonenumber"]["perm"]=1; $fields["telephonenumber"]["label"]="Téléphone"; + } + if(!array_key_exists("postaladress",$fields)) { $fields["postaladress"]["perm"]=1; $fields["postaladress"]["label"]="Adresse"; + } + if(!array_key_exists("birthdate",$fields)) { $fields["birthdate"]["perm"]=1; $fields["birthdate"]["label"]="Date de Naissance"; + } + if(!array_key_exists("birthcountry",$fields)) { $fields["birthcountry"]["perm"]=1; $fields["birthcountry"]["label"]="Pays de Naissance"; + } + if(!array_key_exists("birthplace",$fields)) { $fields["birthplace"]["perm"]=1; $fields["birthplace"]["label"]="Ville de Naissance"; } + if(!array_key_exists("visite",$fields)) { + $fields["visite"]["perm"]=1; + $fields["visite"]["label"]="Visite"; + } return $fields; } diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/User.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/User.php index aca42c5b..ff193744 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/User.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/User.php @@ -163,6 +163,16 @@ class User implements UserInterface, \Serializable */ private $viewcalendar; + /** + * @ORM\Column(type="datetime", nullable=true) + */ + private $visitedate; + + /** + * @ORM\Column(type="integer", nullable=true) + */ + private $visitecpt; + /** * @ORM\ManyToOne(targetEntity="Country", inversedBy="users") * @ORM\JoinColumn(nullable=true) @@ -1796,4 +1806,52 @@ class User implements UserInterface, \Serializable { return $this->projectcomments; } + + /** + * Set visitedate + * + * @param \DateTime $visitedate + * + * @return User + */ + public function setVisitedate($visitedate) + { + $this->visitedate = $visitedate; + + return $this; + } + + /** + * Get visitedate + * + * @return \DateTime + */ + public function getVisitedate() + { + return $this->visitedate; + } + + /** + * Set visitecpt + * + * @param integer $visitecpt + * + * @return User + */ + public function setVisitecpt($visitecpt) + { + $this->visitecpt = $visitecpt; + + return $this; + } + + /** + * Get visitecpt + * + * @return integer + */ + public function getVisitecpt() + { + return $this->visitecpt; + } } diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/EventListener/sessionListener.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/EventListener/sessionListener.php index ab260019..2447830a 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/EventListener/sessionListener.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/EventListener/sessionListener.php @@ -282,6 +282,19 @@ $session->set("sublogo", $niveau01->getLogo()); } + } + + if($curentuser!="anon.") { + $visitedate=$curentuser->getVisitedate(); + $visitedate->add(new \DateInterval("PT1H")); + $now=new \DateTime(); + if($visitedate<$now) { + $curentuser->setVisitedate($now); + $curentuser->setVisitecpt($curentuser->getVisitecpt()+1); + $this->em->persist($curentuser); + $this->em->flush(); + } + } } } diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/UserType.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/UserType.php index 986726af..6820d2c5 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/UserType.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/UserType.php @@ -16,6 +16,8 @@ use Symfony\Component\Form\Extension\Core\Type\ButtonType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\DateType; +use Symfony\Component\Form\Extension\Core\Type\DateTimeType; +use Symfony\Component\Form\Extension\Core\Type\IntegerType; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType; @@ -360,6 +362,22 @@ class UserType extends AbstractType } } + if(!array_key_exists("visite",$fields)) $fields["visite"]["perm"]==2; + if($fields["visite"]["perm"]!=0) { + $builder->add('visitedate', DateTimeType::class, [ + "label" => 'Date de dernière visite', + "disabled" => true, + "required" => ($fields["visite"]["perm"]==2), + "widget" => 'single_text', + ]); + + $builder->add('visitecpt', IntegerType::class, [ + "label" => 'Nombre de visites', + "required" => ($fields["visite"]["perm"]==2), + "disabled" => true, + ]); + } + # Avatar $builder->add('avatar',HiddenType::class, array("empty_data" => "noavatar.png")); diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/edit.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/edit.html.twig index 16be8812..8eeb71e6 100755 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/edit.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/edit.html.twig @@ -261,6 +261,20 @@ + + {% if form.visitedate is defined %} +
+
+ Visite +
+ +
+ {{ form_row(form.visitedate) }} + {{ form_row(form.visitecpt) }} +
+
+ {% endif %} + @@ -366,13 +380,15 @@ {% block localjavascript %} $(document).ready(function() { - {% if access=="profil" %} + {% if access=="user" %} + {% set color = app.session.get('color') %} $(".sidebar").remove(); $("body").removeClass("body"); $("body").addClass("simple"); + $("body").attr('style', 'background-color: #{{ color['colorbody'] }} !important'); $("#page-wrapper").css("margin","auto"); - $("#page-wrapper").css("max-width","1000px"); $("#page-wrapper").css("border-left","none"); + {% endif %} // Vider le password diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/list.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/list.html.twig index 9c05c2f4..a462021b 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/list.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/list.html.twig @@ -45,6 +45,7 @@ td { font-size: 10px; } Groupes Métier Fonction + Visite Rôle diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/view.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/view.html.twig index 09c38fff..103beb28 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/view.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/view.html.twig @@ -18,8 +18,10 @@ {%if viewniveau02 and user.niveau02%}{{ labelniveau02 }} = {{ user.niveau02.label }}
{% endif %} {%if user.job %}Métier = {{ user.job }}
{%endif%} {%if user.position %}Fonction = {{ user.position }}
{%endif%} - {%if user.postaladress %}Adresse = {{ user.postaladress }}

{%endif%} - + {%if user.postaladress %}Adresse = {{ user.postaladress }}
{%endif%} + {%if user.visitedate %}Date de dernière visite = {{ user.visitedate|date("d/m/Y H:i") }}
{%endif%} + {%if user.visitecpt %}Nombre de visites = {{ user.visitecpt }}
{%endif%} +
{% set fgtitle=false %} {% for usergroup in user.groups %} {% if usergroup.group.fgcanshare %}