214 lines
7.0 KiB
JavaScript
214 lines
7.0 KiB
JavaScript
// Settings Management JavaScript
|
|
|
|
let currentSettings = {};
|
|
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
checkAuth().then((authenticated) => {
|
|
if (authenticated) {
|
|
loadSettings();
|
|
}
|
|
});
|
|
});
|
|
|
|
async function loadSettings() {
|
|
try {
|
|
const response = await fetch("/api/admin/settings", {
|
|
credentials: "include",
|
|
});
|
|
const data = await response.json();
|
|
if (data.success) {
|
|
currentSettings = data.settings || {};
|
|
populateSettings();
|
|
}
|
|
} catch (error) {
|
|
console.error("Failed to load settings:", error);
|
|
}
|
|
}
|
|
|
|
function populateSettings() {
|
|
// General Settings
|
|
if (currentSettings.general) {
|
|
document.getElementById("siteName").value =
|
|
currentSettings.general.siteName || "";
|
|
document.getElementById("siteTagline").value =
|
|
currentSettings.general.siteTagline || "";
|
|
document.getElementById("siteEmail").value =
|
|
currentSettings.general.siteEmail || "";
|
|
document.getElementById("sitePhone").value =
|
|
currentSettings.general.sitePhone || "";
|
|
document.getElementById("timezone").value =
|
|
currentSettings.general.timezone || "UTC";
|
|
}
|
|
|
|
// Homepage Settings
|
|
if (currentSettings.homepage) {
|
|
document.getElementById("showHero").checked =
|
|
currentSettings.homepage.showHero !== false;
|
|
document.getElementById("showPromotions").checked =
|
|
currentSettings.homepage.showPromotions !== false;
|
|
document.getElementById("showPortfolio").checked =
|
|
currentSettings.homepage.showPortfolio !== false;
|
|
document.getElementById("showBlog").checked =
|
|
currentSettings.homepage.showBlog !== false;
|
|
}
|
|
|
|
// Product Settings
|
|
if (currentSettings.product) {
|
|
document.getElementById("defaultProductStatus").value =
|
|
currentSettings.product.defaultStatus || "active";
|
|
document.getElementById("productsPerPage").value =
|
|
currentSettings.product.perPage || 12;
|
|
document.getElementById("bestSellerLogic").value =
|
|
currentSettings.product.bestSellerLogic || "manual";
|
|
document.getElementById("enableInventory").checked =
|
|
currentSettings.product.enableInventory !== false;
|
|
document.getElementById("showOutOfStock").checked =
|
|
currentSettings.product.showOutOfStock !== false;
|
|
}
|
|
|
|
// Security Settings
|
|
if (currentSettings.security) {
|
|
document.getElementById("passwordExpiration").value =
|
|
currentSettings.security.passwordExpiration || 90;
|
|
document.getElementById("sessionTimeout").value =
|
|
currentSettings.security.sessionTimeout || 60;
|
|
document.getElementById("loginAttempts").value =
|
|
currentSettings.security.loginAttempts || 5;
|
|
document.getElementById("requireStrongPassword").checked =
|
|
currentSettings.security.requireStrongPassword !== false;
|
|
document.getElementById("enableTwoFactor").checked =
|
|
currentSettings.security.enableTwoFactor || false;
|
|
}
|
|
|
|
// Appearance Settings
|
|
if (currentSettings.appearance) {
|
|
document.getElementById("accentColor").value =
|
|
currentSettings.appearance.accentColor || "#667eea";
|
|
updateColorPreview();
|
|
}
|
|
}
|
|
|
|
function previewLogo() {
|
|
const fileInput = document.getElementById("siteLogo");
|
|
const preview = document.getElementById("logoPreview");
|
|
|
|
if (fileInput.files && fileInput.files[0]) {
|
|
const reader = new FileReader();
|
|
reader.onload = function (e) {
|
|
preview.innerHTML = `<img src="${e.target.result}" alt="Logo" />`;
|
|
};
|
|
reader.readAsDataURL(fileInput.files[0]);
|
|
}
|
|
}
|
|
|
|
function previewFavicon() {
|
|
const fileInput = document.getElementById("siteFavicon");
|
|
const preview = document.getElementById("faviconPreview");
|
|
|
|
if (fileInput.files && fileInput.files[0]) {
|
|
const reader = new FileReader();
|
|
reader.onload = function (e) {
|
|
preview.innerHTML = `<img src="${e.target.result}" alt="Favicon" />`;
|
|
};
|
|
reader.readAsDataURL(fileInput.files[0]);
|
|
}
|
|
}
|
|
|
|
function selectLayout(layout) {
|
|
document.querySelectorAll(".theme-selector .theme-option").forEach((el) => {
|
|
el.classList.remove("active");
|
|
});
|
|
event.target.closest(".theme-option").classList.add("active");
|
|
}
|
|
|
|
function selectTheme(theme) {
|
|
document.querySelectorAll(".theme-selector .theme-option").forEach((el) => {
|
|
el.classList.remove("active");
|
|
});
|
|
event.target.closest(".theme-option").classList.add("active");
|
|
}
|
|
|
|
function updateColorPreview() {
|
|
const color = document.getElementById("accentColor").value;
|
|
document.getElementById("colorPreview").style.backgroundColor = color;
|
|
document.getElementById("colorValue").textContent = color;
|
|
}
|
|
|
|
async function saveSettings() {
|
|
const settings = {
|
|
general: {
|
|
siteName: document.getElementById("siteName").value,
|
|
siteTagline: document.getElementById("siteTagline").value,
|
|
siteEmail: document.getElementById("siteEmail").value,
|
|
sitePhone: document.getElementById("sitePhone").value,
|
|
timezone: document.getElementById("timezone").value,
|
|
},
|
|
homepage: {
|
|
showHero: document.getElementById("showHero").checked,
|
|
showPromotions: document.getElementById("showPromotions").checked,
|
|
showPortfolio: document.getElementById("showPortfolio").checked,
|
|
showBlog: document.getElementById("showBlog").checked,
|
|
},
|
|
product: {
|
|
defaultStatus: document.getElementById("defaultProductStatus").value,
|
|
perPage: parseInt(document.getElementById("productsPerPage").value),
|
|
bestSellerLogic: document.getElementById("bestSellerLogic").value,
|
|
enableInventory: document.getElementById("enableInventory").checked,
|
|
showOutOfStock: document.getElementById("showOutOfStock").checked,
|
|
},
|
|
security: {
|
|
passwordExpiration: parseInt(
|
|
document.getElementById("passwordExpiration").value
|
|
),
|
|
sessionTimeout: parseInt(document.getElementById("sessionTimeout").value),
|
|
loginAttempts: parseInt(document.getElementById("loginAttempts").value),
|
|
requireStrongPassword: document.getElementById("requireStrongPassword")
|
|
.checked,
|
|
enableTwoFactor: document.getElementById("enableTwoFactor").checked,
|
|
},
|
|
appearance: {
|
|
accentColor: document.getElementById("accentColor").value,
|
|
},
|
|
};
|
|
|
|
try {
|
|
const response = await fetch("/api/admin/settings", {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
credentials: "include",
|
|
body: JSON.stringify(settings),
|
|
});
|
|
|
|
const data = await response.json();
|
|
if (data.success) {
|
|
showSuccess("Settings saved successfully!");
|
|
currentSettings = settings;
|
|
} else {
|
|
showError(data.message || "Failed to save settings");
|
|
}
|
|
} catch (error) {
|
|
console.error("Failed to save settings:", error);
|
|
showError("Failed to save settings");
|
|
}
|
|
}
|
|
|
|
async function logout() {
|
|
try {
|
|
const response = await fetch("/api/admin/logout", {
|
|
method: "POST",
|
|
credentials: "include",
|
|
});
|
|
if (response.ok) window.location.href = "/admin/login.html";
|
|
} catch (error) {
|
|
console.error("Logout failed:", error);
|
|
}
|
|
}
|
|
|
|
function showSuccess(message) {
|
|
alert(message);
|
|
}
|
|
|
|
function showError(message) {
|
|
alert("Error: " + message);
|
|
}
|