Advertisement
Guest User

Untitled

a guest
Nov 16th, 2016
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 28.24 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Contatos;
  6. use App\Etnias;
  7. use App\Generos;
  8. use App\Instituicoes;
  9. use App\Mail\AtivarUsuario;
  10. use App\Municipios;
  11. use App\Nacionalidades;
  12. use App\Perfis;
  13. use App\UserAtivarConta;
  14. use Illuminate\Support\Facades\Hash;
  15. use App\User;
  16. use Illuminate\Http\Request;
  17. use DB;
  18. use Illuminate\Support\Facades\Input;
  19. use Validator;
  20. use App\Enderecos;
  21. use Mail;
  22. use Session;
  23. use Illuminate\Support\Facades\Auth;
  24. use App\RelacionamentoUsuarioPerfil;
  25. use Illuminate\Http\File;
  26. use App\UserTrocarEmail;
  27. use App\UserTrocarSenha;
  28.  
  29. class UsersController extends CrudController
  30. {
  31.     public function __construct()
  32.     {
  33.         $this->paginatorLimit = 10;
  34.         parent::__construct(User::class);
  35.  
  36.         $this->route_base_name = str_plural(mb_strtolower(class_basename(get_class($this->getModel()))));
  37.     }
  38.  
  39.     public function validateRulesOnCreate(Request $request)
  40.     {
  41.         $rules = [
  42.             'nome_completo' => 'required',
  43.             'email' => 'required',
  44.             'cpf' => 'required',
  45.             'rg' => 'required',
  46.             'data_nascimento' => 'required',
  47.             'nome_da_mae' => 'required',
  48.             'naturalidade_id' => 'required',
  49.             'nacionalidade_id' => 'required',
  50.             'etnia_id' => 'required',
  51.             'genero_id' => 'required',
  52.             'telefone' => 'required',
  53.         ];
  54.  
  55.         return Validator::make($request->all(), $rules);
  56.     }
  57.  
  58.     public function validateRulesOnUpdate(Request $request)
  59.     {
  60.         $rules = [
  61.             'nome_completo' => 'required',
  62.             'email' => 'required',
  63.             'cpf' => 'required',
  64.             'rg' => 'required',
  65.             'data_nascimento' => 'required',
  66.             'nome_da_mae' => 'required',
  67.             'naturalidade_id' => 'required',
  68.             'nacionalidade_id' => 'required',
  69.             'etnia_id' => 'required',
  70.             'genero_id' => 'required',
  71.             'telefone' => 'required',
  72.         ];
  73.  
  74.         return Validator::make($request->all(), $rules);
  75.     }
  76.  
  77.     public function create()
  78.     {
  79.         $instituicoes = Instituicoes::all();
  80.  
  81.         $perfis = Perfis::all();
  82.  
  83.         $nacionalidades = Nacionalidades::all();
  84.  
  85.         $municipios = Municipios::all();
  86.  
  87.         $etnias = Etnias::all();
  88.  
  89.         $generos = Generos::all();
  90.  
  91.         return view($this->templatePrefix.'.create', compact('municipios', 'nacionalidades', 'etnias', 'generos',
  92.             'instituicoes', 'perfis'));
  93.     }
  94.  
  95.     public function store(Request $request)
  96.     {
  97.         $validator = $this->validateRulesOnCreate($request);
  98.         if ($validator->fails()) {
  99.             return redirect(route($this->route_base_name.'.create'))->withErrors($validator)->withInput();
  100.         }
  101.  
  102.         foreach ($this->getModel()->getFillables() as $column) {
  103.             $this->getModel()->$column = $request->get($column);
  104.         }
  105.  
  106.         DB::beginTransaction();
  107.         try {
  108.             if (empty($this->getModel()->passaporte)) {
  109.                 $this->getModel()->passaporte = null;
  110.             }
  111.             if (empty($this->getModel()->foto_perfil)) {
  112.                 $this->getModel()->foto_perfil = 'public/avatar/avatar-default.png';
  113.             }
  114.  
  115.             $this->getModel()->save();
  116.             $relacionamento = new RelacionamentoUsuarioPerfil();
  117.             $relacionamento->perfil_id = Input::get('perfil_id');
  118.             $relacionamento->instituicao_id = Session::get('instituicao');
  119.             $relacionamento->usuario_id = $this->getModel()->id;
  120.             $relacionamento->save();
  121.             DB::commit();
  122.  
  123.             $token = str_random(30);
  124.             $usuarioativar = UserAtivarConta::updateOrCreate(['email' => $request->email],
  125.                 ['email' => $request->email, 'token' => $token]);
  126.  
  127.             try {
  128.                 $this->EnviarAtivacao($request->email, $token);
  129.             } catch (\Exception $e) {
  130.                 dd($e);
  131.                 //Ver a melhor forma de tratar o erro. Acredito que colocar o DB::commit dentro do try seria melhor.
  132.                 //se não enviar o email nao salva o usuário e mostra uma mensagem
  133.             }
  134.  
  135.             return redirect(route($this->route_base_name.'.index'))->with('success', 'registro criado com sucesso');
  136.         } catch (\Exception $ex) {
  137.             DB::rollBack();
  138.  
  139.             return redirect(route($this->route_base_name.'.create'))->withErrors($ex->getMessage())->withInput();
  140.         }
  141.     }
  142.  
  143.     public function dataTable(Request $request)
  144.     {
  145.         $query = $this->getModel()->select('nome_completo', 'cpf', 'email', 'id')->where(function ($q) use ($request) {
  146.             if ($search = $request->input('search.value')) {
  147.                 if (strlen($search)) {
  148.                     $q->where('nome_completo', 'like', "%{$search}%")->orWhere('cpf', 'like', "%{$search}%")
  149.                         ->orWhere('email', 'like', "%{$search}%");
  150.                 }
  151.             }
  152.         });
  153.  
  154.         $total = $query->count();
  155.  
  156.         if ($request->get('columns')) {
  157.             $query->orderBy($request->get('columns')[$request->get('order')[0]['column']]['data'], $request->get('order')[0]['dir']);
  158.         }
  159.  
  160.         $return = [
  161.             'draw' => $request->get('draw'),
  162.             'recordsTotal' => $total,
  163.             'recordsFiltered' => $query->get()->count(),
  164.             'data' => $query->forPage(($request->get('start') / $request->get('length')) + 1, $request->get('length'))->get(),
  165.         ];
  166.  
  167.         return response()->json($return);
  168.     }
  169.  
  170.     public function EnviarAtivacao($email, $data)
  171.     {
  172.         Mail::to($email)->send(new AtivarUsuario($email, $data));
  173.     }
  174.  
  175.     public function validateRulesToActivate(Request $request)
  176.     {
  177.         $rules = [
  178.                 'senha' => 'required',
  179.                 'confirmar_senha' => 'required',
  180.                 'logradouro' => 'required',
  181.                 'numero' => 'required',
  182.                 'cep'=>'required',
  183.                 'bairro'=>'required',
  184.             ];
  185.  
  186.  
  187.         return Validator::make($request->all(), $rules);
  188.     }
  189.  
  190.     public function AtivarConta(Request $request, $token, $email)
  191.     {
  192.         $validator = $this->validateRulesToActivate($request);
  193.  
  194.         if ($validator->fails()) {
  195.             return redirect()->back()->withErrors($validator)->withInput();
  196.         }
  197.  
  198.         $usuario_inativo = UserAtivarConta::where('email', $email)->first();
  199.         if ($usuario_inativo != null) {
  200.             $usuario = User::where('email', $email)->first();
  201.             if ($token == $usuario_inativo->token) {
  202.                 if ($request->senha == $request->confirmar_senha) {
  203.                     $usuario->password = Hash::make($request->senha);
  204.                     $usuario->ativo = true;
  205.  
  206.                     $endereço = Enderecos::create(['logradouro' => $request->logradouro, 'numero' => $request->numero,
  207.                         'complemento' => $request->complemento, 'cep' => $request->cep, 'bairro' => $request->bairro,
  208.                         'municipio_id' => $request->municipio,
  209.                     ]);
  210.  
  211.                     $contato = Contatos::create(['telefone_alternativo' => $request->telefone_alterantivo,
  212.                         'email_alternativo' => $request->email_alternativo,
  213.                     ]);
  214.  
  215.                     Auth::logout();
  216.                     Session::forget('perfil');
  217.                     Session::forget('perfis');
  218.                     if (Auth::attempt(array('email' => $usuario->email, 'password' => $request->senha)))
  219.                     {
  220.                         return redirect('/');
  221.                     }
  222.  
  223.                     $usuario->enderecos()->associate($endereço);
  224.                     $usuario->contatopessoasfisica()->associate($contato);
  225.                     $usuario->save();
  226.                     $usuario_inativo->delete();
  227.  
  228.                     if (Auth::attempt(array('email' => $usuario->email, 'password' => $request->senha))) {
  229.                         $usuario = Auth()->user();
  230.  
  231.                         return view('perfil.perfil', compact('usuario'));
  232.                     } else {
  233.                         return view('autenticacao.login');
  234.                     }
  235.                 } else {
  236.                     Session::flash('danger-senha-ativar', 'As senhas não combinam. Tente novamente');
  237.  
  238.                     return view('perfil.ativar_usuario')->with(['token' => $token, 'email' => $email]);
  239.                 }
  240.             } else {
  241.                 Session::flash('danger-senha-ativar', 'Esse link não é válido, provavelmente sua conta já foi ativada');
  242.  
  243.                 return view('perfil.ativar_usuario')->with(['token' => $token, 'email' => $email]);
  244.             }
  245.         } else {
  246.             return redirect('/login');
  247.         }
  248.     }
  249.     public function AtivarContaGET($token, $email)
  250.     {
  251.         Auth::logout();
  252.         $municipios = Municipios::all();
  253.  
  254.         return view('perfil.ativar_usuario', compact('token', 'email', 'municipios'));
  255.     }
  256.  
  257.     public function perfil()
  258.     {
  259.         return view('perfil.perfil', [
  260.             'usuario' => Auth::user(),
  261.             'contas' => Auth::user()->contasVinculadas()->pluck('driver'),
  262.         ]);
  263.     }
  264.  
  265.     public function alterarAvatar(Request $request)
  266.     {
  267.         $usuario = auth()->user();
  268.         $contas = $usuario->contasVinculadas()->pluck('driver');
  269.  
  270.         DB::beginTransaction();
  271.         if ($request->file('photo')->isValid()) {
  272.             $path = $request->photo->store('public/avatar');
  273.             $usuario->foto_perfil = $path;
  274.             $usuario->save();
  275.             DB::commit();
  276.         } else {
  277.             DB::rollBack();
  278.         }
  279.  
  280.         return view('perfil.perfil', [
  281.             'usuario' => Auth::user(),
  282.             'contas' => Auth::user()->contasVinculadas()->pluck('driver'),
  283.         ]);
  284.     }
  285.  
  286.     public function SolicitarEmail(Request $request)
  287.     {
  288.         $token = str_random(30);
  289.         $user = Auth::user();
  290.  
  291.         $rules = ['email_antigo' => 'email|required|',
  292.             'email_novo' => 'email|required|unique:users,email', ];
  293.  
  294.         $messages = [
  295.             'email_novo.unique' => 'Algum usuário já possui esse endereço de email.',
  296.         ];
  297.  
  298.         $validator = Validator::make(Input::all(), $rules, $messages);
  299.  
  300.         Session::flash('danger-email', null);
  301.  
  302.         if ($validator->fails()) {
  303.             return view('perfil.perfil', [
  304.             'usuario' => Auth::user(),
  305.             'contas' => Auth::user()->contasVinculadas()->pluck('driver'),
  306.         ])->withErrors($validator);
  307.         } else {
  308.             if ($request->email_antigo == $user->email) {
  309.                 $email = UserTrocarEmail::updateOrCreate(['usuario_id' => $user->id],
  310.                     ['usuario_id' => $user->id, 'novo_email' => $request->email_novo,
  311.                         'validade' => date('Y-m-d H:i:s', strtotime('+1 day')), 'token' => $token, ]
  312.                 );
  313.                 $data = $token;
  314.                 try {
  315.                     $this->Enviar($user, $email, $data);
  316.                     Session::flash('success-email', 'Um email de confirmação foi enviado para '.$user->email.'. Voce
  317.                    tem 24 para confirmar a troca');
  318.                 } catch (Exception $e) {
  319.                     Session::flash('danger-email', 'Algum problema aconteceu, tente novamente.');
  320.                 }
  321.             } else {
  322.                 Session::flash('danger-email', 'O email inserido nao corresponde ao seu email atual');
  323.             }
  324.  
  325.             return redirect('/perfil');
  326.         }
  327.     }
  328.  
  329.     public function SolicitarSenha(Request $request)
  330.     {
  331.         $token = str_random(30);
  332.         $user = Auth::user();
  333.  
  334.         $rules = ['senha' => 'required'];
  335.  
  336.         $validator = Validator::make(Input::all(), $rules);
  337.  
  338.         Session::flash('danger-senha', null);
  339.  
  340.         if ($validator->fails()) {
  341.             return view('perfil.perfil', [
  342.             'usuario' => Auth::user(),
  343.             'contas' => Auth::user()->contasVinculadas()->pluck('driver'),
  344.         ])->withErrors($validator);
  345.         } else {
  346.             if (Hash::check($request->senha, $user->password)) {
  347.                 $senha = UserTrocarSenha::updateOrCreate(['usuario_id' => $user->id],
  348.                     ['usuario_id' => $user->id, 'validade' => date('Y-m-d H:i:s', strtotime('+1 day')), 'token' => $token]
  349.                 );
  350.                 $data = $token;
  351.                 try {
  352.                     $this->EnviarSenha($user, $senha, $data);
  353.                     Session::flash('success-senha', 'Um email de confirmação foi enviado para '.$user->email);
  354.                 } catch (Exception $e) {
  355.                     Session::flash('danger-senha', 'Algum problema aconteceu, tente novamente.');
  356.                 }
  357.             } else {
  358.                 Session::flash('danger-senha', 'A senha inserida nao corresponde a sua senha');
  359.  
  360.                 return redirect('/perfil');
  361.             }
  362.         }
  363.  
  364.         return redirect('/perfil');
  365.     }
  366.  
  367.     public function ConfirmarEmailGET($token, $usuario_id)
  368.     {
  369.         $usuario_troca = UserTrocarEmail::where('usuario_id', $usuario_id)->first();
  370.         if ($usuario_troca != null) {
  371.             if ($usuario_troca->validade > date('Y-m-d H:i:s')) {
  372.                 return view('perfil.confirmar_email', compact('token', 'usuario_id'));
  373.             } else {
  374.                 Session::flash('danger-email', 'A validade da solicitaçao expirou. Solicite uma nova.');
  375.  
  376.                 return view('perfil.confirmar_email', compact('token', 'usuario_id'));
  377.             }
  378.         } else {
  379.             Session::flash('danger-email', 'Este link nao é válido. Solicite uma nova troca');
  380.  
  381.             return view('perfil.confirmar_email', compact('token', 'usuario_id'));
  382.         }
  383.     }
  384.  
  385.     public function ConfirmarEmailPOST(Request $request, $token, $usuario_id)
  386.     {
  387.         $usuario = User::find($usuario_id);
  388.         $usuario_troca = UserTrocarEmail::where('usuario_id', $usuario->id)->first();
  389.         if (Hash::check($request->senha, $usuario->password)) {
  390.             if ($token === $usuario_troca->token) {
  391.                 $usuario->email = $usuario_troca->novo_email;
  392.                 $usuario->save();
  393.                 $usuario_troca->delete();
  394.                 if (Auth::check()) {
  395.                     Session::flash('danger-email', null);
  396.                     Session::flash('success-email', 'Seu email foi alterado para '.$usuario->email);
  397.  
  398.                     return redirect('/perfil');
  399.                 } else {
  400.                     if (Auth::attempt(array('email' => $usuario->email, 'password' => $request->senha))) {
  401.                         Session::flash('danger-email', null);
  402.                         Session::flash('success-email', 'Seu email foi alterado para '.$usuario->email);
  403.  
  404.                         return redirect('/perfil');
  405.                     }
  406.                     else{
  407.                         Auth::logout();
  408.                         Session::forget('perfil');
  409.                         Session::forget('perfis');
  410.                         if (Auth::attempt(array('email' => $usuario->email, 'password' => $request->senha))){
  411.                             Session::flash('danger-email', null);
  412.                             Session::flash('success-email', 'Seu email foi alterado para ' . $usuario->email);
  413.                             return redirect('/perfil');
  414.                         }
  415.                         else
  416.                             return view('autenticacao.login');
  417.  
  418.                     }
  419.                 }
  420.             } else {
  421.                 Session::flash('danger-email', 'Este link nao e valido. Solicite uma nova troca');
  422.  
  423.                 return redirect('/perfil');
  424.             }
  425.         } else {
  426.             Session::flash('danger-email', 'A senha nao corresponde. Tente novamente');
  427.  
  428.             return view('perfil.confirmar_email', compact('token', 'usuario_id'));
  429.         }
  430.     }
  431.  
  432.     public function ConfirmarSenhaGET($token, $usuario_id)
  433.     {
  434.         $usuario_troca = UserTrocarSenha::where('usuario_id', $usuario_id)->first();
  435.         if ($usuario_troca != null) {
  436.             if ($usuario_troca->validade > date('Y-m-d H:i:s')) {
  437.                 return view('perfil.confirmar_senha', compact('token', 'usuario_id'));
  438.             } else {
  439.                 Session::flash('danger-senha', 'A validade da solicitaçao expirou. Solicite uma nova.');
  440.  
  441.                 return view('perfil.confirmar_senha');
  442.             }
  443.         } else {
  444.             Session::flash('danger-senha', 'Este link não é válido. Solicite outro');
  445.  
  446.             return view('perfil.confirmar_senha');
  447.         }
  448.     }
  449.  
  450.     public function ConfirmarSenhaPOST(Request $request, $token, $usuario_id)
  451.     {
  452.         $usuario = User::find($usuario_id);
  453.         $usuario_troca = UserTrocarSenha::where('usuario_id', $usuario_id)->first();
  454.         if(Hash::check($request->password_antigo, $usuario->password)){
  455.             if($request->password_novo == $request->password_novo_confirmar){
  456.                 if($token == $usuario_troca->token){
  457.                     DB::beginTransaction();
  458.                     try{
  459.                         $usuario->password = Hash::make($request->password_novo);
  460.                         $usuario->save();
  461.                         $usuario_troca->delete();
  462.                         DB::commit();
  463.                         Auth::logout();
  464.                         Session::forget('perfil');
  465.                         Session::forget('perfis');
  466.                         if (Auth::attempt(array('email' => $usuario->email, 'password' => $request->password_novo)))
  467.                         {
  468.                             Session::flash('danger-senha', null);
  469.                             Session::flash('success-senha', 'Sua senha foi alterada');
  470.                             return redirect('/perfil');
  471.                         }
  472.                         else
  473.                             return view('autenticacao.login');
  474.                     }
  475.                     catch(\Exception $e){
  476.                         DB::rollback();
  477.                         return redirect()->back()->withErrors($e->getMessage())->withInput();
  478.                     }
  479.                 } else {
  480.                     Session::flash('danger-senha', 'Esse link nao e valido. Solicite outro');
  481.  
  482.                     return view('perfil.confirmar_senha', compact('token', 'usuario_id'));
  483.                 }
  484.             } else {
  485.                 Session::flash('danger-senha', 'As senhas nao correspondem');
  486.  
  487.                 return view('perfil.confirmar_senha', compact('token', 'usuario_id'));
  488.             }
  489.         } else {
  490.             Session::flash('danger-senha', 'A senha nao corresponde');
  491.  
  492.             return view('perfil.confirmar_senha', compact('token', 'usuario_id'));
  493.         }
  494.     }
  495.  
  496.     public function Enviar(User $user, UserTrocarEmail $user_trocar_email, $data)
  497.     {
  498.         Mail::to($user->email)->send(new AtivarUsuario($user, $user_trocar_email, $data));
  499.     }
  500.  
  501.     public function EnviarSenha(User $user, UserTrocarSenha $user_trocar_senha, $data)
  502.     {
  503.         Mail::to($user->email)->send(new AtivarUsuario($user, $user_trocar_senha, $data));
  504.     }
  505.  
  506.     public function AlterarImagem(Request $request)
  507.     {
  508.         $user = Auth::user();
  509.         if ($request->hasFile('image')) {
  510.             $time = time();
  511.             $imagem = $time.$request->file('image')->getClientOriginalName();
  512.             $extension = File::extension($imagem);
  513.             if ($extension != 'jpg' && $extension != 'png' && $extension != 'jpeg') {
  514.                 Session::flash('picture-danger', 'A imagem deve sem .png, .jpg ou .jpeg');
  515.             } else {
  516.                 Session::flash('picture-danger', null);
  517.                 $local = public_path('resources/media/avatar/');
  518.                 $request->file('image')->move($local, $imagem);
  519.                 $user->foto_perfil = 'resources/media/avatar/'.$imagem;
  520.                 $user->save();
  521.             }
  522.         }
  523.  
  524.         return redirect('/perfil');
  525.     }
  526.  
  527.     public function consultarAlunos(Request $request)
  528.     {
  529.         return view('users.index_aluno');
  530.     }
  531.  
  532.     public function alunosDatatables(Request $request)
  533.     {
  534.         $perfil = $request->session()->get('perfil');
  535.  
  536.         $query = $this->getModel()
  537.             ->join('relacionamento_usuario_perfils', 'users.id', '=', 'relacionamento_usuario_perfils.usuario_id')
  538.             ->where(function ($q) use ($request, $perfil) {
  539.                 if ($search = $request->input('search.value')) {
  540.                     if (strlen($search)) {
  541.                         $q->orwhere('users.nome_completo', 'like', "%{$search}%")
  542.                             ->orWhere('users.cpf', 'like', "%{$search}%")
  543.                             ->orWhere('users.email', 'like', "%{$search}%");
  544.                     }
  545.                 }
  546.  
  547.                 $q->where('relacionamento_usuario_perfils.perfil_id', '=', 1);
  548.  
  549. //                Verifica se o usuário possui o perfil de Setor ou Secretário para que com isso seja aplicado um filtro
  550. //                de instituição
  551.                 if (in_array($perfil, [3, 4])) {
  552.                     $q->where('relacionamento_usuario_perfils.instituicao_id', '=', $request->session()->get('instituicao'));
  553.                 }
  554.  
  555.                 $q->select('users.nome_completo', 'users.cpf', 'users.email', 'users.id');
  556.             });
  557.  
  558.         $total = $query->count();
  559.  
  560.         if ($request->get('columns')) {
  561.             $query->orderBy($request->get('columns')[$request->get('order')[0]['column']]['data'], $request->get('order')[0]['dir']);
  562.         }
  563.  
  564.         $return = [
  565.             'draw' => $request->get('draw'),
  566.             'recordsTotal' => $total,
  567.             'recordsFiltered' => $query->get()->count(),
  568.             'data' => $query->forPage(($request->get('start') / $request->get('length')) + 1, $request->get('length'))->get(),
  569.         ];
  570.  
  571.         return response()->json($return);
  572.     }
  573.  
  574.     public function storeProfessor(Request $request)
  575.     {
  576.         $validator = $this->validateRulesOnCreate($request);
  577.         if($validator->fails())
  578.         {
  579.             return redirect('professores')->withErrors($validator)->withInput();
  580.         }
  581.  
  582.         foreach($this->getModel()->getFillables() as $column)
  583.         {
  584.             $this->getModel()->$column = $request->get($column);
  585.         }
  586.  
  587.         DB::beginTransaction();
  588.         try
  589.         {
  590.             if(empty($this->getModel()->passaporte)){
  591.                 $this->getModel()->passaporte = null;
  592.             };
  593.             if(empty($this->getModel()->foto_perfil)){
  594.                 $this->getModel()->foto_perfil = 'public/avatar/avatar-default.png';
  595.             };
  596.  
  597.             $this->getModel()->save();
  598.             $relacionamento = new RelacionamentoUsuarioPerfil;
  599.             $relacionamento->perfil_id = 2;
  600.             $relacionamento->instituicao_id = Session::get('instituicao');
  601.             $relacionamento->usuario_id = $this->getModel()->id;
  602.             $relacionamento->save();
  603.             DB::commit();
  604.  
  605.             $token = str_random(30);
  606.             $usuarioativar = UserAtivarConta::updateOrCreate(['email'=>$request->email],
  607.                 ['email'=>$request->email, 'token'=>$token]);
  608.  
  609.             try{
  610.                 $this->EnviarAtivacao($request->email, $token);
  611.             }
  612.             catch(\Exception $e) {
  613.                 dd($e);
  614.                 //Ver a melhor forma de tratar o erro. Acredito que colocar o DB::commit dentro do try seria melhor.
  615.                 //se não enviar o email nao salva o usuário e mostra uma mensagem
  616.             }
  617.  
  618.             return redirect('professores')->with('success', 'registro criado com sucesso');
  619.  
  620.  
  621.         }
  622.         catch(\Exception $ex)
  623.         {
  624.             DB::rollBack();
  625.             return redirect(url('professores'))->withErrors($ex->getMessage())->withInput();
  626.         }
  627.     }
  628.  
  629.     public function createProfessor()
  630.     {
  631.         $instituicoes = Instituicoes::all();
  632.  
  633.         $perfis = Perfis::all();
  634.  
  635.         $nacionalidades = Nacionalidades::all();
  636.  
  637.         $municipios = Municipios::all();
  638.  
  639.         $etnias = Etnias::all();
  640.  
  641.         $generos = Generos::all();
  642.  
  643.         return view('setor.professor.create', compact("municipios", "nacionalidades", "etnias", "generos",
  644.             "instituicoes", "perfis"));
  645.     }
  646.  
  647.     public function consultarProfessores(Request $request)
  648.     {
  649.         return view('users.index_professor');
  650.     }
  651.  
  652.     public function professoresDatatables(Request $request)
  653.     {
  654.         $perfil = $request->session()->get('perfil');
  655.  
  656.         $query = $this->getModel()
  657.             ->join('relacionamento_usuario_perfils', 'users.id', '=', 'relacionamento_usuario_perfils.usuario_id')
  658.             ->where(function ($q) use ($request, $perfil) {
  659.                 if ($search = $request->input('search.value')) {
  660.                     if (strlen($search)) {
  661.                         $q->orwhere('users.nome_completo', 'like', "%{$search}%")
  662.                             ->orWhere('users.cpf', 'like', "%{$search}%")
  663.                             ->orWhere('users.email', 'like', "%{$search}%");
  664.                     }
  665.                 }
  666.  
  667.                 $q->where('relacionamento_usuario_perfils.perfil_id', '=', 2);
  668.  
  669. //                Verifica se o usuário possui o perfil de Setor ou Secretário para que com isso seja aplicado um filtro
  670. //                de instituição
  671.                 if (in_array($perfil, [3, 4])) {
  672.                     $q->where('relacionamento_usuario_perfils.instituicao_id', '=', $request->session()->get('instituicao'));
  673.                 }
  674.  
  675.                 $q->select('users.nome_completo', 'users.cpf', 'users.email', 'users.id');
  676.             });
  677.  
  678.         $total = $query->count();
  679.  
  680.         if ($request->get('columns')) {
  681.             $query->orderBy($request->get('columns')[$request->get('order')[0]['column']]['data'], $request->get('order')[0]['dir']);
  682.         }
  683.  
  684.         $return = [
  685.             'draw' => $request->get('draw'),
  686.             'recordsTotal' => $total,
  687.             'recordsFiltered' => $query->get()->count(),
  688.             'data' => $query->forPage(($request->get('start') / $request->get('length')) + 1, $request->get('length'))->get(),
  689.         ];
  690.  
  691.         return response()->json($return);
  692.     }
  693.  
  694.     public function storeAluno(Request $request)
  695.     {
  696.         $validator = $this->validateRulesOnCreate($request);
  697.         if($validator->fails())
  698.         {
  699.             return redirect(route($this->route_base_name . '.create'))->withErrors($validator)->withInput();
  700.         }
  701.  
  702.         foreach($this->getModel()->getFillables() as $column)
  703.         {
  704.             $this->getModel()->$column = $request->get($column);
  705.         }
  706.  
  707.         DB::beginTransaction();
  708.         try
  709.         {
  710.             if(empty($this->getModel()->passaporte)){
  711.                 $this->getModel()->passaporte = null;
  712.             };
  713.             if(empty($this->getModel()->foto_perfil)){
  714.                 $this->getModel()->foto_perfil = 'public/avatar/avatar-default.png';
  715.             };
  716.  
  717.             $this->getModel()->save();
  718.             $relacionamento = new RelacionamentoUsuarioPerfil;
  719.             $relacionamento->perfil_id = 1;
  720.             $relacionamento->instituicao_id = Session::get('instituicao');
  721.             $relacionamento->usuario_id = $this->getModel()->id;
  722.             $relacionamento->save();
  723.             DB::commit();
  724.  
  725.             $token = str_random(30);
  726.             $usuarioativar = UserAtivarConta::updateOrCreate(['email'=>$request->email],
  727.                 ['email'=>$request->email, 'token'=>$token]);
  728.  
  729.             try{
  730.                 $this->EnviarAtivacao($request->email, $token);
  731.             }
  732.             catch(\Exception $e) {
  733.                 dd($e);
  734.                 //Ver a melhor forma de tratar o erro. Acredito que colocar o DB::commit dentro do try seria melhor.
  735.                 //se não enviar o email nao salva o usuário e mostra uma mensagem
  736.             }
  737.  
  738.             return redirect(route($this->route_base_name . '.index'))->with('success', 'registro criado com sucesso');
  739.  
  740.  
  741.         }
  742.         catch(\Exception $ex)
  743.         {
  744.             DB::rollBack();
  745.             return redirect(route($this->route_base_name . '.create'))->withErrors($ex->getMessage())->withInput();
  746.         }
  747.     }
  748. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement