Ejemplo n.º 1
0
 public function testbuscarAction()
 {
     if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($this->item, 'Tapir\\BaseBundle\\Controller\\ConBuscar') == false) {
         $this->markTestSkipped('Este controlador no soporta búsquedas.');
         return;
     }
     $crawler = $this->clientRequestAction('buscar');
     $this->clientTestResponse($crawler);
     $this->assertGreaterThan(0, $crawler->filter('#page-title')->count(), 'Probando que la búsqueda tenga un título');
 }
Ejemplo n.º 2
0
 public function createQueryBuilder($alias, $indexBy = NULL)
 {
     $res = parent::createQueryBuilder($alias, $indexBy = NULL);
     if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($this->_entityName, 'Tapir\\BaseBundle\\Entity\\ConNombre')) {
         $res->addOrderBy($alias . '.Nombre');
     }
     if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($this->_entityName, 'Tapir\\BaseBundle\\Entity\\Suprimible')) {
         $res->where($alias . '.Suprimido=0');
     }
     if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($this->_entityName, 'Tapir\\BaseBundle\\Entity\\Archivable')) {
         $dql = $res->getDql();
         if (strpos($dql, $alias . '.Archivado=1') === false) {
             // Sólo incluyo el filtro Archivado=0 si no existe un filtro explícito de Archivado=1
             $res->where($alias . '.Archivado=0');
         }
     }
     return $res;
 }
Ejemplo n.º 3
0
 /**
  * Buscar las relaciones de una entidad con esta.
  *
  * @param  array  $entidadASuprimir          Entidad a suprimir.
  * @param  string $rutaEntidadCandidata      Ruta a la entidad que referencia al objeto a suprimir.
  * @param  string $propiedadEntidadCandidata Variable que referencia al objeto de la entidad a suprimir.
  * @return array  $hayRelacion               Resultado de la consulta.
  */
 public function ObtenerRelacionesDesdeEntidad($entidadASuprimir, $rutaEntidadCandidata, $propiedadEntidadCandidata)
 {
     $ConsultaRelaciones = $this->em->createQueryBuilder()->select('a')->from($rutaEntidadCandidata, 'a')->leftJoin('a.' . $propiedadEntidadCandidata, 'b')->where('b.id = :id_candidato');
     if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($rutaEntidadCandidata, 'Tapir\\BaseBundle\\Entity\\Suprimible')) {
         $ConsultaRelaciones->andwhere('a.Suprimido = :no_es_suprimido')->setParameters(array('id_candidato' => $entidadASuprimir->getId(), 'no_es_suprimido' => 0));
     } else {
         $ConsultaRelaciones->setParameter('id_candidato', $entidadASuprimir->getId());
     }
     return $ConsultaRelaciones->getQuery()->setMaxResults(5)->getResult();
 }
Ejemplo n.º 4
0
 /**
  * Genera la consulta DQL para el listado.
  *
  * La consulta generada contiene los JOIN y ORDER BY correspondiente además
  * de la cláusula WHERE que incluye las condiciones predeterminadas y la
  * condición Suprimido=0 para los elementos suprimibles (soft-delete) y las
  * condiciones de páginación y búsqueda (esta última si el parámetro
  * $filtro_buscar no es null).
  *
  * @param  string $filtro_buscar El filtro a aplicar en formato DQL.
  * @return string $dql           Una comando DQL SELECT para obtener el listado.
  *
  * @see listarAction() listarAction()
  * @see $Joins $Joins
  * @see $Where $Where
  * @see $OrderBy $OrderBy
  * @see $BuscarPor $BuscarPor
  * @see $Limit $Limit
  * @see $Paginar $Paginar
  */
 protected function obtenerComandoSelect($filtro_buscar = null, $soloContar = false, $whereAdicional = null)
 {
     $dql = "SELECT ";
     if ($soloContar) {
         $dql .= "COUNT(r) AS cant";
     } else {
         $dql .= "r";
         if ($this->ExtraFields) {
             $dql .= ", " . join(', ', $this->ExtraFields);
         }
     }
     $dql .= " FROM " . $this->CompleteEntityName . " r";
     if (count($this->Joins) > 0) {
         $this->Joins = array_unique($this->Joins);
         foreach ($this->Joins as $join) {
             $dql .= " " . $join;
         }
     }
     $where = "";
     if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($this->CompleteEntityName, 'Tapir\\BaseBundle\\Entity\\Suprimible')) {
         $where = "r.Suprimido=0";
     } else {
         $where = "1=1";
     }
     if ($filtro_buscar && $filtro_buscar != '%' && $this->BuscarPor) {
         // Busco por varias palabras
         // Cambio comas por espacios, quito espacios dobles y divido la cadena en los espacios
         $palabras = explode(' ', str_replace('  ', ' ', str_replace(',', ' ', $filtro_buscar)), 5);
         foreach ($palabras as $palabra) {
             $BuscarPorCampos = explode(',', $this->BuscarPor);
             $BuscarPorNexo = '';
             $this->Where .= ' AND (';
             // Busco en varios campos
             foreach ($BuscarPorCampos as $BuscarPorCampo) {
                 if (strpos($BuscarPorCampo, '.') === false) {
                     $BuscarPorCampo = 'r.' . $BuscarPorCampo;
                 }
                 $this->Where .= $BuscarPorNexo . $BuscarPorCampo . " LIKE '%{$palabra}%'";
                 $BuscarPorNexo = ' OR ';
             }
             $this->Where .= ')';
         }
     }
     $dql .= " WHERE {$where}";
     if ($this->Where) {
         $this->Where = trim($this->Where);
         if (substr($this->Where, 0, 4) != "AND ") {
             $this->Where = "AND " . $this->Where;
         }
         $dql .= ' ' . $this->Where;
     }
     if ($whereAdicional) {
         $whereAdicional = trim($whereAdicional);
         if (substr($whereAdicional, 0, 4) != "AND ") {
             $whereAdicional = "AND " . $whereAdicional;
         }
         $dql .= ' ' . $whereAdicional;
     }
     if ($this->GroupBy) {
         $dql .= ' GROUP BY ' . $this->GroupBy;
     }
     if ($this->OrderBy && $soloContar == false) {
         $OrderByCampos = explode(',', $this->OrderBy);
         $OrderByCamposConTabla = array();
         foreach ($OrderByCampos as $Campo) {
             // Agrego "r." a los campos que no especifican una tabla
             if (strpos($Campo, '.') === false) {
                 $Campo = 'r.' . $Campo;
             } elseif (substr($Campo, 0, 1) == '.') {
                 $Campo = substr($Campo, 1);
             }
             $OrderByCamposConTabla[] = $Campo;
         }
         $dql .= " ORDER BY " . join(', ', $OrderByCamposConTabla);
     }
     // echo '------------------------------------------------------------------- ' . $dql;
     return $dql;
 }
Ejemplo n.º 5
0
 /**
  * Método con sentencia SELECT para asociaciones ManyToMany.
  *
  * @param  array  $entidadASuprimir          entidad a suprimir.
  * @param  string $rutaEntidadCandidata      ruta a la entidad que referencia al objeto a suprimir.
  * @param  string $propiedadEntidadCandidata variable que referencia al objeto de la entidad a suprimir.
  * @return array  $hayRelacion               resultado de la consulta.
  */
 public function construirDQL($entidadASuprimir, $rutaEntidadCandidata, $propiedadEntidadCandidata)
 {
     $hayRelacion = $this->em->createQueryBuilder()->select('a, b')->addselect('a.id')->from($rutaEntidadCandidata, 'a')->leftJoin('a.' . $propiedadEntidadCandidata, 'b')->where('b.id = :id_candidato');
     if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($rutaEntidadCandidata, 'Tapir\\BaseBundle\\Entity\\Suprimible')) {
         $hayRelacion->andwhere('a.Suprimido = :no_es_suprimido')->setParameters(array('id_candidato' => $entidadASuprimir->getId(), 'no_es_suprimido' => 0));
     } else {
         $hayRelacion->setParameter(array('id_candidato' => $entidadASuprimir->getId()));
     }
     $hayRelacion = $hayRelacion->getQuery()->setMaxResults(1)->getResult();
     return $hayRelacion;
 }
Ejemplo n.º 6
0
 public static function UsaTrait($classOrObject, $trait)
 {
     return in_array($trait, ClassHelper::ObtenerTraitsRecursivos($classOrObject));
 }
Ejemplo n.º 7
0
 /**
  * Devuelve true si la clase es auditable.
  *
  * @param ReflectionClass $reflClass
  * @return boolean True si la clase es auditable.
  */
 protected function isEntitySupported(\ReflectionClass $reflClass)
 {
     return \Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($reflClass->getName(), 'Tapir\\BaseBundle\\Entity\\Auditable');
 }
Ejemplo n.º 8
0
 /**
  * Devuelve true si la clase es auditable.
  *
  * @param ReflectionClass $reflClass
  * @return boolean True si la clase es auditable.
  */
 protected function isEntitySupported($className)
 {
     return \Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($className, 'Tapir\\BaseBundle\\Entity\\Auditable');
 }