|
|
@@ -345,13 +345,20 @@ class CircularesController extends Controller
|
|
|
public function actualizar(Request $request)
|
|
|
{
|
|
|
try {
|
|
|
- $storagePath = 'public/circulares/';
|
|
|
+ $rutaBucket = 'circulares/';
|
|
|
$archivosAdjuntos = [];
|
|
|
|
|
|
- // Procesar cada archivo en base64
|
|
|
- if ($request->has('bases64')) {
|
|
|
+ // Obtener los adjuntos anteriores desde la BD
|
|
|
+ $adjuntosAnteriores = DB::table('circulares')
|
|
|
+ ->where('idCircular', $request->idCircular)
|
|
|
+ ->value('jsonAdjuntos');
|
|
|
+
|
|
|
+ $adjuntosAnteriores = $adjuntosAnteriores ? json_decode($adjuntosAnteriores, true) : [];
|
|
|
+
|
|
|
+ // Si se mandan nuevos archivos base64, los procesamos
|
|
|
+ if ($request->has('bases64') && !empty($request->bases64)) {
|
|
|
foreach ($request->bases64 as $file) {
|
|
|
- // Extraer la extensión del archivo
|
|
|
+ // Extraer extensión
|
|
|
$fileInfo = explode(';', $file['base64'])[0];
|
|
|
$fileExtension = explode('/', $fileInfo)[1];
|
|
|
|
|
|
@@ -365,25 +372,33 @@ class CircularesController extends Controller
|
|
|
case 'vnd.openxmlformats-officedocument.presentationml.presentation':
|
|
|
$fileExtension = 'pptx';
|
|
|
break;
|
|
|
- default;
|
|
|
}
|
|
|
|
|
|
- // Decodificar el archivo base64
|
|
|
+ // Generar nombre
|
|
|
+ $fileName = $file['id'] . '.' . $fileExtension;
|
|
|
+ $pathS3 = $rutaBucket . $fileName;
|
|
|
+
|
|
|
+ // Subir nuevo archivo
|
|
|
$fileData = substr($file['base64'], strpos($file['base64'], ',') + 1);
|
|
|
$fileData = str_replace(' ', '+', $fileData);
|
|
|
+ $contenidoArchivo = base64_decode($fileData);
|
|
|
|
|
|
- // Nombre del archivo con la extensión correcta
|
|
|
- $fileName = $file['id'] . '.' . $fileExtension;
|
|
|
-
|
|
|
- // Guardar el archivo
|
|
|
- Storage::put($storagePath . $fileName, base64_decode($fileData));
|
|
|
+ Storage::disk('s3')->put($pathS3, $contenidoArchivo, 'public');
|
|
|
|
|
|
$archivosAdjuntos[] = [
|
|
|
+ 'id' => $file['id'],
|
|
|
'nombre' => $file['nombre'],
|
|
|
- 'ruta' => Storage::url($storagePath . $fileName)
|
|
|
+ 'ruta' => Storage::disk('s3')->url($pathS3)
|
|
|
];
|
|
|
}
|
|
|
+
|
|
|
+ $archivosAdjuntos = array_merge($adjuntosAnteriores, $archivosAdjuntos);
|
|
|
+ } else {
|
|
|
+ // Se mantienen los adjuntos anteriores
|
|
|
+ $archivosAdjuntos = $adjuntosAnteriores;
|
|
|
}
|
|
|
+
|
|
|
+ // Actualizar la circular
|
|
|
DB::table('circulares')
|
|
|
->updateOrInsert(
|
|
|
['idCircular' => $request->idCircular],
|
|
|
@@ -392,41 +407,55 @@ class CircularesController extends Controller
|
|
|
'audiencia' => $request->audiencia,
|
|
|
'idReceptores' => $request->idReceptores,
|
|
|
'contenido' => $request->contenido,
|
|
|
- 'jsonAdjuntos' => json_encode($request->jsonAdjuntos),
|
|
|
+ 'jsonAdjuntos' => json_encode($archivosAdjuntos),
|
|
|
'importancia' => $request->importancia,
|
|
|
- // 'fechaCreacion' => $request->fechaCreacion,
|
|
|
'fechaPublicacion' => $request->fechaPublicacion,
|
|
|
'fechaCaducidad' => $request->fechaCaducidad,
|
|
|
'idUsuario' => $request->idUsuario
|
|
|
]
|
|
|
);
|
|
|
|
|
|
- return response()->json(['mensaje' => 'circular actualizada exitosamente'], 201);
|
|
|
+ return response()->json(['mensaje' => 'Circular actualizada exitosamente'], 200);
|
|
|
+
|
|
|
} catch (\Exception $e) {
|
|
|
return response()->json(['mensaje' => 'Error al actualizar la circular: ' . $e->getMessage()], 500);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
- public function eliminar($id)
|
|
|
+ public function eliminarArchivo(Request $request)
|
|
|
{
|
|
|
- $id = base64_decode($id);
|
|
|
try {
|
|
|
+ if (!$request->has('url')) {
|
|
|
+ return response()->json(['mensaje' => 'No se proporcionó la URL del archivo'], 400);
|
|
|
+ }
|
|
|
|
|
|
- DB::table('circulares')
|
|
|
- ->updateOrInsert(
|
|
|
- ['idCircular' => $id],
|
|
|
- ['estado' => 'Eliminado']
|
|
|
- );
|
|
|
+ $url = $request->url;
|
|
|
+
|
|
|
+ $parsedUrl = parse_url($url, PHP_URL_PATH);
|
|
|
+
|
|
|
+ $key = ltrim(str_replace('pledu-dv-aeci/', '', $parsedUrl), '/');
|
|
|
+
|
|
|
+ error_log(print_r([
|
|
|
+ 'urlRecibida' => $url,
|
|
|
+ 'keyCalculada' => $key
|
|
|
+ ], true));
|
|
|
+
|
|
|
+ if (Storage::disk('s3')->exists($key)) {
|
|
|
+ Storage::disk('s3')->delete($key);
|
|
|
+ return response()->json(['mensaje' => 'Archivo eliminado correctamente'], 200);
|
|
|
+ } else {
|
|
|
+ return response()->json(['mensaje' => 'El archivo no existe en S3'], 404);
|
|
|
+ }
|
|
|
|
|
|
- return response()->json(['mensaje' => 'Circular eliminada exitosamente'], 200);
|
|
|
} catch (\Exception $e) {
|
|
|
- return response()->json(['mensaje' => 'Error al eliminar la circular: ' . $e->getMessage()], 500);
|
|
|
+ return response()->json(['mensaje' => 'Error al eliminar el archivo: ' . $e->getMessage()], 500);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
public function habilitar($id)
|
|
|
{
|
|
|
$id = base64_decode($id);
|