Advertisement
Guest User

Untitled

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