render('CadolesCoreBundle:User:list.html.twig',[ 'useheader' => true, 'usemenu' => false, 'usesidebar' => ($access=="config"), 'access' => $access ]); } public function ajaxlistAction($access, Request $request) { // S'assurer que c'est un appel ajax if (!$request->isXmlHttpRequest()) { return new JsonResponse(array('message' => 'Interdit'), 400); } $em = $this->getDoctrine()->getManager(); $start=$request->query->get('start'); $length= $request->query->get('length'); $search= $request->query->get('search'); $draw= $request->query->get('draw'); $order= $request->query->get('order'); $viewniveau02=$this->getParameter('viewniveau02'); // Nombre total d'enregistrement if($this->isGranted('ROLE_ADMIN')) $total = $em->createQueryBuilder()->select('COUNT(user)')->from($this->labelentity,'user')->getQuery()->getSingleScalarResult(); elseif($this->isGranted('ROLE_MODO')) { $usermodo=$this->get('security.token_storage')->getToken()->getUser()->getId(); $total = $em->createQueryBuilder() ->select('COUNT(user)') ->from($this->labelentity,'user') ->from("CadolesCoreBundle:UserModo",'usermodo') ->where("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo) ->getQuery()->getSingleScalarResult(); } elseif($this->isGranted('ROLE_USER')) { $niveau01=$this->get('security.token_storage')->getToken()->getUser()->getNiveau01(); $total = $em->createQueryBuilder() ->select('COUNT(user)') ->from($this->labelentity,'user') ->where("user.niveau01 = :niveau01") ->setParameter("niveau01", $niveau01) ->getQuery()->getSingleScalarResult(); } // Nombre d'enregistrement filtré if($search["value"]=="") $totalf = $total; else { if($this->isGranted('ROLE_ADMIN')) $totalf= $em->createQueryBuilder() ->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->from('CadolesCoreBundle:Niveau01', 'niveau01') ->where('user.niveau01=niveau01.id') ->andWhere('user.username LIKE :value OR user.firstname LIKE :value OR user.lastname LIKE :value OR user.email LIKE :value OR user.role LIKE :value OR niveau01.label LIKE :value') ->setParameter("value", "%".$search["value"]."%") ->getQuery() ->getSingleScalarResult(); elseif($this->isGranted('ROLE_MODO')) $totalf= $em->createQueryBuilder() ->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->from('CadolesCoreBundle:Niveau01', 'niveau01') ->from('CadolesCoreBundle:UserModo', 'usermodo') ->where('user.niveau01=niveau01.id') ->andWhere('user.username LIKE :value OR user.firstname LIKE :value OR user.lastname LIKE :value OR user.email LIKE :value OR user.role LIKE :value OR niveau01.label LIKE :value') ->andwhere("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo) ->setParameter("value", "%".$search["value"]."%") ->getQuery() ->getSingleScalarResult(); elseif($this->isGranted('ROLE_USER')) $totalf= $em->createQueryBuilder() ->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->from('CadolesCoreBundle:Niveau01', 'niveau01') ->where('user.niveau01=niveau01.id') ->andWhere('user.username LIKE :value OR user.firstname LIKE :value OR user.lastname LIKE :value OR user.email LIKE :value OR user.role LIKE :value OR niveau01.label LIKE :value') ->andWhere("user.niveau01 = :niveau01") ->setParameter("niveau01", $niveau01) ->setParameter("value", "%".$search["value"]."%") ->getQuery() ->getSingleScalarResult(); } // Construction du tableau de retour $output = array( 'draw' => $draw, 'recordsFiltered' => $totalf, 'recordsTotal' => $total, 'data' => array(), ); // Parcours des Enregistrement $qb = $em->createQueryBuilder(); if($this->isGranted('ROLE_ADMIN')) { $qb->select('user')->from($this->labelentity,'user')->from('CadolesCoreBundle:Niveau01','niveau01'); $qb->where('user.niveau01=niveau01.id'); } elseif($this->isGranted('ROLE_MODO')) { $qb->select('user')->from($this->labelentity,'user')->from('CadolesCoreBundle:Niveau01','niveau01')->from('CadolesCoreBundle:UserModo', 'usermodo'); $qb->where('user.niveau01=niveau01.id') ->andwhere("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo); } elseif($this->isGranted('ROLE_USER')) { $qb->select('user')->from($this->labelentity,'user')->from('CadolesCoreBundle:Niveau01','niveau01'); $qb->where('user.niveau01=niveau01.id') ->andwhere("user.niveau01 = :niveau01") ->setParameter("niveau01", $niveau01); } if($search["value"]!="") { $qb ->andWhere('user.username LIKE :value OR user.firstname LIKE :value OR user.lastname LIKE :value OR user.email LIKE :value OR user.role LIKE :value OR niveau01.label LIKE :value') ->setParameter("value", "%".$search["value"]."%"); } if($access=="config") { switch($order[0]["column"]) { case 2 : $qb->orderBy('user.username',$order[0]["dir"]); break; case 3 : $qb->orderBy('user.lastname',$order[0]["dir"]); break; case 4 : $qb->orderBy('user.firstname',$order[0]["dir"]); break; case 5 : $qb->orderBy('user.email',$order[0]["dir"]); break; case 6 : $qb->orderBy('niveau01.label',$order[0]["dir"]); break; case 9 : $qb->orderBy('user.role',$order[0]["dir"]); break; } } else { switch($order[0]["column"]) { case 1 : $qb->orderBy('user.username',$order[0]["dir"]); break; case 2 : $qb->orderBy('user.lastname',$order[0]["dir"]); break; case 3 : $qb->orderBy('user.firstname',$order[0]["dir"]); break; case 4 : $qb->orderBy('user.email',$order[0]["dir"]); break; case 5 : $qb->orderBy('niveau01.label',$order[0]["dir"]); break; case 7 : $qb->orderBy('user.role',$order[0]["dir"]); break; } } $datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult(); foreach($datas as $data) { // Action $action = ""; if($access=="config") { $action.="$data->getId()))."'>"; if($data->getId()>0&&$this->GetParameter("masteridentity")!="LDAP") { $action.="$data->getId()))."'>"; } } // Groupes $groups=""; foreach($data->getGroups() as $usergroup) { $groups.=$usergroup->getGroup()->getLabel()."
"; } $tmp=array(); if($access=="config") array_push($tmp,$action); array_push($tmp,"getAvatar()."' class='avatar' style='margin:auto;display:block;'>"); array_push($tmp,$data->getUsername()); array_push($tmp,$data->getLastname()); array_push($tmp,$data->getFirstname()); array_push($tmp,"".$data->getEmail().""); array_push($tmp,$data->getNiveau01()->getLabel()); if($viewniveau02) array_push($tmp,($data->getNiveau02()!==null?$data->getNiveau02()->getLabel():"")); array_push($tmp,$groups); array_push($tmp,$data->getRole()); array_push($output["data"],$tmp); } // Retour return new Response(json_encode($output), 200); } public function submitAction(Request $request) { // Vérifier que l'on puisse créer if($this->GetParameter("masteridentity")!="SQL") throw $this->createNotFoundException('Permission denied'); // Initialisation de l'enregistrement $data = new User(); // Création du formulaire $form = $this->createForm(UserType::class,$data,array( "mode"=>"submit", "access"=>"config", "perm"=>$this->isGranted('ROLE_ADMIN'),"userid"=>$this->get('security.token_storage')->getToken()->getUser()->getId(), "masteridentity"=>$this->GetParameter("masteridentity") )); // Récupération des data du formulaire $form->handleRequest($request); // Sur erreur $this->getErrorForm(null,$form,$request,$data,"submit"); // Sur validation if ($form->get('submit')->isClicked() && $form->isValid()) { $data = $form->getData(); $em = $this->getDoctrine()->getManager(); // On récupère le SIREN et le SIRET $data->setSiren($data->getNiveau01()->getSiren()); $data->setSiret($data->getNiveau02()!==null?$data->getNiveau02()->getSiret():""); // On récupère les groupes et on cacule ceux à ajouter ou à supprimer $lstgroups=array_filter(explode(",",$form->get("linkgroups")->getData())); $lstmodos=array_filter(explode(",",$form->get("linkmodos")->getData())); // Sauvegarde $em->persist($data); $em->flush(); // On récupére l'enregistrement inséré $iduser=$data->getId(); // Ajout des groupes foreach($lstgroups as $idgroup) { $group= new UserGroup(); $group->setUser($data); $datagroup = $em->getRepository("CadolesCoreBundle:Group")->find($idgroup); $user->setGroup($datagroup); $em->persist($group); $em->flush(); } // Ajout des modos foreach($lstmodos as $idmodo) { $modo= new UserModo(); $modo->setUser($data); $dataniveau01 = $em->getRepository("CadolesCoreBundle:Niveau01")->find($idmodo); $modo->setNiveau01($dataniveau01); $em->persist($modo); $em->flush(); } // Retour à la liste return $this->redirectToRoute($this->labelroute); } // Affichage du formulaire return $this->render($this->labelentity.':edit.html.twig', [ 'useheader' => true, 'usemenu' => false, 'usesidebar' => true, $this->labeldata => $data, 'mode' => 'submit', 'access' => 'config', 'listgroups' => $this->getListGroups("config"), 'listmodos' => $this->getListModos(), 'form' => $form->createView() ]); } public function updateAction($id,$access,Request $request) { // Récupération de l'enregistrement courant $data=$this->getData($id); $oldpassword=$data->getPassword(); // Si un acces modo via console d'admin on s'assure qu'il a les droit dessus sinon retour à la liste if($this->isGranted('ROLE_MODO')&&$access=="config") { $niveau01=$data->getNiveau01(); $modos=$this->get('security.token_storage')->getToken()->getUser()->getmodos(); $fgperm=false; foreach($modos as $modo) { if($modo->getNiveau01()==$niveau01) $fgperm=true; } if(!$fgperm) return $this->redirectToRoute($this->labelroute); } // Récuparation des groupes associés $oldlstgroups=[]; foreach($data->getGroups() as $group){ $oldlstgroups[] = $group->getGroup()->getId(); } // Récuparation des modos associés $oldlstmodos=[]; foreach($data->getModos() as $modo){ $oldlstmodos[] = $modo->getNiveau01()->getId(); } // Vérifier que cet enregistrement est modifiable // Création du formulaire $form = $this->createForm(UserType::class,$data,array( "mode"=>"update", "access"=>$access, "perm"=>($access=="config"?$this->isGranted('ROLE_ADMIN'):false), "userid"=>$this->get('security.token_storage')->getToken()->getUser()->getId(), "masteridentity"=>$this->GetParameter("masteridentity") )); // Récupération des data du formulaire $form->handleRequest($request); // Sur erreur $this->getErrorForm($id,$form,$request,$data,"update"); // Sur validation if ($form->get('submit')->isClicked() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); $data = $form->getData(); // Si pas de changement de password on replace l'ancien if($data->getPassword()=="") { $data->setPassword($oldpassword); } // Sinon on encode le nouveau else { $data->setPassword($data->getPassword()); } // Sauvegarde $em->persist($data); $em->flush(); // On récupère les groupes et on cacule ceux à ajouter ou à supprimer $lstgroups=array_filter(explode(",",$form->get("linkgroups")->getData())); $removegroups=array_diff($oldlstgroups,$lstgroups); $addgroups=array_diff($lstgroups,$oldlstgroups); // Ajout des nouveaux groupes foreach($addgroups as $idgroup) { $group= new UserGroup(); $group->setUser($data); $datagroup = $em->getRepository("CadolesCoreBundle:Group")->find($idgroup); $group->setGroup($datagroup); $em->persist($group); $em->flush(); } // Suppression des groupes obsolètes foreach($removegroups as $idgroup) { // Lien Group User $usergroups = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:UserGroup', 'table') ->where('table.user = :user AND table.group = :group') ->setParameter('user', $id) ->setParameter('group', $idgroup) ->getQuery() ->getResult(); foreach($usergroups as $usergroup) { $em->remove($usergroup); $em->flush(); } } // On récupère les modos et on cacule ceux à ajouter ou à supprimer $lstmodos=array_filter(explode(",",$form->get("linkmodos")->getData())); if($data->getRole()!="ROLE_MODO") $lstmodos=array(); $removemodos=array_diff($oldlstmodos,$lstmodos); $addmodos=array_diff($lstmodos,$oldlstmodos); // Ajout des nouveaux modos foreach($addmodos as $idmodo) { $modo= new UserModo(); $modo->setUser($data); $dataniveau01 = $em->getRepository("CadolesCoreBundle:Niveau01")->find($idmodo); $modo->setNiveau01($dataniveau01); $em->persist($modo); $em->flush(); } // Suppression des modos obsolètes foreach($removemodos as $idmodo) { // Lien Group User $usermodos = $em ->createQueryBuilder() ->select('table') ->from('CadolesCoreBundle:UserModo', 'table') ->where('table.user = :user AND table.niveau01 = :niveau01') ->setParameter('user', $id) ->setParameter('niveau01', $idmodo) ->getQuery() ->getResult(); foreach($usermodos as $usermodo) { $em->remove($usermodo); $em->flush(); } } // Retour à la liste if($access=="config") return $this->redirectToRoute($this->labelroute); else return $this->redirectToRoute("cadoles_core_home"); } // Affichage du formulaire return $this->render($this->labelentity.':edit.html.twig', [ 'useheader' => true, 'usemenu' => false, 'usesidebar' => ($access=="config"), 'maxwidth' => ($access=="user"), $this->labeldata => $data, 'mode' => 'update', 'access' => $access, 'listgroups' => $this->getListGroups($access), 'listmodos' => $this->getListModos(), 'form' => $form->createView() ]); } public function deleteAction($id,Request $request) { // Récupération de l'enregistrement courant $data=$this->getData($id); // Si un acces modo via console d'admin on s'assure qu'il a les droit dessus sinon retour à la liste if($this->isGranted('ROLE_MODO')&&$access=="config") { $niveau01=$data->getNiveau01(); $modos=$this->get('security.token_storage')->getToken()->getUser()->getmodos(); $fgperm=false; foreach($modos as $modo) { if($modo->getNiveau01()==$niveau01) $fgperm=true; } if(!$fgperm) return $this->redirectToRoute($this->labelroute); } // Vérifier que cet enregistrement est supprimable if($this->GetParameter("masteridentity")=="LDAP") throw $this->createNotFoundException('Permission denied'); // Création du formulaire $form = $this->createForm(UserType::class,$data,array( "mode"=>"delete", "access"=>"config", "perm"=>false, "userid"=>$this->get('security.token_storage')->getToken()->getUser()->getId(), "masteridentity"=>$this->GetParameter("masteridentity") )); // Récupération des data du formulaire $form->handleRequest($request); // Sur erreur $this->getErrorForm($id,$form,$request,$data,"delete"); // Sur validation if ($form->get('submit')->isClicked() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->remove($data); $em->flush(); return $this->redirectToRoute($this->labelroute); } // Affichage du formulaire return $this->render($this->labelentity.':edit.html.twig', [ 'useheader' => true, 'usemenu' => false, 'usesidebar' => true, $this->labeldata => $data, 'mode' => 'delete', 'access' => 'config', 'listgroups' => $this->getListGroups("config"), 'listmodos' => $this->getListModos(), 'form' => $form->createView() ]); } public function syncAction(Request $request) { $kernel = $this->get('kernel'); $application = new Application($kernel); $application->setAutoExit(false); $command = $application->find('Core:Synchro'); $parameter = new ArrayInput(['simulate' => 'false']); $output = new BufferedOutput(OutputInterface::VERBOSITY_NORMAL,false); $command->run($parameter, $output); $content = $output->fetch(); return $this->render('CadolesCoreBundle:Core:command.html.twig', [ 'useheader' => true, 'usemenu' => false, 'usesidebar' => true, "title" =>"Synchronisation avec Annuaire", "return_path" =>"cadoles_core_config_user", "content" =>$content ]); } public function profilAction(Request $request) { $user = $this->get('security.token_storage')->getToken()->getUser(); return $this->updateAction($user->getId(),"user",$request); } protected function getDatas() { $em = $this->getDoctrine()->getManager(); $datas = $em->getRepository($this->labelentity)->findAll(); return $datas; } protected function getData($id) { $em = $this->getDoctrine()->getManager(); $data = $em->getRepository($this->labelentity)->find($id); if (!$data) { throw $this->createNotFoundException('Unable to find '.$this->labeldata); } return $data; } protected function getRegistrationBy($key,$value) { $em = $this->getDoctrine()->getManager(); $datas = $em->createQueryBuilder() ->select('u') ->from('CadolesCoreBundle:registration', 'u') ->where('u.'.$key.'=:value') ->getQuery()->setParameter("value", $value) ->getResult(); if (!$datas) return false; else return true; } protected function getListGroups($access) { $em = $this->getDoctrine()->getManager(); $qb=$em->createQueryBuilder(); $qb->select('b')->from('CadolesCoreBundle:Group','b'); if($access!="config") $qb->where("b.fgopen=true"); $qb->andWhere("b.ldapfilter IS NULL"); $qb->andWhere("b.attributes IS NULL"); $datas=$qb->getQuery()->getResult(); return $datas; } protected function getListModos() { $em = $this->getDoctrine()->getManager(); $qb=$em->createQueryBuilder(); $qb->select('b')->from('CadolesCoreBundle:Niveau01','b'); $datas=$qb->getQuery()->getResult(); return $datas; } protected function getErrorForm($id,$form,$request,$data,$mode) { if ($form->get('submit')->isClicked()&&$mode=="delete") { } if ($form->get('submit')->isClicked() && ($mode=="submit" || $mode=="update")) { // Taille du login > 5 if (is_null($data->getUsername()) || strlen($data->getUsername()) < '5') { $form->addError(new FormError('Taille minimum du login 5 caractères')); } // On s'assure que le username ne contient pas des caractères speciaux $string = preg_replace('~[^@a-zA-Z0-9._-]~', '', $data->getUsername()); if($string!=$data->getUsername()) { $form->addError(new FormError('Caractères interdit dans votre login')); } // On s'assure que le username et le mail n'existe pas dans la table des users if($this->getRegistrationBy("username",$data->getUsername())||$this->getRegistrationBy("email",$data->getEmail())) { $form->addError(new FormError('Une inscription utilise déjà ce login ou cet email')); } } if ($form->get('submit')->isClicked() && !$form->isValid()) { $this->get('session')->getFlashBag()->clear(); $validator = $this->get('validator'); $errors = $validator->validate($data); foreach( $errors as $error ) { $request->getSession()->getFlashBag()->add("error", $error->getMessage()); } $errors = $form->getErrors(); foreach( $errors as $error ) { $request->getSession()->getFlashBag()->add("error", $error->getMessage()); } } } }