forked from UKSOURCE/cms.hailearning.edu.vn
first commit
This commit is contained in:
161
controllers/aboutController.js
Normal file
161
controllers/aboutController.js
Normal file
@@ -0,0 +1,161 @@
|
||||
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' });
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user