<?php

namespace OfficeBrain\Bundle\AccessManagementBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * @author OfficeBrain 4273 <info@officebrain.com>
 *
 */

/**
 * InstanceAccessMappingRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class InstanceAccessMappingRepository extends EntityRepository
{
    public function getMainInstanceAccessMappingObjects()
    {
        $objIMs = $this->createQueryBuilder('IAM')
                ->select('IAM')
                //->join('AccessManagementBundle:InstanceMaster', 'inner', 'IM')
                ->innerJoin('OfficeBrainAccessManagementBundle:InstanceMaster', 'IM', 'WITH', 'IM=IAM.instance')
                ->andWhere('IM.isMain=1')
                ->addOrderBy('IAM.id', 'ASC')
                ->getQuery()// -> getSQL();
                ->getResult();
        return $objIMs;
    }
    
    public function deleteInstanceAccessMappingByInstanceId($instance)
    {
        $objIMs = $this->createQueryBuilder('IAM');
        $objIMs->delete('OfficeBrainAccessManagementBundle:InstanceAccessMapping', 'IAM')
               ->andWhere($objIMs->expr()->eq('IAM.instance', ':instance'))
               ->setParameter('instance', $instance)
               ->getQuery() //-> getSQL();
               ->execute();
        return $objIMs;
    }
    
    public function deleteAllSubInstanceAccessMapping($arrRevokeAccess)
    {
        $objIMsub = $this->getEntityManager()->createQueryBuilder();
        $objIMsub = $objIMsub->select('IM.id')
                ->from('OfficeBrainAccessManagementBundle:InstanceMaster', 'IM')
                ->andWhere('IM.isMain=1')
                ->getQuery()-> getDQL();
        $objIMs = $this->createQueryBuilder('IAM');
        $objIMs->delete('OfficeBrainAccessManagementBundle:InstanceAccessMapping', 'IAM')
               ->andWhere($objIMs->expr()->in('IAM.access', ':objAccess'))
               ->setParameter('objAccess', $arrRevokeAccess)
               ->andWhere($objIMs->expr()->notIn('IAM.instance', $objIMsub))
               ->getQuery() //-> getSQL();exit;
               ->execute();
        return $objIMs;
    }
    
    public function getInstanceAccessMappingByInstanceId($instance)
    {
        $objIMs = $this->createQueryBuilder('IAM');
        $objIAMs=$objIMs->select('IAM')
               ->andWhere($objIMs->expr()->eq('IAM.instance', ':instance'))
               ->setParameter('instance', $instance)
               ->getQuery() //-> getSQL();
               ->getResult();
        return $objIAMs;
    }
}
