/home/awneajlw/public_html/codestechvista.com/my-shop.php
<?php
/**
* My Shop Page - Shop Management
* This page allows users to manage their shop details
* Features: Shop information update, logo upload, contact details management
*/
// Start session if not already started
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// Include required files
require_once 'config/database.php'; // Database connection configuration
require_once 'includes/auth.php'; // Authentication functions
/**
* Authentication Check
* Redirect to welcome page if user is not logged in
*/
if (!isLoggedIn()) {
header('Location: welcome.php');
exit();
}
// Initialize variables for form handling
$success_message = ''; // Success message after form submission
$error_message = ''; // Error message for validation/database issues
$field_errors = []; // Array to store field-specific errors
$form_data = []; // Array to store form data for repopulation
// Handle success message from URL parameters
if (isset($_GET['success']) && $_GET['success'] === 'sub_user_created') {
$success_email = $_GET['email'] ?? '';
$success_password = $_GET['password'] ?? '';
$success_message = 'Sub user created successfully! Email: ' . htmlspecialchars($success_email) . ', Password: ' . htmlspecialchars($success_password);
}
// Initialize variables
$current_user_id = $_SESSION['user_id'] ?? null;
$is_main_user = true; // Default to main user
$user_info = null;
// Get current shop data
$current_shop_data = [];
$shop_owner_id = $current_user_id; // Default to current user
try {
$database = new Database();
$db = $database->getConnection();
// First check if current user is a sub user
if ($current_user_id) {
try {
$check_user_query = "SELECT user_type, parent_user_id, can_access_sales FROM users WHERE id = ?";
$check_user_stmt = $db->prepare($check_user_query);
$check_user_stmt->execute([$current_user_id]);
$user_info = $check_user_stmt->fetch(PDO::FETCH_ASSOC);
if ($user_info && $user_info['user_type'] === 'sub') {
$is_main_user = false;
}
} catch (Exception $col_error) {
// Columns might not exist, use default main user
error_log("User type columns not found: " . $col_error->getMessage());
$is_main_user = true;
$user_info = null;
}
}
// If sub user, get main user's shop data
if (!$is_main_user && isset($user_info) && $user_info && isset($user_info['parent_user_id'])) {
$shop_owner_id = $user_info['parent_user_id'];
error_log("Sub user accessing main user's shop. Main user ID: " . $shop_owner_id);
}
// Get shop data for the correct owner
$query = "SELECT s.*, u.name as owner_name, u.email
FROM shops s
JOIN users u ON s.user_id = u.id
WHERE s.user_id = ?";
$stmt = $db->prepare($query);
$stmt->execute([$shop_owner_id]);
$current_shop_data = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$current_shop_data) {
// Create default shop data if none exists
$current_shop_data = [
'shop_name' => '',
'shop_address' => '',
'shop_phone' => '',
'shop_whatsapp' => '',
'shop_facebook' => '',
'shop_instagram' => '',
'shop_website' => '',
'shop_logo' => ''
];
}
} catch (Exception $e) {
error_log("Error fetching shop data: " . $e->getMessage());
$current_shop_data = [
'shop_name' => '',
'shop_phone' => '',
'shop_whatsapp' => '',
'shop_facebook' => '',
'shop_instagram' => '',
'shop_website' => '',
'shop_logo' => ''
];
}
// User type checking is now done in the shop data section above
// Handle sub-user management actions
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
$action = $_POST['action'];
if ($action === 'create_sub_user' && $is_main_user) {
$sub_name = trim($_POST['sub_name'] ?? '');
$sub_email = trim($_POST['sub_email'] ?? '');
$sub_password = trim($_POST['sub_password'] ?? '');
$sub_phone = trim($_POST['sub_phone'] ?? '');
// Enhanced Validation
$validation_errors = [];
if (empty($sub_name)) {
$validation_errors[] = 'Sub user name is required';
} elseif (strlen($sub_name) < 2) {
$validation_errors[] = 'Sub user name must be at least 2 characters long';
}
if (empty($sub_email)) {
$validation_errors[] = 'Email address is required';
} elseif (!filter_var($sub_email, FILTER_VALIDATE_EMAIL)) {
$validation_errors[] = 'Please enter a valid email address';
}
if (empty($sub_password)) {
$validation_errors[] = 'Password is required';
} elseif (strlen($sub_password) < 6) {
$validation_errors[] = 'Password must be at least 6 characters long';
}
if (!empty($sub_phone) && !preg_match('/^[\+]?[0-9\s\-\(\)]{10,15}$/', $sub_phone)) {
$validation_errors[] = 'Please enter a valid phone number';
}
if (!empty($validation_errors)) {
$error_message = implode(', ', $validation_errors);
} else {
try {
// Check if email already exists
$check_email = "SELECT id, email FROM users WHERE email = ?";
$check_stmt = $db->prepare($check_email);
$check_stmt->execute([$sub_email]);
if ($check_stmt->rowCount() > 0) {
$error_message = 'Email address already exists. Please use a different email.';
} else {
// Check if required columns exist
$check_columns = "SHOW COLUMNS FROM users WHERE Field IN ('user_type', 'parent_user_id', 'can_access_sales')";
$columns_result = $db->query($check_columns);
$existing_columns = $columns_result->fetchAll(PDO::FETCH_COLUMN);
if (count($existing_columns) < 3) {
$error_message = 'Database not properly configured. Missing required columns: user_type, parent_user_id, can_access_sales';
} else {
// Create sub user with proper error handling
$hashed_password = password_hash($sub_password, PASSWORD_DEFAULT);
// First try to insert with all columns
$insert_sub = "INSERT INTO users (name, email, phone, password, role, user_type, parent_user_id, can_access_sales, email_verified, registration_step)
VALUES (?, ?, ?, ?, 'user', 'sub', ?, 0, 1, 2)";
$insert_stmt = $db->prepare($insert_sub);
$result = $insert_stmt->execute([$sub_name, $sub_email, $sub_phone, $hashed_password, $current_user_id]);
if ($result) {
$success_message = 'Sub user created successfully! Email: ' . $sub_email . ', Password: ' . $sub_password;
// Redirect to same page to refresh data and clear form
echo "<script>
setTimeout(function() {
window.location.href = 'my-shop.php?success=sub_user_created&email=' + encodeURIComponent('$sub_email') + '&password=' + encodeURIComponent('$sub_password');
}, 2000);
</script>";
} else {
$errorInfo = $insert_stmt->errorInfo();
$error_message = 'Database error: ' . ($errorInfo[2] ?? 'Unknown error occurred');
error_log("Sub user creation failed. SQL Error: " . print_r($errorInfo, true));
}
}
}
} catch (PDOException $e) {
error_log("PDO Error creating sub user: " . $e->getMessage());
if (strpos($e->getMessage(), 'Unknown column') !== false) {
$error_message = 'Database configuration error. Please run the required ALTER TABLE commands first.';
} elseif (strpos($e->getMessage(), 'Duplicate entry') !== false) {
$error_message = 'Email address already exists. Please use a different email.';
} elseif (strpos($e->getMessage(), 'foreign key constraint') !== false) {
$error_message = 'Database constraint error. Please contact administrator.';
} else {
$error_message = 'Database error: ' . $e->getMessage();
}
} catch (Exception $e) {
error_log("General Error creating sub user: " . $e->getMessage());
$error_message = 'Unexpected error occurred: ' . $e->getMessage();
}
}
}
if ($action === 'update_sub_user' && $is_main_user) {
$sub_id = intval($_POST['sub_id'] ?? 0);
$sub_name = trim($_POST['sub_name'] ?? '');
$sub_email = trim($_POST['sub_email'] ?? '');
$sub_phone = trim($_POST['sub_phone'] ?? '');
$new_password = trim($_POST['sub_password'] ?? '');
if (empty($sub_name) || empty($sub_email)) {
$error_message = 'Sub user name and email are required';
} else {
try {
// Check if email exists for other users
$check_email = "SELECT id FROM users WHERE email = ? AND id != ?";
$check_stmt = $db->prepare($check_email);
$check_stmt->execute([$sub_email, $sub_id]);
if ($check_stmt->rowCount() > 0) {
$error_message = 'Email already exists for another user';
} else {
// Update sub user
if (!empty($new_password)) {
$hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
$update_sub = "UPDATE users SET name = ?, email = ?, phone = ?, password = ?
WHERE id = ? AND parent_user_id = ?";
$update_stmt = $db->prepare($update_sub);
$result = $update_stmt->execute([$sub_name, $sub_email, $sub_phone, $hashed_password, $sub_id, $current_user_id]);
} else {
$update_sub = "UPDATE users SET name = ?, email = ?, phone = ?
WHERE id = ? AND parent_user_id = ?";
$update_stmt = $db->prepare($update_sub);
$result = $update_stmt->execute([$sub_name, $sub_email, $sub_phone, $sub_id, $current_user_id]);
}
if ($result) {
$success_message = 'Sub user updated successfully!';
} else {
$error_message = 'Failed to update sub user';
}
}
} catch (Exception $e) {
error_log("Error updating sub user: " . $e->getMessage());
$error_message = 'An error occurred while updating sub user';
}
}
}
if ($action === 'delete_sub_user' && $is_main_user) {
$sub_id = intval($_POST['sub_id'] ?? 0);
try {
$delete_sub = "DELETE FROM users WHERE id = ? AND parent_user_id = ?";
$delete_stmt = $db->prepare($delete_sub);
$result = $delete_stmt->execute([$sub_id, $current_user_id]);
if ($result) {
$success_message = 'Sub user deleted successfully!';
} else {
$error_message = 'Failed to delete sub user';
}
} catch (Exception $e) {
error_log("Error deleting sub user: " . $e->getMessage());
$error_message = 'An error occurred while deleting sub user';
}
}
}
// Get sub users for main user
$sub_users = [];
if ($is_main_user && $current_user_id) {
try {
// Check if parent_user_id column exists
$check_parent_column = "SHOW COLUMNS FROM users LIKE 'parent_user_id'";
$parent_check = $db->query($check_parent_column);
if ($parent_check && $parent_check->rowCount() > 0) {
$sub_query = "SELECT id, name, email, phone, created_at FROM users WHERE parent_user_id = ? AND user_type = 'sub' ORDER BY created_at DESC";
$sub_stmt = $db->prepare($sub_query);
$sub_stmt->execute([$current_user_id]);
$sub_users = $sub_stmt->fetchAll(PDO::FETCH_ASSOC);
// Debug log
error_log("Fetching sub users for main user ID: " . $current_user_id . ". Found: " . count($sub_users));
} else {
error_log("parent_user_id column does not exist in users table");
}
} catch (Exception $e) {
error_log("Error fetching sub users: " . $e->getMessage());
}
}
/**
* Form Submission Handler
* Process POST request when shop details form is submitted
*/
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !isset($_POST['action'])) {
$shop_name = trim($_POST['shop_name'] ?? '');
$shop_address = trim($_POST['shop_address'] ?? '');
$phone_number = trim($_POST['phone_number'] ?? '');
$user_name = trim($_POST['user_name'] ?? '');
$password = trim($_POST['password'] ?? '');
$currency = trim($_POST['currency'] ?? 'USD');
$whatsapp_number = trim($_POST['whatsapp_number'] ?? '');
$facebook_id = trim($_POST['facebook_id'] ?? '');
$instagram_id = trim($_POST['instagram_id'] ?? '');
$website = trim($_POST['website'] ?? '');
// Store form data for repopulation
$form_data = [
'shop_name' => $shop_name,
'shop_address' => $shop_address,
'phone_number' => $phone_number,
'user_name' => $user_name,
'currency' => $currency,
'whatsapp_number' => $whatsapp_number,
'facebook_id' => $facebook_id,
'instagram_id' => $instagram_id,
'website' => $website
];
// Enhanced validation with field-specific errors
$validation_errors = [];
// Required field validation
if (empty($shop_name)) {
$validation_errors['shop_name'] = 'Shop name is required';
} elseif (strlen($shop_name) < 2) {
$validation_errors['shop_name'] = 'Shop name must be at least 2 characters long';
}
if (empty($phone_number)) {
$validation_errors['phone_number'] = 'Phone number is required';
} elseif (!preg_match('/^[\+]?[0-9\s\-\(\)]{10,15}$/', $phone_number)) {
$validation_errors['phone_number'] = 'Please enter a valid phone number';
}
if (empty($user_name)) {
$validation_errors['user_name'] = 'User name is required';
} elseif (strlen($user_name) < 2) {
$validation_errors['user_name'] = 'User name must be at least 2 characters long';
}
// Optional field validation
if (!empty($whatsapp_number) && !preg_match('/^[\+]?[0-9\s\-\(\)]{10,15}$/', $whatsapp_number)) {
$validation_errors['whatsapp_number'] = 'Please enter a valid WhatsApp number';
}
if (!empty($website) && !filter_var($website, FILTER_VALIDATE_URL)) {
$validation_errors['website'] = 'Please enter a valid website URL';
}
$field_errors = $validation_errors;
if (empty($validation_errors)) {
try {
$database = new Database();
$db = $database->getConnection();
// Use the shop owner ID (main user for sub users, current user for main users)
$target_user_id = $shop_owner_id;
// Verify the target user exists
$user_query = "SELECT id FROM users WHERE id = ?";
$user_stmt = $db->prepare($user_query);
$user_stmt->execute([$target_user_id]);
$user_data = $user_stmt->fetch(PDO::FETCH_ASSOC);
if (!$user_data) {
throw new Exception("Target user not found");
}
error_log("Updating shop for user ID: " . $target_user_id . " (Current user: " . $current_user_id . ")");
// Check if shop already exists for this user
$check_query = "SELECT id FROM shops WHERE user_id = ?";
$check_stmt = $db->prepare($check_query);
$check_stmt->execute([$target_user_id]);
$existing_shop = $check_stmt->fetch(PDO::FETCH_ASSOC);
// Handle file upload
$logo_filename = '';
if (isset($_FILES['shop_logo']) && $_FILES['shop_logo']['error'] == 0) {
$upload_dir = 'uploads/logos/';
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0755, true);
}
$file_extension = pathinfo($_FILES['shop_logo']['name'], PATHINFO_EXTENSION);
$logo_filename = 'shop_' . $target_user_id . '_' . time() . '.' . $file_extension;
$upload_path = $upload_dir . $logo_filename;
if (move_uploaded_file($_FILES['shop_logo']['tmp_name'], $upload_path)) {
$logo_filename = $logo_filename; // Store only filename, not full path
} else {
$validation_errors['shop_logo'] = 'Failed to upload logo';
}
}
if ($existing_shop) {
// Update existing shop
$update_fields = [
'shop_name = ?',
'shop_address = ?',
'shop_phone = ?',
'currency = ?',
'shop_whatsapp = ?',
'shop_facebook = ?',
'shop_instagram = ?',
'shop_website = ?'
];
$update_values = [$shop_name, $shop_address, $phone_number, $currency, $whatsapp_number, $facebook_id, $instagram_id, $website];
if ($logo_filename) {
$update_fields[] = 'shop_logo = ?';
$update_values[] = $logo_filename;
}
$update_values[] = $target_user_id;
$update_query = "UPDATE shops SET " . implode(', ', $update_fields) . " WHERE user_id = ?";
$update_stmt = $db->prepare($update_query);
$result = $update_stmt->execute($update_values);
} else {
// Insert new shop
$insert_query = "INSERT INTO shops (user_id, shop_name, shop_address, shop_phone, currency, shop_whatsapp, shop_facebook, shop_instagram, shop_website, shop_logo) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$insert_stmt = $db->prepare($insert_query);
$result = $insert_stmt->execute([$target_user_id, $shop_name, $shop_address, $phone_number, $currency, $whatsapp_number, $facebook_id, $instagram_id, $website, $logo_filename]);
}
if ($result) {
$success_message = 'Shop details updated successfully!';
// Refresh current shop data
$query = "SELECT s.*, u.name as owner_name, u.email
FROM shops s
JOIN users u ON s.user_id = u.id
WHERE s.user_id = ?";
$stmt = $db->prepare($query);
$stmt->execute([$target_user_id]);
$current_shop_data = $stmt->fetch(PDO::FETCH_ASSOC);
} else {
$error_message = 'Failed to update shop details. Please try again.';
}
} catch (Exception $e) {
error_log("Shop update error: " . $e->getMessage());
$error_message = 'An error occurred while updating shop details. Please try again.';
}
} else {
$error_message = 'Please fix the errors below and try again.';
}
}
// Set form data to current shop data if not submitted
if (empty($form_data)) {
$form_data = [
'shop_name' => $current_shop_data['shop_name'] ?? '',
'shop_address' => $current_shop_data['shop_address'] ?? '',
'phone_number' => $current_shop_data['shop_phone'] ?? '',
'user_name' => $_SESSION['user_name'] ?? '',
'currency' => $current_shop_data['currency'] ?? 'USD',
'whatsapp_number' => $current_shop_data['shop_whatsapp'] ?? '',
'facebook_id' => $current_shop_data['shop_facebook'] ?? '',
'instagram_id' => $current_shop_data['shop_instagram'] ?? '',
'website' => $current_shop_data['shop_website'] ?? ''
];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Shop - OPTI SLIP</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', sans-serif;
background: white;
min-height: 100vh;
padding: 20px;
margin: 0;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.back-btn {
background: none;
border: none;
color: black;
font-size: 24px;
cursor: pointer;
margin-bottom: 30px;
padding: 10px;
transition: all 0.3s ease;
}
.back-btn:hover {
color: #169D53;
transform: translateX(-3px);
}
.logo-section {
text-align: center;
/*margin-bottom: 40px;*/
}
.logo-container {
display: inline-block;
margin-bottom: 20px;
}
.logo-image {
width: 200px;
height: 120px;
margin-top:-100px;
object-fit: contain;
filter: brightness(0) saturate(100%);
}
.form-card {
max-width: 900px;
margin: 0 auto;
padding: 40px;
}
.field-card {
background: transparent;
border: none;
padding: 10px;
margin-bottom: 5px;
position: relative;
}
.form-group {
margin-bottom: 10px;
}
.form-label {
position: absolute;
top: -10px;
left: 20px;
background: white;
padding: 0 8px;
font-size: 14px;
color: black;
font-weight: 700;
z-index: 2;
}
.form-input {
width: 100%;
padding: 25px 20px;
border: 2px solid black;
border-radius: 25px;
font-size: 16px;
background: white;
color: black;
font-weight: 600;
min-height: 60px;
transition: all 0.3s ease;
}
.form-input:focus {
outline: none;
border-color: #169D53;
box-shadow: 0 0 0 3px rgba(22, 157, 83, 0.1);
}
.form-input.error {
border-color: #dc2626 !important;
box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1) !important;
}
textarea.form-input {
resize: vertical;
min-height: 100px;
font-family: inherit;
line-height: 1.5;
padding: 15px 20px;
}
.field-error {
color: #dc2626;
font-size: 12px;
margin-top: 5px;
margin-left: 20px;
font-weight: 500;
}
.form-input::placeholder {
color: #9ca3af;
opacity: 0.7;
}
.upload-group {
display: flex;
align-items: stretch;
width: 100%;
gap: 0;
}
.upload-input {
flex: 1;
padding: 25px 20px;
border: 2px solid black;
border-radius: 25px 0 0 25px;
font-size: 16px;
background: white;
color: black;
font-weight: 600;
min-height: 60px;
border-right: none;
outline: none;
transition: all 0.3s ease;
}
.upload-input:focus {
border-color: #169D53;
box-shadow: 0 0 0 3px rgba(22, 157, 83, 0.1);
}
.upload-btn {
background: #169D53;
color: white;
border: 2px solid #169D53;
padding: 25px 32px;
font-weight: 600;
cursor: pointer;
border-radius: 0 25px 25px 0;
font-size: 16px;
min-height: 60px;
transition: all 0.3s ease;
flex-shrink: 0;
min-width: fit-content;
}
.upload-btn:hover {
background: #128a43;
border-color: #128a43;
}
.hidden-file-input {
display: none;
}
.button-group {
display: flex;
justify-content: center;
gap: 20px;
margin-top: 40px;
}
.nav-btn {
font-size: 18px;
padding: 12px 24px;
border: 2px solid #10b981;
border-radius: 8px;
background: white;
color: #10b981;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
min-width: 120px;
white-space: nowrap;
text-decoration: none;
display: inline-block;
text-align: center;
}
.nav-btn:hover {
background: #10b981;
color: white;
transform: translateY(-2px);
}
.nav-btn.primary {
background: #169D53;
border-color: #169D53;
color: white;
}
.nav-btn.primary:hover {
background: #128a43;
border-color: #128a43;
color: white;
}
.alert {
padding: 15px;
border-radius: 8px;
margin-bottom: 20px;
font-weight: 500;
}
.alert-success {
background: #d1fae5;
color: #065f46;
border: 1px solid #10b981;
}
.alert-danger {
background: #fee2e2;
color: #991b1b;
border: 1px solid #dc2626;
}
/* Mobile Responsive */
@media (max-width: 1024px) {
.container {
padding: 15px;
}
.form-card {
padding: 30px;
}
.logo-image {
width: 150px;
height: 150px;
}
}
@media (max-width: 768px) {
.container {
padding: 10px;
}
.form-card {
padding: 20px;
}
.logo-image {
width: 120px;
height: 120px;
}
.form-input, .upload-input {
padding: 20px 15px;
min-height: 55px;
}
.upload-btn {
padding: 20px 24px;
min-height: 55px;
}
.field-card {
margin-bottom: 8px;
}
.nav-btn {
font-size: 16px;
padding: 10px 20px;
min-width: 100px;
}
.upload-group {
flex-direction: column;
gap: 0;
}
.upload-input {
border-radius: 25px 25px 0 0;
border-right: 2px solid black;
border-bottom: none;
}
.upload-btn {
border-radius: 0 0 25px 25px;
width: 100%;
}
}
@media (max-width: 480px) {
.container {
padding: 5px;
}
.form-card {
padding: 15px;
}
.logo-image {
width: 100px;
height: 100px;
}
.form-input, .upload-input {
padding: 18px 12px;
min-height: 50px;
font-size: 14px;
}
.upload-btn {
padding: 18px 20px;
min-height: 50px;
font-size: 14px;
}
.field-card {
margin-bottom: 5px;
}
.nav-btn {
font-size: 14px;
padding: 8px 16px;
min-width: 90px;
}
}
@media (max-width: 320px) {
.form-input, .upload-input {
padding: 15px 10px;
min-height: 45px;
font-size: 13px;
}
.upload-btn {
padding: 15px 16px;
min-height: 45px;
font-size: 13px;
}
.field-card {
margin-bottom: 3px;
}
.nav-btn {
font-size: 13px;
padding: 6px 12px;
min-width: 80px;
}
}
/* Sub Users Management Responsive Styles */
.sub-users-section {
margin-top: 40px;
}
.add-sub-user-card {
background: white;
border: 2px solid #169D53;
border-radius: 15px;
padding: 25px;
margin-bottom: 25px;
}
.sub-users-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
gap: 20px;
width: 100%;
margin: 0;
padding: 0;
}
.sub-user-card {
background: white;
border: 1px solid #e5e7eb;
border-radius: 10px;
padding: 20px;
position: relative;
width: 100%;
box-sizing: border-box;
transition: all 0.3s ease;
}
.sub-user-card:hover {
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
transform: translateY(-2px);
}
.sub-user-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 15px;
}
.sub-user-info {
flex: 1;
margin-right: 15px;
}
.sub-user-info h5 {
color: #333;
margin: 0 0 8px 0;
font-weight: 600;
font-size: 18px;
line-height: 1.3;
}
.sub-user-info p {
color: #666;
margin: 4px 0;
font-size: 14px;
line-height: 1.4;
display: flex;
align-items: center;
}
.sub-user-actions {
display: flex;
gap: 8px;
}
.edit-sub-user-btn, .delete-sub-user-btn {
background: #169D53;
color: white;
border: none;
padding: 6px 10px;
border-radius: 5px;
font-size: 12px;
cursor: pointer;
transition: all 0.3s ease;
}
.delete-sub-user-btn {
background: #dc3545;
}
.edit-sub-user-btn:hover {
background: #128a43;
}
.delete-sub-user-btn:hover {
background: #c82333;
}
.sub-user-meta {
font-size: 12px;
color: #999;
border-top: 1px solid #f0f0f0;
padding-top: 10px;
margin-top: 15px;
display: flex;
align-items: center;
}
.no-sub-users {
text-align: center;
padding: 40px;
background: #f8f9fa;
border-radius: 10px;
color: #666;
}
/* Modal Styles */
#editSubUserModal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.5);
z-index: 1000;
align-items: center;
justify-content: center;
}
/* Sub Users Responsive Design */
@media (max-width: 1200px) {
.sub-users-grid {
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
gap: 18px;
}
}
@media (max-width: 1024px) {
.sub-users-grid {
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 16px;
}
.sub-user-card {
padding: 18px;
}
.sub-user-info h5 {
font-size: 17px;
}
.sub-user-info p {
font-size: 14px;
}
}
@media (max-width: 768px) {
.sub-users-section {
margin-top: 30px;
}
.sub-users-section h3 {
font-size: 22px;
margin-bottom: 20px;
}
.add-sub-user-card {
padding: 20px;
margin-bottom: 20px;
}
.sub-users-grid {
grid-template-columns: 1fr;
gap: 15px;
}
.sub-user-card {
padding: 16px;
border-radius: 8px;
}
.sub-user-header {
flex-direction: column;
gap: 12px;
align-items: stretch;
}
.sub-user-info {
margin-bottom: 8px;
}
.sub-user-info h5 {
font-size: 16px;
margin-bottom: 6px;
}
.sub-user-info p {
font-size: 13px;
margin: 3px 0;
line-height: 1.4;
}
.sub-user-actions {
justify-content: flex-end;
align-self: flex-end;
}
.edit-sub-user-btn, .delete-sub-user-btn {
padding: 8px 12px;
font-size: 12px;
border-radius: 4px;
}
.sub-user-meta {
font-size: 11px;
padding-top: 8px;
margin-top: 8px;
}
#editSubUserModal > div {
width: 95%;
margin: 10px;
max-height: 80vh;
padding: 25px;
}
}
@media (max-width: 480px) {
.sub-users-section {
margin-top: 25px;
}
.sub-users-section h3 {
font-size: 18px;
margin-bottom: 18px;
text-align: center;
}
.sub-users-list h4 {
font-size: 16px;
margin-bottom: 15px;
text-align: center;
}
.add-sub-user-card {
padding: 15px;
margin-bottom: 15px;
border-radius: 12px;
}
.add-sub-user-card h4 {
font-size: 16px;
margin-bottom: 15px;
text-align: center;
}
.sub-user-card {
padding: 14px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.sub-user-header {
gap: 10px;
}
.sub-user-info h5 {
font-size: 15px;
margin-bottom: 4px;
color: #169D53;
font-weight: 600;
}
.sub-user-info p {
font-size: 12px;
margin: 2px 0;
line-height: 1.3;
color: #555;
}
.sub-user-actions {
gap: 6px;
margin-top: 8px;
}
.edit-sub-user-btn, .delete-sub-user-btn {
padding: 6px 10px;
font-size: 11px;
min-width: 35px;
height: 28px;
display: flex;
align-items: center;
justify-content: center;
}
.sub-user-meta {
font-size: 10px;
padding-top: 6px;
margin-top: 6px;
color: #777;
}
.no-sub-users {
padding: 20px;
border-radius: 8px;
}
.no-sub-users i {
font-size: 32px !important;
margin-bottom: 12px !important;
}
.no-sub-users p {
font-size: 13px !important;
margin: 5px 0 !important;
}
#editSubUserModal {
padding: 10px;
}
#editSubUserModal > div {
padding: 18px;
border-radius: 12px;
width: calc(100% - 20px);
margin: 0;
}
#editSubUserModal h4 {
font-size: 16px;
margin-bottom: 15px;
}
}
@media (max-width: 320px) {
.sub-users-section {
margin-top: 20px;
}
.sub-users-section h3 {
font-size: 16px;
margin-bottom: 15px;
}
.sub-users-list h4 {
font-size: 14px;
margin-bottom: 12px;
}
.add-sub-user-card {
padding: 12px;
margin-bottom: 12px;
}
.add-sub-user-card h4 {
font-size: 14px;
margin-bottom: 12px;
}
.sub-user-card {
padding: 12px;
margin-bottom: 8px;
}
.sub-user-info h5 {
font-size: 14px;
margin-bottom: 3px;
}
.sub-user-info p {
font-size: 11px;
margin: 1px 0;
line-height: 1.2;
}
.sub-user-actions {
gap: 4px;
margin-top: 6px;
}
.edit-sub-user-btn, .delete-sub-user-btn {
padding: 5px 8px;
font-size: 10px;
min-width: 30px;
height: 26px;
}
.sub-user-meta {
font-size: 9px;
padding-top: 4px;
margin-top: 4px;
}
.no-sub-users {
padding: 15px;
}
.no-sub-users i {
font-size: 28px !important;
margin-bottom: 10px !important;
}
.no-sub-users p {
font-size: 12px !important;
margin: 3px 0 !important;
}
#editSubUserModal > div {
padding: 15px;
border-radius: 10px;
}
#editSubUserModal h4 {
font-size: 14px;
margin-bottom: 12px;
}
}
/* Landscape orientation for mobile */
@media (max-width: 768px) and (orientation: landscape) {
.sub-users-grid {
grid-template-columns: repeat(2, 1fr);
gap: 12px;
}
.sub-user-card {
padding: 12px;
}
.sub-user-info h5 {
font-size: 14px;
}
.sub-user-info p {
font-size: 11px;
}
}
</style>
</head>
<body>
<div class="container">
<button class="back-btn" onclick="window.location.href='home.php'">
<i class="fas fa-arrow-left"></i>
</button>
<div class="logo-section">
<div class="logo-container">
<img src="assets/images/Optislipimage.png" alt="Opti Slip Logo" class="logo-image" onerror="this.style.display='none'; this.parentElement.innerHTML='<div style=\'color: black; font-size: 32px; font-weight: bold; line-height: 1.2;\'>OPTI<br>SLIP</div>'">
</div>
<?php if (!$is_main_user): ?>
<div style="text-align: center; margin-top: 10px; color: #169D53; font-weight: 600; font-size: 14px;">
👤 Sub User Access
</div>
<?php endif; ?>
</div>
<div class="form-card">
<!-- Success/Error Messages -->
<?php if ($success_message): ?>
<div class="alert alert-success">
<i class="fas fa-check-circle me-2"></i>
<?php echo htmlspecialchars($success_message); ?>
</div>
<?php endif; ?>
<?php if ($error_message): ?>
<div class="alert alert-danger">
<i class="fas fa-exclamation-triangle me-2"></i>
<?php echo htmlspecialchars($error_message); ?>
</div>
<?php endif; ?>
<form method="POST" enctype="multipart/form-data" id="shopForm">
<div class="field-card">
<div class="form-group">
<label class="form-label">Shop Name</label>
<input type="text" name="shop_name" class="form-input<?php echo isset($field_errors['shop_name']) ? ' error' : ''; ?>" placeholder="Enter shop name" value="<?php echo htmlspecialchars($form_data['shop_name'] ?? ''); ?>" required>
<?php if (isset($field_errors['shop_name'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['shop_name']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Shop Address</label>
<textarea name="shop_address" class="form-input<?php echo isset($field_errors['shop_address']) ? ' error' : ''; ?>" placeholder="Enter shop address" rows="3"><?php echo htmlspecialchars($form_data['shop_address'] ?? ''); ?></textarea>
<?php if (isset($field_errors['shop_address'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['shop_address']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Phone Number</label>
<input type="tel" name="phone_number" class="form-input<?php echo isset($field_errors['phone_number']) ? ' error' : ''; ?>" placeholder="Enter phone number" value="<?php echo htmlspecialchars($form_data['phone_number'] ?? ''); ?>" required>
<?php if (isset($field_errors['phone_number'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['phone_number']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">User Name</label>
<input type="text" name="user_name" class="form-input<?php echo isset($field_errors['user_name']) ? ' error' : ''; ?>" placeholder="Enter user name" value="<?php echo htmlspecialchars($form_data['user_name'] ?? ''); ?>" required>
<?php if (isset($field_errors['user_name'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['user_name']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Password</label>
<input type="password" name="password" class="form-input<?php echo isset($field_errors['password']) ? ' error' : ''; ?>" placeholder="Enter new password (optional)">
<?php if (isset($field_errors['password'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['password']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Upload Logo</label>
<div class="upload-group">
<input type="text" class="upload-input" id="fileName" placeholder="Choose file..." readonly>
<button type="button" class="upload-btn" onclick="document.getElementById('shop_logo').click()">UPLOAD</button>
</div>
<input type="file" id="shop_logo" name="shop_logo" class="hidden-file-input" accept="image/*,.jpg,.jpeg,.png,.gif" onchange="updateFileName(this)">
<?php if (isset($field_errors['shop_logo'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['shop_logo']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Currency</label>
<select name="currency" class="form-input<?php echo isset($field_errors['currency']) ? ' error' : ''; ?>">
<option value="USD" <?php echo ($form_data['currency'] ?? 'USD') == 'USD' ? 'selected' : ''; ?>>USD - US Dollar ($)</option>
<option value="EUR" <?php echo ($form_data['currency'] ?? '') == 'EUR' ? 'selected' : ''; ?>>EUR - Euro (€)</option>
<option value="GBP" <?php echo ($form_data['currency'] ?? '') == 'GBP' ? 'selected' : ''; ?>>GBP - British Pound (£)</option>
<option value="PKR" <?php echo ($form_data['currency'] ?? '') == 'PKR' ? 'selected' : ''; ?>>PKR - Pakistani Rupee (₨)</option>
<option value="INR" <?php echo ($form_data['currency'] ?? '') == 'INR' ? 'selected' : ''; ?>>INR - Indian Rupee (₹)</option>
<option value="AED" <?php echo ($form_data['currency'] ?? '') == 'AED' ? 'selected' : ''; ?>>AED - UAE Dirham (د.إ)</option>
<option value="SAR" <?php echo ($form_data['currency'] ?? '') == 'SAR' ? 'selected' : ''; ?>>SAR - Saudi Riyal (ï·¼)</option>
<option value="CAD" <?php echo ($form_data['currency'] ?? '') == 'CAD' ? 'selected' : ''; ?>>CAD - Canadian Dollar ($)</option>
<option value="AUD" <?php echo ($form_data['currency'] ?? '') == 'AUD' ? 'selected' : ''; ?>>AUD - Australian Dollar ($)</option>
<option value="JPY" <?php echo ($form_data['currency'] ?? '') == 'JPY' ? 'selected' : ''; ?>>JPY - Japanese Yen (Â¥)</option>
<option value="CNY" <?php echo ($form_data['currency'] ?? '') == 'CNY' ? 'selected' : ''; ?>>CNY - Chinese Yuan (Â¥)</option>
<option value="CHF" <?php echo ($form_data['currency'] ?? '') == 'CHF' ? 'selected' : ''; ?>>CHF - Swiss Franc (Fr)</option>
<option value="SGD" <?php echo ($form_data['currency'] ?? '') == 'SGD' ? 'selected' : ''; ?>>SGD - Singapore Dollar ($)</option>
<option value="MYR" <?php echo ($form_data['currency'] ?? '') == 'MYR' ? 'selected' : ''; ?>>MYR - Malaysian Ringgit (RM)</option>
<option value="BDT" <?php echo ($form_data['currency'] ?? '') == 'BDT' ? 'selected' : ''; ?>>BDT - Bangladeshi Taka (à§³)</option>
<option value="THB" <?php echo ($form_data['currency'] ?? '') == 'THB' ? 'selected' : ''; ?>>THB - Thai Baht (฿)</option>
<option value="KRW" <?php echo ($form_data['currency'] ?? '') == 'KRW' ? 'selected' : ''; ?>>KRW - South Korean Won (â‚©)</option>
<option value="ZAR" <?php echo ($form_data['currency'] ?? '') == 'ZAR' ? 'selected' : ''; ?>>ZAR - South African Rand (R)</option>
<option value="TRY" <?php echo ($form_data['currency'] ?? '') == 'TRY' ? 'selected' : ''; ?>>TRY - Turkish Lira (₺)</option>
<option value="BRL" <?php echo ($form_data['currency'] ?? '') == 'BRL' ? 'selected' : ''; ?>>BRL - Brazilian Real (R$)</option>
<option value="MXN" <?php echo ($form_data['currency'] ?? '') == 'MXN' ? 'selected' : ''; ?>>MXN - Mexican Peso ($)</option>
<option value="NZD" <?php echo ($form_data['currency'] ?? '') == 'NZD' ? 'selected' : ''; ?>>NZD - New Zealand Dollar ($)</option>
<option value="RUB" <?php echo ($form_data['currency'] ?? '') == 'RUB' ? 'selected' : ''; ?>>RUB - Russian Ruble (₽)</option>
</select>
<?php if (isset($field_errors['currency'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['currency']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">WhatsApp Number</label>
<input type="tel" name="whatsapp_number" class="form-input<?php echo isset($field_errors['whatsapp_number']) ? ' error' : ''; ?>" placeholder="Enter WhatsApp number" value="<?php echo htmlspecialchars($form_data['whatsapp_number'] ?? ''); ?>">
<?php if (isset($field_errors['whatsapp_number'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['whatsapp_number']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Facebook ID</label>
<input type="text" name="facebook_id" class="form-input<?php echo isset($field_errors['facebook_id']) ? ' error' : ''; ?>" placeholder="Enter Facebook ID" value="<?php echo htmlspecialchars($form_data['facebook_id'] ?? ''); ?>">
<?php if (isset($field_errors['facebook_id'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['facebook_id']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Instagram ID</label>
<input type="text" name="instagram_id" class="form-input<?php echo isset($field_errors['instagram_id']) ? ' error' : ''; ?>" placeholder="Enter Instagram ID" value="<?php echo htmlspecialchars($form_data['instagram_id'] ?? ''); ?>">
<?php if (isset($field_errors['instagram_id'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['instagram_id']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Website</label>
<input type="url" name="website" class="form-input<?php echo isset($field_errors['website']) ? ' error' : ''; ?>" placeholder="Enter website URL" value="<?php echo htmlspecialchars($form_data['website'] ?? ''); ?>">
<?php if (isset($field_errors['website'])): ?>
<div class="field-error"><?php echo htmlspecialchars($field_errors['website']); ?></div>
<?php endif; ?>
</div>
</div>
<div class="button-group">
<button type="submit" class="nav-btn primary">Save</button>
<button type="button" class="nav-btn" onclick="resetForm()">Reset</button>
</div>
</form>
<?php if ($is_main_user): ?>
<!-- Sub Users Management Section (Only for Main Users) -->
<div class="sub-users-section" style="margin-top: 40px;">
<h3 style="color: #169D53; margin-bottom: 25px; font-weight: 700; font-size: 24px;">Sub Users Management</h3>
<!-- Add New Sub User Form -->
<div class="add-sub-user-card" style="background: white; border: 2px solid #169D53; border-radius: 15px; padding: 25px; margin-bottom: 25px;">
<h4 style="color: #333; margin-bottom: 20px; font-weight: 600;">Add New Sub User</h4>
<form method="POST" id="addSubUserForm">
<input type="hidden" name="action" value="create_sub_user">
<div class="row">
<div class="col-md-6">
<div class="field-card">
<div class="form-group">
<label class="form-label">Sub User Name</label>
<input type="text" name="sub_name" class="form-input" placeholder="Enter sub user name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="field-card">
<div class="form-group">
<label class="form-label">Email</label>
<input type="email" name="sub_email" class="form-input" placeholder="Enter email" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="field-card">
<div class="form-group">
<label class="form-label">Password</label>
<input type="password" name="sub_password" class="form-input" placeholder="Enter password" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="field-card">
<div class="form-group">
<label class="form-label">Phone Number</label>
<input type="tel" name="sub_phone" class="form-input" placeholder="Enter phone number">
</div>
</div>
</div>
</div>
<div class="button-group">
<button type="submit" class="nav-btn primary">Add Sub User</button>
</div>
</form>
</div>
<!-- Sub Users List -->
<div class="sub-users-list">
<h4 style="color: #333; margin-bottom: 20px; font-weight: 600;">Existing Sub Users</h4>
<?php if (empty($sub_users)): ?>
<div class="no-sub-users" style="text-align: center; padding: 40px; background: #f8f9fa; border-radius: 10px; color: #666;">
<i class="fas fa-users" style="font-size: 48px; margin-bottom: 15px; color: #ccc;"></i>
<p style="margin: 0; font-size: 16px;">No sub users found.</p>
<?php if ($current_user_id): ?>
<p style="margin: 10px 0 0 0; font-size: 12px; color: #999;">Main User ID: <?php echo $current_user_id; ?></p>
<p style="margin: 5px 0 0 0; font-size: 12px; color: #999;">Is Main User: <?php echo $is_main_user ? 'Yes' : 'No'; ?></p>
<?php endif; ?>
</div>
<?php else: ?>
<div class="sub-users-grid">
<?php foreach ($sub_users as $sub_user): ?>
<div class="sub-user-card">
<div class="sub-user-header">
<div class="sub-user-info">
<h5><?php echo htmlspecialchars($sub_user['name']); ?></h5>
<p><i class="fas fa-envelope" style="margin-right: 6px; color: #169D53;"></i><?php echo htmlspecialchars($sub_user['email']); ?></p>
<?php if (!empty($sub_user['phone'])): ?>
<p><i class="fas fa-phone" style="margin-right: 6px; color: #169D53;"></i><?php echo htmlspecialchars($sub_user['phone']); ?></p>
<?php endif; ?>
</div>
<div class="sub-user-actions">
<button type="button" class="edit-sub-user-btn" onclick="editSubUser(<?php echo $sub_user['id']; ?>, '<?php echo htmlspecialchars($sub_user['name']); ?>', '<?php echo htmlspecialchars($sub_user['email']); ?>', '<?php echo htmlspecialchars($sub_user['phone'] ?? ''); ?>')"
title="Edit Sub User">
<i class="fas fa-edit"></i>
</button>
<button type="button" class="delete-sub-user-btn" onclick="deleteSubUser(<?php echo $sub_user['id']; ?>, '<?php echo htmlspecialchars($sub_user['name']); ?>')"
title="Delete Sub User">
<i class="fas fa-trash"></i>
</button>
</div>
</div>
<div class="sub-user-meta">
<i class="fas fa-calendar" style="margin-right: 5px;"></i>
Created: <?php echo date('M d, Y', strtotime($sub_user['created_at'])); ?>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
</div>
</div>
<!-- Edit Sub User Modal -->
<div id="editSubUserModal" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1000; align-items: center; justify-content: center;">
<div style="background: white; border-radius: 15px; padding: 30px; max-width: 500px; width: 90%; max-height: 90vh; overflow-y: auto;">
<h4 style="color: #333; margin-bottom: 20px; font-weight: 600;">Edit Sub User</h4>
<form method="POST" id="editSubUserForm">
<input type="hidden" name="action" value="update_sub_user">
<input type="hidden" name="sub_id" id="editSubUserId">
<div class="field-card">
<div class="form-group">
<label class="form-label">Sub User Name</label>
<input type="text" name="sub_name" id="editSubUserName" class="form-input" placeholder="Enter sub user name" required>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Email</label>
<input type="email" name="sub_email" id="editSubUserEmail" class="form-input" placeholder="Enter email" required>
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">Phone Number</label>
<input type="tel" name="sub_phone" id="editSubUserPhone" class="form-input" placeholder="Enter phone number">
</div>
</div>
<div class="field-card">
<div class="form-group">
<label class="form-label">New Password (leave empty to keep current)</label>
<input type="password" name="sub_password" class="form-input" placeholder="Enter new password">
</div>
</div>
<div class="button-group">
<button type="submit" class="nav-btn primary">Update Sub User</button>
<button type="button" class="nav-btn" onclick="closeEditModal()">Cancel</button>
</div>
</form>
</div>
</div>
<script>
function updateFileName(input) {
const fileName = document.getElementById('fileName');
if (input.files && input.files[0]) {
fileName.value = input.files[0].name;
fileName.style.color = '#169D53';
console.log('File selected:', input.files[0].name);
} else {
fileName.value = 'Choose file...';
fileName.style.color = '#9ca3af';
}
}
function resetForm() {
if (confirm('Are you sure you want to reset all fields?')) {
document.getElementById('shopForm').reset();
document.getElementById('fileName').value = 'Choose file...';
document.getElementById('fileName').style.color = '#9ca3af';
}
}
// Sub Users Management Functions
function editSubUser(id, name, email, phone) {
document.getElementById('editSubUserId').value = id;
document.getElementById('editSubUserName').value = name;
document.getElementById('editSubUserEmail').value = email;
document.getElementById('editSubUserPhone').value = phone || '';
const modal = document.getElementById('editSubUserModal');
modal.style.display = 'flex';
document.body.style.overflow = 'hidden';
}
function closeEditModal() {
const modal = document.getElementById('editSubUserModal');
modal.style.display = 'none';
document.body.style.overflow = 'auto';
// Reset form
document.getElementById('editSubUserForm').reset();
}
function deleteSubUser(id, name) {
if (confirm(`Are you sure you want to delete sub user "${name}"? This action cannot be undone.`)) {
const form = document.createElement('form');
form.method = 'POST';
form.style.display = 'none';
const actionInput = document.createElement('input');
actionInput.type = 'hidden';
actionInput.name = 'action';
actionInput.value = 'delete_sub_user';
const idInput = document.createElement('input');
idInput.type = 'hidden';
idInput.name = 'sub_id';
idInput.value = id;
form.appendChild(actionInput);
form.appendChild(idInput);
document.body.appendChild(form);
form.submit();
}
}
// Close modal when clicking outside
document.addEventListener('click', function(e) {
const modal = document.getElementById('editSubUserModal');
if (e.target === modal) {
closeEditModal();
}
});
// Form submission enhancement
document.addEventListener('DOMContentLoaded', function() {
const form = document.getElementById('shopForm');
if (form) {
form.addEventListener('submit', function(e) {
const submitBtn = form.querySelector('button[type="submit"]');
submitBtn.disabled = true;
submitBtn.textContent = 'Saving...';
// Re-enable after 3 seconds to prevent permanent disable on error
setTimeout(() => {
submitBtn.disabled = false;
submitBtn.textContent = 'Save';
}, 3000);
});
}
// Sub user form submission enhancement
const addSubUserForm = document.getElementById('addSubUserForm');
if (addSubUserForm) {
addSubUserForm.addEventListener('submit', function(e) {
const submitBtn = addSubUserForm.querySelector('button[type="submit"]');
submitBtn.disabled = true;
submitBtn.textContent = 'Adding...';
// Set a flag to clear form after submission
setTimeout(() => {
submitBtn.disabled = false;
submitBtn.textContent = 'Add Sub User';
// Check if success message exists, then clear form
const successAlert = document.querySelector('.alert-success');
if (successAlert && successAlert.textContent.includes('Sub user created successfully')) {
addSubUserForm.reset();
}
}, 1000);
});
}
// Clear sub user form on success
<?php if (isset($success_message) && strpos($success_message, 'Sub user created successfully') !== false): ?>
// Clear the add sub user form after successful creation
setTimeout(() => {
const addSubUserForm = document.getElementById('addSubUserForm');
if (addSubUserForm) {
addSubUserForm.reset();
}
}, 500);
<?php endif; ?>
const editSubUserForm = document.getElementById('editSubUserForm');
if (editSubUserForm) {
editSubUserForm.addEventListener('submit', function(e) {
const submitBtn = editSubUserForm.querySelector('button[type="submit"]');
submitBtn.disabled = true;
submitBtn.textContent = 'Updating...';
setTimeout(() => {
submitBtn.disabled = false;
submitBtn.textContent = 'Update Sub User';
}, 3000);
});
}
});
</script>
</body>
</html>