first commit

This commit is contained in:
r2xrzh9q2z-lab
2026-02-02 11:07:09 +07:00
commit d1b931d547
286 changed files with 53992 additions and 0 deletions

View File

@@ -0,0 +1,178 @@
const { addBaseUrlToImages } = require("../utils/imageHelper");
const Footer = require("../models/footer");
// Get footer data from MongoDB
const getFooterData = async () => {
const footer = await Footer.findOne({ name: "default" });
if (!footer) {
return {
logo: {
src: '',
alt: ''
},
about: {
title: "About GGC",
description: "",
mapLink: {
text: "Check on google map",
url: "",
},
},
address: {
text: "",
address2: "",
mapUrl: "",
},
contact: {
phone: "",
hours: "",
email: "",
},
columns: [],
social: {
links: [],
},
copyright: {
text: "",
},
};
}
return footer.toObject();
};
// API to get footer data
exports.api = async (req, res) => {
try {
// Lấy footer data
const footer = await getFooterData();
// Xử lý URL cho logo và các hình ảnh khác
const processedData = addBaseUrlToImages(footer);
res.json(processedData);
} catch (err) {
console.error("API Error:", err);
res.status(500).json({ error: "Error loading footer data" });
}
};
// API để lấy toàn bộ footer data
exports.getFooterData = async (req, res) => {
try {
const footerData = await getFooterData();
const processed = addBaseUrlToImages(footerData);
res.json(processed);
} catch (error) {
console.error("Error getting footer data:", error);
res.status(500).json({ error: "Error loading footer data" });
}
};
// Render admin view
exports.index = async (req, res) => {
try {
const data = await getFooterData();
const frontendUrl = process.env.FRONTEND_URL || "http://localhost:3000";
// Ensure image paths are absolute for admin preview
const processedData = addBaseUrlToImages(data);
res.render("admin/footer/index", {
title: "Footer Management",
data
});
} catch (error) {
console.error("Error in footer index:", error);
req.flash("error_msg", "An error occurred while loading the page");
res.redirect("/admin/dashboard");
}
};
// Cập nhật dữ liệu footer
exports.update = async (req, res) => {
try {
let footerData = req.body;
if (footerData.footerJson) {
try {
footerData = JSON.parse(footerData.footerJson);
} catch (err) {
console.warn('Invalid footerJson payload, falling back to req.body');
}
}
// Tìm footer hiện có hoặc tạo mới nếu không tồn tại
let footer = await Footer.findOne({ name: "default" });
if (!footer) {
footer = new Footer({
name: "default",
about: footerData.about || {
title: "About GGC",
description: "",
mapLink: { text: "Check on google map", url: "" },
},
address: footerData.address || {
text: "",
address2: "",
mapUrl: "",
link2: "",
},
contact: footerData.contact || { phone: "", hours: "", email: "" },
columns: Array.isArray(footerData.columns) ? footerData.columns : [],
social: footerData.social || { links: [] },
copyright: footerData.copyright || { text: "" },
});
} else {
// Cập nhật các trường
if (footerData.about) {
footer.about = {
title: footerData.about.title || footer.about?.title || "About GGC",
description: footerData.about.description || footer.about?.description || "",
mapLink: {
text: footerData.about.mapLink?.text || footer.about?.mapLink?.text || "Check on google map",
url: footerData.about.mapLink?.url || footer.about?.mapLink?.url || ""
}
};
}
if (footerData.address) {
// Đảm bảo address2 tồn tại để tránh undefined trong view/schema
footer.address = {
...(footer.address?.toObject
? footer.address.toObject()
: footer.address),
...footerData.address,
address2:
footerData.address.address2 !== undefined
? footerData.address.address2
: footer.address?.address2 || "",
link2:
footerData.address.link2 !== undefined
? footerData.address.link2
: footer.address?.link2 || "",
};
}
if (footerData.contact) footer.contact = footerData.contact;
if (Array.isArray(footerData.columns))
footer.columns = footerData.columns;
if (footerData.social && Array.isArray(footerData.social.links))
footer.social = footerData.social;
if (footerData.copyright && typeof footerData.copyright.text === "string")
footer.copyright = footerData.copyright;
}
await footer.save();
req.flash("success_msg", "Footer updated successfully");
// Redirect back to the active tab
const activeTab = req.body.activeTab || 'about';
res.redirect(`/admin/footer?activeTab=${activeTab}`);
} catch (err) {
console.error("Error updating footer:", err);
req.flash("error_msg", err.message || "Error updating footer");
res.redirect("/admin/footer");
}
};