File manager - Edit - /var/www/html/portal/app/Http/Resources/SecretariaResource.php
Back
<?php namespace App\Http\Resources; use App\Http\Controllers\Controller; use App\Http\Services\Admin\SecretariaService; use App\Models\Structure; use App\Helpers\FileUploadHelper; use App\Helpers\HtmlSanitizer; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Auth; class SecretariaResource extends Controller { public function __construct(private readonly SecretariaService $service) { } /** * Processa upload de foto do gestor * * @param Request $request * @param Structure|null $structure * @return string */ private function processManagerPhotoUpload(Request $request, ?Structure $structure = null): string { // Define a foto padrão $defaultPhoto = "pmar/assets/img/icons/usuario.png"; // Usa a foto da estrutura se existir, caso contrário usa o padrão $managerPhoto = ($structure && $structure->managerPhoto) ? $structure->managerPhoto : $defaultPhoto; if ($request->hasFile('managerPhoto') && $request->file('managerPhoto')->isValid()) { $file = $request->file('managerPhoto'); $uploadedPath = FileUploadHelper::processSafeImageUpload($file, 'secretarias'); if ($uploadedPath) { $managerPhoto = $uploadedPath; } } // Garante que sempre retorna uma string válida return $managerPhoto ?? $defaultPhoto; } /** * Processa upload de banner * * @param Request $request * @param Structure|null $structure * @return string */ private function processBannerUpload(Request $request, ?Structure $structure = null): string { // Define o banner padrão $defaultBanner = "pmar/assets/img/background-default-banner.png"; // Usa o banner da estrutura se existir, caso contrário usa o padrão $banner = ($structure && $structure->banner) ? $structure->banner : $defaultBanner; if ($request->hasFile('banner') && $request->file('banner')->isValid()) { $file = $request->file('banner'); $uploadedPath = FileUploadHelper::processSafeImageUpload($file, 'banners'); if ($uploadedPath) { $banner = $uploadedPath; } } // Garante que sempre retorna uma string válida return $banner ?? $defaultBanner; } /** * Normaliza o link do mapa (trim); embeds do Google costumam vir com quebras de linha no textarea. */ private function normalizedMap(Request $request): ?string { $raw = $request->input('map'); if ($raw === null || $raw === '') { return null; } $trimmed = trim((string) $raw); return $trimmed === '' ? null : $trimmed; } /** * Normaliza o texto livre da página Fale Conosco (HTML do editor). */ private function normalizedFaleConoscoExtraInfo(Request $request): ?string { $raw = $request->input('faleConoscoExtraInfo'); if ($raw === null || $raw === '') { return null; } $trimmed = trim((string) $raw); if ($trimmed === '' || trim(strip_tags($trimmed)) === '') { return null; } $sanitized = HtmlSanitizer::sanitize($trimmed); return trim($sanitized) === '' ? null : $sanitized; } /** * Prepara dados da estrutura a partir da requisição * * @param Request $request * @param string $managerPhoto * @param string $banner * @param Structure|null $structure Estrutura existente (null em criação) * @return array */ private function prepareStructureData(Request $request, string $managerPhoto, string $banner, ?Structure $structure = null): array { $isSysAdmin = auth()->user()?->getPermissaoDetalhes('SYSADMIN')['visualizar'] ?? false; return [ 'slug' => $request->slug, 'type' => $request->type, 'name' => $request->name, 'structure_id' => ($request->structure_id == "") ? null : $request->structure_id, 'abbreviation' => strtoupper($request->abbreviation), 'address' => $request->address, 'map' => $this->normalizedMap($request), 'phoneNumber' => $request->phoneNumber, 'email1' => $request->email1, 'email2' => $request->email2, 'email3' => $request->email3, 'facebook' => $request->facebook, 'instagram' => $request->instagram, 'twitter' => $request->instagram, 'pronunciation' => $request->pronunciation, 'manager' => $request->manager, 'academicBackground' => $request->academicBackground, 'skills' => $request->skills, 'duties' => $request->duties, 'managerPhoto' => $managerPhoto, 'status' => $request->status, 'description' => $request->description, 'banner' => $banner, 'openingHours' => $request->openingHours, 'serviceHours' => $request->serviceHours, 'faleConoscoExtraInfo' => $this->normalizedFaleConoscoExtraInfo($request), 'page_content_type' => $request->page_content_type ?? 'NOTICIAS', 'html_page_id' => ($request->page_content_type === 'NOTICIAS') ? null : ($request->html_page_id ?: null), 'news_structure_id' => ($request->page_content_type === 'HTML') ? null : ($request->news_structure_id ?: null), 'page_content_order' => ($request->page_content_type === 'HTML_NOTICIAS') ? ($request->page_content_order ?? 'HTML_FIRST') : 'HTML_FIRST', 'contratos_acesso_global' => $isSysAdmin ? $request->boolean('contratos_acesso_global') : ($structure?->contratos_acesso_global ?? false), ]; } /** * Prepara dados do endereço a partir da requisição * * @param Request $request * @return array */ private function prepareEnderecoData(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" => $this->normalizedMap($request), "uf" => $request->uf, ]; } /** * Remove arquivo físico do sistema * * @param string $filePath * @param string $defaultPath * @return void */ private function deleteFile(string $filePath, string $defaultPath): void { if ($filePath != $defaultPath) { $ds = DIRECTORY_SEPARATOR; $search = "pmar{$ds}assets{$ds}img"; $file_exist = storage_path() . str_replace($search, "{$ds}app{$ds}public", $filePath); if (@file_exists($file_exist)) { unlink($file_exist); } } } /** * Cria uma nova estrutura/secretaria com endereço * * @param Request $request * @return RedirectResponse */ public function store(Request $request): RedirectResponse { try { DB::beginTransaction(); // Processa uploads $managerPhoto = $this->processManagerPhotoUpload($request); $banner = $this->processBannerUpload($request); // Prepara dados $structureData = $this->prepareStructureData($request, $managerPhoto, $banner); $enderecoData = $this->prepareEnderecoData($request); // Cria estrutura $structure = $this->service->create($structureData); // Cria endereço $this->service->createOrUpdateEndereco($structure, $enderecoData, Auth::user()->id); DB::commit(); return redirect("/admin/secretarias") ->with("success", __("* O órgão/departamento foi criado com sucesso!")); } catch (\Exception $e) { DB::rollBack(); \Log::error('Erro ao criar estrutura/secretaria', [ 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine() ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar cadastrar este órgão/departamento.') . ' ' . $e->getMessage()); } } /** * Atualiza uma estrutura/secretaria existente com endereço * * @param Request $request * @param Structure $structure * @return RedirectResponse */ public function update(Request $request, Structure $structure): RedirectResponse { try { DB::beginTransaction(); // Processa uploads $managerPhoto = $this->processManagerPhotoUpload($request, $structure); $banner = $this->processBannerUpload($request, $structure); // Prepara dados $structureData = $this->prepareStructureData($request, $managerPhoto, $banner, $structure); $enderecoData = $this->prepareEnderecoData($request); // Atualiza estrutura $this->service->update($structure, $structureData); // Cria ou atualiza endereço $this->service->createOrUpdateEndereco($structure, $enderecoData, Auth::user()->id); DB::commit(); $page = $request->input('page', 1); return redirect() ->route('admin.secretarias.edit', ['structure' => $structure->id, 'page' => $page]) ->with("success", __("* O órgão/departamento foi atualizado com sucesso!")); } catch (\Exception $e) { DB::rollBack(); \Log::error('Erro ao atualizar estrutura/secretaria', [ 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine() ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar atualizar este órgão/departamento.') . ' ' . $e->getMessage()); } } /** * Exclui uma estrutura/secretaria e seus arquivos * * @param Request $request * @param Structure $structure * @return RedirectResponse */ public function destroy(Request $request, Structure $structure): RedirectResponse { try { DB::beginTransaction(); // Remove foto do gestor se não for padrão $this->deleteFile($structure->managerPhoto, "pmar/assets/img/icons/usuario.png"); // Remove banner se não for padrão $this->deleteFile($structure->banner, "pmar/assets/img/background-default-banner.png"); // Remove endereço $this->service->deleteEndereco($structure); // Remove estrutura $this->service->delete($structure); DB::commit(); $page = $request->input('page', 1); return redirect("/admin/secretarias?page={$page}") ->with("success", __("* O órgão/departamento foi excluído com sucesso! Esta ação não pode ser desfeita!")); } catch (\Exception $e) { DB::rollBack(); \Log::error('Erro ao excluir estrutura/secretaria', [ 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine() ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar excluir este órgão/departamento.') . ' ' . $e->getMessage()); } } /** * Atualiza o status de uma estrutura/secretaria * * @param Request $request * @param Structure $structure * @return RedirectResponse */ public function updateStatus(Request $request, Structure $structure): RedirectResponse { try { DB::beginTransaction(); $this->service->updateStatus($structure, $request->checkStatus); DB::commit(); $page = $request->input('page', 1); return redirect("/admin/secretarias?page={$page}") ->with("success", __("* O status deste órgão/departamento foi alterado com sucesso!")); } catch (\Exception $e) { DB::rollBack(); \Log::error('Erro ao atualizar status da estrutura/secretaria', [ 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine() ]); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar alterar o status deste órgão/departamento.') . ' ' . $e->getMessage()); } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings