forked from UKSOURCE/cms.hailearning.edu.vn
161 lines
4.6 KiB
JavaScript
161 lines
4.6 KiB
JavaScript
const { addBaseUrlToImages } = require('../utils/imageHelper');
|
|
const About = require('../models/about');
|
|
|
|
// Get about data from MongoDB
|
|
const getAboutData = async () => {
|
|
const about = await About.findOne().sort({ updatedAt: -1 });
|
|
|
|
// Trả về object rỗng với cấu trúc cơ bản nếu không có dữ liệu
|
|
if (!about) {
|
|
return {
|
|
banner: {
|
|
image: '',
|
|
title: '',
|
|
text: ''
|
|
},
|
|
about: {
|
|
title: '',
|
|
paragraphs: [],
|
|
list_items: [],
|
|
button: {
|
|
text: '',
|
|
url: ''
|
|
},
|
|
image: '',
|
|
quote: {
|
|
mark_image: '',
|
|
title: '',
|
|
text: '',
|
|
author: ''
|
|
}
|
|
},
|
|
values: {
|
|
background_image: '',
|
|
items: []
|
|
},
|
|
education: {
|
|
images: {
|
|
student1: '',
|
|
student2: ''
|
|
},
|
|
subtitle: '',
|
|
title: '',
|
|
text: ''
|
|
},
|
|
advantages: {
|
|
title: '',
|
|
items: []
|
|
},
|
|
academic_board: {
|
|
title: '',
|
|
members: []
|
|
}
|
|
};
|
|
}
|
|
|
|
return about;
|
|
};
|
|
|
|
// Display about management page
|
|
exports.index = async (req, res) => {
|
|
try {
|
|
const data = await getAboutData();
|
|
res.render('admin/about', {
|
|
title: 'About Management',
|
|
data
|
|
});
|
|
} catch (err) {
|
|
console.error(err);
|
|
req.flash('error_msg', 'Error loading about data');
|
|
res.redirect('/admin/dashboard');
|
|
}
|
|
};
|
|
|
|
// Update about data
|
|
exports.update = async (req, res) => {
|
|
try {
|
|
// Lấy document hiện tại từ MongoDB
|
|
const currentData = await getAboutData();
|
|
|
|
// Danh sách các section cần cập nhật
|
|
const sections = ['banner', 'about', 'values', 'education', 'advantages', 'academic_board'];
|
|
const errors = [];
|
|
let hasChanges = false;
|
|
|
|
// Tạo đối tượng dữ liệu mới dựa trên dữ liệu hiện tại
|
|
const updatedData = { ...currentData.toObject() };
|
|
|
|
// Xử lý từng section
|
|
sections.forEach(section => {
|
|
try {
|
|
// Kiểm tra nếu section không được gửi lên
|
|
if (!req.body[section]) {
|
|
console.warn(`No data for section: ${section}`);
|
|
return;
|
|
}
|
|
|
|
// Parse dữ liệu JSON từ form
|
|
const newSectionData = JSON.parse(req.body[section]);
|
|
|
|
// So sánh dữ liệu mới với dữ liệu hiện tại
|
|
const currentSectionData = currentData[section];
|
|
const sectionHasChanges = JSON.stringify(newSectionData) !== JSON.stringify(currentSectionData);
|
|
|
|
// Nếu có thay đổi, cập nhật vào đối tượng dữ liệu mới
|
|
if (sectionHasChanges) {
|
|
updatedData[section] = newSectionData;
|
|
hasChanges = true;
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error processing section ${section}:`, error);
|
|
errors.push(`Error processing ${section} data: ${error.message}`);
|
|
}
|
|
});
|
|
|
|
// Nếu có lỗi, thông báo và chuyển hướng
|
|
if (errors.length > 0) {
|
|
req.flash('error_msg', `Data processing error: ${errors[0]}`);
|
|
return req.session.save(() => res.redirect('/admin/about'));
|
|
}
|
|
|
|
// Nếu không có thay đổi, thông báo và chuyển hướng
|
|
if (!hasChanges) {
|
|
req.flash('info_msg', 'No changes were made');
|
|
return req.session.save(() => res.redirect('/admin/about'));
|
|
}
|
|
|
|
try {
|
|
// Cập nhật hoặc tạo mới document trong MongoDB
|
|
if (currentData._id) {
|
|
await About.findByIdAndUpdate(currentData._id, updatedData, { new: true });
|
|
} else {
|
|
await About.create(updatedData);
|
|
}
|
|
|
|
// Success notification and redirect
|
|
req.flash('success_msg', 'About data updated successfully');
|
|
return req.session.save(() => res.redirect('/admin/about'));
|
|
} catch (dbError) {
|
|
console.error('Database error:', dbError);
|
|
req.flash('error_msg', `Database error: ${dbError.message || 'Unknown'}`);
|
|
return req.session.save(() => res.redirect('/admin/about'));
|
|
}
|
|
} catch (err) {
|
|
console.error('Update error:', err);
|
|
req.flash('error_msg', `Update error: ${err.message || 'Unknown'}`);
|
|
return req.session.save(() => res.redirect('/admin/about'));
|
|
}
|
|
};
|
|
|
|
// API to get about data
|
|
exports.api = async (req, res) => {
|
|
try {
|
|
const aboutData = await getAboutData();
|
|
const baseUrl = process.env.BACKEND_URL || `${req.protocol}://${req.get('host')}`;
|
|
const processedData = addBaseUrlToImages(aboutData, baseUrl);
|
|
res.json(processedData);
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: 'Error loading about data' });
|
|
}
|
|
}; |