Files
SkyArtShop/website/admin/js/settings.js
Local Server 61929a5daf updateweb
2025-12-14 01:54:40 -06:00

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);
}