/** * Rota para ser acessada por post para trocar a entidadeAtiva, * @param $id id da entidade a ser acessada * @todo a ser deprecated, criado um metodo PaginaController@getAcessarcomo($id, $tipo) */ public function postTrocaentidadeativa($id, Request $request) { $entidadeAtiva_id = $id; $entidadeAtiva_tipo = $request->get('entidadeAtiva_tipo'); if ($entidadeAtiva_tipo && $entidadeAtiva_id) { $entidadeExiste = false; switch ($entidadeAtiva_tipo) { case 'ong': # Retorna a ong na lista de ongs do usuario, ou o perfil $ong = Ong::find($entidadeAtiva_id); $entidadeExiste = $ong ? true : false; break; case 'empresa': # Retorna a empresa na lista de empresas do usuario, ou o perfil $empresa = Empresa::find($entidadeAtiva_id); $entidadeExiste = $empresa ? true : false; break; default: break; } if ($entidadeExiste) { Session::put('entidadeAtiva_id', $entidadeAtiva_id); Session::put('entidadeAtiva_tipo', $entidadeAtiva_tipo); return redirect('conectar'); } } }
/** * Metodo para trocar a entidadeAtiva atual * @param $id Id da entidade a ser acessada * @param $tipo Tipo da entidade (ong|empresa|perfil) */ public function getAcessarcomo($id, $tipo) { $entidadeAtiva_id = $id; $entidadeAtiva_tipo = $tipo; if ($entidadeAtiva_tipo && $entidadeAtiva_id) { $entidadeExiste = false; switch ($entidadeAtiva_tipo) { case 'ong': # Retorna a ong na lista de ongs do usuario, ou o perfil $ong = Ong::find($entidadeAtiva_id); $entidadeExiste = $ong && Auth::user()->ongs->find($id) ? true : false; break; case 'empresa': # Retorna a empresa na lista de empresas do usuario, ou o perfil $empresa = Empresa::find($entidadeAtiva_id); $entidadeExiste = $empresa && Auth::user()->empresas->find($id) ? true : false; break; case 'perfil': # Retorna a empresa na lista de empresas do usuario, ou o perfil $perfil = Perfil::find($entidadeAtiva_id); $entidadeExiste = $perfil && Auth::user()->perfil->id == $id ? true : false; break; default: break; } if ($entidadeExiste) { Session::put('entidadeAtiva_id', $entidadeAtiva_id); Session::put('entidadeAtiva_tipo', $entidadeAtiva_tipo); } return redirect('conectar'); } }
/** * Estabele a relação de seguir uma ong * @param String $id Id da ong a ser seguida * @return JSON Resultado da requisicao */ public function getFollowong($id) { //$entidadeAtiva do usuario logado. $entidadeAtiva = Auth::user()->entidadeAtiva; $ong = Ong::findOrFail($id); //se ja nao seguir essa ong if (!$entidadeAtiva->followOng->find($ong->id)) { $entidadeAtiva->followOng()->attach($ong->id); $entidadeAtiva->push(); //Criando nova notificacao $novaNotificacao = Notificacao::create(['titulo' => 'Voce tem um novo seguidor', 'mensagem' => $entidadeAtiva->apelido . ' agora está te seguindo e vai receber seus posts', 'tipo_notificacao' => 'seguidor', 'url' => $entidadeAtiva->getUrl()]); //associando a entidadeAtiva com o from e o $ong seguido como target $entidadeAtiva->fromNotificacoes()->save($novaNotificacao); $ong->notificacoes()->save($novaNotificacao); $novaNotificacao->push(); } $return['success'] = true; return json_encode($return); }
/** * Metodo para se recuperar a entidade que tem o $id passado por parametro * OBS: necessita do input hidden tipoEntidade; */ public function getEntidade($id) { $tipoEntidade = Input::get('tipoEntidade', ''); switch ($tipoEntidade) { case 'App\\Perfil': $entidade = Perfil::findOrFail($id); break; case 'App\\Ong': $entidade = Ong::findOrFail($id); break; case 'App\\Empresa': $entidade = Empresa::findOrFail($id); break; case 'App\\Post': $entidade = Post::findOrFail($id); break; default: $entidade = ''; // Se nao encontrar nenhuma entidade, quebrar? // App::abort(500, 'Entidade nao identificada'); break; } return $entidade ? $entidade : false; }
/** * Retorna sugestoes de perfils que já oa entidadeAtiva ja nao esteja seguindo. * @param Perfil|Ong|Empresa $entidadeAtiva * @param integer $minSugestoes * @param integer $maxSugestoes * @return Collection Collection de perfils para sugestao */ public static function getSugestoes($entidadeAtiva, $minSugestoes = 3, $maxSugestoes = 3) { //Obtendo um array de Collections de Perfils que tem interesses em comum $arrayCollectionPerfil = $entidadeAtiva->interesses()->with('perfil')->get()->lists('perfil'); //Obtendo um array de ids dos perfils que já sigo $notAllowed_ids = $entidadeAtiva->followPerfil()->lists('id'); //Adicionando o meu $perfil->id para a lista de ids nao permitidos //fix adicionando id do perfil associado a conta dessa entidadeAtiva array_push($notAllowed_ids, $entidadeAtiva->user->perfil->id); $sugestoes = Collection::make(); //Iterando sob o array de collections e mergeando as collections em uma collection final //TODO: melhorar isso Collection::flat? foreach ($arrayCollectionPerfil as $key => $collection) { //Se for primeira iteração... if ($sugestoes->isEmpty()) { $sugestoes = $collection; } else { $sugestoes = $sugestoes->merge($collection); } } //pegando lista de ids de perfils com interesses em comum $arraySugestoes = $sugestoes->lists('id'); //Removendo lista de ids nao permitidos da lista de sugestoes $arrayFinal = array_diff($arraySugestoes, $notAllowed_ids); $totalSugestoes = count($arrayFinal); //Criando uma Collection $extra, que ira conter sugestoes extras caso numero de //sugestoes insuficiente $extras = Collection::make(); if ($totalSugestoes < $minSugestoes) { $diferenca = $minSugestoes - $totalSugestoes; //Obtendo lista de ids que nao quero, (todos que ja me sugeriram + todos que nao posso seguir) $merged = array_merge_recursive($notAllowed_ids, $arraySugestoes); $notAllowed_ids = array_unique($merged); //Pegando perfils extras para sugerir.. $extras = Perfil::whereNotIn('id', $notAllowed_ids)->limit($diferenca)->get(); } //Pegando Collection de perfils para retornar $sugestaoFinal = Perfil::whereIn('id', $arrayFinal)->get()->merge($extras); //Limitando o total de elementos ao valor de $maxSugestoes ou o total da query $qnt = count($sugestaoFinal); $max = $qnt < $maxSugestoes ? $qnt : $maxSugestoes; //Se tiver apenas 1 elemento, nao aplicar random(), pois perco a collection externa $sugestaoFinal = $qnt == 1 ? $sugestaoFinal : $sugestaoFinal->random($max); return $sugestaoFinal; }
/** * 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')); }
/** * Metodo que retorna todas as Categorias que tem Ongs atualmente. * @return Collection */ public static function getCategoriasComOngs() { //Obtendo a lista de todas as categorias com ongs. $categorias = Ong::with('categoria')->whereNotNull('categoria_ong_id')->get(); //se a Collection nao estiver vazia, entao listar cidades if (count($categorias)) { $categorias = array_unique($categorias->lists('categoria')); } return $categorias; }
/** * Deleta a Ong. * @param $id -> id da ong a ser deletada */ public function destroy($id) { $ong = Ong::findOrFail($id); $user = Auth::user(); //Se a Ong a ser deletada pertencer ao usuario logado. if ($user->id == $ong->user->id) { $ong->delete(); } else { App::abort(403, 'Voce nao tem permissão para deletar uma vaga que não te pertence.'); } return view('home'); }
/** * Store a newly created resource in storage. * * @return Response */ public function store(CriarVagaRequest $request) { $ongResponsavel = Ong::find($request->get('ong')); //Checando se posso criar vagas if (!($ongResponsavel->user->id === Auth::user()->id)) { App::abort(403, "Apenas ongs tem permissão para criar Vagas"); } //Criando uma vaga com os campos do formulario $novaVaga = $ongResponsavel->vagas()->create($request->all()); $foto = Request::input('foto'); if ($foto && $foto > 0) { $novaVaga->fotos()->save(Foto::find($foto)); } // Faz um post de criação de vaga $novoPost = new Post(); $novoPost->descricao = "<h1><i class='fa fa-heart'></i></h1><a href='/vagas/" . $novaVaga->id . "' class=''>" . $ongResponsavel->nome . " criou uma vaga em " . $novaVaga->cidade->nome . "," . $novaVaga->estado->sigla . "</a>"; $novoPost->tipo_post = 'acontecimento'; //Salvando novoPost para entidadeAtiva $ongResponsavel->posts()->save($novoPost); //Setta o responsavel da vaga como sendo o perfil da ong $novaVaga->responsavel()->associate(Auth::user()->perfil); $novaVaga->push(); return redirect('vagas/' . $novaVaga->id); }
/** * Register any other events for your application. * * @param \Illuminate\Contracts\Events\Dispatcher $events * @return void */ public function boot(DispatcherContract $events) { parent::boot($events); Ong::observe(new GenericObserver()); Vaga::observe(new GenericObserver()); }
public function getSugestoesOngs($view) { $sugestoesOngs = Ong::getSugestoes(Auth::user()->entidadeAtiva); $view->with('sugestoesOngs', $sugestoesOngs); }