File manager - Edit - /var/www/html/portalHomolog/app/Http/Resources/RepositorioResource.php
Back
<?php namespace App\Http\Resources; use App\Http\Controllers\Controller; use App\Http\Services\RepositorioService; use App\Models\Repositorio; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Helpers\FileUploadHelper; class RepositorioResource extends Controller { public function __construct(private readonly RepositorioService $service) { } /** * Processa o upload de arquivo e retorna os dados formatados * * @param Request $request * @param Repositorio|null $repositorio * @return array */ public function processFileUpload(Request $request, ?Repositorio $repositorio = null): array { $ds = DIRECTORY_SEPARATOR; $data = [ 'title' => $request->title, 'summary' => $request->summary, 'target' => $request->target, ]; if ($request->hasFile('url') && $request->file('url')->isValid()) { // Remove arquivo antigo se existir if ($repositorio && $repositorio->url != "") { $this->deleteFile($repositorio->url); } $file = $request->file('url'); $uploadedPath = FileUploadHelper::processSafeGeneralUpload($file, 'repositorios'); if ($uploadedPath) { // Ajusta o caminho para files em vez de img $uploadedPath = str_replace("pmar{$ds}assets{$ds}img", "pmar{$ds}assets{$ds}files", $uploadedPath); $fileName = basename($uploadedPath); $data['name'] = $fileName; $data['url'] = $uploadedPath; } else { // Upload falhou nas validações de segurança throw new \RuntimeException(__('Não foi possível processar o arquivo. Verifique se o formato é válido e tente novamente.')); } } return $data; } /** * Remove um arquivo físico do sistema * * @param string $url * @return void */ public function deleteFile(string $url): void { if ($url != "") { $ds = DIRECTORY_SEPARATOR; $search = "pmar{$ds}assets{$ds}files"; $filePath = storage_path() . str_replace($search, "{$ds}app{$ds}public", $url); if (file_exists($filePath)) { unlink($filePath); } } } /** * Cria um novo repositório com upload de arquivo * * @param Request $request * @return RedirectResponse|\Illuminate\Http\JsonResponse */ public function store(Request $request): RedirectResponse|\Illuminate\Http\JsonResponse { try { DB::beginTransaction(); $data = $this->processFileUpload($request); $this->service->create($data); DB::commit(); $page = $request->input('page', 1); if ($request->expectsJson() || $request->ajax()) { return response()->json([ 'message' => __("* Arquivo adicionado ao repositório com sucesso!"), 'redirect' => "/admin/repositorio?page={$page}" ], 200); } return redirect("/admin/repositorio?page={$page}") ->with("success", __("* Arquivo adicionado ao repositório com sucesso!")); } catch (\Exception $e) { DB::rollBack(); \Log::error('Erro ao fazer upload no repositório', [ 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine() ]); // Mensagem amigável para o usuário $userMessage = __('Ocorreu um erro ao adicionar o arquivo ao repositório. Por favor, tente novamente.'); // Se for RuntimeException, provavelmente é uma mensagem que pode ser exibida if ($e instanceof \RuntimeException) { $userMessage = $e->getMessage(); } if ($request->expectsJson() || $request->ajax()) { return response()->json(['message' => $userMessage], 500); } return redirect() ->back() ->withInput() ->with('error', $userMessage); } } /** * Atualiza um repositório existente * * @param Request $request * @param Repositorio $repositorio * @return RedirectResponse|\Illuminate\Http\JsonResponse */ public function update(Request $request, Repositorio $repositorio): RedirectResponse|\Illuminate\Http\JsonResponse { try { DB::beginTransaction(); $data = $this->processFileUpload($request, $repositorio); $this->service->update($repositorio, $data); DB::commit(); $page = $request->input('page', 1); if ($request->expectsJson() || $request->ajax()) { return response()->json([ 'message' => __("* Arquivo atualizado com sucesso no repositório!"), 'redirect' => "/admin/repositorio?page={$page}" ], 200); } return redirect("/admin/repositorio?page={$page}") ->with("success", __("* Arquivo atualizado com sucesso no repositório!")); } catch (\Exception $e) { DB::rollBack(); \Log::error('Erro ao atualizar arquivo no repositório', [ 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine() ]); // Mensagem amigável para o usuário $userMessage = __('Ocorreu um erro ao atualizar o arquivo. Por favor, tente novamente.'); // Se for RuntimeException, provavelmente é uma mensagem que pode ser exibida if ($e instanceof \RuntimeException) { $userMessage = $e->getMessage(); } if ($request->expectsJson() || $request->ajax()) { return response()->json(['message' => $userMessage], 500); } return redirect() ->back() ->withInput() ->with('error', $userMessage); } } /** * Exclui um repositório e seu arquivo físico * * @param Request $request * @param Repositorio $repositorio * @return RedirectResponse */ public function destroy(Request $request, Repositorio $repositorio): RedirectResponse { try { DB::beginTransaction(); // Remove arquivo físico if ($repositorio->url != "") { $this->deleteFile($repositorio->url); } // Remove registro do banco $this->service->delete($repositorio); DB::commit(); $page = $request->input('page', 1); return redirect("/admin/repositorio?page={$page}") ->with("success", __("* Arquivo excluído do repositório com sucesso! Esta ação não poderá ser desfeita!")); } catch (\Exception $e) { DB::rollBack(); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar excluir este arquivo.') . ' ' . $e->getMessage()); } } /** * Atualiza o status de um repositório * * @param Request $request * @param Repositorio $repositorio * @return RedirectResponse */ public function updateStatus(Request $request, Repositorio $repositorio): RedirectResponse { try { DB::beginTransaction(); $this->service->updateStatus($repositorio, $request->checkStatus); DB::commit(); $page = $request->input('page', 1); return redirect("/admin/repositorio?page={$page}") ->with("success", __("* Status do arquivo atualizado com sucesso!")); } catch (\Exception $e) { DB::rollBack(); return redirect() ->back() ->withInput() ->with('error', __('Erro ao tentar alterar o status deste arquivo.') . ' ' . $e->getMessage()); } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings