const defaultMaxResult = 10; const defaultFirstResult = 0; /** * Obtem parametros do filtro **/ private function getFilterParameter($parameter, $value=null){ $session = $this->get('session'); $filter_options = $session->get('{{entity|lower}}_filter_options'); if (is_null($filter_options)){ return null; } foreach($filter_options as $filter_option){ if ($filter_option['id'] == $parameter){ if ($value == null){ return $filter_option; } foreach($filter_option['entities'] as $entity){ if ($entity['id'] == $value){ return $entity; } } } } } private function getFilterParameters(){ $session = $this->get('session'); $result = array(); {%- for association in associations %} $sql = "select p from {{ association['targetEntity'] }} p"; //geosapiens\SinpesqBundle\Entity\Pais - {{ namespace }}\Entity\ $em = $this->getDoctrine()->getEntityManager(); $query = $em->createQuery($sql); $entities = $query->getResult(); $abstractEntities = array(); foreach ($entities as $entity){ $selected = $this->getFilterParameter('{{association['fieldName']}}',$entity->getId()); if (is_array($selected)){ $selected = isset($selected['selected'])?$selected['selected']:false; } else{ $selected = false; } $abstractEntities[] = array("id"=>$entity->getId(),"label"=>$entity,"selected"=>$selected); } //TODO: ARRUMAR O CAMPO LABEL $result[] = array('id'=>'{{association['fieldName']}}','label'=>'cabecalho.filtrar.{{ association['targetEntity']|lower }}', 'entities'=>$abstractEntities); {%- endfor %} $session->set('{{entity|lower}}_filter_options',$result); return $result; } /** * Retorna parametros para listagem **/ private function getTableParameters(){ $session = $this->get('session'); $session->set('{{entity|lower}}_pagination_num_reg', $session->get('{{entity|lower}}_pagination_num_reg', {{entity|capitalize}}Controller::defaultMaxResult)); $session->set('{{entity|lower}}_pagination_page_selected', $session->get('{{entity|lower}}_pagination_page_selected', {{entity|capitalize}}Controller::defaultFirstResult)); $queryBuilder = $this->getDoctrine()->getEntityManager()->createQueryBuilder(); $queryBuilder->select("e")->from("{{ bundle }}:{{ entity|replace({'\\': '/'}) }}","e"); if (!is_null($session->get('{{entity|lower}}_search_text',null))){ $or = $queryBuilder->expr()->orx(); {%- for field, metadata in fields %} {%- if metadata.type|lower in ['string', 'Text'] %} $or->add( $queryBuilder->expr()->like( $queryBuilder->expr()->lower("e.{{metadata.fieldName}}"),":texto" ) ); {%- endif %} {%- endfor %} $queryBuilder->where($or); $queryBuilder->setParameter("texto", "%".strtolower($session->get('{{entity|lower}}_search_text'))."%"); } if (!is_null($session->get('{{entity|lower}}_filter_options',null))){ $filters = $session->get('{{entity|lower}}_filter_options'); foreach($filters as $filter_option){ $wherex = $queryBuilder->expr()->orx(); $hasFilter = false; foreach($filter_option['entities'] as $entity){ if (isset($entity['selected']) && $entity['selected']){ $hasFilter = true; $wherex->add($queryBuilder->expr()->eq('e.'.$filter_option['id'],$entity['id'])); } } if ($hasFilter){ $queryBuilder->andWhere($wherex); } } } $query = $queryBuilder->getQuery(); $paginate = new Paginator($query); $total = $paginate->count(); if ($session->get('{{entity|lower}}_pagination_page_selected')*$session->get('{{entity|lower}}_pagination_num_reg') > $total){ $session->set('{{entity|lower}}_pagination_page_selected',{{entity|capitalize}}Controller::defaultFirstResult); } $session->set('{{entity|lower}}_pagination_num_pages',ceil($total/$session->get('{{entity|lower}}_pagination_num_reg'))); $query->setMaxResults($session->get('{{entity|lower}}_pagination_num_reg')); $query->setFirstResult($session->get('{{entity|lower}}_pagination_page_selected')*$session->get('{{entity|lower}}_pagination_num_reg')); $entities = $query->getResult(); $parameters = array( 'entities' => $entities, 'pagination_total'=>$total, 'pagination_total_per_page'=> $session->get('{{entity|lower}}_pagination_num_reg'), 'pagination_num_pages'=>$session->get('{{entity|lower}}_pagination_num_pages'), 'pagination_page_selected'=>$session->get('{{entity|lower}}_pagination_page_selected') ); return $parameters; } /** * Aplicar filtro **/ public function filterAction(){ $session = $this->get('session'); $request = $this->get('request'); $filters = $request->request->get("filter"); $filters = explode("|", $filters); $filter_options = $session->get('{{entity|lower}}_filter_options'); //limpar filtros selecionados foreach($filter_options as $idxs => $filter_option){ foreach($filter_option['entities'] as $id => $entity){ $filter_options[$idxs]['entities'][$id]['selected'] = false; } } foreach ($filters as $filter){ $filter = explode(":",$filter); if (count($filter) == 2){ foreach($filter_options as $idxs => $filter_option){ if ($filter_option['id'] == $filter[0]){ foreach($filter_option['entities'] as $id => $entity){ if ($entity['id'] == $filter[1]){ $filter_options[$idxs]['entities'][$id]['selected'] = true; } } } } } } $session->set('{{entity|lower}}_filter_options',$filter_options); $content= $this->render('{{ bundle }}:{{ entity|replace({'\\': '/'}) }}:index.table.html.twig',$this->getTableParameters()); return new Response($content->getContent(),200); } /** * Mudar página **/ public function tablepageAction(){ $request = $this->get('request'); $session = $this->get('session'); $page = $request->request->get('page'); if ($page=='first'){ $page = 0; } elseif ($page=='prior' && $session->get('{{entity|lower}}_pagination_page_selected') > 0){ $page = $session->get('{{entity|lower}}_pagination_page_selected')-1; } elseif ($page=='next' && $session->get('{{entity|lower}}_pagination_page_selected') < $session->get('{{entity|lower}}_pagination_num_pages')){ $page = $session->get('{{entity|lower}}_pagination_page_selected')+1; } elseif ($page == 'last'){ $page = $session->get('{{entity|lower}}_pagination_num_pages')-1; } $session->set('{{entity|lower}}_pagination_page_selected',$page); $content= $this->render('{{ bundle }}:{{ entity|replace({'\\': '/'}) }}:index.table.html.twig',$this->getTableParameters()); return new Response($content->getContent(),200); } /** * Definir número de registros por página **/ public function tablemaxAction(){ $request = $this->get('request'); $session = $this->get('session'); $session->set('{{entity|lower}}_pagination_num_reg', $request->get('max')); $content= $this->render('{{ bundle }}:{{ entity|replace({'\\': '/'}) }}:index.table.html.twig',$this->getTableParameters()); return new Response($content->getContent(),200); } /** * Realizar busca **/ public function searchAction(){ $request = $this->get('request'); $session = $this->get('session'); $session->set('{{entity|lower}}_search_text',$request->request->get('texto')); $session->set('{{entity|lower}}_pagination_page_selected',{{entity|capitalize}}Controller::defaultFirstResult); $content= $this->render('{{ bundle }}:{{ entity|replace({'\\': '/'}) }}:index.table.html.twig',$this->getTableParameters()); return new Response($content->getContent(),200); } /** * Limpar busca */ public function searchclearAction(){ $session = $this->get('session'); $session->set('{{entity|lower}}_search_text',null); $session->set('{{entity|lower}}_pagination_page_selected',{{entity|capitalize}}Controller::defaultFirstResult); $content= $this->render('{{ bundle }}:{{ entity|replace({'\\': '/'}) }}:index.table.html.twig',$this->getTableParameters()); return new Response($content->getContent(),200); } /** * Listar entidades {{ entity }}. * @Secure(roles="ROLE_{{entity|upper}}_LIST") {% if 'annotation' == format %} * @Route("/", name="{{ route_name_prefix }}") * @Template() {% endif %} */ public function indexAction(){ $session = $this->get('session'); $parameters = $this->getTableParameters(); $parameters['filter_options'] = $this->getFilterParameters(); $session->set('{{entity|lower}}_filter_options',$parameters['filter_options']); {% if 'annotation' == format %} return $parameters; {% else %} return $this->render('{{ bundle }}:{{ entity|replace({'\\': '/'}) }}:index.html.twig', $parameters); {% endif %} } /** * Listar entidades de {{ entity }} no formato JSON. * @Secure(roles="ROLE_{{entity|upper}}_LIST") {% if 'annotation' == format %} * @Route("/", name="{{ route_name_prefix }}") * @Template() {% endif %} */ public function jsonAction() { $em = $this->getDoctrine()->getEntityManager(); $entities = $em->getRepository('{{ bundle }}:{{ entity|replace({'\\': '/'}) }}')->findAll(); $ret = "["; $sep = ""; foreach($entities as $entity){ $ret = $ret.$sep.$entity->toJson(); $sep = ","; } $ret .= "]"; $response = new Response(); $response->setContent($ret); $response->headers->set('Content-type', 'application/json; charset=utf-8'); return $response; }