File manager - Edit - /var/www/html/portalHomolog/app/Http/Controllers/ReusableMenusController.php
Back
<?php namespace App\Http\Controllers; use App\Http\Requests\ReusableMenuRequest; use App\Http\Services\ReusableMenusService; use App\Models\ReusableMenu; use App\Models\ReusableMenuLink; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\View\View; use Illuminate\Support\Facades\Log; class ReusableMenusController extends Controller { private const PERMISSAO = 'GERENCIADOR_DE_MENUS_REUTILIZAVEIS'; private ReusableMenusService $menusService; public function __construct(ReusableMenusService $menusService) { $this->middleware('menusReutilizaveis'); $this->menusService = $menusService; } public function index(Request $request): View|RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'visualizar'); if ($response instanceof RedirectResponse) { return $response; } $filters = [ 'q' => $request->input('q'), 'perPage' => 20, ]; $menus = $this->menusService ->paginate($filters) ->appends($request->only(['q'])); return view('admin.menusReutilizaveis.index', [ 'menus' => $menus, 'filterParams' => $request->only(['q']), ]); } public function create(Request $request): View|RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'adicionar'); if ($response instanceof RedirectResponse) { return $response; } return view('admin.menusReutilizaveis.create', [ 'filterParams' => $request->only(['q', 'page']), ]); } public function store(ReusableMenuRequest $request): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'adicionar'); if ($response instanceof RedirectResponse) { return $response; } $data = $request->validated(); $links = $request->input('links', []); $nonEmptyLinks = []; if (is_array($links)) { foreach ($links as $link) { $titulo = is_array($link) ? trim((string) ($link['titulo'] ?? '')) : ''; $linkValue = is_array($link) ? trim((string) ($link['link'] ?? '')) : ''; if ($titulo !== '' || $linkValue !== '') { $nonEmptyLinks[] = $link; } } } try { $menu = null; if (!empty($nonEmptyLinks)) { $menu = $this->menusService->createWithLinks($data, $nonEmptyLinks); } else { $menu = $this->menusService->create($data); } $routeParams = $request->only(['q', 'page']); if ($menu && !empty($nonEmptyLinks)) { return redirect() ->route('admin.menusReutilizaveis.edit', array_merge(['menu' => $menu->id], $routeParams)) ->with('success', __('Menu criado com sucesso!')); } } catch (\Throwable $e) { Log::error('Erro ao criar Menu Reutilizável (controller)', [ 'exception' => $e, ]); $message = $e->getMessage(); if (is_string($message) && str_starts_with($message, '*')) { return redirect() ->back() ->withInput() ->with('error', $message); } return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar criar este menu. Tente novamente mais tarde.')); } return redirect() ->route('admin.menusReutilizaveis.index', $request->only(['q', 'page'])) ->with('success', __('Menu criado com sucesso!')); } public function edit(Request $request, ReusableMenu $menu): View|RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) { return $response; } return view('admin.menusReutilizaveis.edit', [ 'menu' => $menu, 'filterParams' => $request->only(['q', 'page']), ]); } public function show(Request $request, ReusableMenu $menu): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'visualizar'); if ($response instanceof RedirectResponse) { return $response; } $detalhes = auth()->user()?->getPermissaoDetalhes(self::PERMISSAO); if (!empty($detalhes['editar'])) { return redirect() ->route('admin.menusReutilizaveis.edit', $menu->id) ->with('success', __('Menu carregado com sucesso!')); } return redirect() ->route('admin.menusReutilizaveis.index', $request->only(['q', 'page'])); } public function update(ReusableMenuRequest $request, ReusableMenu $menu): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) { return $response; } $data = $request->validated(); try { $this->menusService->update($menu, $data); } catch (\Throwable $e) { Log::error('Erro ao atualizar Menu Reutilizável (controller)', [ 'reusable_menu_id' => $menu->id, 'exception' => $e, ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar este menu. Tente novamente mais tarde.')); } return redirect() ->route('admin.menusReutilizaveis.edit', array_merge(['menu' => $menu->id], $request->only(['q', 'page']))) ->with('success', __('Menu atualizado com sucesso!')); } public function destroy(Request $request, ReusableMenu $menu): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'excluir'); if ($response instanceof RedirectResponse) { return $response; } try { $this->menusService->delete($menu); } catch (\Throwable $e) { Log::error('Erro ao excluir Menu Reutilizável (controller)', [ 'reusable_menu_id' => $menu->id, 'exception' => $e, ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar excluir este menu. Tente novamente mais tarde.')); } return redirect() ->route('admin.menusReutilizaveis.index', $request->only(['q', 'page'])) ->with('success', __('Menu excluído com sucesso!')); } public function toggleStatus(Request $request, ReusableMenu $menu): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) { return $response; } try { $validated = $request->validate([ 'checkStatus' => 'required|in:ATIVADO,DESATIVADO', ], [ 'checkStatus.required' => __('* Status do menu não informado.'), 'checkStatus.in' => __('* Status do menu inválido.'), ]); $this->menusService->updateStatus($menu, (string) $validated['checkStatus']); return redirect() ->route('admin.menusReutilizaveis.index', $request->only(['q', 'page'])) ->with('success', __('* O status do menu reutilizável foi atualizado com sucesso!')); } catch (\Throwable $e) { Log::error('Erro ao alterar status do Menu Reutilizável (controller)', [ 'reusable_menu_id' => $menu->id, 'exception' => $e, ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar alterar o status do menu reutilizável. Tente novamente mais tarde.')); } } public function storeLink(ReusableMenuRequest $request, ReusableMenu $menu): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) { return $response; } $data = $request->validated(); try { $this->menusService->createLink($menu, $data); } catch (\Throwable $e) { Log::error('Erro ao criar link de Menu Reutilizável (controller)', [ 'reusable_menu_id' => $menu->id, 'exception' => $e, ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar criar o link do menu. Tente novamente mais tarde.')); } return redirect() ->route('admin.menusReutilizaveis.edit', array_merge(['menu' => $menu->id], $request->only(['q', 'page']))) ->with('success', __('Link do menu criado com sucesso!')); } public function updateLink(ReusableMenuRequest $request, ReusableMenu $menu, ReusableMenuLink $link): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) { return $response; } $data = $request->validated(); try { $this->menusService->updateLink($menu, $link, $data); } catch (\Throwable $e) { Log::error('Erro ao atualizar link de Menu Reutilizável (controller)', [ 'reusable_menu_id' => $menu->id, 'reusable_menu_link_id' => $link->id, 'exception' => $e, ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar o link do menu. Tente novamente mais tarde.')); } return redirect() ->route('admin.menusReutilizaveis.edit', array_merge(['menu' => $menu->id], $request->only(['q', 'page']))) ->with('success', __('Link do menu atualizado com sucesso!')); } public function destroyLink(Request $request, ReusableMenu $menu, ReusableMenuLink $link): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'excluir'); if ($response instanceof RedirectResponse) { return $response; } try { $this->menusService->deleteLink($menu, $link); } catch (\Throwable $e) { Log::error('Erro ao excluir link de Menu Reutilizável (controller)', [ 'reusable_menu_id' => $menu->id, 'reusable_menu_link_id' => $link->id, 'exception' => $e, ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar excluir o link do menu. Tente novamente mais tarde.')); } return redirect() ->route('admin.menusReutilizaveis.edit', array_merge(['menu' => $menu->id], $request->only(['q', 'page']))) ->with('success', __('Link do menu excluído com sucesso!')); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.01 |
proxy
|
phpinfo
|
Settings