From f69779709a71101f2bec2be90b3c03c5f3b40bdf Mon Sep 17 00:00:00 2001
From: 65160258 <65160258@go.buu.ac.th>
Date: Thu, 20 Mar 2025 19:55:22 +0700
Subject: [PATCH] act

---
 app.js                    |  9 +++++
 routes/activityRoutes.js  | 83 +++++++++++++++++++++++++++++++++++++++
 views/activities/edit.ejs | 29 ++++++++++++++
 views/activities/new.ejs  | 29 ++++++++++++++
 views/pages/index.ejs     | 76 ++++++++++++++++++++---------------
 views/partials/header.ejs |  6 ---
 6 files changed, 195 insertions(+), 37 deletions(-)
 create mode 100644 routes/activityRoutes.js
 create mode 100644 views/activities/edit.ejs
 create mode 100644 views/activities/new.ejs

diff --git a/app.js b/app.js
index 31b03ff..21a60fb 100644
--- a/app.js
+++ b/app.js
@@ -7,6 +7,7 @@ const cors = require("cors");
 const bodyParser = require('body-parser');
 const db = require('./db');
 const authRoutes = require('./routes/auth');
+const activityRoutes = require("./routes/activityRoutes");
 
 const app = express();
 
@@ -45,7 +46,15 @@ app.set('view engine', 'ejs');
 app.set('views', path.join(__dirname, 'views'));
 
 // ใช้เส้นทางจาก authRoutes
+app.use((req, res, next) => {
+  req.user = req.session.user;
+  res.locals.user = req.session.user;
+  next();
+});
+
+// ใช้งาน route
 app.use('/auth', authRoutes);
+app.use("/activities", activityRoutes);
 
 // ---------------------- เส้นทางหลัก ----------------------
 app.get('/', (req, res) => {
diff --git a/routes/activityRoutes.js b/routes/activityRoutes.js
new file mode 100644
index 0000000..09acf0d
--- /dev/null
+++ b/routes/activityRoutes.js
@@ -0,0 +1,83 @@
+const express = require("express");
+const router = express.Router();
+const db = require('../db');
+
+// 🟢 [เพิ่มกิจกรรม] GET ฟอร์มเพิ่มกิจกรรม
+router.get("/new", (req, res) => {
+    if (!req.session.user || req.session.user.role !== "admin") {
+        return res.status(403).send("คุณไม่มีสิทธิ์เข้าถึงหน้านี้");
+      }      
+    res.render("activities/new"); // แสดงฟอร์ม
+});
+
+// 🟢 [เพิ่มกิจกรรม] POST บันทึกข้อมูล
+router.post("/new", (req, res) => {
+    if (!req.user || req.user.role !== "admin") {
+        return res.status(403).send("คุณไม่มีสิทธิ์เพิ่มกิจกรรม");
+    }
+
+    const { act_name, detail, start_date, end_date, start_time, end_time, place_id } = req.body;
+
+    const sql = `INSERT INTO activity (act_name, detail, start_date, end_date, start_time, end_time, place_id) 
+                 VALUES (?, ?, ?, ?, ?, ?, ?)`;
+    db.query(sql, [act_name, detail, start_date, end_date, start_time, end_time, place_id], (err, result) => {
+        if (err) {
+            console.error(err);
+            return res.status(500).send("เกิดข้อผิดพลาด");
+        }
+        res.redirect("/");
+    });
+});
+
+// 🟡 [แก้ไขกิจกรรม] GET ฟอร์มแก้ไข
+router.get("/edit/:id", (req, res) => {
+    if (!req.user || req.user.role !== "admin") {
+        return res.status(403).send("คุณไม่มีสิทธิ์แก้ไขกิจกรรม");
+    }
+
+    const activity_id = req.params.id;
+    db.query("SELECT * FROM activity WHERE activity_id = ?", [activity_id], (err, results) => {
+        if (err || results.length === 0) {
+            return res.status(404).send("ไม่พบกิจกรรม");
+        }
+        res.render("activities/edit", { activity: results[0] });
+    });
+});
+
+// 🟡 [แก้ไขกิจกรรม] POST อัปเดตข้อมูล
+router.post("/edit/:id", (req, res) => {
+    if (!req.user || req.user.role !== "admin") {
+        return res.status(403).send("คุณไม่มีสิทธิ์แก้ไขกิจกรรม");
+    }
+
+    const activity_id = req.params.id;
+    const { act_name, detail, start_date, end_date, start_time, end_time, place_id } = req.body;
+
+    const sql = `UPDATE activity SET act_name = ?, detail = ?, start_date = ?, end_date = ?, start_time = ?, end_time = ?, place_id = ?
+                 WHERE activity_id = ?`;
+    db.query(sql, [act_name, detail, start_date, end_date, start_time, end_time, place_id, activity_id], (err, result) => {
+        if (err) {
+            console.error(err);
+            return res.status(500).send("เกิดข้อผิดพลาดในการอัปเดตข้อมูล");
+        }
+        res.redirect("/");
+    });
+});
+
+// 🔴 [ลบกิจกรรม]
+router.post("/delete/:id", (req, res) => {
+    if (!req.user || req.user.role !== "admin") {
+        return res.status(403).send("คุณไม่มีสิทธิ์ลบกิจกรรม");
+    }
+
+    const activity_id = req.params.id;
+    db.query("DELETE FROM activity WHERE activity_id = ?", [activity_id], (err, result) => {
+        if (err) {
+            console.error(err);
+            return res.status(500).send("เกิดข้อผิดพลาดในการลบ");
+        }
+        res.redirect("/");
+    });
+});
+
+module.exports = router;
diff --git a/views/activities/edit.ejs b/views/activities/edit.ejs
new file mode 100644
index 0000000..8dc4682
--- /dev/null
+++ b/views/activities/edit.ejs
@@ -0,0 +1,29 @@
+<%- include('../partials/header') %>
+<link rel="stylesheet" href="/css/main.css">
+<div class="main-content">
+<h2>แก้ไขกิจกรรม</h2>
+<form action="/activities/edit/<%= activity.activity_id %>" method="POST">
+    <label>ชื่อกิจกรรม:</label>
+    <input type="text" name="act_name" value="<%= activity.act_name %>" required>
+
+    <label>รายละเอียด:</label>
+    <textarea name="detail"><%= activity.detail %></textarea>
+
+    <label>วันที่เริ่ม:</label>
+    <input type="date" name="start_date" value="<%= activity.start_date.toISOString().split('T')[0] %>" required>
+
+    <label>วันที่สิ้นสุด:</label>
+    <input type="date" name="end_date" value="<%= activity.end_date.toISOString().split('T')[0] %>" required>
+
+    <label>เวลาเริ่ม:</label>
+    <input type="time" name="start_time" value="<%= activity.start_time %>" required>
+
+    <label>เวลาสิ้นสุด:</label>
+    <input type="time" name="end_time" value="<%= activity.end_time %>" required>
+
+    <label>สถานที่:</label>
+    <input type="number" name="place_id" value="<%= activity.place_id %>">
+
+    <button type="submit">บันทึก</button>
+</form>
+</div>
\ No newline at end of file
diff --git a/views/activities/new.ejs b/views/activities/new.ejs
new file mode 100644
index 0000000..7987ace
--- /dev/null
+++ b/views/activities/new.ejs
@@ -0,0 +1,29 @@
+<%- include('../partials/header') %>
+<link rel="stylesheet" href="/css/main.css">
+<div class="main-content">
+<h2>เพิ่มกิจกรรมใหม่</h2>
+<form action="/activities/new" method="POST">
+    <label>ชื่อกิจกรรม:</label>
+    <input type="text" name="act_name" required>
+
+    <label>รายละเอียด:</label>
+    <textarea name="detail"></textarea>
+
+    <label>วันที่เริ่ม:</label>
+    <input type="date" name="start_date" required>
+
+    <label>วันที่สิ้นสุด:</label>
+    <input type="date" name="end_date" required>
+
+    <label>เวลาเริ่ม:</label>
+    <input type="time" name="start_time" required>
+
+    <label>เวลาสิ้นสุด:</label>
+    <input type="time" name="end_time" required>
+
+    <label>สถานที่:</label>
+    <input type="number" name="place_id">
+
+    <button type="submit">บันทึก</button>
+</form>
+</div>
\ No newline at end of file
diff --git a/views/pages/index.ejs b/views/pages/index.ejs
index de5611c..fabb8b5 100644
--- a/views/pages/index.ejs
+++ b/views/pages/index.ejs
@@ -7,42 +7,56 @@
     <h1>ชมรม</h1>
     <!-- แสดงจำนวนกิจกรรม -->
     <h2>จำนวนกิจกรรมทั้งหมด: <%= activities.length %></h2>
+
+    <!-- ถ้าเป็น admin ให้แสดงปุ่มเพิ่มกิจกรรม -->
+    <% if (user && user.role === 'admin') { %>
+      <a href="/activities/new" class="btn btn-primary">เพิ่มกิจกรรม</a>
+    <% } %>
+
     <div class="activity-content">
+      <div class="activities-list">
+        <ul>
+          <% activities.forEach(function(activity) { %>
+            <li class="activity-item">
+              <!-- ชื่อกิจกรรม -->
+              <h3>กิจกรรม: <%= activity.act_name %></h3>
+              
+              <!-- รายละเอียด -->
+              <p><strong>รายละเอียด:</strong> <%= activity.detail %></p>
+              
+              <!-- วันที่เริ่มกิจกรรม -->
+              <% if (activity.start_date) { %>
+                <p><strong>วันที่เริ่ม:</strong> 
+                  <%= new Date(activity.start_date).toLocaleDateString() %>
+                </p>
+              <% } %>
 
-    <!-- แสดงรายละเอียดของแต่ละกิจกรรม -->
-    <div class="activities-list">
-      <ul>
-        <% activities.forEach(function(activity) { %>
-          <li class="activity-item">
-            <!-- ชื่อกิจกรรม -->
-            <h3>กิจกรรม: <%= activity.act_name %></h3>
-            
-            <!-- รายละเอียด -->
-            <p><strong>รายละเอียด:</strong> <%= activity.detail %></p>
-            
-            <!-- วันที่เริ่มกิจกรรม -->
-            <% if (activity.date) { %>
-              <p><strong>วันที่เริ่ม:</strong> 
-                <%= new Date(activity.date).toLocaleDateString() %>
-              </p>
-            <% } %>
+              <!-- เวลาเริ่มต้น - เวลาสิ้นสุด -->
+              <% if (activity.start_time && activity.end_time) { %>
+                <p><strong>เวลา:</strong> <%= activity.start_time %> - <%= activity.end_time %></p>
+              <% } %>
 
-            <!-- เวลาเริ่มต้น - เวลาสิ้นสุด -->
-            <% if (activity.start_time && activity.end_time) { %>
-              <p><strong>เวลา:</strong> <%= activity.start_time %> - <%= activity.end_time %></p>
-            <% } %>
+              <!-- วันที่สิ้นสุดกิจกรรม -->
+              <% if (activity.end_date) { %>
+                <p><strong>สิ้นสุดกิจกรรม:</strong> 
+                  <%= new Date(activity.end_date).toLocaleDateString() %>
+                </p>
+              <% } %>
 
-            <!-- วันที่สิ้นสุดกิจกรรม -->
-            <% if (activity.end_date) { %>
-              <p><strong>สิ้นสุดกิจกรรม:</strong> 
-                <%= new Date(activity.end_date).toLocaleDateString() %>
-              </p>
-            <% } %>
+              <!-- ถ้าเป็น admin ให้แสดงปุ่มแก้ไขและลบ -->
+              <% if (user && user.role === 'admin') { %>
+                <div class="admin-actions">
+                  <a href="/activities/edit/<%= activity.activity_id %>" class="btn btn-warning">แก้ไข</a>
+                  <form action="/activities/delete/<%= activity.activity_id %>" method="POST" style="display:inline;">
+                    <button type="submit" class="btn btn-danger" onclick="return confirm('ยืนยันการลบกิจกรรมนี้?')">ลบ</button>
+                  </form>
+                </div>
+              <% } %>
 
-          </li>
-        <% }); %>
-      </ul>
+            </li>
+          <% }); %>
+        </ul>
+      </div>
     </div>
   </div>
-  </div>
 </body>
diff --git a/views/partials/header.ejs b/views/partials/header.ejs
index 3f09e9c..672822f 100644
--- a/views/partials/header.ejs
+++ b/views/partials/header.ejs
@@ -48,12 +48,6 @@
                     Chat
                 </a>
             </li>
-            <li class="nav-item">
-                <a href="/chatAI" class="nav-link" id="chatAI">
-                    <i class="bi bi-robot"></i>
-                    ผู้ช่วย AI
-                </a>
-            </li>
             <li class="nav-item">
                 <a href="/settings" class="nav-link" id="settings">
                     <i class="bi bi-gear"></i>
-- 
GitLab