diff --git a/dicos/91_ninegate.xml b/dicos/91_ninegate.xml index 3460b327..8219b059 100644 --- a/dicos/91_ninegate.xml +++ b/dicos/91_ninegate.xml @@ -86,6 +86,8 @@ oui user_groups + non + non scribe @@ -431,6 +433,8 @@ ninegate_ssosynchrogroup ninegate_ssoreqgroup + ninegate_ssosynchroitem + ninegate_ssoreqitem ninegate_syncldap ninegate_ldaptemplate @@ -524,6 +528,8 @@ ninegate_ssosynchrogroup ninegate_ssoreqgroup + ninegate_ssosynchroitem + ninegate_ssoreqitem @@ -591,6 +597,13 @@ ninegate_ssoreqgroup + + + non + + ninegate_ssoreqitem + + cadolesldap_pwdadmin 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 b6091fea..e106e19a 100644 --- a/src/ninegate-1.0/src/Cadoles/CASBundle/Controller/SecurityController.php +++ b/src/ninegate-1.0/src/Cadoles/CASBundle/Controller/SecurityController.php @@ -150,6 +150,19 @@ class SecurityController extends Controller // Sauvegarde des attributes en session $this->get('session')->set('attributes', $attributes); + // Sauvegarde des ssoitems en session + $ssoitems=[]; + if($this->getParameter('ssosynchroitem')) { + $user_attr_cas_item=$this->getParameter('user_attr_cas_item'); + if(array_key_exists($user_attr_cas_item,$attributes)) { + if(!is_array($attributes[$user_attr_cas_item])) { + $attributes[$user_attr_cas_item]=[$attributes[$user_attr_cas_item]]; + } + $ssoitems=$attributes[$user_attr_cas_item]; + } + } + $this->get('session')->set('ssoitems', $ssoitems); + // Autoconnexion // Récupérer le token de l'utilisateur $token = new UsernamePasswordToken($user, null, "main", $user->getRoles()); diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/TestRestCommand.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/TestRestCommand.php index 24dd4812..755f2027 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/TestRestCommand.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/TestRestCommand.php @@ -61,7 +61,7 @@ class TestRestCommand extends Command // only = liste des informations désirés = user, items, bookmarks, groups, alerts, calendars $apiurl = $url."/rest/user/".$login; $this->writeln($apiurl); - $response = \Unirest\Request::post($apiurl,$headers,["key"=>$masterapikey,"only"=>"user,items,bookmarks"]); + $response = \Unirest\Request::post($apiurl,$headers,["key"=>$masterapikey,"only"=>"user,items,bookmarks","ssoitems"=>"ninegate,toto"]); dump($response->body); $this->writeln(''); 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 e365fbed..3ee93795 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/CoreController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/CoreController.php @@ -26,7 +26,7 @@ class CoreController extends Controller $itemcategorys=null; if($item_activate) { - $em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys); + $em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,$this->get('session')->get('ssoitems')); return $this->render('CadolesPortalBundle:Page:noportal.html.twig',[ 'useheader' => true, 'usemenu' => false, diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/RestController.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/RestController.php index aaabd516..78851818 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/RestController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/RestController.php @@ -35,10 +35,14 @@ class RestController extends Controller // key = clé d'accès de l'api // only = paramétre optionnel // only = liste des informations désirés = user, items, bookmarks, groups, alerts, calendars + // ssoitems = paramétre optionnel + // ssoitems = liste des items issu du ssoitems + public function userAction($login, Request $request) { $key=$request->get('key'); $only=($request->get('only')?explode(",",$request->get('only')):""); + $ssoitems=($request->get('ssoitems')?explode(",",$request->get('ssoitems')):""); // Vérification de la clé $realkey = $this->getParameter("apikeyninegate"); @@ -73,7 +77,7 @@ class RestController extends Controller $itemcategorys=null; $weburl="https://".$this->getParameter("weburl")."/".$this->getParameter("alias")."/"; - $em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,4); + $em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,$ssoitems,4); //$this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->getPagesUser($user,null,$entity,$pagesuser,$pagesadmin,$groupsshared); // Construction de la réponse @@ -147,7 +151,7 @@ class RestController extends Controller } if($only==""||in_array("alerts",$only)) { - $alerts=$em->getRepository("CadolesPortalBundle:Alert")->getUserAlerts($user,null,null); + $alerts=$em->getRepository("CadolesPortalBundle:Alert")->getUserAlerts($user,null,null,$ssoitems); foreach($alerts as $alert) { $tmp=[]; $tmp["id"] = $alert->getId(); diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/ItemController.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/ItemController.php index e8377fb5..759b2c3b 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/ItemController.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/ItemController.php @@ -67,7 +67,12 @@ class ItemController extends Controller $data = new Item(); // Création du formulaire - $form = $this->createForm(ItemType::class,$data,array("mode"=>"submit","labelniveau01" => $this->GetParameter("labelsniveau01"),)); + $form = $this->createForm(ItemType::class,$data,array( + "mode" => "submit", + "labelniveau01" => $this->GetParameter("labelsniveau01"), + "ssosynchroitem" => $this->GetParameter("ssosynchroitem"), + "user_attr_cas_item" => $this->GetParameter("user_attr_cas_item") + )); // Récupération des data du formulaire $form->handleRequest($request); @@ -113,9 +118,11 @@ class ItemController extends Controller // Création du formulaire $form = $this->createForm(ItemType::class,$data,array( - "mode" => "update", - "idicon" => ($data->getIcon()?$data->getIcon()->getId():null), - "labelniveau01" => $this->GetParameter("labelsniveau01"), + "mode" => "update", + "idicon" => ($data->getIcon()?$data->getIcon()->getId():null), + "labelniveau01" => $this->GetParameter("labelsniveau01"), + "ssosynchroitem" => $this->GetParameter("ssosynchroitem"), + "user_attr_cas_item" => $this->GetParameter("user_attr_cas_item") )); // Récupération des data du formulaire diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php index 6dbee6f9..8a26fff5 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php @@ -599,7 +599,7 @@ class PagewidgetController extends Controller } // Profilage - $itemsordered = $this->em->getRepository("CadolesPortalBundle:Item")->getUserItems($this->user,$bookmarks,$items,$itemcategorys,$iditemcategory,$withbookmark,false); + $itemsordered = $this->em->getRepository("CadolesPortalBundle:Item")->getUserItems($this->user,$bookmarks,$items,$itemcategorys,$iditemcategory,$this->get('session')->get('ssoitems'),$withbookmark,false); } // Render @@ -637,7 +637,7 @@ class PagewidgetController extends Controller } // Profilage - $itemsordered = $this->em->getRepository("CadolesPortalBundle:Item")->getUserItems($this->user,$bookmarks,$items,$itemcategorys,null,0,true); + $itemsordered = $this->em->getRepository("CadolesPortalBundle:Item")->getUserItems($this->user,$bookmarks,$items,$itemcategorys,null,$this->get('session')->get('ssoitems'),0,true); } // Render @@ -671,7 +671,7 @@ class PagewidgetController extends Controller } // Profilage - $alertsordered=$this->em->getRepository("CadolesPortalBundle:Alert")->getUserAlerts($this->user,$idalertcategory,$alertcategoryfilter); + $alertsordered=$this->em->getRepository("CadolesPortalBundle:Alert")->getUserAlerts($this->user,$idalertcategory,$alertcategoryfilter,$this->get('session')->get('ssoitems')); } // Render diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Item.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Item.php index 3f9e15e6..0f3f45a1 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Item.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Item.php @@ -102,6 +102,13 @@ class Item */ private $roles; + /** + * @var string + * + * @ORM\Column(name="ssoitem", type="string", nullable=true) + */ + private $ssoitem; + /** * @ORM\ManyToOne(targetEntity="Icon", inversedBy="items") * @ORM\JoinColumn(nullable=true, onDelete="SET NULL") @@ -619,4 +626,28 @@ class Item { return $this->alerts; } + + /** + * Set ssoitem + * + * @param string $ssoitem + * + * @return Item + */ + public function setSsoitem($ssoitem) + { + $this->ssoitem = $ssoitem; + + return $this; + } + + /** + * Get ssoitem + * + * @return string + */ + public function getSsoitem() + { + return $this->ssoitem; + } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/ItemType.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/ItemType.php index 7ce824cd..06e61041 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/ItemType.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/ItemType.php @@ -133,6 +133,13 @@ class ItemType extends AbstractType ]) ->add('idicon', HiddenType::class,['mapped'=> false,'data' => $options["idicon"]]); + + if($options["ssosynchroitem"]) { + $builder->add("ssoitem", TextType::class, [ + "label" => "Visible si attribut SSO ".$options["user_attr_cas_item"]." égale à", + "disabled" => ($options["mode"]=="delete"?true:false), + ]); + } } public function configureOptions(OptionsResolver $resolver) @@ -142,6 +149,8 @@ class ItemType extends AbstractType 'mode' => "string", 'idicon' => "string", 'labelniveau01' => "string", + 'ssosynchroitem' => "string", + 'user_attr_cas_item' => "string", ]); } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/AlertRepository.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/AlertRepository.php index f628fa9a..6297b7b3 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/AlertRepository.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/AlertRepository.php @@ -40,7 +40,7 @@ class AlertRepository extends EntityRepository ; } - public function getUserAlerts($user,$idalertcategory,$alertcategoryfilter) { + public function getUserAlerts($user,$idalertcategory,$alertcategoryfilter,$ssoitems) { // Profilage $roles=($user?$user->getRoles():["ROLE_ANONYME"]); $niveau01=($user?$user->getNiveau01():null); @@ -122,7 +122,7 @@ class AlertRepository extends EntityRepository $bookmarks=null; $items=null; $itemcategorys=null; - $this->_em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,4); + $this->getEntityManager()->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,$ssoitems,4); foreach($items as $item) { $qb = $this->createQueryBuilder('a'); $qb->select('alert') diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/ItemRepository.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/ItemRepository.php index c4173788..46c7016a 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/ItemRepository.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/ItemRepository.php @@ -7,7 +7,7 @@ use Doctrine\Common\Collections\ArrayCollection; class ItemRepository extends EntityRepository { - public function getUserItems($user,&$bookmarks,&$itemsordered,&$itemcategorys,$iditemcategory=null,$withbookmark=1,$fgessential=false) { + public function getUserItems($user,&$bookmarks,&$itemsordered,&$itemcategorys,$iditemcategory=null,$ssoitems,$withbookmark=1,$fgessential=false) { // Profilage $roles=($user?$user->getRoles():["ROLE_ANONYME"]); $groups=($user?$user->getGroups():[]); @@ -106,6 +106,31 @@ class ItemRepository extends EntityRepository } } + // Récupération des items par ssoitem + foreach($ssoitems as $ssoitem) { + $qb = $this->getEntityManager()->createQueryBuilder(); + $qb->select('item') + ->from("CadolesPortalBundle:Item", 'item') + ->where("item.ssoitem=:ssoitem ") + ->setParameter("ssoitem",$ssoitem); + + if($iditemcategory && $itemcategoryfilter) { + $qb->andWhere("item.itemcategory=:itemcategory") + ->setParameter("itemcategory",$itemcategoryfilter); + } + + if($fgessential) { + $qb->andWhere("item.essential=:flag") + ->setParameter("flag",true); + } + + $itemsssoitems=$qb->getQuery()->getResult(); + + foreach($itemsssoitems as $itemssoitem) { + if(!$bookmarksitems->contains($itemssoitem) && !$items->contains($itemssoitem)) $items->add($itemssoitem); + } + } + // Trie des items $itemsordered = $items->getIterator(); $itemsordered->uasort(function ($first, $second) { diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Item/edit.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Item/edit.html.twig index c09e4bfe..860038ab 100755 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Item/edit.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Item/edit.html.twig @@ -61,6 +61,10 @@ {{ form_row(form.roles) }} {{ form_row(form.niveau01s) }} {{ form_row(form.groups) }} + {% if form.ssoitem is defined %} + {{ form_row(form.ssoitem) }} + {% endif %} + {{ form_row(form.color) }}
diff --git a/tmpl/ninegate-template.yml b/tmpl/ninegate-template.yml index 195ef459..f5c19814 100644 --- a/tmpl/ninegate-template.yml +++ b/tmpl/ninegate-template.yml @@ -495,10 +495,18 @@ parameters: ssosynchrogroup: true user_attr_cas_group: %%ninegate_ssoreqgroup %else - ssosynchrogroup: fase + ssosynchrogroup: false user_attr_cas_group: %end if +%if %%getVar("ninegate_ssosynchroitem", 'non') == "oui" + ssosynchroitem: true + user_attr_cas_item: %%ninegate_ssoreqitem +%else + ssosynchroitem: false + user_attr_cas_item: +%end if + %if %%is_defined("ninegate_smtpport") mailer_port: '%%ninegate_smtpport' mailer_encryption: %%ninegate_smtpencryption