/**
  * 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;
 }
Exemple #5
0
 /**
  * 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'));
 }
Exemple #7
0
 /**
  * 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);
 }