예제 #1
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('s')->from('SubGrid', 's')->orderBy('s.id', 'ASC');
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #2
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('sg', 'r', 'u', 'rt')->from('ServiceGroup', 'sg')->leftJoin('sg.roles', 'r')->leftJoin('r.user', 'u')->leftJoin('r.roleType', 'rt')->orderBy('sg.id', 'ASC');
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Run ScopeQueryBuilder regardless of if scope is set.
     $scopeQueryBuilder = new ScopeQueryBuilder(isset($parameters['scope']) ? $parameters['scope'] : null, isset($parameters['scope_match']) ? $parameters['scope_match'] : null, $qb, $this->em, $bc, 'ServiceGroup', 'sg');
     //Get the result of the scope builder
     $qb = $scopeQueryBuilder->getQB();
     $bc = $scopeQueryBuilder->getBindCount();
     //Get the binds and store them in the local bind array only if any binds are fetched from scopeQueryBuilder
     foreach ((array) $scopeQueryBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #3
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('n')->from('NGI', 'n')->orderBy('n.id', 'ASC');
     /**This is used to filter the reults at the point
      * of building the XML to only show the correct roletypes.
      * Future work could see this build into the query.
      */
     if (isset($parameters['roletype'])) {
         $this->roleT = $parameters['roletype'];
     } else {
         $this->roleT = '%%';
     }
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #4
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters 
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('s')->from('Site', 's')->join('s.certificationStatus', 'cs')->join('s.ngi', 'n')->leftJoin('s.scopes', 'sc')->join('s.infrastructure', 'i')->andWhere($qb->expr()->like('i.name', '?' . ++$bc))->orderBy('s.id', 'ASC');
     $binds[] = array($bc, 'Production');
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     $dql = $qb->getDql();
     //for testing
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #5
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('se', 'sp', 's', 'sc', 'el', 'c', 'n', 'st', 'elp')->from('Service', 'se')->leftjoin('se.parentSite', 's')->leftjoin('s.certificationStatus', 'cs')->leftJoin('s.scopes', 'sc')->leftJoin('se.serviceProperties', 'sp')->leftjoin('se.endpointLocations', 'el')->leftjoin('el.endpointProperties', 'elp')->leftjoin('s.country', 'c')->leftjoin('s.ngi', 'n')->leftjoin('se.serviceType', 'st')->andWhere($qb->expr()->neq('cs.name', '?' . ++$bc))->orderBy('se.id', 'ASC');
     //Add closed parameter to binds
     $binds[] = array($bc, 'Closed');
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Run ScopeQueryBuilder regardless of if scope is set.
     $scopeQueryBuilder = new ScopeQueryBuilder(isset($parameters['scope']) ? $parameters['scope'] : null, isset($parameters['scope_match']) ? $parameters['scope_match'] : null, $qb, $this->em, $bc, 'Service', 'se');
     //Get the result of the scope builder
     $qb = $scopeQueryBuilder->getQB();
     $bc = $scopeQueryBuilder->getBindCount();
     //Get the binds and store them in the local bind array only if any binds are fetched from scopeQueryBuilder
     foreach ((array) $scopeQueryBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     /* Pass the properties to the properties class.
      * It will return a query with a clause based on the provided LDAP
      */
     if (isset($parameters['extensions'])) {
         $ExtensionsQueryBuilder = new ExtensionsQueryBuilder($parameters['extensions'], $qb, $this->em, $bc, 'Service');
         //Get the modified query
         $qb = $ExtensionsQueryBuilder->getQB();
         $bc = $ExtensionsQueryBuilder->getBindCount();
         //Get the binds and store them in the local bind array
         foreach ($ExtensionsQueryBuilder->getValuesToBind() as $value) {
             $binds[] = $value;
         }
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     /*
      $dql = $qb->getDql(); //for testing
     $query = $qb->getQuery();
     echo "\n\n\n\n";
     $parameters=$query->getParameters();
     print_r($parameters);
     echo $dql;
     echo "\n\n\n\n";
     */
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #6
0
파일: GetSite.php 프로젝트: Tom-Byrne/gocdb
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     $qb->select('s', 'sc', 'sp', 'i', 'cs', 'c', 'n', 'sgrid', 'ti')->from('Site', 's')->leftJoin('s.siteProperties', 'sp')->leftJoin('s.scopes', 'sc')->leftJoin('s.ngi', 'n')->leftJoin('s.country', 'c')->leftJoin('s.certificationStatus', 'cs')->leftJoin('s.infrastructure', 'i')->leftJoin('s.subGrid', 'sgrid')->leftJoin('s.tier', 'ti')->orderBy('s.shortName', 'ASC');
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Run ScopeQueryBuilder regardless of if scope is set.
     $scopeQueryBuilder = new ScopeQueryBuilder(isset($parameters['scope']) ? $parameters['scope'] : null, isset($parameters['scope_match']) ? $parameters['scope_match'] : null, $qb, $this->em, $bc, 'Site', 's');
     //Get the result of the scope builder
     $qb = $scopeQueryBuilder->getQB();
     $bc = $scopeQueryBuilder->getBindCount();
     //Get the binds and store them in the local bind array only if any binds are fetched from scopeQueryBuilder
     foreach ((array) $scopeQueryBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     /* Pass the properties to the extensions class.
      * It will return a query with a clause based on the provided LDAP style query
      */
     if (isset($parameters['extensions'])) {
         $ExtensionsQueryBuilder = new ExtensionsQueryBuilder($parameters['extensions'], $qb, $this->em, $bc, 'Site');
         //Get the modified query
         $qb = $ExtensionsQueryBuilder->getQB();
         $bc = $ExtensionsQueryBuilder->getBindCount();
         //Get the binds and store them in the local bind array
         foreach ($ExtensionsQueryBuilder->getValuesToBind() as $value) {
             $binds[] = $value;
         }
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     //Get the dql query from the Query Builder object
     //Testing
     /*
     	$dql = $qb->getDql(); //for testing
     $query = $qb->getQuery();
     echo "\n\n\n\n";
     $parameters=$query->getParameters();
     print_r($parameters);
     echo $dql;
     echo "\n\n\n\n";
     */
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #7
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('sg', 's', 'st', 'sp', 'sc', 'els', 'elp', 'servp')->from('ServiceGroup', 'sg')->leftJoin('sg.serviceGroupProperties', 'sp')->leftJoin('sg.services', 's')->leftJoin('s.serviceProperties', 'servp')->leftJoin('s.serviceType', 'st')->leftJoin('s.scopes', 'sc')->leftJoin('s.endpointLocations', 'els')->leftjoin('els.endpointProperties', 'elp')->orderBy('sg.id', 'ASC');
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Run ScopeQueryBuilder regardless of if scope is set.
     $scopeQueryBuilder = new ScopeQueryBuilder(isset($parameters['scope']) ? $parameters['scope'] : null, isset($parameters['scope_match']) ? $parameters['scope_match'] : null, $qb, $this->em, $bc, 'ServiceGroup', 'sg');
     //Get the result of the scope builder
     $qb = $scopeQueryBuilder->getQB();
     $bc = $scopeQueryBuilder->getBindCount();
     //Get the binds and store them in the local bind array only if any binds are fetched from scopeQueryBuilder
     foreach ((array) $scopeQueryBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     /* Pass the properties to the extensions class.
      * It will return a query with a clause based on the provided LDAP style query
      */
     if (isset($parameters['extensions'])) {
         $ExtensionsQueryBuilder = new ExtensionsQueryBuilder($parameters['extensions'], $qb, $this->em, $bc, 'ServiceGroup');
         //Get the modified query
         $qb = $ExtensionsQueryBuilder->getQB();
         $bc = $ExtensionsQueryBuilder->getBindCount();
         //Get the binds and store them in the local bind array
         foreach ($ExtensionsQueryBuilder->getValuesToBind() as $value) {
             $binds[] = $value;
         }
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #8
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters 
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Main query
     $qb->select('COUNT(c.name) as cCount', 'c.name')->from('Site', 's')->leftJoin('s.scopes', 'sc')->join('s.ngi', 'n')->join('s.country', 'c')->join('s.certificationStatus', 'cs')->join('s.infrastructure', 'i')->groupBy('c.name')->orderBy('c.name');
     //If a scope was specified attach the sub query to query by EGI scope
     if (isset($parameters['scope'])) {
         /**
          * We are using a simplified scope query here that only supports a single scope
          * instead of using the scope-query builder. When using the scope query builder (SQB)
          * the sub query created by the SQB will count sites with more than one scope and this
          * can cause an error in the results. To combat this you can put a distinct within the 
          * select clause: "COUNT (DISTINCT c.name)" and this will fix that issue. However we 
          * still are not using the SQB as this supports comma seperated lists and scope matching
          * which is not supported by the NGI scope sub query. In conclusion this PI query supports
          * only a single scope. 
          */
         $sQ = $this->em->createQueryBuilder();
         $sQ->select('n2')->from('NGI', 'n2')->leftJoin('n2.scopes', 'sqsc2')->where($sQ->expr()->eq('sqsc2.name', '?' . ++$bc));
         $qb->andWhere($qb->expr()->eq('sc.name', '?' . $bc))->andWhere($qb->expr()->in('n', $sQ->getDQL()));
         $binds[] = array($bc, $parameters['scope']);
     }
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters. */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     //echo $qb->getDql(); //for testing
     $query[0] = $qb->getQuery();
     $qb = $this->em->createQueryBuilder();
     $qb->select('c.name')->from('Country', 'c')->orderBy('c.name');
     $query[1] = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #9
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('s', 'n', 'r', 'u', 'rt')->from('Site', 's')->leftJoin('s.ngi', 'n')->leftJoin('s.country', 'c')->leftJoin('s.roles', 'r')->leftJoin('r.user', 'u')->leftJoin('r.roleType', 'rt')->orderBy('s.shortName', 'ASC');
     /**This is used to filter the reults at the point
      * of building the XML to only show the correct roletypes.
      * Future work could see this build into the query.
      */
     if (isset($parameters['roletype'])) {
         $this->roleT = $parameters['roletype'];
     } else {
         $this->roleT = '%%';
     }
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Run ScopeQueryBuilder regardless of if scope is set.
     $scopeQueryBuilder = new ScopeQueryBuilder(isset($parameters['scope']) ? $parameters['scope'] : null, isset($parameters['scope_match']) ? $parameters['scope_match'] : null, $qb, $this->em, $bc, 'Site', 's');
     //Get the result of the scope builder
     $qb = $scopeQueryBuilder->getQB();
     $bc = $scopeQueryBuilder->getBindCount();
     //Get the binds and store them in the local bind array only if any binds are fetched from scopeQueryBuilder
     foreach ((array) $scopeQueryBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #10
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters 
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('log', 's')->from('CertificationStatusLog', 'log')->Join('log.parentSite', 's')->Join('s.certificationStatus', 'cs')->leftJoin('s.scopes', 'sc')->Join('s.infrastructure', 'i')->orderBy('log.id', 'ASC');
     if (isset($parameters['enddate'])) {
         $endDate = new \DateTime($parameters['enddate']);
     } else {
         $endDate = null;
     }
     $qb->andWhere($qb->expr()->orX($qb->expr()->isNull('?' . ++$bc), $qb->expr()->gt('log.addedDate', '?' . $bc)));
     $binds[] = array($bc, $endDate);
     if (isset($parameters['startdate'])) {
         $startDate = new \DateTime($parameters['startdate']);
     } else {
         $startDate = null;
     }
     $qb->andWhere($qb->expr()->orX($qb->expr()->isNull('?' . ++$bc), $qb->expr()->lt('log.addedDate', '?' . $bc)));
     $binds[] = array($bc, $startDate);
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     $dql = $qb->getDql();
     //for testing
     //echo $dql;
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #11
0
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters 
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     define('DATE_FORMAT', 'Y-m-d H:i');
     //Set the interval
     if (isset($parameters['interval'])) {
         if (is_numeric($parameters['interval'])) {
             $interval = $parameters['interval'];
         } else {
             echo '<error>interval is not a number</error>';
             die;
         }
     } else {
         // Default: downtimes declared in the last day
         $interval = '1';
     }
     $nowMinusIntervalDays = new \DateTime();
     $nowMinusIntervalDays->sub(new \DateInterval('P' . $interval . 'D'));
     $qb = $this->em->createQueryBuilder();
     $qb->select('d', 'els', 'se', 's', 'st')->from('Downtime', 'd')->join('d.services', 'se')->leftJoin('d.endpointLocations', 'els')->join('se.serviceType', 'st')->join('se.parentSite', 's')->leftJoin('se.scopes', 'sc')->join('s.ngi', 'n')->join('s.country', 'c')->andWhere($qb->expr()->gt('d.insertDate', '?' . ++$bc))->orderBy('d.startDate', 'DESC');
     //->orderBy('se.id', 'DESC');
     //Bind interval days
     $binds[] = array($bc, $nowMinusIntervalDays);
     if (isset($parameters['id'])) {
         $qb->andWhere($qb->expr()->eq('d.id', '?' . ++$bc));
         $binds[] = array($bc, $parameters['id']);
     }
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Run ScopeQueryBuilder regardless of if scope is set.
     $scopeQueryBuilder = new ScopeQueryBuilder(isset($parameters['scope']) ? $parameters['scope'] : null, isset($parameters['scope_match']) ? $parameters['scope_match'] : null, $qb, $this->em, $bc, 'Service', 'se');
     //Get the result of the scope builder
     $qb = $scopeQueryBuilder->getQB();
     $bc = $scopeQueryBuilder->getBindCount();
     //Get the binds and store them in the local bind array only if any binds are fetched from scopeQueryBuilder
     foreach ((array) $scopeQueryBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }
예제 #12
0
파일: GetUser.php 프로젝트: Tom-Byrne/gocdb
 /** Creates the query by building on a queryBuilder object as
  *  required by the supplied parameters
  */
 public function createQuery()
 {
     $parameters = $this->validParams;
     $binds = array();
     $bc = -1;
     $qb = $this->em->createQueryBuilder();
     //Initialize base query
     $qb->select('u', 'r')->from('User', 'u')->leftJoin('u.roles', 'r')->orderBy('u.id', 'ASC');
     if (isset($parameters['roletype']) && isset($parameters['roletypeAND'])) {
         echo '<error>Only use either roletype or roletypeAND not both</error>';
         die;
     }
     /*If the user has specified a role type generate a new subquery
      * and join this to the main query with "where r.roleType in"
      */
     if (isset($parameters['roletype'])) {
         $qb1 = $this->em->createQueryBuilder();
         $qb1->select('rt.id')->from('roleType', 'rt')->where($qb1->expr()->in('rt.name', '?' . ++$bc));
         //Add to main query
         $qb->andWhere($qb->expr()->in('r.roleType', $qb1->getDQL()));
         //If user provided comma seprated values explode it and bind the resulting array
         if (strpos($parameters['roletype'], ',')) {
             $exValues = explode(',', $parameters['roletype']);
             $qb->setParameter($bc, $exValues);
         } else {
             $qb->setParameter($bc, $parameters['roletype']);
         }
     }
     /*Pass parameters to the ParameterBuilder and allow it to add relevant where clauses
      * based on set parameters.
      */
     $parameterBuilder = new ParameterBuilder($parameters, $qb, $this->em, $bc);
     //Get the result of the scope builder
     $qb = $parameterBuilder->getQB();
     $bc = $parameterBuilder->getBindCount();
     //Get the binds and store them in the local bind array - only runs if the returned value is an array
     foreach ((array) $parameterBuilder->getBinds() as $bind) {
         $binds[] = $bind;
     }
     //Bind all variables
     $qb = $this->helpers->bindValuesToQuery($binds, $qb);
     //Get the dql query from the Query Builder object
     $query = $qb->getQuery();
     $this->query = $query;
     return $this->query;
 }