Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers;
- use App\Contatos;
- use App\Etnias;
- use App\Generos;
- use App\Instituicoes;
- use App\Mail\AtivarUsuario;
- use App\Mail\EmailChanged;
- use App\Mail\PasswordChanged;
- use App\Municipios;
- use App\Nacionalidades;
- use App\Perfis;
- use App\UserAtivarConta;
- use Illuminate\Support\Facades\Hash;
- use App\User;
- use Illuminate\Http\Request;
- use App\Http\Requests;
- use DB;
- use Illuminate\Support\Facades\Input;
- use Illuminate\Validation\Rules\In;
- use League\Flysystem\Exception;
- use Validator;
- use App\Enderecos;
- use Mail;
- use Session;
- use Illuminate\Support\Facades\Auth;
- use App\RelacionamentoUsuarioPerfil;
- use Illuminate\Http\File;
- use Illuminate\Support\Facades\Storage;
- use App\UserTrocarEmail;
- use App\UserTrocarSenha;
- use App\Jobs\EnviarTrocaSenha;
- use App\Jobs\EnviarTrocaEmail;
- class UsersController extends CrudController
- {
- public function __construct()
- {
- $this->paginatorLimit = 10;
- parent::__construct(User::class);
- $this->route_base_name = str_plural(mb_strtolower(class_basename(get_class($this->getModel()))));
- }
- public function validateRulesOnCreate(Request $request)
- {
- $rules = [
- 'nome_completo' => 'required',
- 'email' => 'required',
- 'cpf' => 'required',
- 'rg' => 'required',
- 'data_nascimento' => 'required',
- 'nome_da_mae' => 'required',
- 'naturalidade_id' => 'required',
- 'nacionalidade_id' => 'required',
- 'etnia_id' => 'required',
- 'genero_id' => 'required',
- 'telefone' => 'required',
- ];
- $messages = [
- 'required' => 'O campo :attribute é obrigatório',
- 'integer' => 'O campo :attribute deve ser um número inteiro'
- ];
- return Validator::make($request->all(), $rules, $messages);
- }
- public function validateRulesOnUpdate(Request $request)
- {
- $rules = [
- 'nome_completo' => 'required',
- 'email' => 'required',
- 'cpf' => 'required',
- 'rg' => 'required',
- 'data_nascimento' => 'required',
- 'nome_da_mae' => 'required',
- 'naturalidade_id' => 'required',
- 'nacionalidade_id' => 'required',
- 'etnia_id' => 'required',
- 'genero_id' => 'required',
- 'telefone' => 'required'
- ];
- $messages = [
- 'required' => 'O campo :attribute é obrigatório',
- 'integer' => 'O campo :attribute deve ser um número inteiro'
- ];
- return Validator::make($request->all(), $rules, $messages);
- }
- public function create()
- {
- $instituicoes = Instituicoes::all();
- $perfis = Perfis::all();
- $nacionalidades = Nacionalidades::all();
- $municipios = Municipios::all();
- $etnias = Etnias::all();
- $generos = Generos::all();
- return view($this->templatePrefix. '.create', compact("municipios", "nacionalidades", "etnias", "generos",
- "instituicoes", "perfis"));
- }
- public function store(Request $request)
- {
- $validator = $this->validateRulesOnCreate($request);
- if($validator->fails())
- {
- return redirect(route($this->route_base_name . '.create'))->withErrors($validator)->withInput();
- }
- foreach($this->getModel()->getFillables() as $column)
- {
- $this->getModel()->$column = $request->get($column);
- }
- DB::beginTransaction();
- try
- {
- if(empty($this->getModel()->passaporte)){
- $this->getModel()->passaporte = null;
- };
- if(empty($this->getModel()->foto_perfil)){
- $this->getModel()->foto_perfil = 'public/avatar/avatar-default.png';
- };
- $this->getModel()->save();
- $relacionamento = new RelacionamentoUsuarioPerfil;
- $relacionamento->perfil_id = Input::get('perfil_id');
- $relacionamento->instituicao_id = Session::get('instituicao');
- $relacionamento->usuario_id = $this->getModel()->id;
- $relacionamento->save();
- DB::commit();
- $token = str_random(30);
- $usuarioativar = UserAtivarConta::updateOrCreate(['email'=>$request->email],
- ['email'=>$request->email, 'token'=>$token]);
- try{
- $this->EnviarAtivacao($request->email, $token);
- }
- catch(\Exception $e) {
- dd($e);
- //Ver a melhor forma de tratar o erro. Acredito que colocar o DB::commit dentro do try seria melhor.
- //se não enviar o email nao salva o usuário e mostra uma mensagem
- }
- return redirect(route($this->route_base_name . '.index'))->with('success', 'registro criado com sucesso');
- }
- catch(\Exception $ex)
- {
- DB::rollBack();
- return redirect(route($this->route_base_name . '.create'))->withErrors($ex->getMessage())->withInput();
- }
- }
- public function dataTable(Request $request)
- {
- $query = $this->getModel()->select('nome_completo', 'cpf', 'email', 'id')->where(function($q) use ($request)
- {
- if($search = $request->input('search.value'))
- {
- if (strlen($search)) {
- $q->where('nome_completo', 'like', "%{$search}%")->orWhere('cpf', 'like', "%{$search}%")
- ->orWhere('email', 'like', "%{$search}%");
- }
- }
- });
- $total = $query->count();
- if($request->get('columns'))
- {
- $query->orderBy($request->get('columns')[$request->get('order')[0]['column']]['data'], $request->get('order')[0]['dir']);
- }
- $return = [
- 'draw' => $request->get('draw'),
- 'recordsTotal' => $total,
- 'recordsFiltered' => $query->get()->count(),
- 'data' => $query->forPage(($request->get('start') / $request->get('length')) + 1, $request->get('length'))->get()
- ];
- return response()->json($return);
- }
- public function EnviarAtivacao($email, $data)
- {
- Mail::to($email)->send(new AtivarUsuario($email, $data));
- }
- public function validateRulesToActivate(Request $request){
- $rules = [
- 'senha'=>'required',
- 'confirmar_senha'=>'required',
- 'logradouro' => 'required',
- 'numero' => 'required',
- 'cep'=>'required',
- 'bairro'=>'required',
- ];
- $messages = [
- 'required' => 'O campo :attribute é obrigatório',
- 'integer' => 'O campo :attribute deve ser um número inteiro'
- ];
- return Validator::make($request->all(), $rules, $messages);
- }
- public function AtivarConta(Request $request ,$token, $email)
- {
- $validator = $this->validateRulesToActivate($request);
- if($validator->fails())
- {
- return redirect()->back()->withErrors($validator)->withInput();
- }
- $usuario_inativo = UserAtivarConta::where('email', $email)->first();
- if($usuario_inativo != null){
- $usuario = User::where('email', $email)->first();
- if ($token == $usuario_inativo->token)
- {
- if ($request->senha == $request->confirmar_senha){
- $usuario->password = Hash::make($request->senha);
- $usuario->ativo = true;
- DB::beginTransaction();
- try {
- $endereço = Enderecos::create(['logradouro' => $request->logradouro, 'numero' => $request->numero,
- 'complemento' => $request->complemento, 'cep' => $request->cep, 'bairro' => $request->bairro,
- 'municipio_id' => $request->municipio
- ]);
- $contato = Contatos::create(['telefone_alternativo' => $request->telefone_alterantivo,
- 'email_alternativo' => $request->email_alternativo,
- ]);
- $usuario->enderecos()->associate($endereço);
- $usuario->contatopessoasfisica()->associate($contato);
- $usuario->save();
- $usuario_inativo->delete();
- DB::commit();
- }
- catch(\Exception $e)
- {
- DB::rollback();
- return redirect()->back()->withErrors($e->getMessage())->withInput();
- }
- Auth::logout();
- Session::forget('perfil');
- Session::forget('perfis');
- if (Auth::attempt(array('email' => $usuario->email, 'password' => $request->senha)))
- {
- return redirect('/');
- }
- else{
- return view('autenticacao.login');
- }
- }
- else{
- Session::flash('danger-senha-ativar', 'As senhas não combinam. Tente novamente');
- return view('perfil.ativar_usuario')->with(['token'=>$token, 'email'=>$email]);
- }
- }
- else{
- Session::flash('danger-senha-ativar', 'Esse link não é válido, provavelmente sua conta já foi ativada');
- return view('perfil.ativar_usuario')->with(['token'=>$token, 'email'=>$email]);
- }
- }
- else{
- return redirect('/login');
- }
- }
- public function AtivarContaGET($token, $email)
- {
- Auth::logout();
- $municipios = Municipios::all();
- return view('perfil.ativar_usuario', compact('token', 'email', 'municipios'));
- }
- public function perfil()
- {
- return view('perfil.perfil', [
- 'usuario' => Auth::user(),
- 'contas' => Auth::user()->contasVinculadas()->pluck('driver')
- ]);
- }
- public function alterarAvatar(Request $request)
- {
- $usuario = auth()->user();
- $contas = $usuario->contasVinculadas()->pluck('driver');
- DB::beginTransaction();
- if ($request->file('photo')->isValid()) {
- $path = $request->photo->store('public/avatar');
- $usuario->foto_perfil = $path;
- $usuario->save();
- DB::commit();
- }
- else
- {
- DB::rollBack();
- }
- return view('perfil.perfil', [
- 'usuario' => Auth::user(),
- 'contas' => Auth::user()->contasVinculadas()->pluck('driver')
- ]);
- }
- public function SolicitarEmail(Request $request){
- $token = str_random(30);
- $user = Auth::user();
- $rules = ['email_antigo' => 'email|required|',
- 'email_novo' => 'email|required|unique:users,email'];
- $messages = [
- 'email_antigo.required'=>'Preencha o campo Email',
- 'email_novo.required'=>'Preencha o campo Novo Email',
- 'email_novo.unique'=>'Algum usuario ja possui esse Email',
- ];
- $validator = Validator::make(Input::all(), $rules, $messages);
- Session::flash('danger-email', null);
- if($validator->fails()) return view('perfil.perfil', [
- 'usuario' => Auth::user(),
- 'contas' => Auth::user()->contasVinculadas()->pluck('driver')
- ])->withErrors($validator);
- else
- {
- DB::beginTransaction();
- try{
- if($request->email_antigo == $user->email){
- $email = UserTrocarEmail::updateOrCreate(['usuario_id'=>$user->id],
- ['usuario_id'=>$user->id, 'novo_email'=>$request->email_novo,
- 'validade'=>date('Y-m-d H:i:s', strtotime("+1 day")), 'token'=>$token]
- );
- DB::commit();
- $data = $token;
- try{
- $this->EnviarEmail($user, $email, $data);
- Session::flash('success-email', 'Um email de confirmação foi enviado para '. $user->email . ". Voce
- tem 24 para confirmar a troca");
- }
- catch(Exception $e) {
- Session::flash('danger-email', 'Algum problema aconteceu, tente novamente.');
- }
- }
- else{
- Session::flash('danger-email', 'O email inserido nao corresponde ao seu email atual');
- }
- }
- catch(\Exception $e){
- DB::rollback();
- return redirect()->back()->withErrors($e->getMessage())->withInput();
- }
- return redirect('/perfil');
- }
- }
- public function SolicitarSenha(Request $request){
- $token = str_random(30);
- $user = Auth::user();
- $rules = ['senha' => 'required'];
- $messages = ['senha.required'=>'Preencha o campo Senha'];
- $validator = Validator::make(Input::all(), $rules, $messages);
- Session::flash('danger-senha', null);
- if($validator->fails()) return view('perfil.perfil', [
- 'usuario' => Auth::user(),
- 'contas' => Auth::user()->contasVinculadas()->pluck('driver')
- ])->withErrors($validator);
- else{
- if(Hash::check($request->senha, $user->password))
- {
- DB::beginTransaction();
- try{
- $senha = UserTrocarSenha::updateOrCreate(['usuario_id' => $user->id],
- ['usuario_id'=>$user->id, 'validade'=>date('Y-m-d H:i:s', strtotime("+1 day")), 'token'=>$token]
- );
- DB::commit();
- $data = $token;
- try {
- $this->EnviarSenha($user, $senha, $data);
- Session::flash('success-senha', 'Um email de confirmação foi enviado para '. $user->email);
- }
- catch(Exception $e){
- Session::flash('danger-senha', 'Algum problema aconteceu, tente novamente.');
- }
- }
- catch(\Exception $e){
- DB::rollback();
- return redirect()->back()->withErrors($e->getMessage())->withInput();
- }
- }
- else{
- Session::flash('danger-senha', 'A senha inserida nao corresponde a sua senha');
- return redirect('/perfil');
- }
- }
- return redirect('/perfil');
- }
- public function ConfirmarEmailGET($token, $usuario_id){
- Auth::logout();
- $usuario_troca = UserTrocarEmail::where('usuario_id', $usuario_id)->first();
- if($usuario_troca != null){
- if($usuario_troca->validade > date('Y-m-d H:i:s')){
- return view('perfil.confirmar_email', compact('token', 'usuario_id'));
- }
- else{
- Session::flash('danger-email', 'A validade da solicitaçao expirou. Solicite uma nova.');
- return view('perfil.confirmar_email' , compact('token', 'usuario_id'));
- }
- }
- else{
- Session::flash('danger-email', 'Este link nao é válido. Solicite uma nova troca');
- return view('perfil.confirmar_email', compact('token', 'usuario_id'));
- }
- }
- public function ConfirmarEmailPOST(Request $request, $token, $usuario_id){
- $usuario = User::find($usuario_id);
- $usuario_troca = UserTrocarEmail::where('usuario_id', $usuario->id)->first();
- if(Hash::check($request->senha, $usuario->password)) {
- DB::beginTransaction();
- try{
- if($token === $usuario_troca->token){
- $usuario->email=$usuario_troca->novo_email;
- $usuario->save();
- $usuario_troca->delete();
- DB::commit();
- if(Auth::check()){
- Session::flash('danger-email', null);
- Session::flash('success-email', 'Seu email foi alterado para ' . $usuario->email);
- return redirect('/perfil');
- }
- else{
- Auth::logout();
- Session::forget('perfil');
- Session::forget('perfis');
- if (Auth::attempt(array('email' => $usuario->email, 'password' => $request->senha))){
- Session::flash('danger-email', null);
- Session::flash('success-email', 'Seu email foi alterado para ' . $usuario->email);
- return redirect('/perfil');
- }
- else
- return view('autenticacao.login');
- }
- }
- else{
- Session::flash('danger-email', 'Este link nao e valido. Solicite uma nova troca');
- return redirect('/perfil');
- }
- }
- catch(\Exception $e){
- DB::rollback();
- return redirect()->back()->withErrors($e->getMessage())->withInput();
- }
- }
- else{
- Session::flash('danger-email', 'A senha nao corresponde. Tente novamente');
- return view('perfil.confirmar_email', compact('token', 'usuario_id'));
- }
- }
- public function ConfirmarSenhaGET($token, $usuario_id)
- {
- $usuario_troca = UserTrocarSenha::where('usuario_id', $usuario_id)->first();
- if($usuario_troca != null){
- if($usuario_troca->validade > date('Y-m-d H:i:s')){
- return view('perfil.confirmar_senha', compact('token', 'usuario_id'));
- }
- else{
- Session::flash('danger-senha', 'A validade da solicitaçao expirou. Solicite uma nova.');
- return view('perfil.confirmar_senha');
- }
- }
- else{
- Session::flash('danger-senha', 'Este link não é válido. Solicite outro');
- return view('perfil.confirmar_senha');
- }
- }
- public function ConfirmarSenhaPOST(Request $request, $token, $usuario_id)
- {
- $usuario = User::find($usuario_id);
- $usuario_troca = UserTrocarSenha::where('usuario_id', $usuario_id)->first();
- if(Hash::check($request->password_antigo, $usuario->password)){
- if($request->password_novo == $request->password_novo_confirmar){
- if($token == $usuario_troca->token){
- DB::beginTransaction();
- try{
- $usuario->password = Hash::make($request->password_novo);
- $usuario->save();
- $usuario_troca->delete();
- DB::commit();
- Auth::logout();
- Session::forget('perfil');
- Session::forget('perfis');
- if (Auth::attempt(array('email' => $usuario->email, 'password' => $request->password_novo)))
- {
- Session::flash('danger-senha', null);
- Session::flash('success-senha', 'Sua senha foi alterada');
- return redirect('/perfil');
- }
- else
- return view('autenticacao.login');
- }
- catch(\Exception $e){
- DB::rollback();
- return redirect()->back()->withErrors($e->getMessage())->withInput();
- }
- }
- else{
- Session::flash('danger-senha', 'Esse link nao e valido. Solicite outro');
- return view('perfil.confirmar_senha', compact('token', 'usuario_id'));
- }
- }
- else{
- Session::flash('danger-senha', 'As senhas nao correspondem');
- return view('perfil.confirmar_senha', compact('token', 'usuario_id'));
- }
- }
- else{
- Session::flash('danger-senha', 'A senha nao corresponde');
- return view('perfil.confirmar_senha', compact('token', 'usuario_id'));
- }
- }
- public function EnviarEmail(User $user, UserTrocarEmail $user_trocar_email, $data)
- {
- Mail::to($user->email)->send(new EmailChanged($user, $user_trocar_email, $data));
- }
- public function EnviarSenha(User $user, UserTrocarSenha $user_trocar_senha, $data)
- {
- Mail::to($user->email)->send(new PasswordChanged($user, $user_trocar_senha, $data));
- }
- public function AlterarImagem(Request $request){
- $user = Auth::user();
- if( $request->hasFile('image') ){
- $time=time();
- $imagem = $time . $request->file('image')->getClientOriginalName();
- $extension = File::extension($imagem);
- if($extension != "jpg" && $extension != "png" && $extension != "jpeg")
- Session::flash('picture-danger', 'A imagem deve sem .png, .jpg ou .jpeg');
- else{
- Session::flash('picture-danger', null);
- $local = public_path('resources/media/avatar/');
- $request->file('image')->move($local, $imagem);
- $user->foto_perfil = 'resources/media/avatar/' . $imagem;
- $user->save();
- }
- }
- return redirect('/perfil');
- }
- public function consultarAlunos(Request $request){
- return view('users.index_aluno');
- }
- public function alunosDatatables(Request $request){
- $perfil = $request->session()->get('perfil');
- $query = $this->getModel()
- ->join('relacionamento_usuario_perfils', 'users.id', '=', 'relacionamento_usuario_perfils.usuario_id')
- ->where(function($q) use ($request, $perfil)
- {
- if($search = $request->input('search.value'))
- {
- if (strlen($search)) {
- $q->orwhere('users.nome_completo', 'like', "%{$search}%")
- ->orWhere('users.cpf', 'like', "%{$search}%")
- ->orWhere('users.email', 'like', "%{$search}%");
- }
- }
- $q->where('relacionamento_usuario_perfils.perfil_id', '=', 1);
- // Verifica se o usuário possui o perfil de Setor ou Secretário para que com isso seja aplicado um filtro
- // de instituição
- if(in_array($perfil, [3, 4])){
- $q->where('relacionamento_usuario_perfils.instituicao_id', '=', $request->session()->get('instituicao'));
- }
- $q->select('users.nome_completo', 'users.cpf', 'users.email', 'users.id');
- });
- $total = $query->count();
- if($request->get('columns'))
- {
- $query->orderBy($request->get('columns')[$request->get('order')[0]['column']]['data'], $request->get('order')[0]['dir']);
- }
- $return = [
- 'draw' => $request->get('draw'),
- 'recordsTotal' => $total,
- 'recordsFiltered' => $query->get()->count(),
- 'data' => $query->forPage(($request->get('start') / $request->get('length')) + 1, $request->get('length'))->get()
- ];
- return response()->json($return);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement