From 9b877c2de05d17af8856d5e69725d6b331dd2f50 Mon Sep 17 00:00:00 2001 From: afornerot Date: Thu, 19 Nov 2020 10:09:37 +0100 Subject: [PATCH 1/4] =?UTF-8?q?possibilit=C3=A9=20de=20profiler=20les=20al?= =?UTF-8?q?ertes=20par=20items=20(fixes=20#31120)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CoreBundle/Controller/AjaxController.php | 31 +++++++++- .../CoreBundle/Resources/config/routing.yml | 5 +- .../src/Cadoles/PortalBundle/Entity/Alert.php | 43 ++++++++++++++ .../src/Cadoles/PortalBundle/Entity/Item.php | 39 +++++++++++++ .../Cadoles/PortalBundle/Form/AlertType.php | 18 ++++++ .../Repository/AlertRepository.php | 30 +++++++++- .../Resources/views/Alert/edit.html.twig | 1 + .../views/Pagewidget/viewalert.html.twig | 58 +++++++++++++++++++ 8 files changed, 222 insertions(+), 3 deletions(-) diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/AjaxController.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/AjaxController.php index 8d71d856..730a74d6 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/AjaxController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/AjaxController.php @@ -209,5 +209,34 @@ class AjaxController extends Controller $response->headers->set('Content-Type', 'application/json'); return $response; - } + } + + public function itemlistAction(Request $request) + { + // S'assurer que c'est un appel ajax + if (!$request->isXmlHttpRequest()) { + return new JsonResponse(array('message' => 'Interdit'), 400); + } + + $output=array(); + $em = $this->getDoctrine()->getManager(); + $page_limit=$request->query->get('page_limit'); + $q=$request->query->get('q'); + + $qb = $em->createQueryBuilder(); + $qb->select('table')->from("CadolesPortalBundle:Item",'table') + ->where('table.title LIKE :value') + ->setParameter("value", "%".$q."%") + ->orderBy('table.title'); + + $datas=$qb->setFirstResult(0)->setMaxResults($page_limit)->getQuery()->getResult(); + foreach($datas as $data) { + array_push($output,array("id"=>$data->getId(),"text"=>$data->getTitle())); + } + + $response = new Response(json_encode($output)); + $response->headers->set('Content-Type', 'application/json'); + return $response; + + } } diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/config/routing.yml b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/config/routing.yml index 7d3c8d84..0511a6ba 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/config/routing.yml +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/config/routing.yml @@ -156,7 +156,10 @@ cadoles_core_ajax_group_list: cadoles_core_ajax_group_read: path: /ajax/group/read defaults: { _controller: CadolesCoreBundle:Ajax:groupread } - + +cadoles_core_ajax_item_list: + path: /ajax/item/list + defaults: { _controller: CadolesCoreBundle:Ajax:itemlist } #== Home Config ========================================================================================================== cadoles_core_config: diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Alert.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Alert.php index f34d4863..8d4cc2b5 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Alert.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Alert.php @@ -105,6 +105,15 @@ class Alert */ protected $readers; + /** + * @ORM\ManyToMany(targetEntity="Cadoles\PortalBundle\Entity\Item", inversedBy="alerts", cascade={"persist"}) + * @ORM\JoinTable(name="alertitem", + * joinColumns={@ORM\JoinColumn(name="alert", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="item", referencedColumnName="id")} + * ) + */ + protected $items; + // Is Online public function isOnline() { @@ -461,4 +470,38 @@ class Alert { return $this->readers; } + + /** + * Add item + * + * @param \Cadoles\PortalBundle\Entity\Item $item + * + * @return Alert + */ + public function addItem(\Cadoles\PortalBundle\Entity\Item $item) + { + $this->items[] = $item; + + return $this; + } + + /** + * Remove item + * + * @param \Cadoles\PortalBundle\Entity\Item $item + */ + public function removeItem(\Cadoles\PortalBundle\Entity\Item $item) + { + $this->items->removeElement($item); + } + + /** + * Get items + * + * @return \Doctrine\Common\Collections\Collection + */ + public function getItems() + { + return $this->items; + } } 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 a3f0cf40..3f9e15e6 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Item.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Item.php @@ -140,6 +140,11 @@ class Item */ protected $niveau01s; + /** + * @ORM\ManyToMany(targetEntity="Cadoles\PortalBundle\Entity\Alert", mappedBy="items") + */ + protected $alerts; + // A garder pour forcer l'id en init public function setId($id) { @@ -580,4 +585,38 @@ class Item { return $this->essential; } + + /** + * Add alert + * + * @param \Cadoles\PortalBundle\Entity\Alert $alert + * + * @return Item + */ + public function addAlert(\Cadoles\PortalBundle\Entity\Alert $alert) + { + $this->alerts[] = $alert; + + return $this; + } + + /** + * Remove alert + * + * @param \Cadoles\PortalBundle\Entity\Alert $alert + */ + public function removeAlert(\Cadoles\PortalBundle\Entity\Alert $alert) + { + $this->alerts->removeElement($alert); + } + + /** + * Get alerts + * + * @return \Doctrine\Common\Collections\Collection + */ + public function getAlerts() + { + return $this->alerts; + } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/AlertType.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/AlertType.php index 8cf68ba1..daae87a9 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/AlertType.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/AlertType.php @@ -98,6 +98,24 @@ class AlertType extends AbstractType 'placeholder' => 'Selectionner un groupe', ]) + ->add('items', Select2EntityType::class, [ + 'label' => 'Visible pour les Items', + 'class' => 'CadolesPortalBundle:Item', + 'text_property' => 'label', + 'multiple' => true, + 'remote_route' => 'cadoles_core_ajax_item_list', + 'primary_key' => 'id', + 'text_property' => 'title', + 'minimum_input_length' => 0, + 'page_limit' => 100, + 'allow_clear' => true, + 'delay' => 250, + 'cache' => false, + 'cache_timeout' => 60000, + 'language' => 'fr', + 'placeholder' => 'Selectionner des items', + ]) + ->add('publishedat', DateType::class, [ 'label' => 'Publier du', 'input' => 'datetime', 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 b59e0ad6..f628fa9a 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/AlertRepository.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/AlertRepository.php @@ -45,7 +45,7 @@ class AlertRepository extends EntityRepository $roles=($user?$user->getRoles():["ROLE_ANONYME"]); $niveau01=($user?$user->getNiveau01():null); $groups=($user?$user->getGroups():[]); - + // Initialisation du calcul des alerts $alerts=new ArrayCollection(); @@ -118,6 +118,34 @@ class AlertRepository extends EntityRepository } } + // Récupération des alerts par item + $bookmarks=null; + $items=null; + $itemcategorys=null; + $this->_em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,4); + foreach($items as $item) { + $qb = $this->createQueryBuilder('a'); + $qb->select('alert') + ->from("CadolesPortalBundle:Alert", 'alert') + ->where(":item MEMBER OF alert.items") + ->andWhere('alert.publishedat <= :today') + ->andWhere($qb->expr()->orX( + $qb->expr()->gt('alert.unpublishedat', ':today'), + $qb->expr()->isNull('alert.unpublishedat') + )) + ->setParameter("item",$item) + ->setParameter('today', date('Y-m-d')); + + if($idalertcategory && $alertcategoryfilter) { + $qb->andWhere("alert.alertcategory=:alertcategory") + ->setParameter("alertcategory",$alertcategoryfilter); + } + $alertsitems=$qb->getQuery()->getResult(); + foreach($alertsitems as $alertitem) { + if(!$alerts->contains($alertitem)&&!$alertitem->getReaders()->contains($user)) $alerts->add($alertitem); + } + } + // Trie des alerts $alertsordered = $alerts->getIterator(); $alertsordered->uasort(function ($first, $second) { diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Alert/edit.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Alert/edit.html.twig index c836ef1c..34a97203 100755 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Alert/edit.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Alert/edit.html.twig @@ -63,6 +63,7 @@ {{ form_row(form.roles) }} {{ form_row(form.niveau01s) }} {{ form_row(form.groups) }} + {{ form_row(form.items) }} diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewalert.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewalert.html.twig index 72e7fdbb..42a7d975 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewalert.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewalert.html.twig @@ -69,6 +69,64 @@
{{ alert.content|raw }} + + {% if not alert.items is empty %} + {% if app.user %} + {% set username = app.user.username %} + {% else %} + {% set username = "" %} + {% endif %} + + + {% endif %}
From b7b9ae6ec127d5ee92c3314df02fefed7cc20717 Mon Sep 17 00:00:00 2001 From: afornerot Date: Thu, 19 Nov 2020 11:01:43 +0100 Subject: [PATCH 2/4] =?UTF-8?q?acc=C3=A8s=20=C3=A0=20l'annuaire=20via=20co?= =?UTF-8?q?nfiguration=20(fixes=20#31092)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Cadoles/CoreBundle/Controller/GroupController.php | 3 ++- .../src/Cadoles/CoreBundle/Controller/UserController.php | 8 ++++++++ .../src/Cadoles/CoreBundle/Form/ConfigType.php | 1 + .../CoreBundle/Resources/views/Group/list.html.twig | 2 +- .../CoreBundle/Resources/views/Include/menu.html.twig | 5 +++++ .../Resources/views/Pagewidget/viewgroup.html.twig | 2 +- tmpl/ninegate-init-01.sql | 3 ++- 7 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/GroupController.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/GroupController.php index a20ed7e0..2497836f 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/GroupController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/GroupController.php @@ -715,10 +715,11 @@ class GroupController extends Controller $em = $this->getDoctrine()->getManager(); // Permission - $permgroup=$this->get('session')->get('permgroup'); if($access=="user") { + $permgroup=$this->get('session')->get('permgroup'); if($permgroup=="NO_BODY") throw $this->createNotFoundException('Permission denied'); if($permgroup=="ROLE_ANIM" && $this->isGranted('ROLE_USER')) throw $this->createNotFoundException('Permission denied'); + if($permgroup=="ROLE_MODO" && ($this->isGranted('ROLE_ANIM') || $this->isGranted('ROLE_USER'))) throw $this->createNotFoundException('Permission denied'); } // Initialisation de l'enregistrement 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 af26b137..b811677b 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/UserController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/UserController.php @@ -40,6 +40,14 @@ class UserController extends Controller public function listAction($access) { + // Permission + if($access=="user") { + $permannu=$this->get('session')->get('permannu'); + if($permannu=="NO_BODY") throw $this->createNotFoundException('Permission denied'); + if($permannu=="ROLE_ANIM" && $this->isGranted('ROLE_USER')) throw $this->createNotFoundException('Permission denied'); + if($permannu=="ROLE_MODO" && ($this->isGranted('ROLE_ANIM') || $this->isGranted('ROLE_USER'))) throw $this->createNotFoundException('Permission denied'); + } + $em = $this->getDoctrine()->getManager(); $config=$em->getRepository('CadolesCoreBundle:Config')->find("datausers"); $fields=$config->getValue(); diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/ConfigType.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/ConfigType.php index d81c713b..925756cd 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/ConfigType.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/ConfigType.php @@ -156,6 +156,7 @@ class ConfigType extends AbstractType "NO_BODY" => "NO_BODY", "ROLE_USER" => "ROLE_USER", "ROLE_ANIM" => "ROLE_ANIM", + "ROLE_MODO" => "ROLE_MODO", ); $builder->add("value", ChoiceType::class, diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/list.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/list.html.twig index 597d3bd7..73c862af 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/list.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/list.html.twig @@ -10,7 +10,7 @@ {% set permgroup = app.session.get('permgroup') %} - {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MODO') or (is_granted('ROLE_ANIM') and (permgroup=="ROLE_USER" or permgroup=="ROLE_ANIM")) or (is_granted('ROLE_USER') and permgroup=="ROLE_USER") %} + {% if is_granted('ROLE_ADMIN') or (is_granted('ROLE_MODO') and (permgroup=="ROLE_MODO" or permgroup=="ROLE_ANIM" or permgroup=="ROLE_USER")) or (is_granted('ROLE_ANIM') and (permgroup=="ROLE_ANIM" or permgroup=="ROLE_USER")) or (is_granted('ROLE_USER') and permgroup=="ROLE_USER") %}

{% if access=="config" %} Ajouter diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Include/menu.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Include/menu.html.twig index 47dcf2e4..9d84cf3c 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Include/menu.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Include/menu.html.twig @@ -2,7 +2,12 @@ {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MODO') %}

  • {% endif %} + + {% set permannu = app.session.get('permannu') %} + {% if is_granted('ROLE_ADMIN') or (is_granted('ROLE_MODO') and (permannu=="ROLE_MODO" or permannu=="ROLE_ANIM" or permannu=="ROLE_USER")) or (is_granted('ROLE_ANIM') and (permannu=="ROLE_ANIM" or permannu=="ROLE_USER")) or (is_granted('ROLE_USER') and permannu=="ROLE_USER") %}
  • diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewgroup.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewgroup.html.twig index aeeb6d51..e03dcf9b 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewgroup.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewgroup.html.twig @@ -14,7 +14,7 @@ {% set permgroup = app.session.get('permgroup') %} {% set canadd = false %} -{% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MODO') or (is_granted('ROLE_ANIM') and (permgroup=="ROLE_ADMIN" or permgroup=="ROLE_USER")) or (is_granted('ROLE_USER') and permgroup=="ROLE_USER") %} +{% if is_granted('ROLE_ADMIN') or (is_granted('ROLE_MODO') and (permgroup=="ROLE_MODO" or permgroup=="ROLE_ANIM" or permgroup=="ROLE_USER")) or (is_granted('ROLE_ANIM') and (permgroup=="ROLE_ANIM" or permgroup=="ROLE_USER")) or (is_granted('ROLE_USER') and permgroup=="ROLE_USER") %} {% set canadd = true %} {% endif %} diff --git a/tmpl/ninegate-init-01.sql b/tmpl/ninegate-init-01.sql index f444de52..9d54f3fa 100644 --- a/tmpl/ninegate-init-01.sql +++ b/tmpl/ninegate-init-01.sql @@ -119,6 +119,7 @@ INSERT IGNORE INTO `config` (`order`, `visible`, `changeable`, `required`, `type ('202', 1, 0, 1, 'string', 'PROXYport', '', 'PROXYactivate','Port du Proxy'), %end if -('500', 1, 1, 1, 'permgroup', 'permgroup', 'ROLE_ANIM', '', 'Determine quel rôle aura la permission de créer des groupes de travail'); +('500', 1, 1, 1, 'permgroup', 'permgroup', 'ROLE_ANIM', '', 'Determine quel rôle aura la permission de créer des groupes de travail'), +('501', 1, 1, 1, 'permgroup', 'permannu', 'ROLE_USER', '', 'Determine quel rôle aura la permission de voir l\'annuaire'); From e115929020979dcf16e5bb91c490fa73b48a9553 Mon Sep 17 00:00:00 2001 From: afornerot Date: Thu, 19 Nov 2020 11:15:33 +0100 Subject: [PATCH 3/4] ajout des groupes en tant que nom de class body (fixes #31091) --- .../src/Cadoles/CoreBundle/Resources/views/base.html.twig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/base.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/base.html.twig index 45c15fa6..977defb3 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/base.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/base.html.twig @@ -41,6 +41,13 @@ {% else %} {% set bodystyle="simple" %} {% endif %} + + {% if app.user %} + {% for usergroup in app.user.groups %} + {% set bodystyle = bodystyle~" grp-"~usergroup.group.label|replace({" ":"", "'":""}) %} + {% endfor %} + {% endif %} +
    {% if useheader and app.request.attributes.get('_route')=='cadoles_core_home' %} From fb98a703c0342a1dab75d7ee298f7cea050728a5 Mon Sep 17 00:00:00 2001 From: afornerot Date: Thu, 19 Nov 2020 15:08:51 +0100 Subject: [PATCH 4/4] mise en place de ssoitems (fixes ##31089) --- dicos/91_ninegate.xml | 13 ++++++++ .../Controller/SecurityController.php | 13 ++++++++ .../CoreBundle/Command/TestRestCommand.php | 2 +- .../CoreBundle/Controller/CoreController.php | 2 +- .../CoreBundle/Controller/RestController.php | 8 +++-- .../Controller/ItemController.php | 15 ++++++--- .../Controller/PagewidgetController.php | 6 ++-- .../src/Cadoles/PortalBundle/Entity/Item.php | 31 +++++++++++++++++++ .../Cadoles/PortalBundle/Form/ItemType.php | 9 ++++++ .../Repository/AlertRepository.php | 4 +-- .../Repository/ItemRepository.php | 27 +++++++++++++++- .../Resources/views/Item/edit.html.twig | 4 +++ tmpl/ninegate-template.yml | 10 +++++- 13 files changed, 129 insertions(+), 15 deletions(-) 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