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