File manager - Edit - /var/www/html/portalHomolog/app/Http/Controllers/Admin/EventosController.php
Back
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Evento; use App\Models\Structure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Http\RedirectResponse; use Illuminate\View\View; class EventosController extends Controller { private function isAdmin(): bool { $user = Auth::user(); return in_array('ADMIN', $user->listaPermissoesAtivas()); } private function canPublicServerCreate(): bool { $u = Auth::user(); return (bool) ($u->isServidorPublico) && $u->status === 'ATIVADO' && !empty($u->matriculation); } public function index(Request $request): View { $eventos = Evento::orderBy('created_at', 'desc')->paginate(15); return view('admin.eventos.index', compact('eventos')); } public function create(): View|RedirectResponse { $user = Auth::user(); $estruturas = []; if ($this->isAdmin()) { $estruturas = Structure::where('status', 'ATIVADO')->orderBy('name')->get(); } else if ($this->canPublicServerCreate()) { $estruturas = Structure::where('id', $user->structure_id)->get(); } else { return redirect()->route('admin.dashboard') ->with('error', 'Permissão negada para criar eventos.'); } return view('admin.eventos.create', compact('estruturas')); } public function store(Request $request): RedirectResponse { $request->validate([ 'titulo' => ['required','string','max:255'], 'descricao' => ['nullable','string'], 'data_inicio' => ['required','date'], 'data_fim' => ['nullable','date','after_or_equal:data_inicio'], 'local' => ['nullable','string','max:255'], 'structure_id' => ['nullable','uuid'], ]); $user = Auth::user(); try { DB::beginTransaction(); $structure_id = $request->structure_id; if ($this->isAdmin()) { if (empty($structure_id)) { return redirect()->route('admin.eventos.create') ->withInput() ->with('error', 'Selecione a secretaria (structure_id) para o evento.'); } } else if ($this->canPublicServerCreate()) { $structure_id = $user->structure_id; } else { return redirect()->route('admin.dashboard') ->withInput() ->with('error', 'Permissão negada para criar eventos.'); } $evento = new Evento(); $evento->structure_id = $structure_id; $evento->titulo = $request->titulo; $evento->descricao = $request->descricao; $evento->data_inicio = $request->date('data_inicio'); $evento->data_fim = $request->date('data_fim'); $evento->local = $request->local; $evento->status = 'ATIVADO'; $evento->save(); DB::commit(); return redirect()->route('admin.eventos.index') ->with('success', 'Evento criado com sucesso.'); } catch (\Exception $e) { DB::rollBack(); return redirect()->route('admin.eventos.create') ->withInput() ->with('error', 'Erro ao criar evento. '.$e->getMessage()); } } public function edit(Evento $evento): View|RedirectResponse { $user = Auth::user(); $estruturas = []; if ($this->isAdmin()) { $estruturas = Structure::where('status', 'ATIVADO')->orderBy('name')->get(); } else if ($this->canPublicServerCreate()) { // Servidor público só edita dentro da própria estrutura if ($evento->structure_id !== $user->structure_id) { return redirect()->route('admin.eventos.index') ->with('error', 'Sem permissão para editar eventos de outra secretaria.'); } $estruturas = Structure::where('id', $user->structure_id)->get(); } else { return redirect()->route('admin.dashboard') ->with('error', 'Permissão negada para editar eventos.'); } return view('admin.eventos.edit', compact('evento','estruturas')); } public function update(Request $request, Evento $evento): RedirectResponse { $request->validate([ 'titulo' => ['required','string','max:255'], 'descricao' => ['nullable','string'], 'data_inicio' => ['required','date'], 'data_fim' => ['nullable','date','after_or_equal:data_inicio'], 'local' => ['nullable','string','max:255'], 'structure_id' => ['nullable','uuid'], ]); $user = Auth::user(); try { DB::beginTransaction(); if ($this->isAdmin()) { if (!empty($request->structure_id)) { $evento->structure_id = $request->structure_id; } } else if ($this->canPublicServerCreate()) { if ($evento->structure_id !== $user->structure_id) { return redirect()->route('admin.eventos.index') ->withInput() ->with('error', 'Sem permissão para editar eventos de outra secretaria.'); } $evento->structure_id = $user->structure_id; } else { return redirect()->route('admin.dashboard') ->withInput() ->with('error', 'Permissão negada para editar eventos.'); } $evento->titulo = $request->titulo; $evento->descricao = $request->descricao; $evento->data_inicio = $request->date('data_inicio'); $evento->data_fim = $request->date('data_fim'); $evento->local = $request->local; $evento->save(); DB::commit(); return redirect()->route('admin.eventos.index') ->with('success', 'Evento atualizado com sucesso.'); } catch (\Exception $e) { DB::rollBack(); return redirect()->route('admin.eventos.edit', ['evento' => $evento->id]) ->withInput() ->with('error', 'Erro ao atualizar evento. '.$e->getMessage()); } } public function destroy(Evento $evento): RedirectResponse { $user = Auth::user(); try { DB::beginTransaction(); if (!$this->isAdmin()) { if (!$this->canPublicServerCreate() || $evento->structure_id !== $user->structure_id) { return redirect()->route('admin.eventos.index') ->with('error', 'Sem permissão para excluir este evento.'); } } $evento->delete(); DB::commit(); return redirect()->route('admin.eventos.index') ->with('success', 'Evento excluído com sucesso.'); } catch (\Exception $e) { DB::rollBack(); return redirect()->route('admin.eventos.index') ->with('error', 'Erro ao excluir evento. '.$e->getMessage()); } } public function status(Evento $evento): RedirectResponse { try { DB::beginTransaction(); $evento->status = $evento->status === 'ATIVADO' ? 'DESATIVADO' : 'ATIVADO'; $evento->save(); DB::commit(); return redirect()->route('admin.eventos.index') ->with('success', 'Status do evento atualizado.'); } catch (\Exception $e) { DB::rollBack(); return redirect()->route('admin.eventos.index') ->with('error', 'Erro ao atualizar status. '.$e->getMessage()); } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings