From c1fed2d994f4a6a9b7f7b19188fc0d86cd18ded0 Mon Sep 17 00:00:00 2001 From: afornerot Date: Thu, 25 Jun 2020 11:37:03 +0200 Subject: [PATCH] ajout des event shared dans le widget calendar (ref #168) --- .../Controller/PagewidgetController.php | 35 ++++++++++++++++ .../Repository/CalendareventRepository.php | 40 +++++++++++++++++-- .../Resources/views/Page/viewwidget.html.twig | 1 + 3 files changed, 72 insertions(+), 4 deletions(-) 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 916ff241..b4857153 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php @@ -1588,6 +1588,8 @@ class PagewidgetController extends Controller $entity = $em->getRepository($this->labelentity)->find($id); if (!$entity) throw $this->createNotFoundException('Unable to find entity.'); + $groupentity=$em->getRepository("CadolesCoreBundle:Group")->find($group); + // Permissions if($access=="config") { $canupdate = true; @@ -1630,6 +1632,8 @@ class PagewidgetController extends Controller $end->modify('last day of this month'); $events=[]; + $eventids=[]; + foreach($calendars as $calendar) { $calendarevents = $this->getDoctrine()->getRepository("CadolesPortalBundle:Calendarevent")->getCalendareventByDate($calendar,$start,$end); @@ -1650,9 +1654,40 @@ class PagewidgetController extends Controller $tmp['end']->sub(new \DateInterval('PT1S')); array_push($events,$tmp); + array_push($eventids,$tmp["id"]); } } + // On récupére les évenement partagé de l'utilisateur + if($this->getUser()) { + $calendarevents = $this->getDoctrine()->getRepository("CadolesPortalBundle:Calendarevent")->getCalendareventGroupsShareByDate($this->getUser(),$start,$end); + foreach($calendarevents as $calendarevent) { + if($usage=="group") { + if(!$calendarevent->getGroups()->contains($groupentity)) continue; + } + + $tmp=[]; + $tmp['id'] = strval($calendarevent->getId()); + $tmp['title'] = $calendarevent->getName(); + $tmp['description'] = $calendarevent->getDescription(); + $tmp['start'] = $calendarevent->getStart(); + $tmp['end'] = $calendarevent->getEnd(); + $tmp['color'] = "#".(is_null($calendar->getColor())?$this->get('session')->get('color')["main"]:$calendar->getColor()); + $tmp['allDay'] = $calendarevent->getAllday(); + $tmp['calendar'] = $calendar->getId(); + $tmp['editable'] = $calendar->getCanupdate(); + + // Si évènement sur la journée on enlève une 1 seconde à la date de fin + if($tmp['allDay']) + $tmp['end']->sub(new \DateInterval('PT1S')); + + if(!in_array($tmp['id'],$eventids)) { + array_push($events,$tmp); + array_push($eventids,$tmp["id"]); + } + } + } + // Render return $this->render($this->labelentity.':viewcalendar.html.twig', [ 'entity' => $entity, diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/CalendareventRepository.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/CalendareventRepository.php index e64cc756..5b7ef3f5 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/CalendareventRepository.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/CalendareventRepository.php @@ -26,10 +26,6 @@ class CalendareventRepository extends EntityRepository public function getCalendareventShareByDate($user,$start,$end) { - // Profilage - $roles=($user?$user->getRoles():["ROLE_ANONYME"]); - $groups=($user?$user->getGroups():[]); - // Event partagées $calendareventshared=[]; if($user) { @@ -65,4 +61,40 @@ class CalendareventRepository extends EntityRepository return $calendareventshared; } + + public function getCalendareventGroupsShareByDate($user,$start,$end) + { + // Event partagées + $calendareventshared=[]; + if($user) { + $calendareventshared=$this->createQueryBuilder('calendarevent') + ->andWhere('calendarevent.start>=:start') + ->andWhere('calendarevent.end<=:end') + + ->from('CadolesPortalBundle:Calendar','calendar') + ->andWhere('calendarevent.calendar=calendar') + + ->from('CadolesCoreBundle:Group','groupe') + ->andWhere('groupe.fgcanshare=:fgcanshare') + ->andWhere('groupe MEMBER OF calendarevent.groups') + + ->from('CadolesCoreBundle:UserGroup','usergroupe') + ->andWhere('groupe=usergroupe.group') + ->andWhere('usergroupe.user=:user') + + ->from('CadolesCoreBundle:UserGroup','proprio') + ->andWhere('proprio.group=groupe') + ->andWhere('proprio.user=calendar.user') + + ->setParameter('fgcanshare',true) + ->setParameter('user',$user) + ->setParameter('start',$start) + ->setParameter('end',$end) + + ->orderBy('calendarevent.start', 'ASC') + ->getQuery()->getResult(); + } + + return $calendareventshared; + } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Page/viewwidget.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Page/viewwidget.html.twig index 53727cd2..5d517012 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Page/viewwidget.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Page/viewwidget.html.twig @@ -25,6 +25,7 @@