diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql index 8dfd6efd..19653747 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql @@ -8,7 +8,7 @@ INSERT IGNORE INTO `niveau01` (`id`, `label`, `siren`) VALUES (-100, 'DRAAF', '130007107'); INSERT IGNORE INTO `user` (`id`, `niveau01_id`, `username`, `firstname`, `lastname`, `password`, `email`, `avatar`, `role`,`siren`,`authlevel`) VALUES -(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}KYFkIhUXbGQ8luMLxpsdl5OtVq4aZ/GN +(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}otHXvfP0WOEFQYGgcJCVwAZ8h4HHrHOP ', 'admin@ldapbundle.ac-arno.fr', 'admin.jpg', 'ROLE_ADMIN', '130007107', 'simple'); @@ -32,14 +32,15 @@ INSERT IGNORE INTO `sidebar` (`id`, `parent_id`, `roworder`, `label`, `path`, `f (1270, 1200, 1270, 'Import Utilisateurs', 'cadoles_core_config_importuser', 'fa-download', 'ROLE_ADMIN,ROLE_MODO', 'importuser_activate'), (1500, NULL, 1500, 'PORTAIL', NULL, 'fa-cubes', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1510, 1500, 1510, 'Pages', 'cadoles_portal_config_page', 'fa-file', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1520, 1500, 1520, 'Items', 'cadoles_portal_config_item', 'fa-desktop', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1530, 1500, 1530, 'Annonces', 'cadoles_portal_config_alert', 'fa-bell', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1540, 1500, 1540, 'Calendriers', 'cadoles_portal_config_calendar', 'fa-calendar', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1550, 1500, 1550, 'Blogs', 'cadoles_portal_config_blog', 'fa-paper-plane', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1560, 1500, 1560, 'Flux', 'cadoles_portal_config_flux', 'fa-rss', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1570, 1500, 1570, 'Chartes', 'cadoles_portal_config_notice', 'fa-info', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1580, 1500, 1580, 'Icônes', 'cadoles_portal_config_icon', 'fa-bug', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1510, 1500, 1510, 'Modèles de Page', 'cadoles_portal_config_pagetemplate', 'fa-copy', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1520, 1500, 1520, 'Pages', 'cadoles_portal_config_page', 'fa-file', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1530, 1500, 1530, 'Items', 'cadoles_portal_config_item', 'fa-desktop', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1540, 1500, 1540, 'Annonces', 'cadoles_portal_config_alert', 'fa-bell', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1550, 1500, 1550, 'Calendriers', 'cadoles_portal_config_calendar', 'fa-calendar', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1560, 1500, 1560, 'Blogs', 'cadoles_portal_config_blog', 'fa-paper-plane', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1570, 1500, 1570, 'Flux', 'cadoles_portal_config_flux', 'fa-rss', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1580, 1500, 1580, 'Chartes', 'cadoles_portal_config_notice', 'fa-info', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1590, 1500, 1590, 'Icônes', 'cadoles_portal_config_icon', 'fa-bug', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), (2500, NULL, 2500, 'MODULES', NULL, 'fa-cubes', 'ROLE_ADMIN,ROLE_MODO', 'module_activate'), (2510, 2500, 2510, 'Pages', 'cadoles_portal_config_page', 'fa-file', 'ROLE_ADMIN,ROLE_MODO', 'page_activate'), @@ -103,6 +104,7 @@ INSERT IGNORE permmodo (`route`, `visible`) VALUES ('cadoles_core_config_registration',1), ('cadoles_core_config_user',1), ('cadoles_core_config_importuser',0), +('cadoles_portal_config_pagetemplate',1), ('cadoles_portal_config_page',1), ('cadoles_portal_config_item',1), ('cadoles_portal_config_alert',1), 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 f5ee912c..92d7fe32 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/CoreController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/CoreController.php @@ -107,7 +107,7 @@ class CoreController extends Controller // Calcul des pages de l'utilisateur - $this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->getPagesUser($user,$id,$entity,$pagesuser,$pagesadmin,$pagesshared); + $this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->getPagesUser($user,$id,$entity,$pagesuser,$pagesadmin,$groupsshared); // si aucune page = page par défaut if(!$entity) { @@ -126,9 +126,9 @@ class CoreController extends Controller 'access' => "user", 'pagesadmin' => $pagesadmin, 'pagesuser' => $pagesuser, - 'pagesshared' => $pagesshared, + 'groupsshared' => $groupsshared, 'canadd' => $this->get('session')->get('cancreatepage'), - 'widgets' => $this->getDoctrine()->getRepository("CadolesPortalBundle:Widget")->findAll() + 'widgets' => $this->getDoctrine()->getRepository("CadolesPortalBundle:Widget")->getWidgetAccess("user") ]); } 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 d7fbe4dd..ee5df9a1 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/GroupController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/GroupController.php @@ -8,11 +8,14 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Form\FormError; +use Ramsey\Uuid\Uuid; use Cadoles\CoreBundle\Entity\Group; use Cadoles\CoreBundle\Entity\Usergroup; use Cadoles\CoreBundle\Entity\Usermodo; use Cadoles\CoreBundle\Form\GroupType; +use Cadoles\PortalBundle\Entity\Calendar; +use Cadoles\PortalBundle\Entity\Blog; class GroupController extends Controller { @@ -289,6 +292,7 @@ class GroupController extends Controller $search= $request->query->get('search'); $draw= $request->query->get('draw'); $order= $request->query->get('order'); + $fgcanshare= $request->query->get('fgcanshare'); // Nombre total d'enregistrement $qb = $em->createQueryBuilder(); @@ -380,6 +384,7 @@ class GroupController extends Controller $datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult(); foreach($datas as $data) { + // Action $action = ""; if($group->getLdapfilter()==""&&$group->getAttributes()=="") @@ -387,8 +392,17 @@ class GroupController extends Controller // Avatar $avatar="getAvatar()."' style='width:30px;background-color:#337ab7;margin:auto;display:block;'>"; + + // Flag manager + $fgmanager=""; + if($fgcanshare) { + $usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$data->getId(),"group"=>$id]); + $checked=($usergroup->getFgmanager()?"checked":""); + $fgmanager=""; + } + - array_push($output["data"],array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail())); + array_push($output["data"],array("DT_RowId"=>"user".$data->getId(),$action,$avatar,$data->getUsername(),$data->getEmail(),$fgmanager)); } // Retour @@ -449,15 +463,41 @@ class GroupController extends Controller return $response; } - public function submitAction(Request $request) + public function switchmanagerAction(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('user'); + $groupid=$request->request->get('group'); + + $data = $em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(array("user"=>$userid,"group"=>$groupid)); + if($data) $data->setFgmanager(!$data->getFgmanager()); + + $em->persist($data); + $em->flush(); + + $response = new Response(json_encode($output)); + $response->headers->set('Content-Type', 'application/json'); + return $response; + } + + public function submitAction(Request $request, $access="config") + { + $em = $this->getDoctrine()->getManager(); + // Initialisation de l'enregistrement $data = new Group(); $data->setFgopen(false); - $data->setFgcanshare(true); - $data->setFgcancreatepage(true); - $data->setFgcancreatecalendar(true); - $data->setFgcancreateblog(true); + $data->setFgcanshare(false); + $data->setFgcancreatepage(false); + $data->setFgcancreatecalendar(false); + $data->setFgcancreateblog(false); // Création du formulaire $form = $this->createForm(GroupType::class,$data,array( @@ -482,38 +522,54 @@ class GroupController extends Controller if($data->getLdapfilter()!="") $data->setFgopen(false); if($data->getAttributes()!="") $data->setFgopen(false); - $em = $this->getDoctrine()->getManager(); + // Icon + $idicon = $form->get('idicon')->getData(); + $icon=$em->getRepository("CadolesPortalBundle:Icon")->findoneby(["id"=>$idicon]); + $data->setIcon($icon); // Sauvegarde $em->persist($data); $em->flush(); + // On s'assure que le groupe de travail à bien page d'accueil / calendrier / blog associé + // Sinon on les génère + $this->ctrlFgcanshare($data); + // Retour à la liste return $this->redirectToRoute("cadoles_core_config_group_users",["id"=>$data->getId()]); } // Affichage du formulaire + $icons=$this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>null]); + $iconsuser=null; + if($access=="user") $iconsuser=$this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>$this->getUser()]); + return $this->render($this->labelentity.':edit.html.twig', [ 'useheader' => true, 'usemenu' => false, 'usesidebar' => true, $this->labeldata => $data, 'mode' => 'submit', + 'access' => 'access', + 'icons' => $icons, + 'iconsuser' => $iconsuser, 'form' => $form->createView() ]); } - public function updateAction($id,Request $request) + public function updateAction($id,Request $request,$access="config") { // Récupération de l'enregistrement courant + $em = $this->getDoctrine()->getManager(); $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"), - "portal_activate"=>$this->getParameter("portal_activate") + "mode" => "update", + "updatelimite" => ($data->getFgAll()||$data->getFgTemplate()), + "masteridentity" => $this->GetParameter("masteridentity"), + "portal_activate" => $this->getParameter("portal_activate"), + "idicon" => ($data->getIcon()?$data->getIcon()->getId():null), ) ); @@ -525,26 +581,35 @@ class GroupController extends Controller // Sur validation if ($form->get('submit')->isClicked() && $form->isValid()) { - $masteridentity=$this->GetParameter("masteridentity"); - $em = $this->getDoctrine()->getManager(); - - $data = $form->getData(); + $masteridentity=$this->GetParameter("masteridentity"); if($masteridentity!="LDAP") $data->setLdapfilter(null); if($masteridentity!="SSO") $data->setAttributes(null); if($data->getLdapfilter()!="") $data->setFgopen(false); if($data->getAttributes()!="") $data->setFgopen(false); + // Icon + $idicon = $form->get('idicon')->getData(); + $icon=$this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findoneby(["id"=>$idicon]); + $data->setIcon($icon); + // Sauvegarde $em->persist($data); $em->flush(); + // On s'assure que le groupe de travail à bien page d'accueil / calendrier / blog associé + // Sinon on les génère + $this->ctrlFgcanshare($data); + // Retour à la liste return $this->redirectToRoute($this->labelroute); } - + $icons=$em->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>null]); + $iconsuser=null; + if($access=="user") $iconsuser=$em()->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>$this->getUser()]); + // Affichage du formulaire return $this->render($this->labelentity.':edit.html.twig', [ 'useheader' => true, @@ -552,6 +617,9 @@ class GroupController extends Controller 'usesidebar' => true, $this->labeldata => $data, 'mode' => 'update', + 'access' => $access, + 'icons' => $icons, + 'iconsuser' => $iconsuser, 'form' => $form->createView() ]); } @@ -618,6 +686,49 @@ class GroupController extends Controller ]); } + protected function ctrlFgcanshare($group) { + $em = $this->getDoctrine()->getManager(); + + if($group->getFgcanshare()) { + // On regarde s'il a au moins une page + if($group->getPages()->isEmpty()) { + $page=$this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->clonePage(null,$group->getPagetemplate()); + $group->addPage($page); + $page->setName("Groupe = ".$group->getLabel()); + + $em->persist($page); + $em->persist($group); + $em->flush(); + } + + // On regarde s'il a au moins un calendrier + if($group->getCalendars()->isEmpty()) { + $calendar=new Calendar(); + $key = Uuid::uuid4(); + + $calendar->setName("Groupe = ".$group->getLabel()); + $calendar->setKeyvalue($key); + $calendar->addGroup($group); + $calendar->setColor($group->getColor()); + $calendar->setType(0); + + $em->persist($calendar); + $em->flush(); + } + + // On regarde s'il a au moins un blog + if($group->getBlogs()->isEmpty()) { + $blog=new Blog(); + + $blog->setName("Groupe = ".$group->getLabel()); + $blog->addGroup($group); + + $em->persist($blog); + $em->flush(); + } + } + } + protected function getDatas() { $em = $this->getDoctrine()->getManager(); @@ -661,6 +772,9 @@ class GroupController extends Controller $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($data->getFgcanshare()&&is_null($data->getPagetemplate())) + $form->addError(new FormError("Un groupe de travail doit avoir un modèle de page d'accueil")); } if ($form->get('submit')->isClicked() && !$form->isValid()) { 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 52da39e9..3d9f5d7a 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/UserController.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Controller/UserController.php @@ -314,7 +314,7 @@ class UserController extends Controller $group->setUser($data); $datagroup = $em->getRepository("CadolesCoreBundle:Group")->find($idgroup); - $user->setGroup($datagroup); + $group->setGroup($datagroup); $em->persist($group); $em->flush(); diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Group.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Group.php index f7b6103c..fb91f04b 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Group.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Group.php @@ -29,6 +29,20 @@ class Group */ private $label; + /** + * @var string + * + * @ORM\Column(name="description", type="text", nullable=true) + */ + private $description; + + /** + * @var string + * + * @ORM\Column(name="color", type="string", length=24, nullable=true) + */ + private $color; + /** * @ORM\Column(type="boolean", options={"default" : false}) */ @@ -74,6 +88,23 @@ class Group */ private $attributes; + /** + * @ORM\ManyToOne(targetEntity="Cadoles\PortalBundle\Entity\Icon", inversedBy="groups") + * @ORM\JoinColumn(nullable=true, onDelete="SET NULL") + */ + private $icon; + + /** + * @ORM\ManyToOne(targetEntity="User", inversedBy="ownergroups") + * @ORM\JoinColumn(nullable=true, onDelete="SET NULL") + */ + private $owner; + + /** + * @ORM\ManyToOne(targetEntity="Cadoles\PortalBundle\Entity\Page", inversedBy="templategroups") + */ + private $pagetemplate; + /** * @var ArrayCollection $users * @var UserGroup @@ -97,7 +128,6 @@ class Group */ protected $pages; - /** * @ORM\ManyToMany(targetEntity="Cadoles\PortalBundle\Entity\Flux", mappedBy="groups") */ @@ -671,4 +701,124 @@ class Group { return $this->blogs; } + + /** + * Set description + * + * @param string $description + * + * @return Group + */ + public function setDescription($description) + { + $this->description = $description; + + return $this; + } + + /** + * Get description + * + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * Set icon + * + * @param \Cadoles\PortalBundle\Entity\Icon $icon + * + * @return Group + */ + public function setIcon(\Cadoles\PortalBundle\Entity\Icon $icon = null) + { + $this->icon = $icon; + + return $this; + } + + /** + * Get icon + * + * @return \Cadoles\PortalBundle\Entity\Icon + */ + public function getIcon() + { + return $this->icon; + } + + /** + * Set owner + * + * @param \Cadoles\CoreBundle\Entity\User $owner + * + * @return Group + */ + public function setOwner(\Cadoles\CoreBundle\Entity\User $owner = null) + { + $this->owner = $owner; + + return $this; + } + + /** + * Get owner + * + * @return \Cadoles\CoreBundle\Entity\User + */ + public function getOwner() + { + return $this->owner; + } + + /** + * Set color + * + * @param string $color + * + * @return Group + */ + public function setColor($color) + { + $this->color = $color; + + return $this; + } + + /** + * Get color + * + * @return string + */ + public function getColor() + { + return $this->color; + } + + /** + * Set pagetemplate + * + * @param \Cadoles\PortalBundle\Entity\Page $pagetemplate + * + * @return Group + */ + public function setPagetemplate(\Cadoles\PortalBundle\Entity\Page $pagetemplate = null) + { + $this->pagetemplate = $pagetemplate; + + return $this; + } + + /** + * Get pagetemplate + * + * @return \Cadoles\PortalBundle\Entity\Page + */ + public function getPagetemplate() + { + return $this->pagetemplate; + } } diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Niveau01.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Niveau01.php index 3cbe96a8..232ab7b7 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Niveau01.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Niveau01.php @@ -87,7 +87,7 @@ class Niveau01 private $modos; /** - * @ORM\ManyToMany(targetEntity="Cadoles\PortalBundle\Entity\Item", mappedBy="groups") + * @ORM\ManyToMany(targetEntity="Cadoles\PortalBundle\Entity\Item", mappedBy="niveau01s") */ protected $items; diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Registration.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Registration.php index 4f04d636..71dae38c 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Registration.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/Registration.php @@ -78,7 +78,7 @@ class Registration implements UserInterface, \Serializable private $keyvalue; /** - * @ORM\ManyToOne(targetEntity="Statut") + * @ORM\ManyToOne(targetEntity="Statut", inversedBy="registrations") * @ORM\JoinColumn(nullable=false) */ private $statut; diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/User.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/User.php index 771d2bc6..11a2f953 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/User.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/User.php @@ -179,6 +179,14 @@ class User implements UserInterface, \Serializable */ private $groups; + /** + * @var ArrayCollection $ownergroups + * @var Group + * + * @ORM\OneToMany(targetEntity="Group", mappedBy="owner", cascade={"persist"}, orphanRemoval=false) + */ + private $ownergroups; + /** * @var ArrayCollection $groups * @var UserGroup @@ -1297,4 +1305,38 @@ class User implements UserInterface, \Serializable { return $this->icons; } + + /** + * Add ownergroup + * + * @param \Cadoles\CoreBundle\Entity\Group $ownergroup + * + * @return User + */ + public function addOwnergroup(\Cadoles\CoreBundle\Entity\Group $ownergroup) + { + $this->ownergroups[] = $ownergroup; + + return $this; + } + + /** + * Remove ownergroup + * + * @param \Cadoles\CoreBundle\Entity\Group $ownergroup + */ + public function removeOwnergroup(\Cadoles\CoreBundle\Entity\Group $ownergroup) + { + $this->ownergroups->removeElement($ownergroup); + } + + /** + * Get ownergroups + * + * @return \Doctrine\Common\Collections\Collection + */ + public function getOwnergroups() + { + return $this->ownergroups; + } } diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/UserGroup.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/UserGroup.php index 05b17238..f9b0ff1e 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/UserGroup.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Entity/UserGroup.php @@ -35,6 +35,10 @@ class UserGroup */ private $group; + /** + * @ORM\Column(type="boolean", options={"default" : false}) + */ + private $fgmanager = false; /** @@ -94,4 +98,28 @@ class UserGroup { return $this->group; } + + /** + * Set fgmanager + * + * @param boolean $fgmanager + * + * @return UserGroup + */ + public function setFgmanager($fgmanager) + { + $this->fgmanager = $fgmanager; + + return $this; + } + + /** + * Get fgmanager + * + * @return boolean + */ + public function getFgmanager() + { + return $this->fgmanager; + } } diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/GroupType.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/GroupType.php index 22020754..0eb79a37 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/GroupType.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Form/GroupType.php @@ -35,13 +35,26 @@ class GroupType extends AbstractType $choices=array("oui" => "1","non" => "0"); $builder->add("fgcanshare", ChoiceType::class,array( - "label" =>"Partage dans le groupe activé", + "label" =>"Groupe de Travail", 'disabled' => ($options["mode"]=="delete"?true:false), "attr" => array("class" => "form-control", "style" => "margin-bottom:15px"), "choices" => $choices ) ); + $builder->add('pagetemplate', + EntityType::class,[ + "class" => "CadolesPortalBundle:Page", + "label" => "Modèle de Page pour l'accueil du groupe", + "required" => false, + "choice_label" => "name", + "query_builder"=> function (EntityRepository $er) { + return $er->createQueryBuilder('page')->where('page.parentfor=:parentfor')->setParameter('parentfor', 'group'); + }, + "disabled" => ($options["mode"]=="delete"||$options["masteridentity"]!="SQL"?true:false), + "attr" => array("class" => "form-control", "style" => "margin-bottom:15px","readonly" => ($options["mode"]=="delete"?true:false)) + ]); + $builder->add("fgcancreatepage", ChoiceType::class,array( "label" =>"Permission de créer des Pages", @@ -190,6 +203,21 @@ class GroupType extends AbstractType ]); } + $builder->add('idicon', HiddenType::class,['mapped'=> false,'data' => $options["idicon"]]); + + $builder->add('color', TextType::class, [ + 'label' => "Couleur", + 'required' => false, + 'attr' => array("class" => "pick-a-color") + ]); + + $builder->add("description", TextareaType::class, [ + "label" => 'Description', + "required" => false, + "disabled" => ($options["mode"]=="delete"?true:false), + "attr" => array("rows" => '4') + ]); + if(!$options["updatelimite"]) { $builder->add('label', TextType::class, array( @@ -267,7 +295,8 @@ class GroupType extends AbstractType 'mode' => "string", 'masteridentity' => "string", 'portal_activate' => "boolean", - 'updatelimite' => "boolean" + 'updatelimite' => "boolean", + 'idicon' => "string", )); } } 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 6512de53..7b8b7960 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 @@ -41,6 +41,7 @@ cadoles_core_ldap_login: path: /ldaplogin defaults: { _controller: CadolesCoreBundle:Security:login } + #== Crop Image =========================================================================================================== cadoles_core_crop01: path: /crop01 @@ -50,6 +51,7 @@ cadoles_core_crop02: path: /crop02 defaults: { _controller: CadolesCoreBundle:Crop:crop02 } + #== File ================================================================================================================= #-- Access config cadoles_core_config_file_upload: @@ -93,6 +95,7 @@ cadoles_core_user_file_show: path: file/show/{directory}/{filename} defaults: { _controller: CadolesCoreBundle:File:show, access: user } + #== Ajax ================================================================================================================= cadoles_core_ajax_country_list: path: /ajax/country/list @@ -128,6 +131,7 @@ cadoles_core_config: path: /config/home defaults: { _controller: CadolesCoreBundle:Config:home } + #== Commun Config Commun ================================================================================================= cadoles_core_config_commun: path: /config/commun @@ -165,6 +169,7 @@ cadoles_core_config_datausers: path: /config/commun/datausers defaults: { _controller: CadolesCoreBundle:Config:datausers } + #== Registration ========================================================================================================= #-- Access config cadoles_core_config_registration: @@ -282,6 +287,7 @@ cadoles_core_config_niveau01_logo: path: /config/niveau01/logo defaults: { _controller: CadolesCoreBundle:Niveau01:logo } + #== Niveau02 ============================================================================================================= cadoles_core_config_niveau02: path: /config/niveau02 @@ -303,6 +309,7 @@ cadoles_core_config_niveau02_ajax_list: path: /config/niveau02/ajax/list defaults: { _controller: CadolesCoreBundle:Niveau02:ajaxlist } + #== Group ================================================================================================================ cadoles_core_config_group: path: /config/group @@ -343,7 +350,12 @@ cadoles_core_config_group_ajax_usergroup_add: cadoles_core_config_group_ajax_usergroup_del: path: /config/group/ajax/usergroupdel defaults: { _controller: CadolesCoreBundle:Group:usergroupdel } + +cadoles_core_config_group_ajax_switchmanager: + path: /config/group/ajax/switchmanager + defaults: { _controller: CadolesCoreBundle:Group:switchmanager } + #== Whitelist ============================================================================================================ cadoles_core_config_whitelist: path: /config/whitelist diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/edit.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/edit.html.twig index f0ace943..2b48434c 100755 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/edit.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/edit.html.twig @@ -35,19 +35,16 @@ {% endif %}
- {% if form.label is defined %} -
-
-
- Informations -
+
+ +
+
+ Informations +
-
- {{ form_label(form.label) }} - {{ form_widget(form.label) }} - - {{ form_label(form.fgopen) }} - {{ form_widget(form.fgopen) }} +
+ {% if form.label is defined %} + {{ form_row(form.label) }} {% if form.fgassoc is defined %} {% if masteridentity=="LDAP" %} @@ -60,13 +57,63 @@ {{ form_row(form.attributes) }} {% endif %} {% endif %} -
+ {% endif %} + {{ form_row(form.description) }} + {{ form_row(form.color) }}
- {% endif %} - {% if form.fgcanshare is defined %} -
+ {% if form.fgcanshare is defined or form.fgopen is defined %} +
+
+ Configuration du Groupe +
+ +
+ {% if form.fgopen is defined %} + {{ form_row(form.fgopen) }} + {% endif %} + + {% if form.fgcanshare is defined %} + {{ form_row(form.fgcanshare) }} +
{{ form_row(form.pagetemplate) }}
+ {% endif %} +
+
+ {% endif %} + +
+ {% if group.icon %} + + {% endif %} +
+ +
+ {{ form_row(form.idicon) }} + Selectionner un Icône + Détacher l'Icône +
+
+ +
+ {% if form.fgcanshare is defined %} +
+
+ Permissions Portail +
+ +
+ {{ form_label(form.fgcancreatepage) }} + {{ form_widget(form.fgcancreatepage) }} + + {{ form_label(form.fgcancreatecalendar) }} + {{ form_widget(form.fgcancreatecalendar) }} + + {{ form_label(form.fgcancreateblog) }} + {{ form_widget(form.fgcancreateblog) }} +
+
+
Elements du Portail @@ -82,37 +129,55 @@ {{ form_row(form.notices) }}
-
+ {% endif %} +
+
-
-
-
- Permissions Portail -
+ {{ form_end(form) }} {% endblock %} {% block localjavascript %} $('document').ready(function(){ + {% if masteridentity=="LDAP" %} fgaff=($("#group_ldapfilter").val()!=""); if(!fgaff) { @@ -161,8 +226,34 @@ } }); {% endif %} + + hideshow(); }); + $(document.body).on("change","#group_fgcanshare",function(){ + hideshow(); + }); + function selIcon(idicon) { + $("#group_idicon").val(idicon); + $("#diviconsel img").remove(); + + $("#icon-"+idicon).clone().appendTo($("#diviconsel")); + $("#diviconsel img").attr("height","100px"); + $('#selicon').modal('hide'); + } + + function delIcon() { + $("#diviconsel img").remove(); + $("#group_idicon").val(null); + } + + function hideshow() { + if($("#group_fgcanshare").val()==1) + $("#pagetemplate").show(); + else { + $("#pagetemplate").hide(); + } + } {% endblock %} 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 304358ec..12055e4a 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 @@ -18,9 +18,9 @@ Action Label Ouvert - Filtre + Filtre {% if portal_activate %} - Partage + Groupe de Travail Création Pages Création Calendriers Création Blogs @@ -37,7 +37,7 @@ {% block localjavascript %} $(document).ready(function() { $('#dataTables').DataTable({ - columnDefs: [ { "targets": 'no-sort', "orderable": false } ], + columnDefs: [ { "targets": 'no-sort', "orderable": false },{ "targets": 'no-visible', "visible": false } ], responsive: true, iDisplayLength: 100, order: [[ 1, "asc" ]], diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/users.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/users.html.twig index fb153c7f..67be85ad 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/users.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Group/users.html.twig @@ -45,6 +45,7 @@ Avatar Login Email + Manager @@ -68,15 +69,26 @@ }); $('#dataTablesin').DataTable({ - columnDefs: [ { "targets": 'no-sort', "orderable": false } ], + columnDefs: [ { "targets": 'no-sort', "orderable": false },{ "targets": 'no-visible', "visible": false } ], responsive: true, iDisplayLength: 100, order: [[ 2, "asc" ]], processing: true, - serverSide: true, - ajax: "{{ path('cadoles_core_config_group_ajax_usersin',{'id':group.id}) }}", + serverSide: true, + ajax: { + "url": "{{ path('cadoles_core_config_group_ajax_usersin',{'id':group.id}) }}", + "data": function ( d ) { + return $.extend( {}, d, { + "fgcanshare": {{ group.fgcanshare }} + }); + } + }, + "drawCallback": function(settings) { + $(".switch").bootstrapSwitch(); + }, }); + }); function addUsers(userid) { @@ -121,5 +133,16 @@ } }); - } + } + + function switchManager(id) { + $.ajax({ + method: "POST", + url: "{{ path('cadoles_core_config_group_ajax_switchmanager') }}", + data: { + "group": {{ group.id }}, + "user": id, + } + }); + } {% endblock %} diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/edit.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/edit.html.twig index efb3ccc5..81639abc 100755 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/edit.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/edit.html.twig @@ -43,7 +43,7 @@
{% endif %} - {% if info %} + {% if info is defined and info %}
Information
{{ info }}
diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/list.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/list.html.twig index dcfd2d92..01e25535 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/list.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/User/list.html.twig @@ -27,17 +27,17 @@ {% if access=="config" %} Action {% endif %} - Avatar - Login - Nom - Prénom - Email - {{ labelniveau01 }} + Avatar + Login + Nom + Prénom + Email + {{ labelniveau01 }} {% if viewniveau02 %} - {{ labelniveau02 }} + {{ labelniveau02 }} {% endif %} - Groupes - Rôle + Groupes + Rôle diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/InitDataCommand.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/InitDataCommand.php index 5b03f879..677c6cfa 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/InitDataCommand.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/InitDataCommand.php @@ -340,6 +340,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(false); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "url", "loc": "col1", "type": "string", "label": "URL", "value": "", "mandatory": "true"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -359,6 +360,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "modedesktop", "loc": "col1", "type": "desktopmode", "label": "Mode Affichage", "value": "0", "mandatory": "true"},{"id": "withbookmark", "loc": "col1", "type": "withbookmark", "label": "Avec Favoris", "value": "0", "mandatory": "true"},{"id": "itemcategory", "loc": "col1", "type": "itemcategory", "label": "Catégorie Affichée", "value": "", "mandatory": "false"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -378,6 +380,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "alertcategory", "loc": "col1", "type": "alertcategory", "label": "Catégorie Affichée", "value": "", "mandatory": "false"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -397,6 +400,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": []}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -416,6 +420,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "modedesktop", "loc": "col1", "type": "desktopmode", "label": "Mode Affichage", "value": "0", "mandatory": "true"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -435,6 +440,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "url", "loc": "col1", "type": "string", "label": "URL", "value": "", "mandatory": "true"},{"id": "target", "loc": "col1", "type": "target", "label": "Ouvrir le lien dans", "value": "0", "mandatory": "true"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -454,6 +460,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "html", "loc": "col5", "type": "ckeditor", "label": "Texte", "value": "", "mandatory": "false"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -473,6 +480,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(false); $entityWidget->setBorder(false); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "interval", "loc": "col1", "type": "integer", "label": "Interval en seconde entre 2 images", "value": "5", "mandatory": "false"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -492,6 +500,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": []}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -511,6 +520,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": []}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -530,6 +540,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "nbday", "loc": "col1", "type": "integer", "label": "Nombre de jours affichés", "value": "15", "mandatory": "true"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -548,6 +559,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "nbarticle", "loc": "col1", "type": "integer", "label": "Nombre d\'articles affichés", "value": "10", "mandatory": "true"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -567,6 +579,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "url", "loc": "col1", "type": "string", "label": "URL du Flux RSS", "value": "", "mandatory": "true"},{"id": "nbarticle", "loc": "col1", "type": "integer", "label": "Nombre d\'articles affichés (0 pour tout)", "value": "10", "mandatory": "true"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -597,6 +610,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(true); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "modedesktop", "loc": "col1", "type": "desktopmode", "label": "Mode Affichage", "value": "0", "mandatory": "true"},{"id": "Applications", "loc": "col1", "type": "appexternal", "label": "Applications à affichier", "value": "", "mandatory": "false"}]}'); $entityWidget->setParameter($parameter); @@ -617,6 +631,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(false); $entityWidget->setBorder(false); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $entityWidget->setColorbodyback("ffffff"); $parameter = json_decode('{"fields": [{"id": "seetitle", "loc": "col1", "type": "boolean", "label": "Afficher le titre", "value": "0", "mandatory": "true"},{"id": "seeicon", "loc": "col1", "type": "boolean", "label": "Afficher l\'icone", "value": "0", "mandatory": "true"}]}'); $entityWidget->setParameter($parameter); @@ -636,6 +651,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(false); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": [{"id": "clock", "loc": "col1", "type": "clock", "label": "Mode d\'affichage", "value": "0", "mandatory": "true"}]}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); @@ -654,6 +670,7 @@ class InitDataCommand extends ContainerAwareCommand $entityWidget->setAutoajust(false); $entityWidget->setBorder(true); $entityWidget->setOpened(true); + $entityWidget->setAccess(["config","user","group"]); $parameter = json_decode('{"fields": []}'); $entityWidget->setParameter($parameter); $em->persist($entityWidget); diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PageController.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PageController.php index 1528c18e..355505f3 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PageController.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PageController.php @@ -26,7 +26,8 @@ class PageController extends Controller return $this->render($this->labelentity.':list.html.twig',[ 'useheader' => true, 'usemenu' => false, - 'usesidebar' => true, + 'usesidebar' => true, + 'istemplate' => false, ]); } @@ -53,7 +54,10 @@ class PageController extends Controller if($alluser=="false") { $qbase->where("table.user is null"); + $qbase->andWhere('table.parentfor is null') ; $qsearch->where("table.user is null"); + $qsearch->andWhere('table.parentfor is null') ; + } else { $qbase->from('CadolesCoreBundle:User','user') @@ -68,6 +72,7 @@ class PageController extends Controller else $qsearch->andWhere('table.id LIKE :value OR table.name LIKE :value OR user.username LIKE :value') ; + $qsearch->setParameter("value", "%".$search["value"]."%"); // Nombre total d'enregistrement @@ -474,7 +479,7 @@ class PageController extends Controller 'canupdate' => $canupdate ]); } - // Type Editeur + // Type Widgets if($entity->getPageCategory()->getId()==2) { return $this->render($this->labelentity.':viewwidget.html.twig', [ 'useheader' => ($access=="config"), @@ -483,7 +488,8 @@ class PageController extends Controller 'entity' => $entity, 'access' => $access, 'canupdate' => $canupdate, - 'widgets' => $this->getDoctrine()->getRepository("CadolesPortalBundle:Widget")->findAll() + 'mode' => "view", + 'widgets' => $this->getDoctrine()->getRepository("CadolesPortalBundle:Widget")->getWidgetAccess($access) ]); } // Type Editeur diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagetemplateController.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagetemplateController.php new file mode 100644 index 00000000..8105e9a0 --- /dev/null +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagetemplateController.php @@ -0,0 +1,288 @@ +render('CadolesPortalBundle:Pagetemplate:list.html.twig',[ + 'useheader' => true, + 'usemenu' => false, + 'usesidebar' => true, + ]); + } + + public function ajaxlistAction(Request $request,$access="config") + { + // 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'); + + // Query de base + $qbase=$em->createQueryBuilder()->from($this->labelentity,'table'); + $qsearch=$em->createQueryBuilder()->from($this->labelentity,'table'); + + $qbase->where("table.user is null"); + $qbase->andWhere('table.parentfor is not null') ; + $qsearch->where("table.user is null"); + $qsearch->andWhere('table.parentfor is not null') ; + $qsearch->andwhere('table.id LIKE :value OR table.name LIKE :value OR table.parentfor LIKE :value'); + $qsearch->setParameter("value", "%".$search["value"]."%"); + + // Nombre total d'enregistrement + $total = $qbase->select('COUNT(table)')->getQuery()->getSingleScalarResult(); + + + // Nombre d'enregistrement filtré + if($search["value"]=="") + $totalf = $total; + else + $totalf= $qsearch->select('COUNT(table)')->getQuery()->getSingleScalarResult(); + + + // Parcours des Enregistrement + if($search["value"]=="") + $qb = $qbase->select('table'); + else + $qb = $qsearch->select('table'); + + // Order + switch($order[0]["column"]) { + case 1 : + $qb->orderBy('table.roworder',$order[0]["dir"]); + break; + case 2 : + $qb->orderBy('table.name',$order[0]["dir"]); + break; + case 3 : + $qb->orderBy('table.parentfor',$order[0]["dir"]); + break; + } + + // Execution de la requete d'affichage + $datas=$qb->setFirstResult($start)->setMaxResults($length)->getQuery()->getResult(); + + // Construction du tableau de retour + $output = array( + 'draw' => $draw, + 'recordsFiltered' => $totalf, + 'recordsTotal' => $total, + 'data' => array(), + ); + foreach($datas as $data) { + + $route=str_replace("_config_","_".$access."_",$this->routeprimary); + $action = ""; + //$action.="$data->getId()))."'>"; + $action.="$data->getId()))."' data-method='delete'>"; + $action.="$data->getId()))."'>"; + + array_push($output["data"],[ + $action, + $data->getRoworder(), + $data->getName(), + $data->getParentfor(), + ]); + } + + // Retour + return new Response(json_encode($output), 200); + } + + public function ajaxseleclistAction(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:Page",'table') + ->where('table.name LIKE :value') + ->setParameter("value", "%".$q."%") + ->orderBy('table.name'); + + $datas=$qb->setFirstResult(0)->setMaxResults($page_limit)->getQuery()->getResult(); + foreach($datas as $data) { + array_push($output,array("id"=>$data->getId(),"text"=>$data->getName())); + } + + $response = new Response(json_encode($output)); + $response->headers->set('Content-Type', 'application/json'); + return $response; + } + + private function entityForm(Page $entity,$access="config") + { + $route=str_replace("_config_","_".$access."_",$this->routeprimary); + + if ($this->getDoctrine()->getManager()->contains($entity)) { + return $this->createForm(PageUpdateWidgetType::class, $entity, [ + "mode" => "update", + "access" => $access, + "for" => $entity->getParentfor(), + ]); + } + else { + return $this->createForm(PagetemplateSubmitType::class, $entity, [ + "mode" => "update", + "access" => $access + ]); + } + } + + public function submitAction(Request $request,$access="config") + { + if($access=="user"&&!$this->get('session')->get('cancreatepage')) + throw $this->createNotFoundException('Permission denied'); + + $pagecategory=$this->getDoctrine()->getRepository("CadolesPortalBundle:Pagecategory")->find(2); + $entity = new Page(); + $entity->setMaxwidth(0); + $entity->setRoworder(0); + $entity->setParentfor("user"); + $entity->setPagecategory($pagecategory); + + $form = $this->entityForm($entity,$access); + $form->handleRequest($request); + + if ($form->isValid()) { + $em = $this->getDoctrine()->getManager(); + if($access=="user") $entity->setUser($this->getUser()); + + $em->persist($entity); + $em->flush(); + + $route=str_replace("_config_","_".$access."_",$this->routeprimary); + return $this->redirect($this->generateUrl($route.'_update',["id"=>$entity->getId()])); + } + + return $this->render('CadolesPortalBundle:Pagetemplate:submit.html.twig', [ + 'useheader' => true, + 'usemenu' => false, + 'usesidebar' => ($access=="config"), + 'maxwidth' => ($access=="user"), + 'entity' => $entity, + 'mode' => "submit", + 'access' => $access, + 'form' => $form->createView() + ]); + } + + public function updateAction(Request $request, $id,$access="config") + { + $em = $this->getDoctrine()->getManager(); + $entity = $em->getRepository($this->labelentity)->find($id); + if (!$entity) throw $this->createNotFoundException('Unable to find entity.'); + + + // Création du formulaire + $form = $this->entityForm($entity,$access); + $form->handleRequest($request); + + if ($form->isValid()) { + $em = $this->getDoctrine()->getManager(); + $em->persist($entity); + $em->flush(); + + return $this->redirect($this->generateUrl($this->routeprimary.'_view',["id"=>$id])); + } + + return $this->render('CadolesPortalBundle:Page:updatewidget.html.twig', [ + 'useheader' => true, + 'usemenu' => false, + 'usesidebar' => ($access=="config"), + 'maxwidth' => ($access=="user"), + 'entity' => $entity, + 'access' => $access, + 'mode' => "updatetemplate", + 'form' => $form->createView(), + ]); + } + + public function deleteAction(Request $request, $id,$access="config") + { + $em = $this->getDoctrine()->getManager(); + $entity = $this->getDoctrine()->getRepository($this->labelentity)->find($id); + if (!$entity) throw $this->createNotFoundException('Unable to find entity.'); + + // On s'assure que l'utilisateur à la permission de supprimer + if($access=="user") { + $em->getRepository($this->labelentity)->getPermission($this->getUser(),$entity,$cansee,$canupdate); + if(!$canupdate) throw $this->createNotFoundException('Permission denied'); + } + + // On s'assure que le template est supprimable + $info=""; + $group = $em->getRepository("CadolesCoreBundle:Group")->findOneBy(["pagetemplate"=>$entity]); + if(!$group) { + // Suppression + $em->remove($entity); + $em->flush(); + } + else { + $this->get('session')->getFlashBag()->clear(); + $request->getSession()->getFlashBag()->add("error", "Impossible de supprimer ce modèle, il est utilisé par au moins un groupe"); + } + + // Retour + return $this->redirect($this->generateUrl($this->routeprimary)); + + } + + + + public function viewAction($id,$access=null) { + + $em = $this->getDoctrine()->getManager(); + $entity = $em->getRepository($this->labelentity)->find($id); + if (!$entity) throw $this->createNotFoundException('Unable to find entity.'); + + // Permissions + $canupdate = true; + + return $this->render($this->labelentity.':viewwidget.html.twig', [ + 'useheader' => ($access=="config"), + 'usemenu' => false, + 'usesidebar' => ($access=="config"), + 'entity' => $entity, + 'access' => $access, + 'canupdate' => $canupdate, + 'mode' => "viewtemplate", + 'widgets' => $this->getDoctrine()->getRepository("CadolesPortalBundle:Widget")->getWidgetAccess($access) + ]); + } +} 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 6ac8ce22..d4b5cff7 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php @@ -38,7 +38,7 @@ class PagewidgetController extends Controller return $results; } - private function entityForm(Pagewidget $entity,$idpage,$id,$access="config") + private function entityForm(Pagewidget $entity,$idpage,$id,$access="config",$by="view") { if ($this->getDoctrine()->getManager()->contains($entity)) { $widgettype= $this->getDoctrine()->getManager()->getRepository("CadolesPortalBundle:Pagewidget")->find($id)->getWidget(); @@ -73,7 +73,7 @@ class PagewidgetController extends Controller $param = $widgettype->getParameter(); return $this->createForm(PagewidgetType::class, $entity, [ 'param' => $param, - 'mode' => "submit", + 'mode' => ($by=="view"?"submit":"submittemplate"), 'access' => $access, 'idicon' => $widgettype->getIcon()->getId(), 'method' => 'POST', @@ -83,9 +83,11 @@ class PagewidgetController extends Controller public function submitAction(Request $request,$idpage,$idwidgettype,$access="config") { + $by=$request->query->get('by'); $entity = new Pagewidget(); - $form = $this->entityForm($entity,$idpage,$idwidgettype,$access); + $form = $this->entityForm($entity,$idpage,$idwidgettype,$access,$by); $form->handleRequest($request); + // On s'assure que la page où l'on souhaite insérer un widget est bien du bon type $page=$this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->findoneby(["id"=>$idpage]); @@ -125,8 +127,12 @@ class PagewidgetController extends Controller $em->persist($entity); $em->flush(); - if($access=="config") - return $this->redirect($this->generateUrl('cadoles_portal_config_page_view',["id"=>$idpage])); + if($access=="config") { + if($by=="view") + return $this->redirect($this->generateUrl('cadoles_portal_config_page_view',["id"=>$idpage])); + else + return $this->redirect($this->generateUrl('cadoles_portal_config_pagetemplate_view',["id"=>$idpage])); + } else return $this->redirect($this->generateUrl('cadoles_core_home',["id"=>$idpage])); } @@ -143,7 +149,7 @@ class PagewidgetController extends Controller 'entity' => $entity, 'icons' => $icons, 'iconsuser' => $iconsuser, - 'mode' => "submit", + 'mode' => ($by=="view"?"submit":"submittemplate"), 'access' => $access, 'idpage' => $idpage, 'form' => $form->createView(), @@ -152,6 +158,8 @@ class PagewidgetController extends Controller public function updateAction(Request $request,$idpage,$idwidget,$access="config") { + $by=$request->query->get('by'); + // Recherche du pagewidget $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository($this->labelentity)->find($idwidget); @@ -164,7 +172,7 @@ class PagewidgetController extends Controller } // Création du formulaire - $form = $this->entityForm($entity,$idpage,$idwidget,$access); + $form = $this->entityForm($entity,$idpage,$idwidget,$access,$by); $form->handleRequest($request); // Validation @@ -193,8 +201,11 @@ class PagewidgetController extends Controller $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush(); - - return $this->redirect($this->generateUrl('cadoles_portal_'.$access.'_page_view',["id"=>$idpage])); + + if($by=="view") + return $this->redirect($this->generateUrl('cadoles_portal_'.$access.'_page_view',["id"=>$idpage])); + else + return $this->redirect($this->generateUrl('cadoles_portal_'.$access.'_pagetemplate_view',["id"=>$idpage])); } $icons=$this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findBy(["user"=>null]); @@ -209,7 +220,7 @@ class PagewidgetController extends Controller 'entity' => $entity, 'icons' => $icons, 'iconsuser' => $iconsuser, - 'mode' => "update", + 'mode' => ($by=="view"?"update":"updatetemplate"), 'access' => $access, 'idpage' => $idpage, 'form' => $form->createView(), @@ -985,7 +996,7 @@ class PagewidgetController extends Controller "image" => $imgurl, // "color" => $flux->getColor(), "fluxid" => 0, - "fluxname" => $entity->getName(), + "fluxtitle" => $entity->getName(), )); $nbflux++; @@ -1023,11 +1034,13 @@ class PagewidgetController extends Controller $canupdate = true; } else { + // On s'assure que l'utilisateur à la permission de voir $page=$entity->getPage(); $em->getRepository("CadolesPortalBundle:Page")->getPermission($this->getUser(),$page,$cansee,$canupdate); if(!$cansee) throw $this->createNotFoundException('Permission denied'); - } + } + // Récupération des paramétres du widget $modedesktop=0; @@ -1044,11 +1057,11 @@ class PagewidgetController extends Controller // Bookmark du widget $bookmarks=$em->getRepository("CadolesPortalBundle:Bookmark")->findBy(["pagewidget"=>$entity]); - + // Render return $this->render($this->labelentity.':viewbookmark.html.twig', [ 'entity' => $entity, - 'canadd' => ($user), + 'canadd' => $canupdate, 'canupdate' => $canupdate, 'modedesktop' => $modedesktop, 'bookmarks' => $bookmarks, @@ -1333,6 +1346,10 @@ class PagewidgetController extends Controller $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')); + array_push($events,$tmp); } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Icon.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Icon.php index d6f18fac..64d8151e 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Icon.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Icon.php @@ -73,7 +73,6 @@ class Icon */ private $widgets; - /** * @var ArrayCollection $bookmarks * @var Bookmark @@ -81,6 +80,16 @@ class Icon * @ORM\OneToMany(targetEntity="Bookmark", mappedBy="icon", cascade={"persist"}, orphanRemoval=false) */ private $bookmarks; + + /** + * @var ArrayCollection $groups + * @var Group + * + * @ORM\OneToMany(targetEntity="Cadoles\CoreBundle\Entity\Group", mappedBy="icon", cascade={"persist"}, orphanRemoval=false) + */ + private $groups; + + /** * Constructor */ @@ -355,4 +364,38 @@ class Icon { return $this->bookmarks; } + + /** + * Add group + * + * @param \Cadoles\CoreBundle\Entity\Group $group + * + * @return Icon + */ + public function addGroup(\Cadoles\CoreBundle\Entity\Group $group) + { + $this->groups[] = $group; + + return $this; + } + + /** + * Remove group + * + * @param \Cadoles\CoreBundle\Entity\Group $group + */ + public function removeGroup(\Cadoles\CoreBundle\Entity\Group $group) + { + $this->groups->removeElement($group); + } + + /** + * Get groups + * + * @return \Doctrine\Common\Collections\Collection + */ + public function getGroups() + { + return $this->groups; + } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Page.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Page.php index 20ea9b0c..b3e4bcbc 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Page.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Page.php @@ -67,6 +67,13 @@ class Page */ private $template; + /** + * @var string + * + * @ORM\Column(name="parentfor", type="string", nullable=true) + */ + protected $parentfor; + /** * @var string * @@ -96,14 +103,38 @@ class Page /** * @var ArrayCollection $pagewidgets - * @var Order + * @var Pagewidget * * @ORM\OneToMany(targetEntity="Pagewidget", mappedBy="page", cascade={"persist"}, orphanRemoval=true) * @ORM\OrderBy({"loc" = "ASC", "roworder" = "ASC"}) */ private $pagewidgets; + /** + * @ORM\ManyToOne(targetEntity="Page", inversedBy="pages") + * @ORM\JoinColumn(nullable=true, onDelete="SET NULL") + */ + private $page; + /** + * @var ArrayCollection $pages + * @var Page + * + * @ORM\OneToMany(targetEntity="Page", mappedBy="page", cascade={"persist"}, orphanRemoval=false) + */ + private $pages; + + /** + * @var ArrayCollection $templategroups + * @var Group + * + * @ORM\OneToMany(targetEntity="Cadoles\CoreBundle\Entity\Group", mappedBy="pagetemplate", cascade={"persist"}, orphanRemoval=false) + */ + private $templategroups; + + + + /* champs calculé non stocké en base */ private $canupdate; public function getCanupdate() @@ -118,7 +149,6 @@ class Page - /** * Constructor */ @@ -126,6 +156,7 @@ class Page { $this->groups = new \Doctrine\Common\Collections\ArrayCollection(); $this->pagewidgets = new \Doctrine\Common\Collections\ArrayCollection(); + $this->pages = new \Doctrine\Common\Collections\ArrayCollection(); } /** @@ -282,6 +313,30 @@ class Page return $this->template; } + /** + * Set parentfor + * + * @param string $parentfor + * + * @return Page + */ + public function setParentfor($parentfor) + { + $this->parentfor = $parentfor; + + return $this; + } + + /** + * Get parentfor + * + * @return string + */ + public function getParentfor() + { + return $this->parentfor; + } + /** * Set roles * @@ -421,4 +476,96 @@ class Page { return $this->pagewidgets; } + + /** + * Set page + * + * @param \Cadoles\PortalBundle\Entity\Page $page + * + * @return Page + */ + public function setPage(\Cadoles\PortalBundle\Entity\Page $page = null) + { + $this->page = $page; + + return $this; + } + + /** + * Get page + * + * @return \Cadoles\PortalBundle\Entity\Page + */ + public function getPage() + { + return $this->page; + } + + /** + * Add page + * + * @param \Cadoles\PortalBundle\Entity\Page $page + * + * @return Page + */ + public function addPage(\Cadoles\PortalBundle\Entity\Page $page) + { + $this->pages[] = $page; + + return $this; + } + + /** + * Remove page + * + * @param \Cadoles\PortalBundle\Entity\Page $page + */ + public function removePage(\Cadoles\PortalBundle\Entity\Page $page) + { + $this->pages->removeElement($page); + } + + /** + * Get pages + * + * @return \Doctrine\Common\Collections\Collection + */ + public function getPages() + { + return $this->pages; + } + + /** + * Add templategroup + * + * @param \Cadoles\CoreBundle\Entity\Group $templategroup + * + * @return Page + */ + public function addTemplategroup(\Cadoles\CoreBundle\Entity\Group $templategroup) + { + $this->templategroups[] = $templategroup; + + return $this; + } + + /** + * Remove templategroup + * + * @param \Cadoles\CoreBundle\Entity\Group $templategroup + */ + public function removeTemplategroup(\Cadoles\CoreBundle\Entity\Group $templategroup) + { + $this->templategroups->removeElement($templategroup); + } + + /** + * Get templategroups + * + * @return \Doctrine\Common\Collections\Collection + */ + public function getTemplategroups() + { + return $this->templategroups; + } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Widget.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Widget.php index 08e4f3eb..2edcfe89 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Widget.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Entity/Widget.php @@ -12,6 +12,7 @@ use Symfony\Component\Validator\Constraints as Assert; * @ORM\Entity * @ORM\Table(name="widget") * @ORM\HasLifecycleCallbacks + * @ORM\Entity(repositoryClass="Cadoles\PortalBundle\Repository\WidgetRepository") */ class Widget { @@ -108,6 +109,13 @@ class Widget */ protected $colorbodyfont; + /** + * @var string + * + * @ORM\Column(name="access", type="array", nullable=true) + */ + protected $access; + /** * @var string * @@ -136,7 +144,6 @@ class Widget return $this; } - /** * Constructor */ @@ -443,6 +450,30 @@ class Widget return $this->colorbodyfont; } + /** + * Set access + * + * @param string $access + * + * @return Widget + */ + public function setAccess($access) + { + $this->access = $access; + + return $this; + } + + /** + * Get access + * + * @return string + */ + public function getAccess() + { + return $this->access; + } + /** * Set parameter * diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/BlogWriterType.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/BlogWriterType.php index 9145bbba..b2f53ecf 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/BlogWriterType.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/BlogWriterType.php @@ -31,28 +31,16 @@ class BlogWriterType extends AbstractType 'class' => 'CadolesCoreBundle:User', 'query_builder' => function(EntityRepository $er) use ($id,$access) { $qb= $er->createQueryBuilder('user'); - if($access=="config") - return $qb->select('user') + return $qb->select('user') - ->from('CadolesPortalBundle:Blog','blog') - ->where('blog.id=:blog') + ->from('CadolesPortalBundle:Blog','blog') + ->andwhere('blog.id=:blog') - ->from('CadolesCoreBundle:UserGroup','usergroup') - ->andwhere("usergroup.group MEMBER OF blog.groups AND usergroup.user=user") - ->orwhere($qb->expr()->like('blog.roles', $qb->expr()->concat($qb->expr()->literal('%'),$qb->expr()->concat('user.role',$qb->expr()->literal('%'))))) + ->from('CadolesCoreBundle:UserGroup','usergroup') + ->andwhere("usergroup.group MEMBER OF blog.groups") + ->andwhere("usergroup.user=user") - ->setParameter('blog',$id); - else - return $qb->select('user') - - ->from('CadolesPortalBundle:Blog','blog') - ->andwhere('blog.id=:blog') - - ->from('CadolesCoreBundle:UserGroup','usergroup') - ->andwhere("usergroup.group MEMBER OF blog.groups") - ->andwhere("usergroup.user=user") - - ->setParameter('blog',$id); + ->setParameter('blog',$id); }, 'choice_label' => 'username', 'multiple' => true, diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/BlogarticleType.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/BlogarticleType.php index 5d0a72a3..91a5cf06 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/BlogarticleType.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/BlogarticleType.php @@ -64,17 +64,18 @@ class BlogarticleType extends AbstractType 'query_builder' => function(EntityRepository $er) use ($user) { $qb=$er->createQueryBuilder('blog'); return $qb->select('blog') - ->andwhere(':user MEMBER OF blog.writers') - + ->where('blog.user=:user') + ->orwhere(':user MEMBER OF blog.writers') + + ->from('CadolesCoreBundle:UserGroup','usergroup') + ->orwhere('usergroup.group MEMBER OF blog.groups AND usergroup.user=:user AND usergroup.fgmanager=:flag') + ->from('CadolesCoreBundle:User','user') ->andwhere("user=:user") - ->from('CadolesCoreBundle:UserGroup','usergroup') - ->andwhere('usergroup.group MEMBER OF blog.groups AND usergroup.user=:user') - ->orwhere($qb->expr()->like('blog.roles', $qb->expr()->concat($qb->expr()->literal('%'),$qb->expr()->concat('user.role',$qb->expr()->literal('%'))))) - ->orwhere('blog.user=:user') + ->setparameter('user',$user) + ->setparameter('flag',true); - ->setparameter('user',$user); }, ]); } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/PageUpdateWidgetType.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/PageUpdateWidgetType.php index 7177fa7b..2252a3ca 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/PageUpdateWidgetType.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/PageUpdateWidgetType.php @@ -39,8 +39,8 @@ class PageUpdateWidgetType extends AbstractType 'label' => 'Template', 'required' => false ]); - - if($options["access"]=="config") { + + if($options["access"]=="config"&&$options["for"]!="group") { $builder ->add('roles', ChoiceType::class, [ "label" => 'Visible pour les Rôles', @@ -80,7 +80,8 @@ class PageUpdateWidgetType extends AbstractType $resolver->setDefaults([ 'data_class' => 'Cadoles\PortalBundle\Entity\Page', 'access' => 'string', - 'mode' => 'string' + 'mode' => 'string', + 'for' => 'string' ]); } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/PagetemplateSubmitType.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/PagetemplateSubmitType.php new file mode 100644 index 00000000..2cfaf768 --- /dev/null +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Form/PagetemplateSubmitType.php @@ -0,0 +1,54 @@ +add('submit', SubmitType::class, [ + "label" => ($options["mode"]=="delete"?"Confirmer la Suppression":"Valider"), + "attr" => ($options["mode"]=="delete"?array("class" => "btn btn-danger"):array("class" => "btn btn-success")) + ]) + + ->add('name', TextType::class, [ + 'label' => 'Nom' + ]) + + ->add('parentfor', ChoiceType::class, [ + "label" => 'Modèle pour les', + "choices" => [ + "Utilisateurs" => 'user', + "Groupes" => 'group', + ], + ]) + + ->add('roworder', IntegerType::class, [ + 'label' => 'Ordre', + ]) + + ->add('maxwidth', IntegerType::class, [ + 'label' => "Largeur maximum (0 pour largeur de l'écran)", + ]); + + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'data_class' => 'Cadoles\PortalBundle\Entity\Page', + 'mode' => 'string', + 'access' => 'string' + ]); + } +} diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/BlogRepository.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/BlogRepository.php index 1dab008c..f8343e4c 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/BlogRepository.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/BlogRepository.php @@ -120,6 +120,7 @@ class BlogRepository extends EntityRepository $groups=($user?$user->getGroups():[]); // La blog est-elle dans les blogs associées à un partage de group ? + /* $inblogsshared=$this->createQueryBuilder('blog') ->from('CadolesCoreBundle:Group','g') ->from('CadolesCoreBundle:UserGroup','ug') @@ -138,6 +139,7 @@ class BlogRepository extends EntityRepository ->setParameter('user',$user) ->getQuery()->getResult(); if($inblogsshared) $cansee=true; + */ // La blog est-elle dans les blogs associées au role de l'utilisateur ? foreach($roles as $role) { @@ -162,9 +164,16 @@ class BlogRepository extends EntityRepository ->setParameter("group",$group->getGroup()); $inbloggroup=$qb->getQuery()->getResult(); - if($inbloggroup) $cansee=true; + if($inbloggroup) { + $cansee=true; + + // Est-il manager du groupe + if($group->getGroup()->getFgcanshare()) { + if($group->getFgmanager()) $canadd=true; + } + } } - + // utilisateur a-t-il la permission d'écriture $canadd=$this->getInwriter($user,$blog); @@ -175,6 +184,7 @@ class BlogRepository extends EntityRepository $canadd=false; if($user) { + // Peut ecrire ceux qui sont déclaré comme écrivain $qb = $this->createQueryBuilder("blog"); $qb ->andWhere("blog.id=:id") ->andwhere(':user MEMBER OF blog.writers') @@ -183,13 +193,37 @@ class BlogRepository extends EntityRepository ->andwhere("user=:user") ->from('CadolesCoreBundle:UserGroup','usergroup') - ->andwhere('usergroup.group MEMBER OF blog.groups AND usergroup.user=:user') - ->orwhere($qb->expr()->like('blog.roles', $qb->expr()->concat($qb->expr()->literal('%'),$qb->expr()->concat('user.role',$qb->expr()->literal('%'))))) + ->andwhere('usergroup.group MEMBER OF blog.groups') + ->andwhere('usergroup.user=:user') + ->setParameter("id",$blog->getId()) ->setparameter('user',$user); $inblogwriters=$qb->getQuery()->getResult(); if($inblogwriters) $canadd=true; + + // Peut ecrire ceux qui sont manager du groupe auquel est rattaché le blog + $qb = $this->createQueryBuilder("blog"); + $qb ->andWhere("blog.id=:id") + ->from('CadolesCoreBundle:User','user') + ->andwhere("user=:user") + + ->from('CadolesCoreBundle:UserGroup','usergroup') + ->andwhere('usergroup.group MEMBER OF blog.groups') + ->andwhere('usergroup.user=:user') + ->andwhere('usergroup.fgmanager=:flag') + + ->from('CadolesCoreBundle:Group','groupe') + ->andwhere('groupe=usergroup.group') + ->andwhere('groupe.fgcanshare=:flag') + + ->setParameter("id",$blog->getId()) + ->setparameter('user',$user) + ->setparameter('flag',true); + + + $inblogwriters=$qb->getQuery()->getResult(); + if($inblogwriters) $canadd=true; } return $canadd; diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/CalendarRepository.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/CalendarRepository.php index 619ffda9..8edf73a8 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/CalendarRepository.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/CalendarRepository.php @@ -90,8 +90,8 @@ class CalendarRepository extends EntityRepository // Permission sur les calendars foreach($calendarsadmin as $calendaradmin) { - $calendaradmin->setCanupdate(false); - } + $calendaradmin->setCanupdate($this->getInwriter($user,$calendaradmin)); + } } public function getPermission($user,$calendar,&$cansee,&$canupdate) { @@ -108,27 +108,8 @@ class CalendarRepository extends EntityRepository $roles=($user?$user->getRoles():["ROLE_ANONYME"]); $groups=($user?$user->getGroups():[]); - // La calendar est-elle dans les calendars associées à un partage de group ? - $incalendarsshared=$this->createQueryBuilder('calendar') - ->from('CadolesCoreBundle:Group','g') - ->from('CadolesCoreBundle:UserGroup','ug') - ->from('CadolesCoreBundle:UserGroup','proprio') - ->where('g.fgcanshare=:fgcanshare') - ->andWhere('calendar.id = :id') - ->andWhere('g=ug.group') - ->andWhere('ug.user=:user') - ->andWhere('g MEMBER OF calendar.groups') - ->andWhere('calendar.user != :user') - ->andWhere('calendar.user is not null') - ->andWhere('proprio.user=calendar.user') - ->andWhere('proprio.group=g') - ->setParameter("id",$calendar->getId()) - ->setParameter('fgcanshare',true) - ->setParameter('user',$user) - ->getQuery()->getResult(); - if($incalendarsshared) $cansee=true; - // La calendar est-elle dans les calendars associées au role de l'utilisateur ? + // Le calendar est-il dans les calendars associées au role de l'utilisateur ? foreach($roles as $role) { $qb = $this->createQueryBuilder("calendar"); $qb ->where($qb->expr()->like('calendar.roles', $qb->expr()->literal("%$role%"))) @@ -139,8 +120,7 @@ class CalendarRepository extends EntityRepository if($incalendarrole) $cansee=true; } - - // La calendar est-elle dans les calendars associées aux groupes de l'utilisateur ? + // Le calendar est-il dans les calendars associées aux groupes de l'utilisateur ? foreach($groups as $group) { $qb = $this->createQueryBuilder("calendar"); $qb ->where(":group MEMBER OF calendar.groups") @@ -151,8 +131,46 @@ class CalendarRepository extends EntityRepository ->setParameter("group",$group->getGroup()); $incalendargroup=$qb->getQuery()->getResult(); - if($incalendargroup) $cansee=true; + if($incalendargroup) { + $cansee=true; + + // Est-il manager du groupe + if($group->getGroup()->getFgcanshare()) { + if($group->getFgmanager()) $canupdate=true; + } + } } } } + + public function getInwriter($user,$calendar) { + $canadd=false; + + if($user) { + // Peut ecrire ceux qui sont manager du groupe auquel est rattaché le calendar + $qb = $this->createQueryBuilder("calendar"); + $qb ->andWhere("calendar.id=:id") + ->from('CadolesCoreBundle:User','user') + ->andwhere("user=:user") + + ->from('CadolesCoreBundle:UserGroup','usergroup') + ->andwhere('usergroup.group MEMBER OF calendar.groups') + ->andwhere('usergroup.user=:user') + ->andwhere('usergroup.fgmanager=:flag') + + ->from('CadolesCoreBundle:Group','groupe') + ->andwhere('groupe=usergroup.group') + ->andwhere('groupe.fgcanshare=:flag') + + ->setParameter("id",$calendar->getId()) + ->setparameter('user',$user) + ->setparameter('flag',true); + + + $inblogwriters=$qb->getQuery()->getResult(); + if($inblogwriters) $canadd=true; + } + + return $canadd; + } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/PageRepository.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/PageRepository.php index 54432f3b..17adde3e 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/PageRepository.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/PageRepository.php @@ -5,6 +5,7 @@ namespace Cadoles\PortalBundle\Repository; use Doctrine\ORM\EntityRepository; use Doctrine\Common\Collections\ArrayCollection; use Cadoles\PortalBundle\Entity\Page; +use Cadoles\PortalBundle\Entity\Pagewidget; use Cadoles\PortalBundle\Entity\Pagecategory; class PageRepository extends EntityRepository @@ -17,13 +18,58 @@ class PageRepository extends EntityRepository // &$pages = les pages système de l'utilistauer // &$pagesshared = les pages partagées pour l'utilisateur - public function getPagesUser($user,$id,&$entity,&$pagesuser,&$pages,&$pagesshared) + public function getPagesUser($user,$id,&$entity,&$pagesuser,&$pages,&$groupsshared) { // Profilage $roles=($user?$user->getRoles():["ROLE_ANONYME"]); $groups=($user?$user->getGroups():[]); - // Récupération des pages de l'utilisateur + + // CREATION DES PAGES TEMPLATE UTILISATEUR + if($user) { + // Initialisation du calcul des templates + $templatesnotorder=new ArrayCollection(); + + // Récupération des templates par rôles + foreach($roles as $role) { + $qb = $this->createQueryBuilder("page"); + $qb ->where($qb->expr()->like('page.roles', $qb->expr()->literal("%$role%"))) + ->andWhere("page.user is null") + ->andWhere("page.parentfor='user'"); + + $templatesroles=$qb->getQuery()->getResult(); + foreach($templatesroles as $templaterole) { + if(!$templatesnotorder->contains($templaterole)) $templatesnotorder->add($templaterole); + } + } + + // Récupération des templates par group + foreach($groups as $group) { + $qb = $this->createQueryBuilder("page"); + $qb ->where(":group MEMBER OF page.groups") + ->andWhere("page.user is null") + ->andWhere("page.parentfor='user'") + ->setParameter("group",$group->getGroup()); + + $templatesgroups=$qb->getQuery()->getResult(); + foreach($templatesgroups as $templategroup) { + if(!$templatesnotorder->contains($templategroup)) $templatesnotorder->add($templategroup); + } + } + + // Pour chaque template associé au profil de l'utilisateur on s'assure qu'il possède bien la page + foreach($templatesnotorder as $template) { + $exist=$this->getEntityManager()->getRepository("CadolesPortalBundle:Page")->findBy(["page"=>$template]); + if(!$exist) { + $page=$this->clonePage($user,$template); + } + } + } + + + + // GENERATION DES PAGES UTILISATEURS + // Une page utilisateur est une page dont il est le propriétaire mais qui n'est pas partagé dans un groupe $pagesuser=false; if($user) { $qb = $this->createQueryBuilder('page'); @@ -32,16 +78,64 @@ class PageRepository extends EntityRepository ->orderBy('page.roworder', 'ASC') ->addOrderBy('page.name', 'ASC'); $pagesuser=$qb->getQuery()->getResult(); + + foreach($pagesuser as $key => $pageuser) { + if(!($pageuser->getGroups()->isEmpty())) + unset($pagesuser[$key]); + } } - // Permission sur les pages + // Permission sur les pages = il a forcement le droit des les modifier : elles sont à lui if($pagesuser) { foreach($pagesuser as $pageuser) { $pageuser->setCanupdate(true); } } - // Pages partagées + + + // GENERATION DES PAGES GROUPES DE TRAVAIL + // Une page groupe de travail est une page associée à un groupe fgcanshare sur lequel l'utilisateur est inscrit + if($user) { + // En premier lieu on liste les groupes de travail de l'utilisateur + $groupsshared=$this ->getEntityManager()->createQueryBuilder() + ->select('g') + ->from('CadolesCoreBundle:Group','g') + ->from('CadolesCoreBundle:UserGroup','ug') + ->where('g.fgcanshare=:fgcanshare') + ->andWhere('g=ug.group') + ->andWhere('ug.user=:user') + ->setParameter('fgcanshare',true) + ->setParameter('user',$user) + ->getQuery()->getResult(); + + // Pour chaque groupe de travail : on s'assure que le groupe possède au moins une page + // Sinon création de la page template associée au groupe + foreach($groupsshared as $key => $groupshared) { + $pagesshared=$this ->createQueryBuilder('page') + ->from('CadolesCoreBundle:Group','g') + ->where('g.id=:id') + ->andWhere('g MEMBER OF page.groups') + ->setParameter('id',$groupshared->getId()) + ->getQuery()->getResult(); + + if(empty($pagesshared)) { + unset($groupsshared[$key]); + } + else { + // Si l'utilisateur est manager du group il aura les permissions de modification sur la page + $usergroup=$this->getEntityManager()->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["user"=>$user,"group"=>$groupshared]); + if($usergroup&&$usergroup->getFgmanager()) { + foreach($pagesshared as $key2 => $pageshared) { + $pagesshared[$key2]->setCanupdate(true); + } + } + + $groupsshared[$key]->pagesshared=$pagesshared; + } + } + } + $pagesshared=false; if($user) { $pagesshared=$this->createQueryBuilder('page') @@ -63,7 +157,7 @@ class PageRepository extends EntityRepository ->getQuery()->getResult(); } - + // GENERATION DES PAGES ADMINISTRATEUR // Initialisation du calcul des pages $pagesnotorder=new ArrayCollection(); @@ -71,7 +165,8 @@ class PageRepository extends EntityRepository foreach($roles as $role) { $qb = $this->createQueryBuilder("page"); $qb ->where($qb->expr()->like('page.roles', $qb->expr()->literal("%$role%"))) - ->andWhere("page.user is null"); + ->andWhere("page.user is null") + ->andWhere("page.parentfor is null"); $pagesroles=$qb->getQuery()->getResult(); foreach($pagesroles as $pagerole) { @@ -81,14 +176,17 @@ class PageRepository extends EntityRepository // Récupération des pages par group foreach($groups as $group) { - $qb = $this->createQueryBuilder("page"); - $qb ->where(":group MEMBER OF page.groups") - ->andWhere("page.user is null") - ->setParameter("group",$group->getGroup()); - - $pagesgroups=$qb->getQuery()->getResult(); - foreach($pagesgroups as $pagegroup) { - if(!$pagesnotorder->contains($pagegroup)) $pagesnotorder->add($pagegroup); + if(!$group->getGroup()->getFgcanshare()) { + $qb = $this->createQueryBuilder("page"); + $qb ->where(":group MEMBER OF page.groups") + ->andWhere("page.user is null") + ->andWhere("page.parentfor is null") + ->setParameter("group",$group->getGroup()); + + $pagesgroups=$qb->getQuery()->getResult(); + foreach($pagesgroups as $pagegroup) { + if(!$pagesnotorder->contains($pagegroup)) $pagesnotorder->add($pagegroup); + } } } @@ -120,10 +218,12 @@ class PageRepository extends EntityRepository $have=true; } } - if($pagesshared) { - foreach($pagesshared as $v) { - if($v == $entity) - $have=true; + if($groupsshared) { + foreach($groupsshared as $groupshared) { + foreach($groupshared->pagesshared as $v) { + if($v == $entity) + $have=true; + } } } @@ -141,12 +241,12 @@ class PageRepository extends EntityRepository // ou On récupère la premiere page de l'utilisateur if(!$entity && !empty($pagesuser)) { - $entity=$pagesuser[0]; + $entity=$pagesuser[$this->firstkey($pagesuser)]; } // ou On récupère la premiere page partagées if(!$entity && !empty($pagesshared)) { - $entity=$pagesshared[0]; + $entity=$pagesshared[$this->firstkey($pagesshared)]; } } @@ -165,6 +265,7 @@ class PageRepository extends EntityRepository $groups=($user?$user->getGroups():[]); // La page est-elle dans les pages associées à un partage de group ? + /* $inpagesshared=$this->createQueryBuilder('page') ->from('CadolesCoreBundle:Group','g') ->from('CadolesCoreBundle:UserGroup','ug') @@ -183,6 +284,7 @@ class PageRepository extends EntityRepository ->setParameter('user',$user) ->getQuery()->getResult(); if($inpagesshared) $cansee=true; + */ // La page est-elle dans les pages associées au role de l'utilisateur ? foreach($roles as $role) { @@ -207,8 +309,64 @@ class PageRepository extends EntityRepository ->setParameter("group",$group->getGroup()); $inpagegroup=$qb->getQuery()->getResult(); - if($inpagegroup) $cansee=true; + if($inpagegroup) { + $cansee=true; + // Est-il manager du groupe + if($group->getGroup()->getFgcanshare()) { + if($group->getFgmanager()) $canupdate=true; + } + } } } } + + public function clonePage($user,$template) { + $page=new Page(); + $page->setName($template->getName()); + $page->setRoworder($template->getRoworder()); + $page->setMaxwidth($template->getMaxwidth()); + $page->setUrl($template->getUrl()); + $page->setHtml($template->getHtml()); + $page->setTemplate($template->getTemplate()); + $page->setPagecategory($template->getPagecategory()); + $page->setUser($user); + $page->setPage($template); + + $this->getEntityManager()->persist($page); + $this->getEntityManager()->flush(); + + $widgets=$template->getPagewidgets(); + foreach($widgets as $widget) { + $pagewidget=new Pagewidget(); + $pagewidget->setName($widget->getName()); + $pagewidget->setLoc($widget->getLoc()); + $pagewidget->setRoworder($widget->getRoworder()); + $pagewidget->setHeight($widget->getHeight()); + $pagewidget->setAutoajust($widget->getAutoajust()); + $pagewidget->setBorder($widget->getBorder()); + $pagewidget->setOpened($widget->getOpened()); + $pagewidget->setColorheaderback($widget->getColorheaderback()); + $pagewidget->setColorheaderfont($widget->getColorheaderfont()); + $pagewidget->setColorbodyback($widget->getColorbodyback()); + $pagewidget->setColorbodyfont($widget->getColorbodyfont()); + $pagewidget->setParameter($widget->getParameter()); + $pagewidget->setPage($page); + $pagewidget->setWidget($widget->getWidget()); + $pagewidget->setIcon($widget->getIcon()); + + $this->getEntityManager()->persist($pagewidget); + $this->getEntityManager()->flush(); + + // dupliquer slide et bookmarks ?? + } + + return $page; + } + + private function firstkey($array) { + foreach($array as $key => $unused) { + return $key; + } + return NULL; + } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/WidgetRepository.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/WidgetRepository.php new file mode 100644 index 00000000..0dfc9439 --- /dev/null +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Repository/WidgetRepository.php @@ -0,0 +1,18 @@ +createQueryBuilder("widget"); + $qb ->where($qb->expr()->like('widget.access', $qb->expr()->literal("%$access%"))); + $widgets=$qb->getQuery()->getResult(); + + return $widgets; + } +} diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/config/routing.yml b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/config/routing.yml index 1edc009d..a379a652 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/config/routing.yml +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/config/routing.yml @@ -220,6 +220,32 @@ cadoles_portal_config_ajax_notice_seleclist: path: /config/notice/ajax/selectlist defaults: { _controller: CadolesPortalBundle:Notice:ajaxseleclist } +#== PAGE TEMPLATE ======================================================================================================================================== + +#-- Access config +cadoles_portal_config_pagetemplate: + path: /config/template + defaults: { _controller: CadolesPortalBundle:Pagetemplate:list } + +cadoles_portal_config_pagetemplate_ajax_list: + path: /config/template/ajax/list + defaults: { _controller: CadolesPortalBundle:Pagetemplate:ajaxlist, access: config } + +cadoles_portal_config_pagetemplate_submit: + path: /config/template/submit + defaults: { _controller: CadolesPortalBundle:Pagetemplate:submit, access: config } + +cadoles_portal_config_pagetemplate_update: + path: /config/template/update/{id} + defaults: { _controller: CadolesPortalBundle:Pagetemplate:update, access: config } + +cadoles_portal_config_pagetemplate_delete: + path: /config/template/delete/{id} + defaults: { _controller: CadolesPortalBundle:Pagetemplate:delete, access: config } + +cadoles_portal_config_pagetemplate_view: + path: /config/template/view/{id} + defaults: { _controller: CadolesPortalBundle:Pagetemplate:view, access: config } #== PAGE ================================================================================================================================================= @@ -670,7 +696,7 @@ cadoles_portal_config_panelwidget_view_rss: defaults: { _controller: CadolesPortalBundle:Pagewidget:viewrss, access: config } cadoles_portal_config_panelwidget_view_bookmark: - path: /pagewidget/view/bookmark/{id} + path: /config/pagewidget/view/bookmark/{id} defaults: { _controller: CadolesPortalBundle:Pagewidget:viewbookmark, access: config } cadoles_portal_config_panelwidget_view_link: @@ -710,11 +736,11 @@ cadoles_portal_config_panelwidget_view_clock: defaults: { _controller: CadolesPortalBundle:Pagewidget:viewclock, access: config } cadoles_portal_config_panelwidget_view_calculator: - path: config/pagewidget/view/calculator/{id} + path: /config/pagewidget/view/calculator/{id} defaults: { _controller: CadolesPortalBundle:Pagewidget:viewcalculator, access: config } cadoles_portal_config_panelwidget_view_appexternal: - path: config/pagewidget/view/appexternal/{id} + path: /config/pagewidget/view/appexternal/{id} defaults: { _controller: CadolesPortalBundle:Pagewidget:viewappexternal, access: config } #-- Access user diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Blogarticle/view.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Blogarticle/view.html.twig index 5bb676bb..cbd13d39 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Blogarticle/view.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Blogarticle/view.html.twig @@ -104,6 +104,7 @@ function showBlog(id,canupdate) { // Rendre actif le page en cours dans le menu $(".navbar-top-links li").removeClass("active"); + $(".nav-pills li").removeClass("active"); $("#menublog-"+id).addClass("active"); } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Page/pages.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Page/pages.html.twig index b8936970..b0a4a068 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Page/pages.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Page/pages.html.twig @@ -36,27 +36,44 @@ {% endfor %} - {% if pagesshared is not empty %} - - {% endif %} -
+
{% if bookmarks is not empty %}
@@ -56,8 +56,10 @@ {% for bookmark in bookmarks %}
- - + {% if canupdate %} + + {% endif %} + {% if bookmark.target == 'frame' %} {% elseif bookmark.target == "_self" %} diff --git a/src/ninegate-1.0/todo.txt b/src/ninegate-1.0/todo.txt index c0c95486..952d7f13 100644 --- a/src/ninegate-1.0/todo.txt +++ b/src/ninegate-1.0/todo.txt @@ -32,8 +32,9 @@ > Favorie sur appexternal > Montée de version LemonLDAP > France Connect Agent -> Page Blanche paramétrable -> Fiche user paramétrable > Index sur group.fgall +> Pb sur widget editor et la couleur du texte si fond pas blanc +> Pb sur widget flux et la couleur du texte si fond pas blanc + diff --git a/tmpl/ninegate-init-01.sql b/tmpl/ninegate-init-01.sql index 581e2a07..ca44312c 100644 --- a/tmpl/ninegate-init-01.sql +++ b/tmpl/ninegate-init-01.sql @@ -43,14 +43,15 @@ INSERT IGNORE INTO `sidebar` (`id`, `parent_id`, `roworder`, `label`, `path`, `f (1270, 1200, 1270, 'Import Utilisateurs', 'cadoles_core_config_importuser', 'fa-download', 'ROLE_ADMIN,ROLE_MODO', 'importuser_activate'), (1500, NULL, 1500, 'PORTAIL', NULL, 'fa-cubes', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1510, 1500, 1510, 'Pages', 'cadoles_portal_config_page', 'fa-file', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1520, 1500, 1520, 'Items', 'cadoles_portal_config_item', 'fa-desktop', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1530, 1500, 1530, 'Annonces', 'cadoles_portal_config_alert', 'fa-bell', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1540, 1500, 1540, 'Calendriers', 'cadoles_portal_config_calendar', 'fa-calendar', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1550, 1500, 1550, 'Blogs', 'cadoles_portal_config_blog', 'fa-paper-plane', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1560, 1500, 1560, 'Flux', 'cadoles_portal_config_flux', 'fa-rss', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1570, 1500, 1570, 'Chartes', 'cadoles_portal_config_notice', 'fa-info', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), -(1580, 1500, 1580, 'Icônes', 'cadoles_portal_config_icon', 'fa-bug', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1510, 1500, 1510, 'Modèles de Page', 'cadoles_portal_config_pagetemplate', 'fa-copy', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1520, 1500, 1520, 'Pages', 'cadoles_portal_config_page', 'fa-file', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1530, 1500, 1530, 'Items', 'cadoles_portal_config_item', 'fa-desktop', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1540, 1500, 1540, 'Annonces', 'cadoles_portal_config_alert', 'fa-bell', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1550, 1500, 1550, 'Calendriers', 'cadoles_portal_config_calendar', 'fa-calendar', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1560, 1500, 1560, 'Blogs', 'cadoles_portal_config_blog', 'fa-paper-plane', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1570, 1500, 1570, 'Flux', 'cadoles_portal_config_flux', 'fa-rss', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1580, 1500, 1580, 'Chartes', 'cadoles_portal_config_notice', 'fa-info', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), +(1590, 1500, 1590, 'Icônes', 'cadoles_portal_config_icon', 'fa-bug', 'ROLE_ADMIN,ROLE_MODO', 'portal_activate'), (2500, NULL, 2500, 'MODULES', NULL, 'fa-cubes', 'ROLE_ADMIN,ROLE_MODO', 'module_activate'), (2510, 2500, 2510, 'Pages', 'cadoles_portal_config_page', 'fa-file', 'ROLE_ADMIN,ROLE_MODO', 'page_activate'), @@ -120,6 +121,7 @@ INSERT IGNORE permmodo (`route`, `visible`) VALUES ('cadoles_core_config_registration',1), ('cadoles_core_config_user',1), ('cadoles_core_config_importuser',0), +('cadoles_portal_config_pagetemplate',1), ('cadoles_portal_config_page',1), ('cadoles_portal_config_item',1), ('cadoles_portal_config_alert',1),