render('CadolesCoreBundle:Group:list.html.twig',[ 'useheader' => true, 'usemenu' => false, 'usesidebar' => true, ]); } public function ajaxlistAction(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'); // Nombre total d'enregistrement $total = $em->createQueryBuilder()->select('COUNT(table)')->from($this->labelentity,'table')->getQuery()->getSingleScalarResult(); // Nombre d'enregistrement filtré if($search["value"]=="") $totalf = $total; else { $totalf= $em->createQueryBuilder() ->select('COUNT(table)') ->from($this->labelentity,'table') ->where('table.label LIKE :value') ->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(); $qb->select('table')->from($this->labelentity,'table'); if($search["value"]!="") { $qb ->where('table.label LIKE :value') ->setParameter("value", "%".$search["value"]."%"); } switch($order[0]["column"]) { case 1 : $qb->orderBy('table.label',$order[0]["dir"]); break; case 2 : $qb->orderBy('table.fgopen',$order[0]["dir"]); break; case 3 : $qb->orderBy('table.fgcanshare',$order[0]["dir"]); break; } $datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult(); foreach($datas as $data) { $action = ""; //if(!$data->getFgall()&&!$data->getFgTemplate()) $action .="$data->getId()))."'>"; if($data->getId()>0&&!$data->getFgall()&&!$data->getFgTemplate()&&$this->isGranted('ROLE_ADMIN')) $action.="$data->getId()))."'>"; if(!$data->getFgall()) $action .="$data->getId()))."'>"; array_push($output["data"],array($action,$data->getLabel(),($data->getFgopen()?"oui":"non"),($data->getFgcanshare()?"oui":"non"))); } // Retour return new Response(json_encode($output), 200); } public function ajaxusersnotinAction($id,Request $request) { // S'assurer que c'est un appel ajax if (!$request->isXmlHttpRequest()) { return new JsonResponse(array('message' => 'Interdit'), 400); } $em = $this->getDoctrine()->getManager(); $group=$this->getData($id); $sub = $em->createQueryBuilder(); $sub->select("usergroup"); $sub->from("CadolesCoreBundle:UserGroup","usergroup"); $sub->andWhere('usergroup.user = user.id'); $sub->andWhere('usergroup.group = :groupid'); $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'); // Nombre total d'enregistrement $qb = $em->createQueryBuilder(); if($this->isGranted('ROLE_ADMIN')) $qb->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->where($qb->expr()->not($qb->expr()->exists($sub->getDQL()))) ->setParameter("groupid",$id); else { $usermodo=$this->get('security.token_storage')->getToken()->getUser()->getId(); $qb->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->from('CadolesCoreBundle:UserModo','usermodo') ->where($qb->expr()->not($qb->expr()->exists($sub->getDQL()))) ->andWhere("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo) ->setParameter("groupid",$id); } $total=$qb->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') ->where('user.username LIKE :value OR user.email LIKE :value') ->andWhere($qb->expr()->not($qb->expr()->exists($sub->getDQL()))) ->setParameter("value", "%".$search["value"]."%") ->setParameter("groupid",$id) ->getQuery() ->getSingleScalarResult(); else $totalf= $em->createQueryBuilder() ->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->from('CadolesCoreBundle:UserModo','usermodo') ->where('user.username LIKE :value OR user.email LIKE :value') ->andWhere($qb->expr()->not($qb->expr()->exists($sub->getDQL()))) ->andWhere("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo) ->setParameter("value", "%".$search["value"]."%") ->setParameter("groupid",$id) ->getQuery() ->getSingleScalarResult(); } // Construction du tableau de retour $output = array( 'draw' => $draw, 'recordsFiltered' => $totalf, 'recordsTotal' => $total, 'data' => array(), ); // Parcours des Enregistrement $qb = $em->createQueryBuilder(); $qb->select('user')->from("CadolesCoreBundle:User",'user'); if($this->isGranted('ROLE_ADMIN')) $qb->where($qb->expr()->not($qb->expr()->exists($sub->getDQL()))); else $qb->from('CadolesCoreBundle:UserModo','usermodo') ->where($qb->expr()->not($qb->expr()->exists($sub->getDQL()))) ->andWhere("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo); if($search["value"]!="") { $qb ->andWhere('user.username LIKE :value OR user.email LIKE :value') ->setParameter("value", "%".$search["value"]."%"); } $qb->setParameter("groupid",$id); switch($order[0]["column"]) { case 2 : $qb->orderBy('user.username',$order[0]["dir"]); break; case 3 : $qb->orderBy('user.email',$order[0]["dir"]); break; } $datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult(); foreach($datas as $data) { // Action $action = ""; if($group->getLdapfilter()==""&&$group->getAttributes()=="") $action.=""; // Avatar $avatar="getAvatar()."' style='width:30px;background-color:#337ab7;margin:auto;display:block;'>"; array_push($output["data"],array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail())); } // Retour return new Response(json_encode($output), 200); } public function ajaxusersinAction($id,Request $request) { // S'assurer que c'est un appel ajax if (!$request->isXmlHttpRequest()) { return new JsonResponse(array('message' => 'Interdit'), 400); } $em = $this->getDoctrine()->getManager(); $group=$this->getData($id); $sub = $em->createQueryBuilder(); $sub->select("usergroup"); $sub->from("CadolesCoreBundle:UserGroup","usergroup"); $sub->andWhere('usergroup.user = user.id'); $sub->andWhere('usergroup.group = :groupid'); $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'); // Nombre total d'enregistrement $qb = $em->createQueryBuilder(); if($this->isGranted('ROLE_ADMIN')) $qb->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->where($qb->expr()->exists($sub->getDQL())) ->setParameter("groupid",$id); else { $usermodo=$this->get('security.token_storage')->getToken()->getUser()->getId(); $qb->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->from('CadolesCoreBundle:UserModo','usermodo') ->where($qb->expr()->exists($sub->getDQL())) ->andWhere("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo) ->setParameter("groupid",$id); } $total=$qb->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') ->where('user.username LIKE :value OR user.email LIKE :value') ->andWhere($qb->expr()->exists($sub->getDQL())) ->setParameter("value", "%".$search["value"]."%") ->setParameter("groupid",$id) ->getQuery() ->getSingleScalarResult(); else $totalf= $em->createQueryBuilder() ->select('COUNT(user)') ->from('CadolesCoreBundle:User','user') ->from('CadolesCoreBundle:UserModo','usermodo') ->where('user.username LIKE :value OR user.email LIKE :value') ->andWhere($qb->expr()->exists($sub->getDQL())) ->andWhere("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo) ->setParameter("value", "%".$search["value"]."%") ->setParameter("groupid",$id) ->getQuery() ->getSingleScalarResult(); } // Construction du tableau de retour $output = array( 'draw' => $draw, 'recordsFiltered' => $totalf, 'recordsTotal' => $total, 'data' => array(), ); // Parcours des Enregistrement $qb = $em->createQueryBuilder(); $qb->select('user')->from("CadolesCoreBundle:User",'user'); if($this->isGranted('ROLE_ADMIN')) $qb->where($qb->expr()->exists($sub->getDQL())); else $qb->from('CadolesCoreBundle:UserModo','usermodo') ->where($qb->expr()->exists($sub->getDQL())) ->andWhere("usermodo.niveau01 = user.niveau01") ->andWhere("usermodo.user = :userid") ->setParameter("userid", $usermodo); if($search["value"]!="") { $qb ->andWhere('user.username LIKE :value OR user.email LIKE :value') ->setParameter("value", "%".$search["value"]."%"); } $qb->setParameter("groupid",$id); switch($order[0]["column"]) { case 2 : $qb->orderBy('user.username',$order[0]["dir"]); break; case 3 : $qb->orderBy('user.email',$order[0]["dir"]); break; } $datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult(); foreach($datas as $data) { // Action $action = ""; if($group->getLdapfilter()==""&&$group->getAttributes()=="") $action.=""; // Avatar $avatar="getAvatar()."' style='width:30px;background-color:#337ab7;margin:auto;display:block;'>"; array_push($output["data"],array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail())); } // Retour return new Response(json_encode($output), 200); } public function usergroupaddAction(Request $request) { // S'assurer que c'est un appel ajax if (!$request->isXmlHttpRequest()) { return new JsonResponse(array('message' => 'Interdit'), 400); } $em = $this->getDoctrine()->getManager(); $output=array(); $userid=$request->request->get('userid'); $groupid=$request->request->get('groupid'); $group=$em->getRepository("CadolesCoreBundle:Group")->find($groupid); if($group->getFgAll()||$group->getFgtemplate()) throw $this->createNotFoundException('Permission denied'); $usergroup=new Usergroup; $usergroup->setUser($em->getRepository("CadolesCoreBundle:User")->find($userid)); $usergroup->setGroup($group); $em->persist($usergroup); $em->flush(); $response = new Response(json_encode($output)); $response->headers->set('Content-Type', 'application/json'); return $response; } public function usergroupdelAction(Request $request) { // S'assurer que c'est un appel ajax if (!$request->isXmlHttpRequest()) { return new JsonResponse(array('message' => 'Interdit'), 400); } $em = $this->getDoctrine()->getManager(); $output=array(); $userid=$request->request->get('userid'); $groupid=$request->request->get('groupid'); $group=$em->getRepository("CadolesCoreBundle:Group")->find($groupid); if($group->getFgAll()||$group->getFgTemplate()) throw $this->createNotFoundException('Permission denied'); $data = $em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(array("user"=>$userid,"group"=>$groupid)); $em->remove($data); $em->flush(); $response = new Response(json_encode($output)); $response->headers->set('Content-Type', 'application/json'); return $response; } public function submitAction(Request $request) { // Initialisation de l'enregistrement $data = new Group(); // Création du formulaire $form = $this->createForm(GroupType::class,$data,array("mode"=>"submit","updatelimite"=>false,"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(); $data->setFgall(false); $data->setFgtemplate(false); if($data->getLdapfilter()!="") $data->setFgopen(false); if($data->getAttributes()!="") $data->setFgopen(false); $em = $this->getDoctrine()->getManager(); // Sauvegarde $em->persist($data); $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', 'form' => $form->createView() ]); } public function updateAction($id,Request $request) { // Récupération de l'enregistrement courant $data=$this->getData($id); // Création du formulaire $form = $this->createForm(GroupType::class,$data,array("mode"=>"update","updatelimite"=>($data->getFgAll()||$data->getFgTemplate()),"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()) { $masteridentity=$this->GetParameter("masteridentity"); $em = $this->getDoctrine()->getManager(); $data = $form->getData(); if($masteridentity!="LDAP") $data->setLdapfilter(null); if($masteridentity!="SSO") $data->setAttributes(null); if($data->getLdapfilter()!="") $data->setFgopen(false); if($data->getAttributes()!="") $data->setFgopen(false); // Sauvegarde $em->persist($data); $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' => 'update', 'form' => $form->createView() ]); } public function deleteAction($id,Request $request) { // Seule role admin peut supprimer un groupe if(!$this->isGranted('ROLE_ADMIN')) return $this->redirectToRoute($this->labelroute); // Récupération de l'enregistrement courant $data=$this->getData($id); // Vérifier que cet enregistrement est supprimable if($data->getFgAll()||$data->getFgTemplate()) throw $this->createNotFoundException('Permission denied'); // Création du formulaire $form = $this->createForm(GroupType::class,$data,array("mode"=>"delete","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', 'form' => $form->createView() ]); } public function usersAction($id,Request $request) { // Récupération de l'enregistrement courant $data=$this->getData($id); // Affichage du formulaire return $this->render($this->labelentity.':users.html.twig', [ 'useheader' => true, 'usemenu' => false, 'usesidebar' => true, $this->labeldata => $data ]); } 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 getEntityBy($entity,$key,$value) { $em = $this->getDoctrine()->getManager(); $datas = $em->createQueryBuilder() ->select('u') ->from($entity, 'u') ->where('u.'.$key.'=:value') ->getQuery()->setParameter("value", $value) ->getResult(); if (!$datas) return false; else return true; } protected function getErrorForm($id,$form,$request,$data,$mode) { if ($form->get('submit')->isClicked()&&$mode=="delete") { } if ($form->get('submit')->isClicked() && ($mode=="submit" || $mode=="update")) { $tmp=$this->getEntityBy("CadolesCoreBundle:Niveau01","label",$data->getLabel()); if($tmp) $form->addError(new FormError('Un niveau de rang 01 utilise déjà ce label')); $tmp=$this->getEntityBy("CadolesCoreBundle:Niveau02","label",$data->getLabel()); if($tmp) $form->addError(new FormError('Un niveau de rang 02 utilise déjà ce label')); } 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()); } } } }