documentoBase-4-subir archivo
Para implementar la funcionalidad de subir un archivo y almacenar la ruta correctamente basada en la fecha, necesitas realizar algunos cambios en tu código. Vamos a utilizar move_uploaded_filepara mover el archivo subido a la ruta deseada y mkdirpara crear las carpetas si no existen.
Aquí tienes el código actualizado para la funcionalidad de subir al archivo:
<?php
class Conexion
{
static public function conectar()
{
return new PDO("mysql:host=localhost;dbname=despacho;charset=utf8", "root", "Juzgado-01");
}
}
class DocumentosModel extends Conexion
{
static public function casoDocumentos()
{
$stmt = Conexion::conectar()->prepare("SELECT * FROM documentos");
$stmt->execute();
return $stmt->fetchAll();
}
static public function obtenerDocumentos($caso_id)
{
$stmt = Conexion::conectar()->prepare("
SELECT d.*, c.numero_expediente
FROM documentos d
JOIN casos c ON d.caso_id = c.id
WHERE d.caso_id = :caso_id
");
$stmt->bindParam(":caso_id", $caso_id, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll();
}
static public function crearDocumento($datos)
{
$stmt = Conexion::conectar()->prepare("INSERT INTO documentos (caso_id, tipo_documento, descripcion, fecha, archivo) VALUES (:caso_id, :tipo_documento, :descripcion, :fecha, :archivo)");
$stmt->bindParam(":caso_id", $datos['caso_id'], PDO::PARAM_INT);
$stmt->bindParam(":tipo_documento", $datos['tipo_documento'], PDO::PARAM_STR);
$stmt->bindParam(":descripcion", $datos['descripcion'], PDO::PARAM_STR);
$stmt->bindParam(":fecha", $datos['fecha'], PDO::PARAM_STR);
$stmt->bindParam(":archivo", $datos['archivo'], PDO::PARAM_STR);
if ($stmt->execute()) {
return "success";
} else {
return "error";
}
}
static public function actualizarDocumento($datos)
{
$stmt = Conexion::conectar()->prepare("UPDATE documentos SET caso_id = :caso_id, tipo_documento = :tipo_documento, descripcion = :descripcion, fecha = :fecha, archivo = :archivo WHERE id = :id");
$stmt->bindParam(":id", $datos['id'], PDO::PARAM_INT);
$stmt->bindParam(":caso_id", $datos['caso_id'], PDO::PARAM_INT);
$stmt->bindParam(":tipo_documento", $datos['tipo_documento'], PDO::PARAM_STR);
$stmt->bindParam(":descripcion", $datos['descripcion'], PDO::PARAM_STR);
$stmt->bindParam(":fecha", $datos['fecha'], PDO::PARAM_STR);
$stmt->bindParam(":archivo", $datos['archivo'], PDO::PARAM_STR);
if ($stmt->execute()) {
return "success";
} else {
return "error";
}
}
static public function eliminarDocumento($id)
{
$stmt = Conexion::conectar()->prepare("DELETE FROM documentos WHERE id = :id");
$stmt->bindParam(":id", $id, PDO::PARAM_INT);
if ($stmt->execute()) {
return "success";
} else {
return "error";
}
}
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
switch ($_POST['action']) {
case 'crear':
// Procesar la subida del archivo
if (isset($_FILES['archivo']) && $_FILES['archivo']['error'] === UPLOAD_ERR_OK) {
$archivoTmpPath = $_FILES['archivo']['tmp_name'];
$archivoName = $_FILES['archivo']['name'];
$archivoSize = $_FILES['archivo']['size'];
$archivoType = $_FILES['archivo']['type'];
// Obtener el año y mes de la fecha
$fecha = new DateTime($_POST['fecha']);
$anio = $fecha->format('Y');
$mes = $fecha->format('m');
// Crear las carpetas si no existen
$directorio = "pdf/$anio/$mes";
if (!file_exists($directorio)) {
mkdir($directorio, 0777, true);
}
// Mover el archivo a la carpeta correspondiente
$destinoPath = "$directorio/$archivoName";
if (move_uploaded_file($archivoTmpPath, $destinoPath)) {
$datos = [
"caso_id" => $_POST["caso_id"],
"tipo_documento" => $_POST["tipo_documento"],
"descripcion" => $_POST["descripcion"],
"fecha" => $_POST["fecha"],
"archivo" => $destinoPath
];
$resultado = DocumentosModel::crearDocumento($datos);
if ($resultado === "success") {
echo '<script>
if (window.history.replaceState) {
window.history.replaceState(null, null, window.location.href);
}
window.location = "documentoBase.php?caso_id=' . $_POST["caso_id"] . '";
</script>';
} else {
echo '<script>
if (window.history.replaceState) {
window.history.replaceState(null, null, window.location.href);
}
window.location.reload();
</script>';
}
} else {
echo "Error al mover el archivo subido.";
}
} else {
echo "Error al subir el archivo.";
}
break;
case 'actualizar':
$datos = [
"id" => $_POST["id"],
"caso_id" => $_POST["caso_id"],
"tipo_documento" => $_POST["tipo_documento"],
"descripcion" => $_POST["descripcion"],
"fecha" => $_POST["fecha"],
"archivo" => $_POST["archivo"]
];
$resultado = DocumentosModel::actualizarDocumento($datos);
if ($resultado === "success") {
echo '<script>
if (window.history.replaceState) {
window.history.replaceState(null, null, window.location.href);
}
window.location = "documentoBase.php?caso_id=' . $_POST["caso_id"] . '";
</script>';
} else {
echo '<script>
if (window.history.replaceState) {
window.history.replaceState(null, null, window.location.href);
}
window.location.reload();
</script>';
}
break;
case 'eliminar':
$resultado = DocumentosModel::eliminarDocumento($_POST['id']);
if ($resultado === "success") {
echo '<script>
if (window.history.replaceState) {
window.history.replaceState(null, null, window.location.href);
}
window.location = "documentoBase.php?caso_id=' . $_POST["caso_id"] . '";
</script>';
} else {
echo '<script>
if (window.history.replaceState) {
window.history.replaceState(null, null, window.location.href);
}
window.location.reload();
</script>';
}
break;
}
}
if (isset($_GET['caso_id'])) {
$caso_id = $_GET['caso_id'];
$documentos = DocumentosModel::obtenerDocumentos($caso_id);
} else {
die("caso_id no está especificado en la URL.");
}
?>
<div class="container mt-5">
<h3>Gestión de Documentos</h3>
<button class="btn btn-success mb-3" data-bs-toggle="modal" data-bs-target="#crearModal">Crear Documento</button>
<table class="table">
<thead class="table-dark">
<tr>
<th>ID</th>
<th>Caso ID</th>
<th>Expediente</th>
<th>Tipo de Documento</th>
<th>Descripción</th>
<th>Fecha</th>
<th>Archivo</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
<?php foreach ($documentos as $documento) { ?>
<tr>
<td><?php echo $documento['id']; ?></td>
<td><?php echo $documento['caso_id']; ?></td>
<td><?php echo htmlspecialchars($documento['numero_expediente']); ?></td>
<td><?php echo $documento['tipo_documento']; ?></td>
<td><?php echo $documento['descripcion']; ?></td>
<td><?php echo $documento['fecha']; ?></td>
<td>
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#pdfModal-<?php echo $documento['id']; ?>">PDF</button>
<!-- Modal PDF -->
<div class="modal fade" id="pdfModal-<?php echo $documento['id']; ?>" tabindex="-1" aria-labelledby="pdfModalLabel-<?php echo $documento['id']; ?>" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="pdfModalLabel-<?php echo $documento['id']; ?>">PDF del Documento</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="<?php echo $documento['archivo']; ?>" frameborder="0" style="width:100%; height:600px;"></iframe>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
</div>
</div>
</div>
</div>
</td>
<td>
<form method="post" style="display: inline-block;">
<input type="hidden" name="action" value="eliminar">
<input type="hidden" name="id" value="<?php echo $documento['id']; ?>">
<input type="hidden" name="caso_id" value="<?php echo $caso_id; ?>">
<button type="submit" class="btn btn-danger">Eliminar</button>
</form>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<!-- Modal Crear -->
<div class="modal fade" id="crearModal" tabindex="-1" aria-labelledby="crearModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="crearModalLabel">Crear Documento</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="crear">
<div class="row">
<div class="col-6 mb-3">
<label for="caso_id" class="form-label">Caso ID</label>
<input type="text" class="form-control" id="caso_id" name="caso_id" value="<?php echo htmlspecialchars($caso_id); ?>" readonly>
</div>
<div class="col-6 mb-3">
<label for="tipo_documento" class="form-label">Tipo de Documento</label>
<select class="form-control" id="tipo_documento" name="tipo_documento" required>
<option value="Demanda">Demanda</option>
<option value="Prueba">Prueba</option>
<option value="Sentencia">Sentencia</option>
<option value="Notificación">Notificación</option>
<option value="Otro">Otro</option>
</select>
</div>
<div class="col-12 mb-3">
<label for="descripcion" class="form-label">Descripción</label>
<textarea class="form-control" id="descripcion" name="descripcion"></textarea>
</div>
<div class="col-6 mb-3">
<label for="fecha" class="form-label">Fecha</label>
<input type="datetime-local" class="form-control" id="fecha" name="fecha" required>
</div>
<div class="col-6 mb-3">
<label for="archivo" class="form-label">Archivo</label>
<input type="file" class="form-control" id="archivo" name="archivo">
</div>
</div>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-success">Crear</button>
</form>
</div>
</div>
</div>
</div>
Comentarios
Publicar un comentario