MMCT TEAM
Server IP : 217.21.85.138  /  Your IP : 216.73.216.103
Web Server : LiteSpeed
System : Linux in-mum-web906.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64
User : u915722082 ( 915722082)
PHP Version : 7.4.33
Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : OFF
Directory (0755) :  /home/u915722082/.nvm/../public_html/lohri/user/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/u915722082/.nvm/../public_html/lohri/user/wishlist.php
<!-- shop.php -->
  <?php 
  if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
require_once __DIR__ . '/../config/config.php';

try {
    $pdo = new PDO(
        "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4",
        DB_USER,
        DB_PASS,
        [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    );

} catch (PDOException $e) {
    die("❌ Database connection failed: " . htmlspecialchars($e->getMessage()));
}


    ?>
<!DOCTYPE html>


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Product Filter UI</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/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">
    <link href="css/style.css" rel="stylesheet">
        
     <?php include "../user/header.php" ?>
    <style>
            @media (min-width: 1200px) and (max-width: 1599px) {
  
  .insta-highlight-section{
          padding: 40px 20px 150px !important;
  }
 
}
    /* Wishlist Offer Styles */
.wishlist-offer-badge {
    display: inline-block;
    background: #000;
    color: white;
    padding: 3px 8px;
    border-radius: 3px;
    font-size: 11px;
    font-weight: 500;
    margin-top: 5px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.product-price-cell {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.offer-price-display {
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.offer-price-display .current-price.offer-price {
    color: #000;
    font-weight: 600;
    font-size: 16px;
}

.offer-price-display .original-price-wishlist {
    text-decoration: line-through;
    color: #999;
    font-size: 13px;
}
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            background-color: #fff;
        }

        .wishlist-container {
            padding: 40px 30px;
            margin-bottom:100px
        }

        .breadcrumb {
            font-size: 14px;
            color: #666;
            margin-bottom: 30px;
        }

        .breadcrumb a {
            color: #666;
            text-decoration: none;
        }

        .breadcrumb a:hover {
            text-decoration: underline;
        }

        .wishlist-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 40px;
        }

        .wishlist-title {
            font-size: 27px;
            font-weight: 500;
            margin: 0;
        }

        .continue-shopping {
           color: black;
            background:#f2f2f2;
            font-size: 14px;
            cursor: pointer;
            padding:12px 20px;
            border-radius:4px
        }

       /* .wishlist-content-wrapper {
   max-width: 900px;
} */

.wishlist-table {
    width: 100%;
    border-collapse: collapse;
    margin-top: 20px;
}

.wishlist-table th {
    /*background-color: #f8f9fa;*/
    padding: 15px;
    text-align: left;
    font-weight: 500;
    font-size: 14px;
    color: #666;
    border-bottom: 1px solid #ccc;
}

.wishlist-table td {
    padding: 25px 15px;
    border-bottom: 1px solid #e5e5e5;
    vertical-align: middle;
}

.product-info-cell {
    display: flex;
    align-items: center;
    gap: 15px;
}

.product-image {
    width: 70px !important;
    height: 70px !important;
    object-fit: cover;
    border-radius: 6px;
    flex-shrink: 0;
}

.product-details {
    flex-grow: 1;
}

.product-title {
    font-weight: 500;
    font-size: 16px;
    margin-bottom: 5px;
    color: #000;
}

.product-variant {
    font-size: 12px;
    color: #666;
    margin-bottom: 0;
}

.product-price {
    font-weight: 600;
    font-size: 16px;
    color: #000;
}

.action-buttons {
    display: flex;
    gap: 10px;
    align-items: center;
}

.icon-btn {
    width: 40px;
    height: 40px;
    border: none;
    border-radius: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: all 0.2s ease;
}

.add-to-cart-icon {
    background-color: #000;
    color: white;
}

.add-to-cart-icon:hover {
    background-color: #333;
}

.remove-icon {
    background-color: #f8f9fa;
    color: #dc3545;
}

.remove-icon:hover {
    background-color: #dc3545;
    color: white;
}

.empty-wishlist {
    text-align: center;
    padding: 80px 20px;
    background-color: #fafafa;
    border-radius: 8px;
    margin: 20px 0;
}

        .empty-wishlist h5 {
            font-weight: 400;
            color: #666;
            margin-bottom: 10px;
        }

        .empty-wishlist p {
            color: #999;
            margin-bottom: 20px;
        }

        /* Bulk actions styling */
        .bulk-actions-header {
            animation: slideDown 0.3s ease-out;
        }

        @keyframes slideDown {
            from {
                opacity: 0;
                transform: translateY(-10px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        .selected-count {
            font-weight: 500;
            color: #495057;
        }

        .bulk-action-buttons .btn {
            font-size: 14px;
            padding:10px 20px;
            transition: all 0.2s ease;
        }

        /* Checkbox styling */
        input[type="checkbox"] {
            width: 16px;
            height: 16px;
            accent-color: #000;
        }

        /* Row selection highlight */
        .wishlist-table tbody tr.selected {
            background-color: #f8f9ff;
        }

/* Mobile Responsive Styles for Wishlist - Matches Cart Page */
@media (max-width: 768px) {
    /* Wishlist Header Styles */
    .wishlist-header {
        flex-direction: row;
        justify-content: space-between;
        align-items: center;
        gap: 10px;
        margin-bottom: 25px;
    }

    .wishlist-title {
        font-size: 20px !important;
        margin: 0;
        flex-shrink: 0;
    }

    .continue-shopping {
        padding: 10px 15px !important;
        font-size: 12px !important;
        white-space: nowrap;
    }

    .breadcrumb {
        font-size: 12px;
        margin-bottom: 20px;
    }

    /* Keep table structure but make it scrollable and responsive */
    .wishlist-table {
        display: block;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        margin-bottom: 30px;
    }

    .wishlist-table thead {
        display: table-header-group;
    }

    .wishlist-table tbody {
        display: table-row-group;
    }

    .wishlist-table th {
        padding: 10px 8px !important;
        font-size: 12px;
        white-space: nowrap;
        min-width: fit-content;
    }

    /* Checkbox column - minimal width */
    .wishlist-table th:first-child {
        min-width: 35px !important;
        width: 35px !important;
        padding: 10px 5px !important;
    }

    /* Product column */
    .wishlist-table th:nth-child(2) {
        min-width: 180px;
    }

    .wishlist-table tr {
        display: table-row;
        border-bottom: 1px solid #e5e5e5;
    }

    .wishlist-table td {
        display: table-cell;
        padding: 12px 8px !important;
        vertical-align: middle;
        font-size: 13px;
    }

    /* Checkbox cell - minimal width */
    .wishlist-table td:first-child {
        width: 35px !important;
        padding: 12px 5px !important;
        text-align: center;
    }

    /* Product Info - Keep together but make compact */
    .product-info-cell {
        display: flex !important;
        flex-direction: row !important;
        align-items: center !important;
        gap: 8px !important;
        min-width: 180px;
    }

    .product-image {
        width: 50px !important;
        height: 50px !important;
        flex-shrink: 0;
    }

    .product-details {
        flex: 1;
        min-width: 0;
    }

    .product-title {
        font-size: 13px !important;
        margin-bottom: 3px !important;
        line-height: 1.2;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }

    .product-variant {
        font-size: 11px !important;
        color: #666;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    /* Price Cell */
    .product-price {
        font-size: 13px !important;
        white-space: nowrap;
        min-width: 60px;
    }

    /* Action Buttons */
    .action-buttons {
        display: flex;
        gap: 8px;
        justify-content: center;
    }

    .icon-btn {
        width: 35px !important;
        height: 35px !important;
        font-size: 14px;
    }

    .icon-btn svg {
        width: 14px;
        height: 14px;
    }

    /* Bulk Actions Header */
    .bulk-actions-header {
        display: none; /* Hidden by default, shown by JS when items selected */
        flex-direction: row !important;
        align-items: center;
        justify-content: space-between;
        gap: 10px;
        padding: 12px 15px !important;
        background-color: #f8f9fa;
        border-radius: 6px;
        margin-bottom: 15px;
    }

    .bulk-actions-header.show {
        display: flex !important;
    }

    .bulk-action-buttons {
        display: flex;
        gap: 8px;
        justify-content: flex-end;
        flex-wrap: nowrap;
    }

    .bulk-action-buttons .btn {
        font-size: 11px !important;
        padding: 8px 12px !important;
        white-space: nowrap;
        border-radius: 4px;
    }

    .bulk-action-buttons .btn-dark {
        background-color: #000 !important;
        border-color: #000 !important;
    }

    .bulk-action-buttons .btn-outline-danger {
        border-width: 1px !important;
    }

    .selected-count {
        font-size: 13px;
        flex-shrink: 0;
        font-weight: 500;
    }

    /* Checkbox */
    input[type="checkbox"] {
        width: 16px;
        height: 16px;
        cursor: pointer;
    }

    /* Empty Wishlist Mobile Styles */
    .empty-wishlist {
        padding: 40px 20px;
    }

    .empty-wishlist h5 {
        font-size: 18px;
        margin-bottom: 15px;
    }

    .empty-wishlist p {
        font-size: 14px;
    }

    .empty-wishlist .btn {
        padding: 12px 24px;
        font-size: 14px;
    }

    /* Container padding */
    .wishlist-container {
        padding: 20px 15px !important;
        margin-bottom: 30px !important;
    }
}

/* Extra Small Devices (smaller phones) */
@media (max-width: 480px) {
    .wishlist-title {
        font-size: 18px !important;
    }

    .wishlist-table th {
        padding: 8px 6px !important;
        font-size: 11px;
    }

    /* Checkbox column extra small */
    .wishlist-table th:first-child {
        min-width: 30px !important;
        width: 30px !important;
        padding: 8px 4px !important;
    }

    .wishlist-table td {
        padding: 10px 6px !important;
        font-size: 12px;
    }

    /* Checkbox cell extra small */
    .wishlist-table td:first-child {
        width: 30px !important;
        padding: 10px 4px !important;
    }

    .product-image {
        width: 45px !important;
        height: 45px !important;
    }

    .product-title {
        font-size: 12px !important;
    }

    .product-variant {
        font-size: 10px !important;
    }

    .product-info-cell {
        min-width: 150px;
        gap: 6px !important;
    }

    .product-price {
        font-size: 12px !important;
        min-width: 55px;
    }

    .icon-btn {
        width: 32px !important;
        height: 32px !important;
        font-size: 12px;
    }

    .icon-btn svg {
        width: 12px;
        height: 12px;
    }

    input[type="checkbox"] {
        width: 14px;
        height: 14px;
        cursor: pointer;
    }

    /* Bulk actions - stack on very small screens */
    .bulk-actions-header {
        flex-direction: column !important;
        align-items: flex-start;
        gap: 10px;
    }

    .bulk-action-buttons {
        width: 100%;
        justify-content: flex-start;
        flex-wrap: wrap;
                margin-left: 10px;
    }

    .bulk-action-buttons .btn {
        font-size: 10px !important;
        padding: 7px 10px !important;
    }

    .selected-count {
        font-size: 12px;
    }
}

/* Tablet Landscape */
@media (min-width: 769px) and (max-width: 1024px) {
    .wishlist-table th,
    .wishlist-table td {
        padding: 12px 10px !important;
        font-size: 14px;
    }

    .product-image {
        width: 60px !important;
        height: 60px !important;
    }

    .product-title {
        font-size: 15px !important;
    }

    .icon-btn {
        width: 38px !important;
        height: 38px !important;
    }

    .wishlist-container {
        padding: 30px 20px;
    }
}
    </style>
</head>
<body>
    <?php include "../ui/nav.php"; ?>
    
    <div class="wishlist-container container">
        <!-- Breadcrumb -->
        <style>
    .breadcrumb-item.active{
        color:black;
        font-size: 16px;
    }
    </style>

<nav aria-label="breadcrumb">
            <ol class="breadcrumb">
                <li class="breadcrumb-item"><a href="index.php">Home</a></li>
              
                <li class="breadcrumb-item active" aria-current="page">My Wishlist</li>
            </ol>
        </nav>
   



        <!-- Wishlist Header -->
        <div class="wishlist-header">
            <h1 class="wishlist-title">My Wishlist</h1>
            <span class="continue-shopping" onclick="continueShopping()">Continue Shopping</span>
        </div>

        <!-- Wishlist Content -->
        <div class="wishlist-content-wrapper">
            <div id="wishlistContent">
                <div class="text-center py-5">
                    <p>Loading wishlist...</p>
                </div>
            </div>
        </div>
    </div>

    <?php include "../ui/footer.php"; ?>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script>
        let wishlistData = [];

        function loadWishlistData() {
            fetch('get_wishlist_items.php')
            .then(response => response.json())
            .then(data => {
                console.log('Wishlist data loaded:', data);
                
                if (data.success) {
                    document.getElementById('wishlistContent').innerHTML = data.html;
                    
                    // Update wishlist count in navbar if function exists
                    if (typeof window.updateWishlistDisplay === 'function') {
                        window.updateWishlistDisplay();
                    }
                } else {
                    document.getElementById('wishlistContent').innerHTML = `
                        <div class="empty-wishlist">
                            <h5>Error loading wishlist</h5>
                            <p>Please refresh the page to try again</p>
                            <button onclick="loadWishlistData()" class="btn btn-dark">Retry</button>
                        </div>
                    `;
                }
            })
            .catch(error => {
                console.error('Error loading wishlist data:', error);
                document.getElementById('wishlistContent').innerHTML = `
                    <div class="empty-wishlist">
                        <h5>Error loading wishlist</h5>
                        <p>Please refresh the page to try again</p>
                        <button onclick="loadWishlistData()" class="btn btn-dark">Retry</button>
                    </div>
                `;
            });
        }

        // Checkbox functionality
        function toggleSelectAll() {
            const selectAllCheckbox = document.getElementById('selectAll');
            const itemCheckboxes = document.querySelectorAll('.item-checkbox');
            
            itemCheckboxes.forEach(checkbox => {
                checkbox.checked = selectAllCheckbox.checked;
                updateRowSelection(checkbox);
            });
            
            updateBulkActions();
        }

        function updateBulkActions() {
            const itemCheckboxes = document.querySelectorAll('.item-checkbox');
            const checkedCheckboxes = document.querySelectorAll('.item-checkbox:checked');
            const selectAllCheckbox = document.getElementById('selectAll');
            const bulkActionsHeader = document.getElementById('bulkActionsHeader');
            const selectedCount = document.querySelector('.selected-count');

            // Update select all checkbox state
            if (selectAllCheckbox) {
                if (checkedCheckboxes.length === 0) {
                    selectAllCheckbox.indeterminate = false;
                    selectAllCheckbox.checked = false;
                } else if (checkedCheckboxes.length === itemCheckboxes.length) {
                    selectAllCheckbox.indeterminate = false;
                    selectAllCheckbox.checked = true;
                } else {
                    selectAllCheckbox.indeterminate = true;
                    selectAllCheckbox.checked = false;
                }
            }

            // Show/hide bulk actions
            if (checkedCheckboxes.length > 0) {
                bulkActionsHeader.style.display = 'block';
                selectedCount.textContent = `${checkedCheckboxes.length} item${checkedCheckboxes.length > 1 ? 's' : ''}`;
            } else {
                bulkActionsHeader.style.display = 'none';
            }

            // Update row selection visual
            itemCheckboxes.forEach(checkbox => {
                updateRowSelection(checkbox);
            });
        }

        function updateRowSelection(checkbox) {
            const row = checkbox.closest('tr');
            if (checkbox.checked) {
                row.classList.add('selected');
            } else {
                row.classList.remove('selected');
            }
        }

        // Bulk operations
        function bulkAddToCart() {
            const checkedCheckboxes = document.querySelectorAll('.item-checkbox:checked');
            const wishlistKeys = Array.from(checkedCheckboxes).map(cb => cb.value);
            
            if (wishlistKeys.length === 0) {
                alert('Please select items to add to cart');
                return;
            }

            const confirmMessage = `Add ${wishlistKeys.length} item${wishlistKeys.length > 1 ? 's' : ''} to cart?`;
            if (!confirm(confirmMessage)) {
                return;
            }

            // Disable bulk buttons
            const bulkButtons = document.querySelectorAll('.bulk-action-buttons .btn');
            bulkButtons.forEach(btn => btn.disabled = true);

            fetch('update_wishlist.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                body: `action=bulk_add_to_cart&wishlist_keys=${encodeURIComponent(JSON.stringify(wishlistKeys))}`
            })
            .then(response => response.json())
            .then(data => {
                console.log('Bulk add to cart response:', data);
                
                if (data.success) {
                    // Update cart + wishlist counts if available
                    if (typeof window.updateCartDisplay === 'function') {
                        window.updateCartDisplay();
                    }
                    if (typeof window.updateWishlistDisplay === 'function') {
                        window.updateWishlistDisplay();
                    }

                    // Show cart offcanvas
                    const cartOffcanvas = document.getElementById('cartOffcanvas');
                    if (cartOffcanvas && window.bootstrap) {
                        const offcanvas = bootstrap.Offcanvas.getOrCreateInstance(cartOffcanvas);
                        offcanvas.show();
                    }

                    // Show success message
                    alert(data.message || 'Items added to cart successfully');

                    // Reload wishlist
                    loadWishlistData();

                } else {
                    console.error('Bulk add to cart failed:', data.message);
                    alert(data.message || 'Failed to add items to cart');
                }
            })
            .catch(error => {
                console.error('Error in bulk add to cart:', error);
                alert('Network error occurred while adding items to cart');
            })
            .finally(() => {
                // Re-enable bulk buttons
                bulkButtons.forEach(btn => btn.disabled = false);
            });
        }

        function bulkRemoveFromWishlist() {
            const checkedCheckboxes = document.querySelectorAll('.item-checkbox:checked');
            const wishlistKeys = Array.from(checkedCheckboxes).map(cb => cb.value);
            
            if (wishlistKeys.length === 0) {
                alert('Please select items to remove');
                return;
            }

            const confirmMessage = `Remove ${wishlistKeys.length} item${wishlistKeys.length > 1 ? 's' : ''} from your wishlist?`;
            if (!confirm(confirmMessage)) {
                return;
            }

            fetch('update_wishlist.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                body: `action=bulk_remove&wishlist_keys=${encodeURIComponent(JSON.stringify(wishlistKeys))}`
            })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    // Show success message
                    alert(data.message || 'Items removed successfully');
                    
                    // Reload wishlist
                    loadWishlistData();
                    
                    // Update wishlist count if function exists
                    if (typeof window.updateWishlistDisplay === 'function') {
                        window.updateWishlistDisplay();
                    }
                } else {
                    alert(data.message || 'Failed to remove items');
                }
            })
            .catch(error => {
                console.error('Error in bulk remove:', error);
                alert('Error removing items from wishlist');
            });
        }

        // Individual operations (existing functionality)
function addToCartFromWishlist(wishlistKey) {
    // Find button by wishlist key in onclick attribute
    const buttons = document.querySelectorAll('button[onclick*="addToCartFromWishlist"]');
    let button = null;
    
    buttons.forEach(btn => {
        if (btn.getAttribute('onclick').includes(wishlistKey)) {
            button = btn;
        }
    });

    if (button) {
        button.disabled = true; // disable while processing
    }

    fetch('update_wishlist.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: `action=add_to_cart_from_wishlist&wishlist_key=${encodeURIComponent(wishlistKey)}`
    })
    .then(response => response.json())
    .then(data => {
        console.log('Add to cart response:', data);
        
        if (data.success) {
            // Update cart + wishlist counts if available
            if (typeof window.updateCartDisplay === 'function') {
                window.updateCartDisplay();
            }
            if (typeof window.updateWishlistDisplay === 'function') {
                window.updateWishlistDisplay();
            }

            // Show cart offcanvas
            const cartOffcanvas = document.getElementById('cartOffcanvas');
            if (cartOffcanvas && window.bootstrap) {
                const offcanvas = bootstrap.Offcanvas.getOrCreateInstance(cartOffcanvas);
                offcanvas.show();
            }

            // Reload wishlist to remove the item
            setTimeout(() => {
                loadWishlistData();
            }, 1000);

        } else {
            console.error('Add to cart failed:', data.message);
            alert(data.message || 'Failed to add to cart');
        }
    })
    .catch(error => {
        console.error('Error adding to cart:', error);
        alert('Network error occurred while adding to cart');
    })
    .finally(() => {
        if (button) {
            button.disabled = false; // re-enable after request
        }
    });
}


        function removeFromWishlist(wishlistKey) {
            if (confirm('Remove this item from your wishlist?')) {
                fetch('update_wishlist.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    },
                    body: `action=remove_item&wishlist_key=${wishlistKey}`
                })
                .then(response => response.json())
                .then(data => {
                    if (data.success) {
                        loadWishlistData(); // Reload wishlist
                        
                        // Update wishlist count if function exists
                        if (typeof window.updateWishlistDisplay === 'function') {
                            window.updateWishlistDisplay();
                        }
                    } else {
                        alert(data.message || 'Failed to remove item');
                    }
                })
                .catch(error => {
                    console.error('Error removing from wishlist:', error);
                    alert('Error removing item from wishlist');
                });
            }
        }

        function continueShopping() {
            window.location.href = 'shop.php';
        }

        // Initialize wishlist on page load
        document.addEventListener('DOMContentLoaded', function() {
            loadWishlistData();
        });
    </script>
</body>
</html>

MMCT - 2023