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'); }
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; }
/** * 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(); }
/** * 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; }
/** * 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; }
/** * 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'); }
/** * 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'); }