File manager - Edit - /var/www/html/portal/app/Http/Controllers/Admin/ThemeController.php
Back
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\ThemeRequest; use App\Http\Resources\Admin\ThemeResource; use App\Http\Services\Admin\ThemeService; use App\Models\Admin\Theme; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class ThemeController extends Controller { private $permissao = "GERENCIADOR_DE_TEMAS"; public function __construct(protected ThemeService $service) { } public function index(): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, "visualizar"); if ($response instanceof RedirectResponse) { return $response; } $temas = $this->service->paginateThemes(); return view('admin.temas.index', compact('temas')); } public function create(): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, "adicionar"); if ($response instanceof RedirectResponse) { return $response; } $defaultColors = ThemeResource::generateCssForScope('public'); // apenas para referência visual return view('admin.temas.create', [ 'defaultColorsCss' => $defaultColors, ]); } public function store(ThemeRequest $request): RedirectResponse { $response = $this->checkPermissao($this->permissao, "adicionar"); if ($response instanceof RedirectResponse) { return $response; } $data = $request->validated(); // Processa upload da logo se enviada if ($request->hasFile('logo') && $request->file('logo')->isValid()) { $data['logo'] = ThemeResource::uploadLogo($request->file('logo')); } // Processa upload da logo de acessibilidade se enviada if ($request->hasFile('accessibility_logo') && $request->file('accessibility_logo')->isValid()) { $data['accessibility_logo'] = ThemeResource::uploadAccessibilityLogo($request->file('accessibility_logo')); } return $this->service->create($data); } public function edit(Theme $tema): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, "visualizar"); if ($response instanceof RedirectResponse) { return $response; } $systemDefaults = ThemeResource::generateCssForScope('public'); return view('admin.temas.edit', [ 'tema' => $tema, 'systemDefaultsCss' => $systemDefaults, ]); } public function update(ThemeRequest $request, Theme $tema): RedirectResponse { $response = $this->checkPermissao($this->permissao, "editar"); if ($response instanceof RedirectResponse) { return $response; } $data = $request->validated(); // Remove a logo atual se solicitado if ($request->boolean('remove_logo')) { ThemeResource::deleteLogo($tema); $data['logo'] = null; } // Processa upload da nova logo se enviada elseif ($request->hasFile('logo') && $request->file('logo')->isValid()) { // Remove a logo antiga se existir ThemeResource::deleteLogo($tema); $data['logo'] = ThemeResource::uploadLogo($request->file('logo')); } // Remove a logo de acessibilidade se solicitado if ($request->boolean('remove_accessibility_logo')) { ThemeResource::deleteAccessibilityLogo($tema); $data['accessibility_logo'] = null; } // Processa upload da nova logo de acessibilidade se enviada elseif ($request->hasFile('accessibility_logo') && $request->file('accessibility_logo')->isValid()) { // Remove a logo antiga se existir ThemeResource::deleteAccessibilityLogo($tema); $data['accessibility_logo'] = ThemeResource::uploadAccessibilityLogo($request->file('accessibility_logo')); } return $this->service->update($tema, $data); } public function destroy(Theme $tema): RedirectResponse { $response = $this->checkPermissao($this->permissao, "excluir"); if ($response instanceof RedirectResponse) { return $response; } return $this->service->delete($tema); } public function activate(Request $request, Theme $tema): RedirectResponse { $response = $this->checkPermissao($this->permissao, "editar"); if ($response instanceof RedirectResponse) { return $response; } $forPublic = (bool) $request->boolean('apply_public', true); $forAdmin = (bool) $request->boolean('apply_admin', true); return $this->service->activate($tema, $forPublic, $forAdmin); } public function resetTheme(Theme $tema): RedirectResponse { $response = $this->checkPermissao($this->permissao, "editar"); if ($response instanceof RedirectResponse) { return $response; } return $this->service->resetThemeToOriginal($tema); } public function resetToDefault(Request $request): RedirectResponse { $response = $this->checkPermissao($this->permissao, "editar"); if ($response instanceof RedirectResponse) { return $response; } $forPublic = (bool) $request->boolean('apply_public', true); $forAdmin = (bool) $request->boolean('apply_admin', true); return $this->service->resetToSystemDefault($forPublic, $forAdmin); } /** * Endpoint público que entrega o CSS gerado para o tema ativo. */ public function css(string $scope = 'public'): Response { $scope = $scope === 'admin' ? 'admin' : 'public'; $css = ThemeResource::generateCssForScope($scope); return new Response($css, 200, [ 'Content-Type' => 'text/css; charset=UTF-8', 'Cache-Control' => 'no-cache, no-store, must-revalidate, max-age=0', 'Pragma' => 'no-cache', 'Expires' => '0', ]); } /** * Endpoint público que entrega o CSS do modo noturno usando as cores de acessibilidade do tema ativo. * * @param string $scope Escopo do tema ('public' ou 'admin') * @return Response */ public function darkModeCss(string $scope = 'public'): Response { $scope = $scope === 'admin' ? 'admin' : 'public'; $css = ThemeResource::generateDarkModeCss($scope); return new Response($css, 200, [ 'Content-Type' => 'text/css; charset=UTF-8', 'Cache-Control' => 'no-cache, no-store, must-revalidate, max-age=0', 'Pragma' => 'no-cache', 'Expires' => '0', ]); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings