/** * Metodo para filtrar Vagas por POST, * @param categoriaOng -> id da categoria a ser usada no filtro * @param nome -> nome a ser usado no filtro * @param cidade_id -> id da cidade a ser usado no filtro */ public function postFiltrarvagas() { $categoriaVaga = Request::get('filtro_categoria'); $cidade_id = Request::get('filtro_cidade'); $filtro_ong = Request::get('filtro_ong'); $categorias = Vaga::getCategoriasComVagas(); $cidades = Vaga::getCidadesComVagas(); $ongs = Vaga::getOngsComVagas(); $causas = new Collection(); //Montando array de ongs para select $ongsArray = array(null => 'Projeto'); foreach ($ongs as $ong) { $ongsArray[$ong->id] = $ong->nome; } $ongs = $ongsArray; //Montando array de cidades para select $cidadesArray = array(null => 'Cidade'); foreach ($cidades as $cidade) { $cidadesArray[$cidade->id] = $cidade->nome; } $cidades = $cidadesArray; //Montando array de categorias para select $categoriasArray = array(null => 'Categoria'); foreach ($categorias as $categoria) { $categoriasArray[$categoria->id] = $categoria->nomeTraduzido; } $categorias = $categoriasArray; //Filtrando resultados pelas categorias if ($categoriaVaga && $categoriaVaga != "null") { $vagasByCategoria = CategoriaVaga::findOrFail($categoriaVaga)->vagas; $causas = $causas->merge($vagasByCategoria); } //Filtrando resultados por Cidade if ($cidade_id) { $vagasByCidade = Cidade::findOrFail($cidade_id)->vagas; //Se ja tiver filtrado, entao interseccionar os //resultados para maior relevancia if (count($causas)) { $causas = $causas->intersect($vagasByCidade); } else { $causas = $causas->merge($vagasByCidade); } } if ($filtro_ong) { $causasByOng = Ong::findOrFail($filtro_ong)->vagas; if (count($causas)) { $causas = $causas->intersect($causasByOng); } else { $causas = $causas->merge($causasByOng); } } if (!$cidade_id && (!$categoriaVaga || $categoriaVaga == "null") && !$filtro_ong) { $causas = Vaga::all(); } return view('cuidar.vagas', compact('causas', 'categorias', 'cidades', 'ongs')); }