File manager - Edit - /var/www/html/portal/app/Http/Controllers/Escolas/EscolasCrechesController.php
Back
<?php namespace App\Http\Controllers\Escolas; use App\Http\Controllers\Controller; use App\Http\Requests\Escolas\EscolasCrechesRequest; use App\Http\Services\Escolas\EscolaService; use App\Helpers\FileUploadHelper; use App\Models\Escola; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\View\View; class EscolasCrechesController extends Controller { private string $permissao = 'GERENCIADOR_DE_ESCOLAS'; private const FOTO_PADRAO = 'pmar/assets/img/icons/escola.png'; public function __construct() { $this->middleware('escolas'); } public function index(Request $request): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, 'visualizar'); if ($response instanceof RedirectResponse) { return $response; } $service = new EscolaService(); return view('admin.escolas.index', [ 'escolas' => $service->index($request), ]); } public function create(): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, 'adicionar'); if ($response instanceof RedirectResponse) { return $response; } $service = new EscolaService(); return view('admin.escolas.create', [ 'secretarias' => $service->getSecretarias(), ]); } public function store(EscolasCrechesRequest $request): RedirectResponse { $response = $this->checkPermissao($this->permissao, 'adicionar'); if ($response instanceof RedirectResponse) { return $response; } $escolaData = [ 'structure_id' => $request->structure_id, 'tipoUnidadeEscolar' => $request->tipoUnidadeEscolar, 'nome' => $request->nome, 'telefone' => $request->telefone, 'email' => $request->email, 'informacoes' => $request->informacoes, 'climatizacao' => $request->climatizacao, 'observacoes_climatizacao' => $request->observacoes_climatizacao, 'status' => $request->status, 'possuiRecursosMultifuncionais' => $this->resolveRecursosMultifuncionais($request), 'foto' => $this->processarFoto($request, null), ]; $enderecoData = $this->extrairEndereco($request); $service = new EscolaService(); return $service->store($request, $escolaData, $enderecoData); } public function edit(Escola $escola): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, 'editar'); if ($response instanceof RedirectResponse) { return $response; } $service = new EscolaService(); $escola->loadMissing('endereco'); return view('admin.escolas.edit', [ 'escola' => $escola, 'secretarias' => $service->getSecretarias(), ]); } public function update(EscolasCrechesRequest $request, Escola $escola): RedirectResponse { $response = $this->checkPermissao($this->permissao, 'editar'); if ($response instanceof RedirectResponse) { return $response; } $escolaData = [ 'structure_id' => $request->structure_id, 'tipoUnidadeEscolar' => $request->tipoUnidadeEscolar, 'nome' => $request->nome, 'telefone' => $request->telefone, 'email' => $request->email, 'informacoes' => $request->informacoes, 'climatizacao' => $request->climatizacao, 'observacoes_climatizacao' => $request->observacoes_climatizacao, 'status' => $request->status, 'possuiRecursosMultifuncionais' => $this->resolveRecursosMultifuncionais($request), 'foto' => $this->processarFoto($request, $escola), ]; $enderecoData = $this->extrairEndereco($request); $service = new EscolaService(); return $service->update($request, $escola, $escolaData, $enderecoData); } public function destroy(Request $request, Escola $escola): RedirectResponse { $response = $this->checkPermissao($this->permissao, 'excluir'); if ($response instanceof RedirectResponse) { return $response; } $this->removerFotoAntiga($escola->foto); $service = new EscolaService(); return $service->destroy($request, $escola); } public function status(Request $request, Escola $escola): RedirectResponse { $response = $this->checkPermissao($this->permissao, 'editar'); if ($response instanceof RedirectResponse) { return $response; } $service = new EscolaService(); return $service->status($request, $escola); } // ------------------------------------------------------------------------- // Métodos auxiliares privados // ------------------------------------------------------------------------- /** * Resolve o valor booleano do campo possuiRecursosMultifuncionais. */ private function resolveRecursosMultifuncionais(Request $request): int { return (isset($request->possuiRecursosMultifuncionais) && ($request->possuiRecursosMultifuncionais === 'on' || $request->possuiRecursosMultifuncionais == 1)) ? 1 : 0; } /** * Processa o upload da foto e retorna o caminho final. * Quando há atualização, remove o arquivo anterior se não for a imagem padrão. */ private function processarFoto(Request $request, ?Escola $escola): string { $caminhoAtual = $escola ? $escola->foto : self::FOTO_PADRAO; if ($request->hasFile('foto') && $request->file('foto')->isValid()) { $uploadedPath = FileUploadHelper::processSafeImageUpload($request->file('foto'), 'escolas'); if ($uploadedPath) { if ($escola) { $this->removerFotoAntiga($caminhoAtual); } return $uploadedPath; } } return $caminhoAtual; } /** * Remove o arquivo físico de uma foto anterior, se existir e não for a imagem padrão. */ private function removerFotoAntiga(string $foto): void { if ($foto === self::FOTO_PADRAO) { return; } $ds = DIRECTORY_SEPARATOR; $search = "pmar{$ds}assets{$ds}img"; $filePath = storage_path() . str_replace($search, "{$ds}app{$ds}public", $foto); if (@file_exists($filePath)) { unlink($filePath); } } /** * Extrai os dados de endereço do request em um array estruturado. */ private function extrairEndereco(Request $request): array { return [ 'domicilio' => $request->domicilio, 'latitude' => $request->latitude, 'longitude' => $request->longitude, 'cep' => $request->cep, 'logradouro' => $request->logradouro, 'numero' => $request->numero, 'complemento' => $request->complemento, 'cidade' => $request->cidade, 'bairro' => $request->bairro, 'map' => $request->map, 'uf' => $request->uf, ]; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings