140 lines
7.8 KiB
PHP
140 lines
7.8 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/archive_bootstrap.php';
|
|
ensure_archive_table();
|
|
$user = require_login();
|
|
[$projectName, $projectDescription, $projectImageUrl] = project_meta();
|
|
|
|
$id = (int) ($_GET['id'] ?? 0);
|
|
$record = fetch_record_by_id($id);
|
|
if (!$record || !can_view_record($user, $record)) {
|
|
http_response_code(404);
|
|
exit('Arsip tidak ditemukan atau akses ditolak.');
|
|
}
|
|
?>
|
|
<!doctype html>
|
|
<html lang="id">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title><?= h($record['title']) ?> — <?= h($projectName) ?></title>
|
|
<meta name="description" content="<?= h($projectDescription) ?>">
|
|
<meta property="og:title" content="<?= h($record['title']) ?>">
|
|
<meta property="og:description" content="<?= h($projectDescription) ?>">
|
|
<meta property="twitter:title" content="<?= h($record['title']) ?>">
|
|
<meta property="twitter:description" content="<?= h($projectDescription) ?>">
|
|
<?php if ($projectImageUrl): ?>
|
|
<meta property="og:image" content="<?= h($projectImageUrl) ?>">
|
|
<meta property="twitter:image" content="<?= h($projectImageUrl) ?>">
|
|
<?php endif; ?>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
|
<link rel="stylesheet" href="assets/css/custom.css?v=<?= time() ?>">
|
|
</head>
|
|
<body>
|
|
<div class="app-shell">
|
|
<header class="topbar border-bottom no-print">
|
|
<div class="container-fluid px-3 px-lg-4 py-3 d-flex justify-content-between align-items-center gap-3 flex-wrap">
|
|
<div>
|
|
<div class="eyebrow">Detail arsip</div>
|
|
<h1 class="app-title mb-0"><?= h($record['title']) ?></h1>
|
|
</div>
|
|
<div class="d-flex gap-2 flex-wrap align-items-center">
|
|
<span class="badge badge-soft"><?= h(role_badge_label($user['role'])) ?></span>
|
|
<a href="index.php?folder=<?= urlencode($record['folder_path']) ?>" class="btn btn-outline-secondary btn-sm">Kembali ke dashboard</a>
|
|
<?php if (can_edit_record($user, $record)): ?>
|
|
<a href="index.php?edit=<?= (int) $record['id'] ?>#arsip-form" class="btn btn-outline-secondary btn-sm">Edit</a>
|
|
<?php endif; ?>
|
|
<button type="button" class="btn btn-dark btn-sm" data-print-trigger>Cetak</button>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="container-fluid px-3 px-lg-4 py-4">
|
|
<div class="row g-4">
|
|
<div class="col-lg-8">
|
|
<div class="panel print-panel mb-4">
|
|
<div class="d-flex justify-content-between align-items-start gap-3 flex-wrap mb-3">
|
|
<div>
|
|
<div class="eyebrow">Nomor referensi</div>
|
|
<h2 class="section-title mb-1"><?= h($record['reference_code']) ?></h2>
|
|
<p class="text-secondary mb-0"><?= h($record['folder_path']) ?></p>
|
|
</div>
|
|
<span class="badge <?= h(record_badge_class($record['confidentiality'])) ?>"><?= h($record['confidentiality']) ?></span>
|
|
</div>
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-md-4">
|
|
<div class="metric-card h-100">
|
|
<div class="metric-label">Tanggal arsip</div>
|
|
<div class="metric-value small-value"><?= h($record['record_day']) ?>/<?= h($record['record_month']) ?>/<?= h($record['record_year']) ?></div>
|
|
<small><?= h((string) $record['document_date']) ?></small>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="metric-card h-100">
|
|
<div class="metric-label">Pemilik unit</div>
|
|
<div class="metric-value small-value"><?= h($record['owner_unit']) ?></div>
|
|
<small>Dibuat oleh <?= h($record['created_by_name']) ?></small>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="metric-card h-100">
|
|
<div class="metric-label">Negara / cakupan</div>
|
|
<div class="metric-value small-value"><?= h($record['country_tag']) ?></div>
|
|
<small>Menu <?= h($record['main_menu']) ?></small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<article class="detail-body">
|
|
<h3 class="small-heading">Ringkasan dokumen</h3>
|
|
<p class="mb-0"><?= nl2br(h($record['description'])) ?></p>
|
|
</article>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4">
|
|
<div class="panel h-100 d-flex flex-column gap-4">
|
|
<div>
|
|
<div class="eyebrow">Metadata</div>
|
|
<h2 class="section-title mb-3">Informasi dokumen</h2>
|
|
<dl class="meta-grid mb-0">
|
|
<div><dt>Kata kunci</dt><dd><?= h($record['keywords'] ?: '—') ?></dd></div>
|
|
<div><dt>Penginput</dt><dd><?= h($record['created_by_name']) ?> · <?= h($record['created_by_username']) ?></dd></div>
|
|
<div><dt>Dibuat</dt><dd><?= h((string) $record['created_at']) ?></dd></div>
|
|
<div><dt>Diperbarui</dt><dd><?= h((string) $record['updated_at']) ?></dd></div>
|
|
</dl>
|
|
</div>
|
|
<div>
|
|
<div class="eyebrow">Lampiran</div>
|
|
<h2 class="section-title mb-3">Aksi cepat</h2>
|
|
<?php if (!empty($record['attachment_name'])): ?>
|
|
<div class="file-card mb-3">
|
|
<strong><?= h($record['attachment_name']) ?></strong>
|
|
<p class="text-secondary mb-0">Lampiran arsip siap diunduh sesuai hak akses.</p>
|
|
</div>
|
|
<div class="d-grid gap-2">
|
|
<a href="archive_download.php?id=<?= (int) $record['id'] ?>" class="btn btn-dark">Unduh lampiran</a>
|
|
</div>
|
|
<?php else: ?>
|
|
<div class="empty-state mb-0">
|
|
<strong>Belum ada lampiran.</strong>
|
|
<p class="mb-0">Arsip ini masih tersimpan sebagai entri metadata dan ringkasan dokumen.</p>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php if (can_delete_record($user, $record)): ?>
|
|
<form action="archive_delete.php" method="post" class="no-print">
|
|
<input type="hidden" name="csrf_token" value="<?= h(csrf_token()) ?>">
|
|
<input type="hidden" name="id" value="<?= (int) $record['id'] ?>">
|
|
<button type="submit" class="btn btn-outline-danger w-100" onclick="return confirm('Hapus arsip ini secara permanen?');">Hapus arsip</button>
|
|
</form>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
</div>
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
|
<script src="assets/js/main.js?v=<?= time() ?>"></script>
|
|
</body>
|
|
</html>
|