2018-12-18 09:44:39 +01:00
< ? php
namespace Cadoles\CoreBundle\Controller ;
use Symfony\Bundle\FrameworkBundle\Controller\Controller ;
use Symfony\Component\HttpFoundation\Session\Session ;
use Symfony\Component\HttpFoundation\Request ;
use Symfony\Component\HttpFoundation\Response ;
use Symfony\Component\HttpFoundation\JsonResponse ;
use Symfony\Component\Form\FormError ;
2019-07-04 16:11:50 +02:00
use Ramsey\Uuid\Uuid ;
2019-07-23 15:32:35 +02:00
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException ;
2018-12-18 09:44:39 +01:00
use Cadoles\CoreBundle\Entity\Group ;
use Cadoles\CoreBundle\Entity\Usergroup ;
use Cadoles\CoreBundle\Entity\Usermodo ;
use Cadoles\CoreBundle\Form\GroupType ;
2019-07-04 16:11:50 +02:00
use Cadoles\PortalBundle\Entity\Calendar ;
use Cadoles\PortalBundle\Entity\Blog ;
2019-07-23 15:32:35 +02:00
use Cadoles\WebsocketBundle\Entity\Message ;
2018-12-18 09:44:39 +01:00
class GroupController extends Controller
{
private $labelroute = 'cadoles_core_config_group' ;
private $labelentity = 'CadolesCoreBundle:Group' ;
private $labeldata = 'group' ;
private $labeldatas = 'groups' ;
2019-07-23 15:32:35 +02:00
public function listAction ( $access )
2018-12-18 09:44:39 +01:00
{
2019-03-21 17:15:06 +01:00
return $this -> render ( 'CadolesCoreBundle:Group:list.html.twig' ,[
'useheader' => true ,
'usemenu' => false ,
2019-07-23 15:32:35 +02:00
'usesidebar' => ( $access == " config " ),
'access' => $access
2019-03-21 17:15:06 +01:00
]);
2018-12-18 09:44:39 +01:00
}
2019-07-23 15:32:35 +02:00
public function ajaxlistAction ( Request $request , $access )
2018-12-18 09:44:39 +01:00
{
// S'assurer que c'est un appel ajax
if ( ! $request -> isXmlHttpRequest ()) {
return new JsonResponse ( array ( 'message' => 'Interdit' ), 400 );
}
2019-07-23 15:32:35 +02:00
$user = $this -> getUser ();
2019-05-07 13:49:42 +02:00
$portal_activate = $this -> getParameter ( " portal_activate " );
2018-12-18 09:44:39 +01:00
$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' );
// Nombre total d'enregistrement
2019-07-23 15:32:35 +02:00
$qb = $em -> createQueryBuilder ();
$qb -> select ( 'COUNT(table)' ) -> from ( $this -> labelentity , 'table' );
if ( $access == " user " ) {
$qb -> from ( " CadolesCoreBundle:UserGroup " , " ug " )
-> andWhere (( " table.fgcanshare=:flag " ))
-> andWhere ( " table.id=ug.group " )
-> andWhere ( " :user=ug.user " )
-> setParameter ( " flag " , true )
-> setParameter ( " user " , $user );
}
$total = $qb -> getQuery () -> getSingleScalarResult ();
2018-12-18 09:44:39 +01:00
// Nombre d'enregistrement filtré
if ( $search [ " value " ] == " " )
$totalf = $total ;
else {
2019-07-23 15:32:35 +02:00
$qb = $em -> createQueryBuilder ();
$qb -> select ( 'COUNT(table)' )
-> from ( $this -> labelentity , 'table' )
-> where ( 'table.label LIKE :value' )
-> setParameter ( " value " , " % " . $search [ " value " ] . " % " );
if ( $access == " user " ) {
$qb -> from ( " CadolesCoreBundle:UserGroup " , " ug " )
-> andWhere (( " table.fgcanshare=:flag " ))
-> andWhere ( " table.id=ug.group " )
-> andWhere ( " :user=ug.user " )
-> setParameter ( " flag " , true )
-> setParameter ( " user " , $user );
}
$totalf = $qb -> getQuery () -> getSingleScalarResult ();
2018-12-18 09:44:39 +01:00
}
// Construction du tableau de retour
$output = array (
'draw' => $draw ,
'recordsFiltered' => $totalf ,
'recordsTotal' => $total ,
'data' => array (),
);
// Parcours des Enregistrement
$qb = $em -> createQueryBuilder ();
$qb -> select ( 'table' ) -> from ( $this -> labelentity , 'table' );
2019-07-23 15:32:35 +02:00
if ( $access == " user " ) {
$qb -> from ( " CadolesCoreBundle:UserGroup " , " ug " )
-> andWhere (( " table.fgcanshare=:flag " ))
-> andWhere ( " table.id=ug.group " )
-> andWhere ( " :user=ug.user " )
2019-07-23 16:33:41 +02:00
-> leftJoin ( 'CadolesCoreBundle:User' , 'u' , 'WITH' , 'table.owner = u.id' )
2019-07-23 15:32:35 +02:00
-> setParameter ( " flag " , true )
-> setParameter ( " user " , $this -> getUser ());
}
2018-12-18 09:44:39 +01:00
if ( $search [ " value " ] != " " ) {
2019-07-23 15:32:35 +02:00
$qb -> andwhere ( 'table.label LIKE :value' )
2018-12-18 09:44:39 +01:00
-> setParameter ( " value " , " % " . $search [ " value " ] . " % " );
}
switch ( $order [ 0 ][ " column " ]) {
case 1 :
$qb -> orderBy ( 'table.label' , $order [ 0 ][ " dir " ]);
break ;
case 2 :
$qb -> orderBy ( 'table.fgopen' , $order [ 0 ][ " dir " ]);
2019-04-05 11:52:31 +02:00
break ;
2019-05-07 13:49:42 +02:00
case 4 :
2019-04-05 11:52:31 +02:00
$qb -> orderBy ( 'table.fgcanshare' , $order [ 0 ][ " dir " ]);
2019-07-23 16:33:41 +02:00
break ;
2019-05-07 13:49:42 +02:00
case 5 :
2019-07-23 16:33:41 +02:00
$qb -> orderBy ( 'u.username' , $order [ 0 ][ " dir " ]);
break ;
case 6 :
2019-05-07 13:49:42 +02:00
$qb -> orderBy ( 'table.fgcancreatepage' , $order [ 0 ][ " dir " ]);
break ;
2019-07-23 16:33:41 +02:00
case 7 :
2019-05-07 13:49:42 +02:00
$qb -> orderBy ( 'table.fgcancreatecalendar' , $order [ 0 ][ " dir " ]);
break ;
2019-07-23 16:33:41 +02:00
case 8 :
2019-05-07 13:49:42 +02:00
$qb -> orderBy ( 'table.fgcancreateblog' , $order [ 0 ][ " dir " ]);
break ;
2018-12-18 09:44:39 +01:00
}
$datas = $qb -> setFirstResult ( $start ) -> setMaxResults ( $length ) -> getQuery () -> getResult ();
foreach ( $datas as $data ) {
$action = " " ;
2019-05-07 13:49:42 +02:00
2019-07-23 15:32:35 +02:00
if ( $access == " config " ) {
// Modification possible si groupe non template et non tout le monde
if ( ! $data -> getFgTemplate () && ! $data -> getFgall ())
$action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_config_group_update' , array ( 'id' => $data -> getId ())) . " '><i class='fa fa-file fa-2x fa-fw'></i></a> " ;
// Modification possible si groupe template mais avec module portail activé
elseif ( $data -> getFgTemplate () && $portal_activate )
$action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_config_group_update' , array ( 'id' => $data -> getId ())) . " '><i class='fa fa-file fa-2x fa-fw'></i></a> " ;
// Modification possible si groupe tout le monde mais avec module portail activé
elseif ( $data -> getFgall () && $portal_activate )
$action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_config_group_update' , array ( 'id' => $data -> getId ())) . " '><i class='fa fa-file fa-2x fa-fw'></i></a> " ;
if ( $data -> getId () > 0 &&! $data -> getFgall () &&! $data -> getFgTemplate () && $this -> isGranted ( 'ROLE_ADMIN' )) $action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_config_group_delete' , array ( 'id' => $data -> getId ())) . " '><i class='fa fa-trash fa-fw fa-2x'></i></a> " ;
if ( ! $data -> getFgall ()) $action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_config_group_users' , array ( 'id' => $data -> getId ())) . " '><i class='fa fa-users fa-2x fa-fw'></i></a> " ;
}
else {
$fgproprio = ( $user == $data -> getOwner ());
$fgmanager = $this -> getDoctrine () -> getRepository ( " CadolesCoreBundle:UserGroup " ) -> findOneBy ([ " user " => $this -> getUser (), " group " => $data ]) -> getFgmanager ();
// Modification possible uniquement si l'utilisateur est propriétaire du groupe
if ( $fgproprio ) {
$action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_' . $access . '_group_update' , array ( 'id' => $data -> getId ())) . " '><i class='fa fa-file fa-2x fa-fw'></i></a> " ;
$action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_' . $access . '_group_delete' , array ( 'id' => $data -> getId ())) . " '><i class='fa fa-trash fa-2x fa-fw'></i></a> " ;
}
// Gestion des utilisateurs du groupe uniquement pour le proprio ou les managers
if ( $fgproprio || $fgmanager ) {
$action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_' . $access . '_group_users' , array ( 'id' => $data -> getId ())) . " '><i class='fa fa-users fa-2x fa-fw'></i></a> " ;
}
2019-07-23 16:33:41 +02:00
else {
$action .= " <a href=' " . $this -> generateUrl ( 'cadoles_core_' . $access . '_group_out' , array ( 'id' => $data -> getId ())) . " ' data-method='out'><i class='fa fa-sign-out fa-fw fa-2x'></i></a> " ;
}
2019-07-23 15:32:35 +02:00
}
2019-05-07 13:49:42 +02:00
2019-05-02 11:25:55 +02:00
$filtre = " " ;
if ( $this -> GetParameter ( " masteridentity " ) == " LDAP " ) $filtre = $data -> getLdapfilter ();
if ( $this -> GetParameter ( " masteridentity " ) == " SSO " ) $filtre = $data -> getAttributes ();
2019-07-24 14:09:02 +02:00
$userinfo = " " ;
2019-07-23 16:33:41 +02:00
if ( $data -> getOwner ()) {
2019-07-24 14:09:02 +02:00
$userinfo .= " <img src='/ " . $this -> container -> getParameter ( 'alias' ) . " /uploads/avatar/ " . $data -> getOwner () -> getAvatar () . " ' class='avatar' style='margin:0px 5px 0px 0px;display:inline-block;'> " ;
$userinfo .= $data -> getOwner () -> getUsername ();
2019-07-23 16:33:41 +02:00
}
2019-05-07 13:49:42 +02:00
array_push ( $output [ " data " ], array (
$action ,
$data -> getLabel (),
( $data -> getFgopen () ? " oui " : " non " ),
$filtre ,
( $data -> getFgcanshare () ? " oui " : " non " ),
2019-07-24 14:09:02 +02:00
$userinfo ,
2019-05-07 13:49:42 +02:00
( $data -> getFgcancreatepage () ? " oui " : " non " ),
( $data -> getFgcancreatecalendar () ? " oui " : " non " ),
( $data -> getFgcancreateblog () ? " oui " : " non " ),
)
);
2018-12-18 09:44:39 +01:00
}
// Retour
return new Response ( json_encode ( $output ), 200 );
}
2019-07-23 15:32:35 +02:00
public function ajaxusersnotinAction ( $id , Request $request , $access = " config " )
2018-12-18 09:44:39 +01:00
{
// S'assurer que c'est un appel ajax
if ( ! $request -> isXmlHttpRequest ()) {
return new JsonResponse ( array ( 'message' => 'Interdit' ), 400 );
}
$em = $this -> getDoctrine () -> getManager ();
2019-03-12 14:50:57 +01:00
$group = $this -> getData ( $id );
2018-12-18 09:44:39 +01:00
$sub = $em -> createQueryBuilder ();
$sub -> select ( " usergroup " );
$sub -> from ( " CadolesCoreBundle:UserGroup " , " usergroup " );
$sub -> andWhere ( 'usergroup.user = user.id' );
$sub -> andWhere ( 'usergroup.group = :groupid' );
$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' );
// Nombre total d'enregistrement
$qb = $em -> createQueryBuilder ();
2019-07-23 15:32:35 +02:00
if ( $this -> isGranted ( 'ROLE_ADMIN' ) || $access == " user " )
2018-12-18 09:44:39 +01:00
$qb -> select ( 'COUNT(user)' )
-> from ( 'CadolesCoreBundle:User' , 'user' )
-> where ( $qb -> expr () -> not ( $qb -> expr () -> exists ( $sub -> getDQL ())))
-> setParameter ( " groupid " , $id );
else {
$usermodo = $this -> get ( 'security.token_storage' ) -> getToken () -> getUser () -> getId ();
$qb -> select ( 'COUNT(user)' )
-> from ( 'CadolesCoreBundle:User' , 'user' )
-> from ( 'CadolesCoreBundle:UserModo' , 'usermodo' )
-> where ( $qb -> expr () -> not ( $qb -> expr () -> exists ( $sub -> getDQL ())))
-> andWhere ( " usermodo.niveau01 = user.niveau01 " )
-> andWhere ( " usermodo.user = :userid " )
-> setParameter ( " userid " , $usermodo )
-> setParameter ( " groupid " , $id );
}
$total = $qb -> getQuery () -> getSingleScalarResult ();
// Nombre d'enregistrement filtré
if ( $search [ " value " ] == " " )
$totalf = $total ;
else {
2019-07-23 15:32:35 +02:00
if ( $this -> isGranted ( 'ROLE_ADMIN' ) || $access == " user " )
2018-12-18 09:44:39 +01:00
$totalf = $em -> createQueryBuilder ()
-> select ( 'COUNT(user)' )
-> from ( 'CadolesCoreBundle:User' , 'user' )
-> where ( 'user.username LIKE :value OR user.email LIKE :value' )
-> andWhere ( $qb -> expr () -> not ( $qb -> expr () -> exists ( $sub -> getDQL ())))
-> setParameter ( " value " , " % " . $search [ " value " ] . " % " )
-> setParameter ( " groupid " , $id )
-> getQuery ()
-> getSingleScalarResult ();
else
$totalf = $em -> createQueryBuilder ()
-> select ( 'COUNT(user)' )
-> from ( 'CadolesCoreBundle:User' , 'user' )
-> from ( 'CadolesCoreBundle:UserModo' , 'usermodo' )
-> where ( 'user.username LIKE :value OR user.email LIKE :value' )
-> andWhere ( $qb -> expr () -> not ( $qb -> expr () -> exists ( $sub -> getDQL ())))
-> andWhere ( " usermodo.niveau01 = user.niveau01 " )
-> andWhere ( " usermodo.user = :userid " )
-> setParameter ( " userid " , $usermodo )
-> setParameter ( " value " , " % " . $search [ " value " ] . " % " )
-> setParameter ( " groupid " , $id )
-> getQuery ()
-> getSingleScalarResult ();
}
// Construction du tableau de retour
$output = array (
'draw' => $draw ,
'recordsFiltered' => $totalf ,
'recordsTotal' => $total ,
'data' => array (),
);
// Parcours des Enregistrement
$qb = $em -> createQueryBuilder ();
$qb -> select ( 'user' ) -> from ( " CadolesCoreBundle:User " , 'user' );
2019-07-23 15:32:35 +02:00
if ( $this -> isGranted ( 'ROLE_ADMIN' ) || $access == " user " )
2018-12-18 09:44:39 +01:00
$qb -> where ( $qb -> expr () -> not ( $qb -> expr () -> exists ( $sub -> getDQL ())));
else
$qb -> from ( 'CadolesCoreBundle:UserModo' , 'usermodo' )
-> where ( $qb -> expr () -> not ( $qb -> expr () -> exists ( $sub -> getDQL ())))
-> andWhere ( " usermodo.niveau01 = user.niveau01 " )
-> andWhere ( " usermodo.user = :userid " )
-> setParameter ( " userid " , $usermodo );
if ( $search [ " value " ] != " " ) {
$qb -> andWhere ( 'user.username LIKE :value OR user.email LIKE :value' )
-> setParameter ( " value " , " % " . $search [ " value " ] . " % " );
}
$qb -> setParameter ( " groupid " , $id );
switch ( $order [ 0 ][ " column " ]) {
case 2 :
$qb -> orderBy ( 'user.username' , $order [ 0 ][ " dir " ]);
break ;
case 3 :
$qb -> orderBy ( 'user.email' , $order [ 0 ][ " dir " ]);
break ;
}
$datas = $qb -> setFirstResult ( $start ) -> setMaxResults ( $length ) -> getQuery () -> getResult ();
foreach ( $datas as $data ) {
// Action
$action = " " ;
2019-03-12 14:50:57 +01:00
if ( $group -> getLdapfilter () == " " && $group -> getAttributes () == " " )
$action .= " <a style='cursor:pointer' onClick='addUsers( " . $data -> getId () . " )'><i class='fa fa-plus fa-fw'></i></a> " ;
2019-07-09 16:21:05 +02:00
$fgmanager = " <input type='checkbox' class='switch' onChange='switchManager( " . $data -> getId () . " );'> " ;
2018-12-18 09:44:39 +01:00
// Avatar
$avatar = " <img src='/ " . $this -> container -> getParameter ( 'alias' ) . " /uploads/avatar/ " . $data -> getAvatar () . " ' style='width:30px;background-color:#337ab7;margin:auto;display:block;'> " ;
2019-07-09 16:21:05 +02:00
array_push ( $output [ " data " ], array ( " DT_RowId " => " user " . $data -> getId (), $action , $avatar , $data -> getUsername (), $data -> getEmail (), $fgmanager ));
2018-12-18 09:44:39 +01:00
}
// Retour
return new Response ( json_encode ( $output ), 200 );
}
2019-07-23 15:32:35 +02:00
public function ajaxusersinAction ( $id , Request $request , $access = " config " )
2018-12-18 09:44:39 +01:00
{
// S'assurer que c'est un appel ajax
if ( ! $request -> isXmlHttpRequest ()) {
return new JsonResponse ( array ( 'message' => 'Interdit' ), 400 );
}
$em = $this -> getDoctrine () -> getManager ();
2019-03-12 14:50:57 +01:00
$group = $this -> getData ( $id );
2018-12-18 09:44:39 +01:00
$sub = $em -> createQueryBuilder ();
$sub -> select ( " usergroup " );
$sub -> from ( " CadolesCoreBundle:UserGroup " , " usergroup " );
$sub -> andWhere ( 'usergroup.user = user.id' );
$sub -> andWhere ( 'usergroup.group = :groupid' );
$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' );
2019-07-04 16:11:50 +02:00
$fgcanshare = $request -> query -> get ( 'fgcanshare' );
2018-12-18 09:44:39 +01:00
// Nombre total d'enregistrement
$qb = $em -> createQueryBuilder ();
2019-07-23 15:32:35 +02:00
if ( $this -> isGranted ( 'ROLE_ADMIN' ) || $access == " user " )
2018-12-18 09:44:39 +01:00
$qb -> select ( 'COUNT(user)' )
-> from ( 'CadolesCoreBundle:User' , 'user' )
-> where ( $qb -> expr () -> exists ( $sub -> getDQL ()))
-> setParameter ( " groupid " , $id );
else {
$usermodo = $this -> get ( 'security.token_storage' ) -> getToken () -> getUser () -> getId ();
$qb -> select ( 'COUNT(user)' )
-> from ( 'CadolesCoreBundle:User' , 'user' )
-> from ( 'CadolesCoreBundle:UserModo' , 'usermodo' )
-> where ( $qb -> expr () -> exists ( $sub -> getDQL ()))
-> andWhere ( " usermodo.niveau01 = user.niveau01 " )
-> andWhere ( " usermodo.user = :userid " )
-> setParameter ( " userid " , $usermodo )
-> setParameter ( " groupid " , $id );
}
$total = $qb -> getQuery () -> getSingleScalarResult ();
// Nombre d'enregistrement filtré
if ( $search [ " value " ] == " " )
$totalf = $total ;
else {
2019-07-23 15:32:35 +02:00
if ( $this -> isGranted ( 'ROLE_ADMIN' ) || $access == " user " )
2018-12-18 09:44:39 +01:00
$totalf = $em -> createQueryBuilder ()
-> select ( 'COUNT(user)' )
-> from ( 'CadolesCoreBundle:User' , 'user' )
-> where ( 'user.username LIKE :value OR user.email LIKE :value' )
-> andWhere ( $qb -> expr () -> exists ( $sub -> getDQL ()))
-> setParameter ( " value " , " % " . $search [ " value " ] . " % " )
-> setParameter ( " groupid " , $id )
-> getQuery ()
-> getSingleScalarResult ();
else
$totalf = $em -> createQueryBuilder ()
-> select ( 'COUNT(user)' )
-> from ( 'CadolesCoreBundle:User' , 'user' )
-> from ( 'CadolesCoreBundle:UserModo' , 'usermodo' )
-> where ( 'user.username LIKE :value OR user.email LIKE :value' )
-> andWhere ( $qb -> expr () -> exists ( $sub -> getDQL ()))
-> andWhere ( " usermodo.niveau01 = user.niveau01 " )
-> andWhere ( " usermodo.user = :userid " )
-> setParameter ( " userid " , $usermodo )
-> setParameter ( " value " , " % " . $search [ " value " ] . " % " )
-> setParameter ( " groupid " , $id )
-> getQuery ()
-> getSingleScalarResult ();
}
// Construction du tableau de retour
$output = array (
'draw' => $draw ,
'recordsFiltered' => $totalf ,
'recordsTotal' => $total ,
'data' => array (),
);
// Parcours des Enregistrement
$qb = $em -> createQueryBuilder ();
$qb -> select ( 'user' ) -> from ( " CadolesCoreBundle:User " , 'user' );
2019-07-23 15:32:35 +02:00
if ( $this -> isGranted ( 'ROLE_ADMIN' ) || $access == " user " )
2018-12-18 09:44:39 +01:00
$qb -> where ( $qb -> expr () -> exists ( $sub -> getDQL ()));
else
$qb -> from ( 'CadolesCoreBundle:UserModo' , 'usermodo' )
-> where ( $qb -> expr () -> exists ( $sub -> getDQL ()))
-> andWhere ( " usermodo.niveau01 = user.niveau01 " )
-> andWhere ( " usermodo.user = :userid " )
-> setParameter ( " userid " , $usermodo );
if ( $search [ " value " ] != " " ) {
$qb -> andWhere ( 'user.username LIKE :value OR user.email LIKE :value' )
-> setParameter ( " value " , " % " . $search [ " value " ] . " % " );
}
$qb -> setParameter ( " groupid " , $id );
switch ( $order [ 0 ][ " column " ]) {
case 2 :
$qb -> orderBy ( 'user.username' , $order [ 0 ][ " dir " ]);
break ;
case 3 :
$qb -> orderBy ( 'user.email' , $order [ 0 ][ " dir " ]);
break ;
}
$datas = $qb -> setFirstResult ( $start ) -> setMaxResults ( $length ) -> getQuery () -> getResult ();
foreach ( $datas as $data ) {
2019-07-23 15:32:35 +02:00
// Propriétaire
$usergroup = $em -> getRepository ( " CadolesCoreBundle:UserGroup " ) -> findOneBy ([ " user " => $data -> getId (), " group " => $id ]);
$fgproprio = ( $usergroup -> getUser () == $group -> getOwner ());
2018-12-18 09:44:39 +01:00
// Action
$action = " " ;
2019-07-23 15:32:35 +02:00
if ( $group -> getLdapfilter () == " " && $group -> getAttributes () == " " &&! $fgproprio )
2019-03-12 14:50:57 +01:00
$action .= " <a style='cursor:pointer' onClick='delUsers( " . $data -> getId () . " )'><i class='fa fa-minus fa-fw'></i></a> " ;
2018-12-18 09:44:39 +01:00
// Avatar
$avatar = " <img src='/ " . $this -> container -> getParameter ( 'alias' ) . " /uploads/avatar/ " . $data -> getAvatar () . " ' style='width:30px;background-color:#337ab7;margin:auto;display:block;'> " ;
2019-07-04 16:11:50 +02:00
// Flag manager
$fgmanager = " " ;
if ( $fgcanshare ) {
2019-07-23 15:32:35 +02:00
2019-07-04 16:11:50 +02:00
$checked = ( $usergroup -> getFgmanager () ? " checked " : " " );
$fgmanager = " <input type='checkbox' class='switch' onChange='switchManager( " . $data -> getId () . " );' $checked > " ;
2019-07-23 15:32:35 +02:00
if ( $fgproprio ) $fgmanager = " Propriétaire du groupe " ;
2019-07-04 16:11:50 +02:00
}
2018-12-18 09:44:39 +01:00
2019-07-04 16:11:50 +02:00
array_push ( $output [ " data " ], array ( " DT_RowId " => " user " . $data -> getId (), $action , $avatar , $data -> getUsername (), $data -> getEmail (), $fgmanager ));
2018-12-18 09:44:39 +01:00
}
// Retour
return new Response ( json_encode ( $output ), 200 );
}
2019-07-23 15:32:35 +02:00
public function usergroupaddAction ( Request $request , $access = " config " )
2018-12-18 09:44:39 +01:00
{
// 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 ( 'userid' );
$groupid = $request -> request -> get ( 'groupid' );
2019-03-12 14:50:57 +01:00
$group = $em -> getRepository ( " CadolesCoreBundle:Group " ) -> find ( $groupid );
if ( $group -> getFgAll () || $group -> getFgtemplate ())
throw $this -> createNotFoundException ( 'Permission denied' );
2019-07-23 15:32:35 +02:00
$key = Uuid :: uuid4 ();
2018-12-18 09:44:39 +01:00
$usergroup = new Usergroup ;
2019-07-23 15:32:35 +02:00
$user = $em -> getRepository ( " CadolesCoreBundle:User " ) -> find ( $userid );
$usergroup -> setUser ( $user );
2019-03-12 14:50:57 +01:00
$usergroup -> setGroup ( $group );
2019-07-23 15:32:35 +02:00
$usergroup -> setKeyvalue ( $key );
2018-12-18 09:44:39 +01:00
$em -> persist ( $usergroup );
$em -> flush ();
2019-07-23 15:32:35 +02:00
$user = $em -> getRepository ( " CadolesCoreBundle:User " ) -> find ( $userid );
$message = " Inscription de l'utilisateur<br> " . $user -> getLastname () . " " . $user -> getFirstname () . " <br>Par " . $this -> getUser () -> getLastname () . " " . $this -> getUser () -> getFirstname ();
$websocket = $this -> container -> get ( 'cadoles.websocket.pushmessage' ) -> send ( $key -> toString (), $userid , $groupid , $message );
2018-12-18 09:44:39 +01:00
$response = new Response ( json_encode ( $output ));
$response -> headers -> set ( 'Content-Type' , 'application/json' );
return $response ;
}
2019-07-23 15:32:35 +02:00
public function usergroupdelAction ( Request $request , $access = " config " )
2018-12-18 09:44:39 +01:00
{
// 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 ( 'userid' );
$groupid = $request -> request -> get ( 'groupid' );
2019-03-12 14:50:57 +01:00
$group = $em -> getRepository ( " CadolesCoreBundle:Group " ) -> find ( $groupid );
if ( $group -> getFgAll () || $group -> getFgTemplate ())
throw $this -> createNotFoundException ( 'Permission denied' );
2018-12-18 09:44:39 +01:00
$data = $em -> getRepository ( " CadolesCoreBundle:Usergroup " ) -> findOneBy ( array ( " user " => $userid , " group " => $groupid ));
2019-07-23 15:32:35 +02:00
$user = $em -> getRepository ( " CadolesCoreBundle:User " ) -> find ( $userid );
$message = " Désinscription de l'utilisateur<br> " . $user -> getLastname () . " " . $user -> getFirstname () . " <br>Par " . $this -> getUser () -> getLastname () . " " . $this -> getUser () -> getFirstname ();;
$websocket = $this -> container -> get ( 'cadoles.websocket.pushmessage' ) -> send ( $data -> getKeyvalue (), $userid , $groupid , $message );
2018-12-18 09:44:39 +01:00
$em -> remove ( $data );
$em -> flush ();
2019-07-23 15:32:35 +02:00
2018-12-18 09:44:39 +01:00
$response = new Response ( json_encode ( $output ));
$response -> headers -> set ( 'Content-Type' , 'application/json' );
return $response ;
}
2019-07-23 16:33:41 +02:00
public function outAction ( Request $request , $id , $access = " config " )
{
$em = $this -> getDoctrine () -> getManager ();
$group = $em -> getRepository ( " CadolesCoreBundle:Group " ) -> find ( $id );
if ( $group -> getFgAll () || $group -> getFgTemplate ())
throw $this -> createNotFoundException ( 'Permission denied' );
$usergroup = $em -> getRepository ( " CadolesCoreBundle:Usergroup " ) -> findOneBy ( array ( " user " => $this -> getUser (), " group " => $id ));
$user = $em -> getRepository ( " CadolesCoreBundle:User " ) -> find ( $this -> getUser ());
$message = " Désinscription de l'utilisateur<br> " . $user -> getLastname () . " " . $user -> getFirstname () . " <br>Par " . $this -> getUser () -> getLastname () . " " . $this -> getUser () -> getFirstname ();;
$websocket = $this -> container -> get ( 'cadoles.websocket.pushmessage' ) -> send ( $usergroup -> getKeyvalue (), $this -> getUser () -> getId (), $id , $message );
$em -> remove ( $usergroup );
$em -> flush ();
return $this -> redirect ( $this -> generateUrl ( " cadoles_core_user_group " ));
}
2019-07-23 15:32:35 +02:00
public function switchmanagerAction ( Request $request , $access = " config " )
2019-07-04 16:11:50 +02:00
{
// 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 " )
2018-12-18 09:44:39 +01:00
{
2019-07-04 16:11:50 +02:00
$em = $this -> getDoctrine () -> getManager ();
2018-12-18 09:44:39 +01:00
// Initialisation de l'enregistrement
$data = new Group ();
2019-05-02 11:25:55 +02:00
$data -> setFgopen ( false );
2019-07-23 15:32:35 +02:00
$data -> setFgcanshare (( $access == " user " ));
2019-07-04 16:11:50 +02:00
$data -> setFgcancreatepage ( false );
$data -> setFgcancreatecalendar ( false );
$data -> setFgcancreateblog ( false );
2019-07-23 15:32:35 +02:00
if ( $access == " user " ) $data -> setOwner ( $this -> getUser ());
2018-12-18 09:44:39 +01:00
// Création du formulaire
2019-05-07 13:49:42 +02:00
$form = $this -> createForm ( GroupType :: class , $data , array (
" mode " => " submit " ,
2019-07-23 15:32:35 +02:00
" fgall " => false ,
2019-05-07 13:49:42 +02:00
" updatelimite " => false ,
2019-07-23 15:32:35 +02:00
" access " => $access ,
2019-05-07 13:49:42 +02:00
" masteridentity " => $this -> GetParameter ( " masteridentity " ),
" portal_activate " => $this -> getParameter ( " portal_activate " )
)
);
2018-12-18 09:44:39 +01:00
// Récupération des data du formulaire
$form -> handleRequest ( $request );
// Sur erreur
$this -> getErrorForm ( null , $form , $request , $data , " submit " );
// Sur validation
if ( $form -> get ( 'submit' ) -> isClicked () && $form -> isValid ()) {
$data = $form -> getData ();
$data -> setFgall ( false );
2019-03-12 14:50:57 +01:00
$data -> setFgtemplate ( false );
if ( $data -> getLdapfilter () != " " ) $data -> setFgopen ( false );
if ( $data -> getAttributes () != " " ) $data -> setFgopen ( false );
2019-07-04 16:11:50 +02:00
// Icon
$idicon = $form -> get ( 'idicon' ) -> getData ();
$icon = $em -> getRepository ( " CadolesPortalBundle:Icon " ) -> findoneby ([ " id " => $idicon ]);
$data -> setIcon ( $icon );
2018-12-18 09:44:39 +01:00
// Sauvegarde
$em -> persist ( $data );
$em -> flush ();
2019-07-23 15:32:35 +02:00
// Si acces par user on ajoute forcement le owner comme membre du groupe en tant que manager
if ( $access == " user " ) {
$key = Uuid :: uuid4 ();
$usergroup = new Usergroup ;
$usergroup -> setUser ( $this -> getUser ());
$usergroup -> setGroup ( $data );
$usergroup -> setFgmanager ( true );
$usergroup -> setKeyvalue ( $key );
$em -> persist ( $usergroup );
$em -> flush ();
}
2019-07-04 16:11:50 +02:00
// On s'assure que le groupe de travail à bien page d'accueil / calendrier / blog associé
// Sinon on les génère
2019-07-23 15:32:35 +02:00
$this -> ctrlFgcanshare ( $data , $access );
2019-07-04 16:11:50 +02:00
2018-12-18 09:44:39 +01:00
// Retour à la liste
2019-07-23 15:32:35 +02:00
return $this -> redirectToRoute ( " cadoles_core_ " . $access . " _group_users " ,[ " id " => $data -> getId ()]);
2018-12-18 09:44:39 +01:00
}
// Affichage du formulaire
2019-07-04 16:11:50 +02:00
$icons = $this -> getDoctrine () -> getRepository ( " CadolesPortalBundle:Icon " ) -> findBy ([ " user " => null ]);
$iconsuser = null ;
if ( $access == " user " ) $iconsuser = $this -> getDoctrine () -> getRepository ( " CadolesPortalBundle:Icon " ) -> findBy ([ " user " => $this -> getUser ()]);
2019-03-21 17:15:06 +01:00
return $this -> render ( $this -> labelentity . ':edit.html.twig' , [
'useheader' => true ,
'usemenu' => false ,
2019-07-23 15:32:35 +02:00
'usesidebar' => ( $access == " config " ),
2018-12-18 09:44:39 +01:00
$this -> labeldata => $data ,
'mode' => 'submit' ,
2019-07-23 15:32:35 +02:00
'access' => $access ,
2019-07-04 16:11:50 +02:00
'icons' => $icons ,
'iconsuser' => $iconsuser ,
2018-12-18 09:44:39 +01:00
'form' => $form -> createView ()
2019-03-21 17:15:06 +01:00
]);
2018-12-18 09:44:39 +01:00
}
2019-07-04 16:11:50 +02:00
public function updateAction ( $id , Request $request , $access = " config " )
2018-12-18 09:44:39 +01:00
{
// Récupération de l'enregistrement courant
2019-07-04 16:11:50 +02:00
$em = $this -> getDoctrine () -> getManager ();
2018-12-18 09:44:39 +01:00
$data = $this -> getData ( $id );
2019-03-12 14:50:57 +01:00
2018-12-18 09:44:39 +01:00
// Création du formulaire
2019-05-07 13:49:42 +02:00
$form = $this -> createForm ( GroupType :: class , $data , array (
2019-07-04 16:11:50 +02:00
" mode " => " update " ,
2019-07-23 15:32:35 +02:00
" access " => $access ,
" fgall " => $data -> getFgAll (),
2019-07-04 16:11:50 +02:00
" updatelimite " => ( $data -> getFgAll () || $data -> getFgTemplate ()),
" masteridentity " => $this -> GetParameter ( " masteridentity " ),
" portal_activate " => $this -> getParameter ( " portal_activate " ),
" idicon " => ( $data -> getIcon () ? $data -> getIcon () -> getId () : null ),
2019-05-07 13:49:42 +02:00
)
);
2018-12-18 09:44:39 +01:00
// Récupération des data du formulaire
$form -> handleRequest ( $request );
// Sur erreur
$this -> getErrorForm ( $id , $form , $request , $data , " update " );
// Sur validation
if ( $form -> get ( 'submit' ) -> isClicked () && $form -> isValid ()) {
$data = $form -> getData ();
2019-03-12 14:50:57 +01:00
2019-07-04 16:11:50 +02:00
$masteridentity = $this -> GetParameter ( " masteridentity " );
2019-03-12 14:50:57 +01:00
if ( $masteridentity != " LDAP " ) $data -> setLdapfilter ( null );
if ( $masteridentity != " SSO " ) $data -> setAttributes ( null );
if ( $data -> getLdapfilter () != " " ) $data -> setFgopen ( false );
if ( $data -> getAttributes () != " " ) $data -> setFgopen ( false );
2019-06-13 09:09:21 +02:00
2019-07-04 16:11:50 +02:00
// Icon
$idicon = $form -> get ( 'idicon' ) -> getData ();
$icon = $this -> getDoctrine () -> getRepository ( " CadolesPortalBundle:Icon " ) -> findoneby ([ " id " => $idicon ]);
$data -> setIcon ( $icon );
2018-12-18 09:44:39 +01:00
// Sauvegarde
$em -> persist ( $data );
$em -> flush ();
2019-07-04 16:11:50 +02:00
// On s'assure que le groupe de travail à bien page d'accueil / calendrier / blog associé
// Sinon on les génère
2019-07-23 15:32:35 +02:00
$this -> ctrlFgcanshare ( $data , $access );
2019-07-04 16:11:50 +02:00
2018-12-18 09:44:39 +01:00
// Retour à la liste
2019-07-23 15:32:35 +02:00
return $this -> redirectToRoute ( " cadoles_core_ " . $access . " _group " );
2018-12-18 09:44:39 +01:00
}
2019-07-04 16:11:50 +02:00
$icons = $em -> getRepository ( " CadolesPortalBundle:Icon " ) -> findBy ([ " user " => null ]);
$iconsuser = null ;
2019-07-23 15:32:35 +02:00
if ( $access == " user " ) $iconsuser = $em -> getRepository ( " CadolesPortalBundle:Icon " ) -> findBy ([ " user " => $this -> getUser ()]);
2019-07-04 16:11:50 +02:00
2018-12-18 09:44:39 +01:00
// Affichage du formulaire
2019-03-21 17:15:06 +01:00
return $this -> render ( $this -> labelentity . ':edit.html.twig' , [
'useheader' => true ,
'usemenu' => false ,
2019-07-23 15:32:35 +02:00
'usesidebar' => ( $access == " config " ),
2018-12-18 09:44:39 +01:00
$this -> labeldata => $data ,
'mode' => 'update' ,
2019-07-04 16:11:50 +02:00
'access' => $access ,
'icons' => $icons ,
'iconsuser' => $iconsuser ,
2018-12-18 09:44:39 +01:00
'form' => $form -> createView ()
2019-03-21 17:15:06 +01:00
]);
2018-12-18 09:44:39 +01:00
}
2019-07-23 15:32:35 +02:00
public function deleteAction ( $id , Request $request , $access = " config " )
2018-12-18 09:44:39 +01:00
{
2019-07-23 15:32:35 +02:00
$em = $this -> getDoctrine () -> getManager ();
2018-12-18 09:44:39 +01:00
// Seule role admin peut supprimer un groupe
2019-07-23 15:32:35 +02:00
if ( $access == " config " &&! $this -> isGranted ( 'ROLE_ADMIN' ))
2018-12-18 09:44:39 +01:00
return $this -> redirectToRoute ( $this -> labelroute );
// Récupération de l'enregistrement courant
$data = $this -> getData ( $id );
// Vérifier que cet enregistrement est supprimable
2019-03-12 14:50:57 +01:00
if ( $data -> getFgAll () || $data -> getFgTemplate ())
throw $this -> createNotFoundException ( 'Permission denied' );
2018-12-18 09:44:39 +01:00
// Création du formulaire
2019-05-07 13:49:42 +02:00
$form = $this -> createForm ( GroupType :: class , $data , array (
" mode " => " delete " ,
" updatelimite " => ( $data -> getFgAll () || $data -> getFgTemplate ()),
" masteridentity " => $this -> GetParameter ( " masteridentity " ),
" portal_activate " => $this -> getParameter ( " portal_activate " )
)
);
2018-12-18 09:44:39 +01:00
// Récupération des data du formulaire
$form -> handleRequest ( $request );
// Sur erreur
$this -> getErrorForm ( $id , $form , $request , $data , " delete " );
// Sur validation
if ( $form -> get ( 'submit' ) -> isClicked () && $form -> isValid ()) {
$em -> remove ( $data );
$em -> flush ();
2019-07-23 15:32:35 +02:00
return $this -> redirectToRoute ( " cadoles_core_ " . $access . " _group " );
2018-12-18 09:44:39 +01:00
}
2019-07-23 15:32:35 +02:00
$icons = $em -> getRepository ( " CadolesPortalBundle:Icon " ) -> findBy ([ " user " => null ]);
$iconsuser = null ;
if ( $access == " user " ) $iconsuser = $em -> getRepository ( " CadolesPortalBundle:Icon " ) -> findBy ([ " user " => $this -> getUser ()]);
2018-12-18 09:44:39 +01:00
// Affichage du formulaire
2019-03-21 17:15:06 +01:00
return $this -> render ( $this -> labelentity . ':edit.html.twig' , [
'useheader' => true ,
'usemenu' => false ,
2019-07-23 15:32:35 +02:00
'usesidebar' => ( $access == " config " ),
2018-12-18 09:44:39 +01:00
$this -> labeldata => $data ,
'mode' => 'delete' ,
2019-07-23 15:32:35 +02:00
'access' => $access ,
'icons' => $icons ,
'iconsuser' => $iconsuser ,
2018-12-18 09:44:39 +01:00
'form' => $form -> createView ()
2019-03-21 17:15:06 +01:00
]);
2018-12-18 09:44:39 +01:00
}
2019-07-23 15:32:35 +02:00
public function usersAction ( $id , Request $request , $access = " config " )
2018-12-18 09:44:39 +01:00
{
// Récupération de l'enregistrement courant
$data = $this -> getData ( $id );
// Affichage du formulaire
2019-03-21 17:15:06 +01:00
return $this -> render ( $this -> labelentity . ':users.html.twig' , [
'useheader' => true ,
'usemenu' => false ,
2019-07-23 15:32:35 +02:00
'usesidebar' => ( $access == " config " ),
'access' => $access ,
2018-12-18 09:44:39 +01:00
$this -> labeldata => $data
2019-03-21 17:15:06 +01:00
]);
2018-12-18 09:44:39 +01:00
}
2019-07-23 15:32:35 +02:00
protected function ctrlFgcanshare ( $group , $access ) {
2019-07-04 16:11:50 +02:00
$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 );
2019-07-26 15:03:32 +02:00
$page -> setName ( $group -> getLabel ());
2019-07-23 15:32:35 +02:00
if ( $access == " user " ) $page -> setUser ( $this -> getUser ());
2019-07-04 16:11:50 +02:00
$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 ();
2019-07-26 15:03:32 +02:00
$calendar -> setName ( $group -> getLabel ());
2019-07-04 16:11:50 +02:00
$calendar -> setKeyvalue ( $key );
$calendar -> addGroup ( $group );
$calendar -> setColor ( $group -> getColor ());
$calendar -> setType ( 0 );
2019-07-23 15:32:35 +02:00
if ( $access == " user " ) $calendar -> setUser ( $this -> getUser ());
2019-07-04 16:11:50 +02:00
$em -> persist ( $calendar );
$em -> flush ();
}
// On regarde s'il a au moins un blog
if ( $group -> getBlogs () -> isEmpty ()) {
$blog = new Blog ();
2019-07-26 15:03:32 +02:00
$blog -> setName ( $group -> getLabel ());
2019-07-04 16:11:50 +02:00
$blog -> addGroup ( $group );
2019-07-23 15:32:35 +02:00
if ( $access == " user " ) $blog -> setUser ( $this -> getUser ());
2019-07-04 16:11:50 +02:00
$em -> persist ( $blog );
$em -> flush ();
}
}
}
2018-12-18 09:44:39 +01:00
protected function getDatas ()
{
$em = $this -> getDoctrine () -> getManager ();
$datas = $em -> getRepository ( $this -> labelentity ) -> findAll ();
return $datas ;
}
protected function getData ( $id )
{
$em = $this -> getDoctrine () -> getManager ();
$data = $em -> getRepository ( $this -> labelentity ) -> find ( $id );
if ( ! $data ) {
throw $this -> createNotFoundException ( 'Unable to find ' . $this -> labeldata );
}
return $data ;
}
protected function getEntityBy ( $entity , $key , $value )
{
$em = $this -> getDoctrine () -> getManager ();
$datas = $em -> createQueryBuilder ()
-> select ( 'u' )
-> from ( $entity , 'u' )
-> where ( 'u.' . $key . '=:value' )
-> getQuery () -> setParameter ( " value " , $value )
-> getResult ();
if ( ! $datas ) return false ;
else return true ;
}
protected function getErrorForm ( $id , $form , $request , $data , $mode ) {
if ( $form -> get ( 'submit' ) -> isClicked () && $mode == " delete " ) {
}
if ( $form -> get ( 'submit' ) -> isClicked () && ( $mode == " submit " || $mode == " update " )) {
$tmp = $this -> getEntityBy ( " CadolesCoreBundle:Niveau01 " , " label " , $data -> getLabel ());
if ( $tmp ) $form -> addError ( new FormError ( 'Un niveau de rang 01 utilise déjà ce label' ));
$tmp = $this -> getEntityBy ( " CadolesCoreBundle:Niveau02 " , " label " , $data -> getLabel ());
if ( $tmp ) $form -> addError ( new FormError ( 'Un niveau de rang 02 utilise déjà ce label' ));
2019-07-04 16:11:50 +02:00
if ( $data -> getFgcanshare () && is_null ( $data -> getPagetemplate ()))
$form -> addError ( new FormError ( " Un groupe de travail doit avoir un modèle de page d'accueil " ));
2018-12-18 09:44:39 +01:00
}
if ( $form -> get ( 'submit' ) -> isClicked () && ! $form -> isValid ()) {
$this -> get ( 'session' ) -> getFlashBag () -> clear ();
$validator = $this -> get ( 'validator' );
$errors = $validator -> validate ( $data );
foreach ( $errors as $error ) {
$request -> getSession () -> getFlashBag () -> add ( " error " , $error -> getMessage ());
}
$errors = $form -> getErrors ();
foreach ( $errors as $error ) {
$request -> getSession () -> getFlashBag () -> add ( " error " , $error -> getMessage ());
}
}
}
}