File manager - Edit - /home/webapp69.cm.in.th/u69319090037/Shop/views/settings.php
Back
<?php /** * System Settings & CMS Page * CMTC Shopping */ require_once __DIR__ . '/../includes/header.php'; require_once __DIR__ . '/../includes/navbar.php'; require_login(); require_permission($db, 'system_settings'); $error = ""; $success = ""; // Ensure all needed columns exist try { $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `footer_text` varchar(500) DEFAULT '© 2026 CMTC Shopping. All Rights Reserved.'"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `version` varchar(20) DEFAULT '1.0.0'"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `limit_per_person` int(11) DEFAULT 5"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `booking_open` tinyint(1) DEFAULT 1"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `booking_start` datetime DEFAULT NULL"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `booking_end` datetime DEFAULT NULL"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `favicon` varchar(255) DEFAULT NULL"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `announcement_title` varchar(255) DEFAULT NULL"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `announcement_content` text DEFAULT NULL"); $db->exec("ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS `announcement_image` varchar(255) DEFAULT NULL"); } catch (Exception $e) {} // Handle Announcement Delete if (isset($_GET['delete_news_id'])) { $del_news_id = intval($_GET['delete_news_id']); if ($del_news_id > 0) { try { $stmt = $db->prepare("DELETE FROM news WHERE id = ?"); $stmt->execute([$del_news_id]); log_activity($db, 'delete', "ลบข่าวประชาสัมพันธ์ ID: $del_news_id"); $_SESSION['flash_success'] = "ลบข่าวประชาสัมพันธ์เรียบร้อยแล้ว"; } catch (Exception $e) { $_SESSION['flash_error'] = "เกิดข้อผิดพลาดในการลบข่าว: " . $e->getMessage(); } } header("Location: settings.php"); exit(); } // Handle Announcement Post (Insert into `news` table) if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['post_announcement'])) { $ann_title = trim($_POST['announcement_title'] ?? ''); $ann_content = trim($_POST['announcement_content'] ?? ''); $ann_image_name = null; if (empty($ann_title) && empty($ann_content)) { $error = "กรุณาระบุหัวข้อหรือเนื้อหาข่าวประกาศ"; } else { try { if (isset($_FILES['announcement_image']) && $_FILES['announcement_image']['error'] === UPLOAD_ERR_OK) { $upload_res = upload_image($_FILES['announcement_image'], 'news', 'news'); if ($upload_res['success']) { $ann_image_name = $upload_res['filename']; } } // Insert into news table so index.php displays it $stmt = $db->prepare("INSERT INTO news (title, content, image, status) VALUES (?, ?, ?, 'active')"); $stmt->execute([$ann_title, $ann_content, $ann_image_name]); // Also keep latest in system_settings $db->prepare("UPDATE system_settings SET announcement_title = ?, announcement_content = ?, announcement_image = ?") ->execute([$ann_title, $ann_content, $ann_image_name]); log_activity($db, 'add', "เพิ่มข่าวประชาสัมพันธ์: $ann_title"); $success = "โพสต์ข่าวประชาสัมพันธ์เรียบร้อยแล้ว"; } catch (Exception $e) { $error = "เกิดข้อผิดพลาด: " . $e->getMessage(); } } } // Handle Settings Update if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_settings'])) { if (!validate_csrf_token($_POST['csrf_token'] ?? '')) { $error = "โทเค็นความปลอดภัยไม่ถูกต้อง"; } else { $system_name = trim($_POST['system_name'] ?? ''); $footer_text = trim($_POST['footer_text'] ?? ''); $version = trim($_POST['version'] ?? '1.0.0'); $limit_per_person = intval($_POST['limit_per_person'] ?? 5); $booking_open = isset($_POST['booking_open']) ? 1 : 0; $booking_start = !empty($_POST['booking_start']) ? $_POST['booking_start'] : null; $booking_end = !empty($_POST['booking_end']) ? $_POST['booking_end'] : null; try { $stmt = $db->prepare("UPDATE system_settings SET system_name = ?, footer_text = ?, version = ?, limit_per_person = ?, booking_open = ?, booking_start = ?, booking_end = ?"); $stmt->execute([$system_name, $footer_text, $version, $limit_per_person, $booking_open, $booking_start, $booking_end]); // Handle logo upload if (isset($_FILES['logo']) && $_FILES['logo']['error'] === UPLOAD_ERR_OK) { $upload_res = upload_image($_FILES['logo'], '', 'logo'); if ($upload_res['success']) { $db->prepare("UPDATE system_settings SET logo = ?")->execute([$upload_res['filename']]); } } // Handle favicon upload if (isset($_FILES['favicon']) && $_FILES['favicon']['error'] === UPLOAD_ERR_OK) { $upload_res = upload_image($_FILES['favicon'], '', 'favicon'); if ($upload_res['success']) { $db->prepare("UPDATE system_settings SET favicon = ?")->execute([$upload_res['filename']]); } } log_activity($db, 'edit', "แก้ไขการตั้งค่าระบบ"); $success = "บันทึกการตั้งค่าระบบเรียบร้อยแล้ว"; } catch (Exception $e) { $error = "เกิดข้อผิดพลาด: " . $e->getMessage(); } } } // Read flash messages from session if (!empty($_SESSION['flash_success'])) { $success = $_SESSION['flash_success']; unset($_SESSION['flash_success']); } if (!empty($_SESSION['flash_error'])) { $error = $_SESSION['flash_error']; unset($_SESSION['flash_error']); } // Fetch current settings $settings = $db->query("SELECT * FROM system_settings LIMIT 1")->fetch(); // Fetch all announcements from `news` table $announcements = []; try { $ann_stmt = $db->query("SELECT * FROM news ORDER BY id DESC LIMIT 10"); if ($ann_stmt) { $announcements = $ann_stmt->fetchAll(); } } catch (Exception $e) {} ?> <div class="d-flex"> <?php require_once __DIR__ . '/../includes/sidebar.php'; ?> <main class="flex-grow-1 p-4" style="background-color: var(--bs-body-bg);"> <div class="d-flex justify-content-between align-items-center mb-4"> <div> <h3 class="fw-bold mb-0"><i class="bi bi-gear-fill text-primary me-2"></i>ตั้งค่าระบบและ CMS</h3> <nav aria-label="breadcrumb"> <ol class="breadcrumb mb-0"> <li class="breadcrumb-item"><a href="dashboard.php">แดชบอร์ด</a></li> <li class="breadcrumb-item active">ตั้งค่าระบบ</li> </ol> </nav> </div> </div> <?php if (!empty($error)): ?> <div class="alert alert-danger mb-4"><?php echo $error; ?></div> <?php endif; ?> <?php if (!empty($success)): ?> <div class="alert alert-success mb-4"><?php echo $success; ?></div> <?php endif; ?> <div class="row g-4"> <!-- Left Column: System Settings --> <div class="col-lg-7"> <div class="card border-0 shadow-sm glass-card p-4"> <h5 class="fw-bold mb-4"><i class="bi bi-sliders text-primary me-2"></i>ข้อมูลระบบและการจอง</h5> <form method="POST" enctype="multipart/form-data"> <input type="hidden" name="csrf_token" value="<?php echo get_csrf_token(); ?>"> <div class="mb-3"> <label class="form-label fw-semibold">ชื่อระบบ Web Application</label> <input type="text" name="system_name" class="form-control" value="<?php echo sanitize($settings['system_name'] ?? 'CMTC Smart Outfit Shopping & Booking'); ?>" required> </div> <div class="row g-3 mb-3"> <div class="col-md-6"> <label class="form-label fw-semibold">โลโก้ระบบ (Logo)</label> <?php if (!empty($settings['logo'])): ?> <div class="mb-1"><img src="<?php echo base_url('uploads/' . sanitize($settings['logo'])); ?>" height="40" class="rounded border p-1"></div> <?php endif; ?> <input type="file" name="logo" class="form-control" accept="image/*"> </div> <div class="col-md-6"> <label class="form-label fw-semibold">ไอคอนเว็บ (Favicon)</label> <?php if (!empty($settings['favicon'])): ?> <div class="mb-1"><img src="<?php echo base_url('uploads/' . sanitize($settings['favicon'])); ?>" height="32" class="rounded border p-1"></div> <?php endif; ?> <input type="file" name="favicon" class="form-control" accept="image/*,.ico"> </div> </div> <div class="mb-3"> <label class="form-label fw-semibold">ข้อความท้ายเว็บ (Footer Text)</label> <input type="text" name="footer_text" class="form-control" value="<?php echo sanitize($settings['footer_text'] ?? '© 2026 CMTC Shopping. All Rights Reserved.'); ?>"> </div> <div class="row g-3 mb-4"> <div class="col-md-6"> <label class="form-label fw-semibold">เลขเวอร์ชัน (Version)</label> <input type="text" name="version" class="form-control" value="<?php echo sanitize($settings['version'] ?? '1.0.0'); ?>"> </div> <div class="col-md-6"> <label class="form-label fw-semibold">จำกัดจำนวนของสูงสุด/คน (ชิ้น)</label> <input type="number" name="limit_per_person" class="form-control" min="1" value="<?php echo intval($settings['limit_per_person'] ?? 5); ?>"> </div> </div> <!-- Booking Toggle --> <div class="mb-3"> <div class="form-check form-switch mb-2"> <input class="form-check-input" type="checkbox" name="booking_open" id="booking_open" role="switch" <?php echo ($settings['booking_open'] ?? 1) ? 'checked' : ''; ?>> <label class="form-check-label fw-semibold text-primary" for="booking_open"> <i class="bi bi-calendar-check me-1"></i>เปิดรับการจองออนไลน์ / สั่งจองสินค้า </label> </div> </div> <div class="row g-3 mb-4"> <div class="col-md-6"> <label class="form-label fw-semibold">วันและเวลาเปิดรับจอง</label> <input type="datetime-local" name="booking_start" class="form-control" value="<?php echo !empty($settings['booking_start']) ? date('Y-m-d\TH:i', strtotime($settings['booking_start'])) : ''; ?>"> </div> <div class="col-md-6"> <label class="form-label fw-semibold">วันและเวลาปิดรับจอง</label> <input type="datetime-local" name="booking_end" class="form-control" value="<?php echo !empty($settings['booking_end']) ? date('Y-m-d\TH:i', strtotime($settings['booking_end'])) : ''; ?>"> </div> </div> <button type="submit" name="save_settings" class="btn btn-primary px-4"> <i class="bi bi-floppy-disk me-1"></i> บันทึกการตั้งค่าระบบ </button> </form> </div> </div> <!-- Right Column: Announcement --> <div class="col-lg-5"> <div class="card border-0 shadow-sm glass-card p-4 mb-4"> <h5 class="fw-bold mb-3"><i class="bi bi-megaphone-fill text-danger me-2"></i>ประกาศข่าวประชาสัมพันธ์</h5> <form method="POST" enctype="multipart/form-data"> <div class="mb-3"> <label class="form-label fw-semibold">หัวข้อประกาศ (ไม่บังคับ หากไม่โหลดรูปภาพ)</label> <input type="text" name="announcement_title" class="form-control" placeholder="หัวข้อเรื่อง"> </div> <div class="mb-3"> <label class="form-label fw-semibold">เนื้อหาข่าวประกาศ (ไม่บังคับ)</label> <textarea name="announcement_content" class="form-control" rows="3" placeholder="พิมพ์รายละเอียดข่าวประกาศ..."></textarea> </div> <div class="mb-3"> <label class="form-label fw-semibold">รูปภาพข่าวประกาศ (ไม่บังคับ)</label> <input type="file" name="announcement_image" class="form-control" accept="image/*"> </div> <button type="submit" name="post_announcement" class="btn btn-danger w-100"> <i class="bi bi-megaphone me-1"></i> โพสต์ข่าวประชาสัมพันธ์ </button> </form> </div> <!-- Recent Announcements List with Delete Button --> <div class="card border-0 shadow-sm glass-card p-4"> <div class="d-flex justify-content-between align-items-center mb-3"> <h6 class="fw-bold mb-0"><i class="bi bi-clock-history text-muted me-2"></i>รายการข่าวประกาศทั้งหมด (<?php echo count($announcements); ?>)</h6> </div> <?php if (count($announcements) > 0): ?> <div class="list-group list-group-flush"> <?php foreach ($announcements as $ann): ?> <div class="list-group-item bg-transparent px-0 py-3 border-bottom"> <div class="d-flex justify-content-between align-items-start gap-2"> <div class="flex-grow-1"> <div class="fw-bold text-dark mb-1"><?php echo sanitize($ann['title'] ?? 'ไม่มีหัวข้อ'); ?></div> <p class="text-muted small mb-1"><?php echo nl2br(sanitize($ann['content'] ?? '')); ?></p> <small class="text-muted" style="font-size: 0.75rem;"><i class="bi bi-calendar3 me-1"></i><?php echo format_thai_date($ann['created_at'], true); ?></small> </div> <div class="d-flex align-items-center gap-1 flex-shrink-0"> <a href="settings.php?delete_news_id=<?php echo $ann['id']; ?>" class="btn btn-sm btn-outline-danger" onclick="return confirm('ยืนยันการลบข่าวประชาสัมพันธ์นี้ใช่หรือไม่?');" title="ลบข่าวนี้"> <i class="bi bi-trash"></i> ลบ </a> </div> </div> <?php if (!empty($ann['image'])): ?> <div class="mt-2"> <img src="<?php echo base_url('uploads/news/' . sanitize($ann['image'])); ?>" class="rounded border" style="max-height: 80px; object-fit: cover;" onerror="this.style.display='none';"> </div> <?php endif; ?> </div> <?php endforeach; ?> </div> <?php else: ?> <p class="text-muted small text-center py-3 mb-0">ยังไม่มีข่าวประกาศในระบบ</p> <?php endif; ?> </div> </div> </div> </main> </div> <?php require_once __DIR__ . '/../includes/footer.php'; ?>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.25 |
proxy
|
phpinfo
|
Settings