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