Initial commit

This commit is contained in:
Porawit Dongwang
2026-09-16 23:20:08 +07:00
commit 0041668dbb
32577 changed files with 3687927 additions and 0 deletions
@@ -0,0 +1,158 @@
<?php
require_once 'config.php';
if (isset($_SESSION['username'])) {
header("Location: index.php");
exit;
}
$topbar_text = getSystemSetting('topbar_text', 'HOSxP Mapping Data');
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$user = trim($_POST['username'] ?? '');
$pass = trim($_POST['password'] ?? '');
if (empty($user) || empty($pass)) {
$error = "กรุณากรอก Username และ Password";
} else {
$pass_md5 = MD5($pass);
$sql = "SELECT HR_CID, HR_PASSWORD, HR_STATUS_ID, HR_PREFIX_NAME, HR_FNAME, HR_LNAME
FROM hr_person a
LEFT OUTER JOIN hr_prefix e ON a.HR_PREFIX_ID=e.HR_PREFIX_ID
WHERE a.HR_USERNAME = :user LIMIT 1";
try {
$pdo_hos = getDB(DB_HR_HOST, DB_HR_NAME, DB_HR_USER, DB_HR_PASS);
$stmt = $pdo_hos->prepare($sql);
$stmt->execute(['user' => $user]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$row) {
$error = "ไม่พบบัญชีผู้ใช้นี้";
} elseif (strtolower($row['HR_PASSWORD']) !== strtolower($pass_md5)) {
$error = "รหัสผ่านไม่ถูกต้อง";
} elseif ($row['HR_STATUS_ID'] !== '01') {
$error = "บัญชีผู้ใช้นี้ถูกปิดการใช้งานไปแล้ว";
} else {
$_SESSION['loggedin'] = true;
$_SESSION['fullname'] = $row['HR_PREFIX_NAME'] . $row['HR_FNAME'] . " " . $row['HR_LNAME'];
$_SESSION['cid'] = $row['HR_CID'];
// Check if user is an admin
$_SESSION['is_admin'] = false;
try {
$log_db = getDB(DB_LOG_HOST, DB_LOG_NAME, DB_LOG_USER, DB_LOG_PASS);
$admin_stmt = $log_db->prepare("SELECT id FROM system_admins WHERE cid = ?");
$admin_stmt->execute([$row['HR_CID']]);
if ($admin_stmt->fetch()) {
$_SESSION['is_admin'] = true;
}
} catch (Exception $ex) {
// Ignore DB error, just default to non-admin
}
// Add system log
addSystemLog('LOGIN', 'เข้าสู่ระบบสำเร็จ');
header("Location: index.php");
exit;
}
} catch (PDOException $e) {
$error = "เกิดข้อผิดพลาดของระบบ: " . $e->getMessage();
}
}
}
?>
<!DOCTYPE html>
<html lang="th" class="antialiased">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>เข้าสู่ระบบ - <?php echo htmlspecialchars($topbar_text); ?></title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://fonts.googleapis.com/css2?family=Sarabun:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<link rel="icon" href="assets/img/logo.png" type="image/png">
<style>
body { font-family: 'Sarabun', sans-serif; }
.glass-panel {
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.3);
}
@media (prefers-color-scheme: dark) {
.glass-panel {
background: rgba(30, 41, 59, 0.85);
border: 1px solid rgba(255, 255, 255, 0.1);
}
}
.animate-fade-in {
animation: fadeIn 0.8s ease-out forwards;
opacity: 0;
transform: translateY(10px);
}
@keyframes fadeIn {
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body class="bg-gradient-to-br from-emerald-50 via-teal-100 to-emerald-200 dark:from-gray-900 dark:via-teal-900 dark:to-gray-800 min-h-screen flex flex-col items-center justify-center p-4">
<div class="w-full max-w-md animate-fade-in">
<div class="glass-panel p-8 sm:p-10 rounded-[20px] shadow-2xl relative overflow-hidden">
<!-- Decorative circle -->
<div class="absolute -top-10 -right-10 w-32 h-32 bg-emerald-400 rounded-full mix-blend-multiply filter blur-xl opacity-20 animate-pulse"></div>
<div class="text-center mb-8 relative">
<div class="inline-block p-2 rounded-full bg-white dark:bg-gray-800 shadow-lg mb-4 transform hover:scale-105 transition-transform duration-300">
<img src="assets/img/logo.png" alt="Logo" class="w-24 h-24 object-contain rounded-full" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMTA5NzZkIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTEyIDJMMiA3bDEwIDUgMTAtNS0xMC01ek0yIDE3bDEwIDUgMTAtNU0yIDEybDEwIDUgMTAtNSIvPjwvc3ZnPg=='">
</div>
<h2 class="text-2xl font-bold text-gray-900 dark:text-white mb-2 tracking-tight">เข้าสู่ระบบ</h2>
<p class="text-sm text-gray-500 dark:text-gray-400 font-medium"><?php echo htmlspecialchars($topbar_text); ?></p>
</div>
<?php if($error): ?>
<div class="bg-red-50 dark:bg-red-900/30 border-l-4 border-red-500 text-red-700 dark:text-red-400 p-4 rounded-r-lg mb-6 text-sm flex items-start shadow-sm" role="alert">
<svg class="w-5 h-5 mr-3 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd"></path></svg>
<span><?php echo htmlspecialchars($error); ?></span>
</div>
<?php endif; ?>
<form method="POST" action="" class="space-y-6 relative">
<div>
<label for="username" class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">ชื่อผู้ใช้งาน</label>
<div class="relative group">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400 group-focus-within:text-emerald-500 transition-colors">
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path></svg>
</div>
<input type="text" id="username" name="username" class="block w-full pl-10 pr-4 py-3 border border-gray-200 dark:border-gray-600 rounded-xl focus:ring-2 focus:ring-emerald-500 focus:border-emerald-500 bg-white/70 dark:bg-gray-800/70 backdrop-blur-sm dark:text-white sm:text-sm transition-all shadow-sm hover:bg-white dark:hover:bg-gray-800" placeholder="Username" required autofocus>
</div>
</div>
<div>
<label for="password" class="block text-sm font-semibold text-gray-700 dark:text-gray-300 mb-2">รหัสผ่าน</label>
<div class="relative group">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none text-gray-400 group-focus-within:text-emerald-500 transition-colors">
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path></svg>
</div>
<input type="password" id="password" name="password" class="block w-full pl-10 pr-4 py-3 border border-gray-200 dark:border-gray-600 rounded-xl focus:ring-2 focus:ring-emerald-500 focus:border-emerald-500 bg-white/70 dark:bg-gray-800/70 backdrop-blur-sm dark:text-white sm:text-sm transition-all shadow-sm hover:bg-white dark:hover:bg-gray-800" placeholder="Password" required>
</div>
</div>
<button type="submit" class="w-full flex justify-center py-3 px-4 border border-transparent rounded-xl shadow-lg text-sm font-bold text-white bg-emerald-600 hover:bg-emerald-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-emerald-500 transform transition-all duration-200 hover:-translate-y-0.5 active:translate-y-0">
เข้าสู่ระบบ
</button>
</form>
</div>
<div class="text-center mt-8 animate-fade-in" style="animation-delay: 0.2s;">
<p class="text-sm font-medium text-emerald-800/70 dark:text-gray-400/80">
&copy; <?php echo date('Y') + 543; ?> <?php echo htmlspecialchars($topbar_text); ?>
</p>
</div>
</div>
</body>
</html>