src/Repository/AccessRepository.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  4. use Doctrine\Persistence\ManagerRegistry;
  5. use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
  6. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  7. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  8. use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. use App\Entity\Access;
  11. use App\Services\LogTools;
  12. /**
  13.  * @extends ServiceEntityRepository<Access>
  14.  *
  15.  * @method Access|null find($id, $lockMode = null, $lockVersion = null)
  16.  * @method Access|null findOneBy(array $criteria, array $orderBy = null)
  17.  * @method Access[]    findAll()
  18.  * @method Access[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  19.  */
  20. class AccessRepository extends ServiceEntityRepository implements PasswordUpgraderInterfaceUserLoaderInterface
  21. {
  22.     public function __construct(ManagerRegistry $registryLogTools $logTools)
  23.     {
  24.         parent::__construct($registryAccess::class);
  25.         $this->logTools $logTools;
  26.     }
  27.     /**
  28.      * Used to upgrade (rehash) the user's password automatically over time.
  29.      */
  30.     public function upgradePassword(PasswordAuthenticatedUserInterface $userstring $newHashedPassword): void
  31.     {
  32.         if (!$user instanceof Access) {
  33.             throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.'\get_class($user)));
  34.         }
  35.         $user->setPassword($newHashedPassword);
  36.         $this->add($usertrue);
  37.     }
  38.     public function getForIdList($idList)
  39.     {
  40.         $query $this
  41.             ->createQueryBuilder('object')
  42.             ->where('object.id in '.$idList);
  43.         return $query->getQuery()->getResult();
  44.     }
  45.     // Access::username no longer exists
  46.     // So use the email instead
  47.     public function findOneByUsername($username)
  48.     {
  49.        return $this->createQueryBuilder('access')
  50.            ->andWhere('access.email = :username')
  51.            ->setParameter('username'$username)
  52.            ->setMaxResults(1)
  53.            ->getQuery()
  54.            ->getOneOrNullResult();
  55.     }
  56.     // Start method for User Provider //
  57.     // FOR SECURITY : Load by email + check if user is active
  58.     // https://symfony.com/doc/5.4/security/user_providers.html#using-a-custom-query-to-load-the-user
  59.     // Need to type the return to avoid deprecation (In Symfony 6.0, it will raise an error)
  60.     public function loadUserByIdentifier(string $identifier): ?UserInterface
  61.     {
  62.         $entityManager $this->getEntityManager();
  63.         $query 'SELECT access
  64.             FROM App\Entity\Access access
  65.             WHERE access.email = :identifier
  66.             AND access.isActive = true';
  67.         return $entityManager->createQuery($query)
  68.             ->setParameter('identifier'$identifier)
  69.             ->getOneOrNullResult();
  70.     }
  71.     /** @deprecated since Symfony 5.3 : Remove this when interface will change */
  72.     public function loadUserByUsername(string $usernameOrEmail)
  73.     {
  74.         return $this->loadUserByIdentifier($usernameOrEmail);
  75.     }
  76.     // End method for User Provider //
  77.     public function getAdmins()
  78.     {
  79.         $query $this->createQueryBuilder('access');
  80.         $query->where('access.function IS NULL');
  81.         $query->andWhere('access.isSystem = 0');
  82.         $query->andWhere("access.roles LIKE '%ROLE_ADMIN%'");
  83.         $query->addOrderBy('access.email''ASC');
  84.         return $query->getQuery()->getResult();
  85.     }
  86.     public function getDevs()
  87.     {
  88.         $query $this->createQueryBuilder('access');
  89.         $query->where('access.function IS NULL');
  90.         $query->andWhere('access.isSystem = 0');
  91.         $query->andWhere("access.email IN ('oanalivia', 'alexandre', 'dylan')");
  92.         $query->addOrderBy('access.email''ASC');
  93.         return $query->getQuery()->getResult();
  94.     }
  95.     public function getForAxiom()
  96.     {
  97.         $query $this->createQueryBuilder('access');
  98.         $query->where('access.function IS NULL');
  99.         $query->andWhere('access.isSystem = 0');
  100.         $query->andWhere("access.email IN ('oanalivia', 'alexandre', 'dylan')");
  101.         $query->addOrderBy('access.email''ASC');
  102.         return $query->getQuery()->getResult();
  103.     }
  104.     public function getForAxiom_QB()
  105.     {
  106.         $query $this->createQueryBuilder('access');
  107.         $query->where('access.function IS NULL');
  108.         $query->andWhere('access.isSystem = 0');
  109.         $query->andWhere("access.email IN ('oanalivia', 'alexandre', 'dylan')");
  110.         $query->addOrderBy('access.email''ASC');
  111.         return $query;
  112.     }
  113.     public function findWithoutFunction()
  114.     {
  115.         $query $this->createQueryBuilder('access');
  116.         $query->where('access.function IS NULL');
  117.         $query->andWhere('access.isSystem = 0');
  118.         $query->addOrderBy('access.email''ASC');
  119.         return $query->getQuery()->getResult();
  120.     }
  121.     // TODO
  122.     // Username no longer exists, so remove this one day
  123.     public function findByEmailOrUsername($value)
  124.     {
  125.         $query $this->createQueryBuilder('access');
  126.         // $query->where("access.username = :value OR access.email = :value");
  127.         $query->where("access.email = :value");
  128.         $query->setParameter('value'$value);
  129.         return $query->getQuery()->getResult();
  130.     }
  131.     public function searchForTerm($term$societyGroup)
  132.     {
  133.         // Create Main Query
  134.         $query $this->createQueryBuilder('access');
  135.         $query
  136.             ->join('access.humanResource''humanResource')
  137.             ->join('humanResource.society''society')
  138.             ->join('society.societyGroup''societyGroup');
  139.         $query->where("societyGroup.id = ".$societyGroup->getId());
  140.         $query->andWhere("lower(access.email) LIKE :term");
  141.         $query->setParameter('term'"%".$term."%");
  142.         $results $query->getQuery()->getResult();
  143.         return $results;
  144.     }
  145.     public function getFor($args)
  146.     {
  147.         $society null;
  148.         $function null;
  149.         $active null;
  150.         if (array_key_exists('society'$args))
  151.             $society $args['society'];
  152.         if (array_key_exists('function'$args))
  153.             $function $args['function'];
  154.         if (array_key_exists('active'$args))
  155.             $active $args['active'];
  156.         $query $this->createQueryBuilder('access');
  157.         if ($society !== null)
  158.         {
  159.             $query->join('access.societies''society');
  160.             $query->andWhere('society.id = '.$society->getId());
  161.         }
  162.         if ($function !== null)
  163.         {
  164.             $query->join('access.function''function');
  165.             $query->andWhere('function.id = '.$function->getId());
  166.         }
  167.         if ($active !== null)
  168.         {
  169.             $query->andWhere('access.isActive = 1');
  170.         }
  171.         $query->addOrderBy('access.email''ASC');
  172.         return $query->getQuery()->getResult();
  173.     }
  174.     public function findWithFunction()
  175.     {
  176.         $query $this->createQueryBuilder('access');
  177.         $query->where('access.function IS NOT NULL');
  178.         $query->andWhere('access.isSystem = 0');
  179.         $query->addOrderBy('access.email''ASC');
  180.         return $query->getQuery()->getResult();
  181.     }
  182.     // Functions already belong to a society group,
  183.     // so we are sure that we are only getting the users in that group
  184.     public function getForFunction($function)
  185.     {
  186.         $query $this->createQueryBuilder('access');
  187.         $query->join('access.function''function');
  188.         $query->andWhere('function.id = '.$function->getId());
  189.         $query->addOrderBy('access.email''ASC');
  190.         return $query->getQuery()->getResult();
  191.     }
  192.     public function getActiveForSocietyGroup_QB($societyGroup$plusOne null)
  193.     {
  194.         $query $this->createQueryBuilder('access');
  195.         $query->join('access.humanResource''hr');
  196.         $query->join('hr.society''society');
  197.         $query->join('society.societyGroup''societyGroup');
  198.         $query->where('societyGroup.id = ' $societyGroup->getId());
  199.         $sql "(access.function IS NOT NULL) AND (access.isActive = 1) AND (access.isSystem = 0)";
  200.         if ($plusOne !== null)
  201.         {
  202.             $query->andWhere($sql." OR (access.id = ".$plusOne->getId().")");
  203.         }
  204.         else
  205.         {
  206.             $query->andWhere($sql);
  207.         }
  208.         $query->addOrderBy('hr.lastname''ASC');
  209.         $query->addOrderBy('hr.firstname''ASC');
  210.         return $query;
  211.     }
  212.     public function getActiveForSocietyGroup($societyGroup$plusOne null)
  213.     {
  214.         $query $this->getActiveForSocietyGroup_QB($societyGroup$plusOne);
  215.         return $query->getQuery()->getResult();
  216.     }
  217.     public function getForSocietyGroup($societyGroup)
  218.     {
  219.         $query $this->createQueryBuilder('access');
  220.         $query->join('access.humanResource''hr');
  221.         $query->join('hr.society''society');
  222.         $query->join('society.societyGroup''societyGroup');
  223.         $query->where('access.function IS NOT NULL');
  224.         $query->andWhere('access.isSystem = 0');
  225.         $query->andWhere('societyGroup.id = ' $societyGroup->getId());
  226.         $query->addOrderBy('hr.lastname''ASC');
  227.         $query->addOrderBy('hr.firstname''ASC');
  228.         return $query->getQuery()->getResult();
  229.     }
  230.     public function getForSocietyGroup_QB($societyGroup$orderBy null)
  231.     {
  232.         $query $this->createQueryBuilder('access');
  233.         $query->join('access.humanResource''hr');
  234.         $query->join('hr.society''society');
  235.         $query->join('society.societyGroup''societyGroup');
  236.         $query->where('access.function IS NOT NULL');
  237.         $query->andWhere('access.isSystem = 0');
  238.         $query->andWhere('societyGroup.id = ' $societyGroup->getId());
  239.         if ($orderBy !== null)
  240.         {
  241.             $query->addOrderBy($orderBy'ASC');
  242.         }
  243.         else
  244.         {
  245.             $query->addOrderBy('access.email''ASC');
  246.         }
  247.         return $query;
  248.     }
  249.     public function getOrderedBy($field null$order null)
  250.     {
  251.         $query $this->createQueryBuilder('object');
  252.         if ($field !== null)
  253.         {
  254.             if ($order !== null)
  255.             {
  256.                 $query->addOrderBy('object.'.$field$order);
  257.             }
  258.             else
  259.             {
  260.                 $query->addOrderBy('object.'.$field'ASC');
  261.             }
  262.         }
  263.         else
  264.         {
  265.             $query->addOrderBy('object.id''ASC');
  266.         }
  267.         return $query->getQuery()->getResult();
  268.     }
  269.     public function getOrderedBy_QB($field null$order null)
  270.     {
  271.         $query $this->createQueryBuilder('object');
  272.         if ($field !== null)
  273.         {
  274.             if ($order !== null)
  275.             {
  276.                 $query->addOrderBy('object.'.$field$order);
  277.             }
  278.             else
  279.             {
  280.                 $query->addOrderBy('object.'.$field'ASC');
  281.             }
  282.         }
  283.         else
  284.         {
  285.             $query->addOrderBy('object.id''ASC');
  286.         }
  287.         return $query;
  288.     }
  289.     // Gets all the accesses which have
  290.     // access.humanResource.society = $baseSociety
  291.     public function getAccessesForBaseSociety($baseSociety)
  292.     {
  293.         if ($baseSociety === null)
  294.             return array();
  295.         $id $baseSociety->getId();
  296.         $query $this
  297.             ->createQueryBuilder('access');
  298.         $query
  299.             ->join('access.humanResource''rh')
  300.             ->join('rh.society''rhSociety');
  301.         $query
  302.             ->where('access.isActive = 1')
  303.             ->andWhere('rhSociety.id = '.$id);
  304.         $query
  305.             ->addOrderBy('rh.lastname''ASC')
  306.             ->addOrderBy('rh.firstname''ASC');
  307.         return $query->getQuery()->getResult();
  308.     }
  309.     // Gets all the accesses which have
  310.     // access.humanResource.society = $baseSociety
  311.     public function getAccessesForBaseSociety_QB($baseSocietyAccess $plusOne null)
  312.     {
  313.         if ($baseSociety === null)
  314.             return array();
  315.         $id $baseSociety->getId();
  316.         $query $this
  317.             ->createQueryBuilder('access');
  318.         $query
  319.             ->join('access.humanResource''rh')
  320.             ->join('rh.society''rhSociety');
  321.         $query
  322.             ->where('access.isActive = 1');
  323.         if ($plusOne !== null)
  324.             $query->andWhere('(rhSociety.id = '.$id.' OR access.id = '.$plusOne->getId().')');
  325.         else
  326.             $query->andWhere('(rhSociety.id = '.$id.')');
  327.         $query
  328.             ->addOrderBy('rh.lastname''ASC')
  329.             ->addOrderBy('rh.firstname''ASC');
  330.         return $query;
  331.     }
  332.     // Gets all the accesses which have
  333.     // access.humanResource.society.societyGroup = $baseSocietyGroup
  334.     public function getAccessesForBaseSocietyGroup($baseSocietyGroup,  $activeOnly true)
  335.     {
  336.         if ($baseSocietyGroup === null)
  337.             return array();
  338.         $id $baseSocietyGroup->getId();
  339.         $query $this
  340.             ->createQueryBuilder('access');
  341.         $query
  342.             ->join('access.humanResource''rh')
  343.             ->join('rh.society''rhSociety')
  344.             ->join('rhSociety.societyGroup''rhSocietyGroup');
  345.         if ($activeOnly)
  346.             $query->where('access.isActive = 1');
  347.         $query
  348.             ->andWhere('rhSocietyGroup.id = '.$id);
  349.         $query
  350.             ->addOrderBy('rh.lastname''ASC')
  351.             ->addOrderBy('rh.firstname''ASC');
  352.         return $query->getQuery()->getResult();
  353.     }
  354.     // Gets all the accesses which have
  355.     // access.humanResource.society.societyGroup = $baseSocietyGroup
  356.     public function getAccessesForBaseSocietyGroup_QB($info$baseSocietyGroup$activeOnly trueAccess $plusOne null)
  357.     {
  358.         if ($baseSocietyGroup === null)
  359.             return array();
  360.         $id $baseSocietyGroup->getId();
  361.         $query $this
  362.             ->createQueryBuilder('access');
  363.         $query
  364.             ->join('access.humanResource''rh')
  365.             ->join('rh.society''rhSociety')
  366.             ->join('rhSociety.societyGroup''rhSocietyGroup');
  367.         if ($plusOne !== null)
  368.         {
  369.             if ($activeOnly)
  370.             {
  371.                 $query->andWhere('((rhSocietyGroup.id = '.$id.' AND access.isActive = 1) OR access.id = '.$plusOne->getId().')');
  372.             }
  373.             else
  374.             {
  375.                 $query->andWhere('(rhSocietyGroup.id = '.$id.' OR access.id = '.$plusOne->getId().')');
  376.             }
  377.         }
  378.         else
  379.         {
  380.             if ($activeOnly)
  381.                 $query->where('access.isActive = 1');
  382.             $query->andWhere('rhSocietyGroup.id = '.$id);
  383.         }
  384.         $query
  385.             ->addOrderBy('rh.lastname''ASC')
  386.             ->addOrderBy('rh.firstname''ASC');
  387.         return $query;
  388.     }
  389.     public function getCoworkers($currentGroup$access$plusOne null)
  390.     {
  391.         if ($currentGroup === null || $access === null)
  392.         {
  393.             $query $this
  394.                 ->createQueryBuilder('access');
  395.             $query->where('1=0');
  396.             return $query;
  397.         }
  398.         $societies $access->getSocietiesAsString();
  399.         // Get all accesses for the given Society
  400.         $query $this
  401.             ->createQueryBuilder('access');
  402.         $query->join('access.humanResource''humanResource');
  403.         $query->join('humanResource.society''baseSociety');
  404.         $query->join('baseSociety.societyGroup''societyGroup');
  405.         if ($plusOne === null)
  406.         {
  407.             $query->join('access.societies''society');
  408.             $query
  409.                 ->where('access.isActive = 1')
  410.                 ->andWhere('societyGroup.id = '.$currentGroup->getId())
  411.                 ->andWhere('society.id IN '.$societies);
  412.         }
  413.         else
  414.         {
  415.             $query->leftJoin('access.societies''society');
  416.             $sql "(access.isActive = 1 AND societyGroup.id = ".$currentGroup->getId()." AND society.id IN ".$societies.")";
  417.             $query
  418.                 ->where($sql)
  419.                 ->orWhere('access.id = '.$plusOne->getId());
  420.         }
  421.         $query->addOrderBy('humanResource.lastname''ASC');
  422.         $query->addOrderBy('humanResource.firstname''ASC');
  423.         return $query->getQuery()->getResult();
  424.     }
  425.     public function getCoworkers_QB($currentGroup$access$plusOne null)
  426.     {
  427.         if ($currentGroup === null || $access === null)
  428.         {
  429.             $query $this
  430.                 ->createQueryBuilder('access');
  431.             $query->where('1=0');
  432.             return $query;
  433.         }
  434.         $societies $access->getSocietiesAsString();
  435.         // Get all accesses for the given Society
  436.         $query $this
  437.             ->createQueryBuilder('access');
  438.         $query->join('access.humanResource''humanResource');
  439.         $query->join('humanResource.society''baseSociety');
  440.         $query->join('baseSociety.societyGroup''societyGroup');
  441.         if ($plusOne === null)
  442.         {
  443.             $query->join('access.societies''society');
  444.             $query
  445.                 ->where('access.isActive = 1')
  446.                 ->andWhere('societyGroup.id = '.$currentGroup->getId())
  447.                 ->andWhere('society.id IN '.$societies);
  448.         }
  449.         else
  450.         {
  451.             $query->leftJoin('access.societies''society');
  452.             $sql "(access.isActive = 1 AND societyGroup.id = ".$currentGroup->getId()." AND society.id IN ".$societies.")";
  453.             $query
  454.                 ->where($sql)
  455.                 ->orWhere('access.id = '.$plusOne->getId());
  456.         }
  457.         $query->addOrderBy('humanResource.lastname''ASC');
  458.         $query->addOrderBy('humanResource.firstname''ASC');
  459.         return $query;
  460.     }
  461.     public function getRequiredDTData($start$length$orders$search$columns$access$currentGroup$listSociety$active)
  462.     {
  463.         // Create Main Query
  464.         $query $this->createQueryBuilder('access');
  465.         // Create inner joins
  466.         $query
  467.             ->select('DISTINCT access')
  468.             ->join('access.function''function')
  469.             ->join('access.humanResource''humanResource')
  470.             ->join('humanResource.society''humanResource_society')
  471.             ->join('humanResource_society.societyGroup''humanResource_societyGroup')
  472.             ->leftJoin('access.societies''access_society')
  473.             ->leftJoin('access_society.societyGroup''access_society_group')
  474.             ->leftJoin('access.planningResources''planningResource');
  475.         if ($active)
  476.         {
  477.             $query->where('access.isActive = 1');
  478.         }
  479.         else
  480.         {
  481.             $query->where('access.isActive = 0');
  482.         }
  483.         // Any access based restrictions will go here too
  484.         if ($currentGroup !== null && $access !== null)
  485.         {
  486.             // Mandatory, all should be restricted to current group
  487.             $cond 'humanResource_societyGroup.id = '.$currentGroup->getId();
  488.             $query->andWhere($cond);
  489.             if ($listSociety)
  490.             {
  491.                 // Society first
  492.                 $societies $access->getSocietiesAsString();
  493.                 $cond 'humanResource_society.id IN '.$societies;
  494.                 $query->andWhere($cond);
  495.             }
  496.         }
  497.         // Before doing any search, save the total results
  498.         $countQuery = clone $query;
  499.         $countQuery->select('COUNT(DISTINCT access)');
  500.         $recordsTotal $countQuery->getQuery()->getSingleScalarResult();
  501.         // Fields Search
  502.         foreach ($columns as $key => $column)
  503.         {
  504.             if ($column['search']['value'] != '')
  505.             {
  506.                 // $searchItem is what we are looking for
  507.                 $searchItem $column['search']['value'];
  508.                 // $column['name'] is the name of the column as sent by the JS
  509.                 switch($column['name'])
  510.                 {
  511.                     case 'creation_date':
  512.                     {
  513.                         $query->andWhere("access.creationDate LIKE :creationDate");
  514.                         $query->setParameter("creationDate""%".$searchItem."%");
  515.                         break;
  516.                     }
  517.                     case 'lastname':
  518.                     {
  519.                         $query->andWhere("humanResource.lastname LIKE :lastname");
  520.                         $query->setParameter("lastname""%".$searchItem."%");
  521.                         break;
  522.                     }
  523.                     case 'firstname':
  524.                     {
  525.                         $query->andWhere("humanResource.firstname LIKE :firstname");
  526.                         $query->setParameter("firstname""%".$searchItem."%");
  527.                         break;
  528.                     }
  529.                     case 'email':
  530.                     {
  531.                         $query->andWhere("access.email LIKE :email");
  532.                         $query->setParameter("email""%".$searchItem."%");
  533.                         break;
  534.                     }
  535.                     case 'function':
  536.                     {
  537.                         $query->andWhere("function.name LIKE :function");
  538.                         $query->setParameter("function""%".$searchItem."%");
  539.                         break;
  540.                     }
  541.                     case 'base_society':
  542.                     {
  543.                         $query->andWhere('(humanResource_society.ref LIKE :rh_society OR humanResource_society.name LIKE :rh_society)');
  544.                         $query->setParameter("rh_society""%".$searchItem."%");
  545.                         break;
  546.                     }
  547.                     case 'human_resource':
  548.                     {
  549.                         $query->andWhere('(humanResource.email LIKE :rh_email)');
  550.                         $query->setParameter("rh_email""%".$searchItem."%");
  551.                         break;
  552.                     }
  553.                     case 'planning_resource':
  554.                     {
  555.                         $query->andWhere("planningResource.title LIKE :title");
  556.                         $query->setParameter("title""%".$searchItem."%");
  557.                         break;
  558.                     }
  559.                     case 'society_for_access':
  560.                     {
  561.                         $query->andWhere("(access_society.ref LIKE :access_society_ref OR access_society.name LIKE :access_society_ref)");
  562.                         $query->setParameter("access_society_ref""%".$searchItem."%");
  563.                         break;
  564.                     }
  565.                 }
  566.             }
  567.         }
  568.         // Get the total number of filtred results here
  569.         $countQuery = clone $query;
  570.         $countQuery->select('COUNT(DISTINCT access)');
  571.         $recordsFiltred $countQuery->getQuery()->getSingleScalarResult();
  572.         // Limit
  573.         $query->setFirstResult($start)->setMaxResults($length);
  574.         // Order
  575.         foreach ($orders as $key => $order)
  576.         {
  577.             // $order['name'] is the name of the order column as sent by the JS
  578.             if ($order['name'] != '')
  579.             {
  580.                 $orderColumn null;
  581.                 switch($order['name'])
  582.                 {
  583.                     case 'creation_date':
  584.                     {
  585.                         $orderColumn 'access.creationDate';
  586.                         break;
  587.                     }
  588.                     case 'lastname':
  589.                     {
  590.                         $orderColumn 'humanResource.lastname';
  591.                         break;
  592.                     }
  593.                     case 'firstname':
  594.                     {
  595.                         $orderColumn 'humanResource.firstname';
  596.                         break;
  597.                     }
  598.                     case 'function':
  599.                     {
  600.                         $orderColumn 'function.name';
  601.                         break;
  602.                     }
  603.                     case 'email':
  604.                     {
  605.                         $orderColumn 'access.email';
  606.                         break;
  607.                     }
  608.                     case 'human_resource':
  609.                     {
  610.                         $orderColumn 'humanResource.lastname';
  611.                         break;
  612.                     }
  613.                     case 'external_resource':
  614.                     {
  615.                         $orderColumn 'externalResource.lastname';
  616.                         break;
  617.                     }
  618.                     case 'planning_resource':
  619.                     {
  620.                         $orderColumn 'planningResource.title';
  621.                         break;
  622.                     }
  623.                 }
  624.                 if ($orderColumn !== null)
  625.                 {
  626.                     $query->orderBy($orderColumn$order['dir']);
  627.                 }
  628.             }
  629.         }
  630.         // Get the actual results to display
  631.         $results $query->getQuery()->getResult();
  632.         return array(
  633.             "results"                 =>     $results,
  634.             "recordsTotal"            =>     $recordsTotal,
  635.             "recordsFiltered"        =>    $recordsFiltred,
  636.         );
  637.     }
  638.     public function getAccessesRHForm($societyGroup$access)
  639.     {
  640.         $query $this->createQueryBuilder('access');
  641.         $query->join('access.societies''accessSociety');
  642.         $query->join('access.function''function');
  643.         $query->join('access.humanResource''rh');
  644.         $query->join('rh.society''rhSociety');
  645.         $query->join('rhSociety.societyGroup''rhSocietyGroup');
  646.         $query->andWhere('access.isActive = 1');
  647.         $query->andWhere('rhSocietyGroup.id = '.$societyGroup->getId());
  648.         $societies $access->getSocietiesAsString();
  649.         // Get all accesses for the given Society
  650.         $query->andWhere('accessSociety.id in '.$societies);
  651.         $query->addOrderBy('rh.lastname''ASC');
  652.         $query->addOrderBy('rh.firstname''ASC');
  653.         $rest $query->getQuery()->getResult();
  654.         return $rest;
  655.     }
  656.     // Plan.io Task #3596
  657.     public function getForAPIRest_QB($society$plusOne null)
  658.     {
  659.         $societyGroup $society->getSocietyGroup();
  660.         if ($societyGroup === null)
  661.         {
  662.             return null;
  663.         }
  664.         $sgid $societyGroup->getId();
  665.         // Get all the access which are already connected to an AccessAPI for this SocietyGroup
  666.         $sql "SELECT GROUP_CONCAT(access_id) FROM api_rest_access_api WHERE society_group_id = $sgid";
  667.         if ($plusOne !== null)
  668.         {
  669.             $sql .= " AND access_id <> ".$plusOne->getId();
  670.         }
  671.         $conn $this->getEntityManager()->getConnection();
  672.         $stmt $conn->prepare($sql);
  673.         $result $stmt->executeQuery();
  674.         $ids $result->fetchOne();
  675.         if (!empty($ids))
  676.         {
  677.             $ids "(".$ids.")";
  678.         }
  679.         else
  680.         {
  681.             $ids "(0)";
  682.         }
  683.         $query $this->createQueryBuilder('access');
  684.         $query->join('access.humanResource''humanResource');
  685.         $query->join('humanResource.society''society');
  686.         $query->where("society.id = ".$society->getId());
  687.         $query->andWhere('access.id NOT IN '.$ids);
  688.         return $query;
  689.     }
  690.     public function getShareManagers_QB()
  691.     {
  692.         $query $this->createQueryBuilder('access');
  693.         $query->join('access.societyGroup''societyGroup');
  694.         $query->andWhere('societyGroup.rekto = 1');
  695.         $query->addOrderBy('access.email''ASC');
  696.         return $query;
  697.     }
  698. }