{"id":8359,"date":"2026-03-06T16:36:50","date_gmt":"2026-03-06T08:36:50","guid":{"rendered":"https:\/\/samsicecream.my\/?page_id=8359"},"modified":"2026-03-09T12:02:57","modified_gmt":"2026-03-09T04:02:57","slug":"driver_checkin","status":"publish","type":"page","link":"https:\/\/samsicecream.my\/index.php\/driver_checkin\/","title":{"rendered":"Driver_checkin"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"8359\" class=\"elementor elementor-8359\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-649230a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"649230a\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-aa9a28d\" data-id=\"aa9a28d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-24348a7 elementor-widget elementor-widget-html\" data-id=\"24348a7\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Sam's Ice Cream - Delivery Check-In<\/title>\r\n    <style>\r\n        body { font-family: 'Segoe UI', Arial, sans-serif; text-align: center; padding: 20px; background-color: #f0f8ff; color: #333; }\r\n        .card { \r\n            background: white; \r\n            padding: 30px; \r\n            border-radius: 20px; \r\n            box-shadow: 0 10px 25px rgba(0,0,0,0.1); \r\n            display: inline-block; \r\n            max-width: 400px; \r\n            width: 100%; \r\n        }\r\n        h2 { color: #ff1493; margin-bottom: 5px; }\r\n        .input-group { margin-bottom: 20px; text-align: left; }\r\n        label { display: block; margin-bottom: 5px; font-weight: bold; color: #666; }\r\n        input { \r\n            width: 100%; \r\n            padding: 12px; \r\n            border: 2px solid #ffd1dc; \r\n            border-radius: 10px; \r\n            font-size: 16px; \r\n            box-sizing: border-box; \r\n        }\r\n        \r\n        .btn { \r\n            background-color: #ff69b4; \r\n            color: white; \r\n            border: none; \r\n            padding: 16px 20px; \r\n            border-radius: 12px; \r\n            cursor: pointer; \r\n            font-size: 18px; \r\n            font-weight: bold; \r\n            width: 100%; \r\n            transition: all 0.3s ease;\r\n            box-shadow: 0 4px 10px rgba(255, 20, 147, 0.2);\r\n        }\r\n        .btn:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(255, 20, 147, 0.4); }\r\n        .btn:disabled { background-color: #ccc; box-shadow: none; cursor: not-allowed; }\r\n        \r\n        .btn-confirm { background-color: #2ecc71 !important; box-shadow: 0 4px 10px rgba(46, 204, 113, 0.2); }\r\n\r\n        #resetBtn { background: none; border: none; color: #999; text-decoration: underline; margin-top: 15px; cursor: pointer; display: none; }\r\n        \r\n        #status { margin-top: 20px; min-height: 50px; padding: 10px; border-radius: 10px; line-height: 1.6; }\r\n        .address-preview { \r\n            background: #fff5f8; \r\n            border: 2px dashed #ff1493; \r\n            padding: 15px; \r\n            border-radius: 10px; \r\n            margin-top: 10px;\r\n            animation: slideIn 0.4s ease-out;\r\n        }\r\n        .success-msg { color: #2ecc71; font-weight: bold; font-size: 18px; }\r\n\r\n        @keyframes slideIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n\r\n    <div class=\"card\">\r\n        <h2>\ud83c\udf66 Sam's Ice Cream<\/h2>\r\n        <p style=\"margin-bottom: 25px; color: #888;\">Delivery Tracking System<\/p>\r\n        \r\n        <div class=\"input-group\">\r\n            <label for=\"driverName\">Driver Name<\/label>\r\n            <input type=\"text\" id=\"driverName\" placeholder=\"Enter your full name\" required>\r\n        <\/div>\r\n        \r\n        <button id=\"mainBtn\" class=\"btn\" onclick=\"startCheckIn()\">Step 1: Find My Location<\/button>\r\n        <button id=\"resetBtn\" onclick=\"location.reload()\">Start Over \/ Reset<\/button>\r\n        \r\n        <div id=\"status\"><\/div>\r\n    <\/div>\r\n\r\n    <script>\r\n        \/\/ --- CONFIGURATION ---\r\n        const WP_SITE_URL = \"https:\/\/samsicecream.my\"; \r\n        const WP_USERNAME = \"Sharon\"; \r\n        const WP_APP_PASS = \"r0P9 KQU1 d1eq mtmf 2dng nksS\"; \r\n\r\n        \/\/ Global data object\r\n        let deliveryData = { name: \"\", lat: null, lon: null, address: \"\" };\r\n\r\n        async function startCheckIn() {\r\n            const nameField = document.getElementById('driverName');\r\n            const status = document.getElementById('status');\r\n            const mainBtn = document.getElementById('mainBtn');\r\n\r\n            if (!nameField.value.trim()) return alert(\"Please enter your name first!\");\r\n            \r\n            deliveryData.name = nameField.value;\r\n            mainBtn.disabled = true;\r\n            status.innerHTML = \"\ud83d\udccd <strong>Locating...<\/strong><br>Please wait while we grab your GPS coordinates.\";\r\n\r\n            if (\"geolocation\" in navigator) {\r\n                navigator.geolocation.getCurrentPosition(async (position) => {\r\n                    deliveryData.lat = position.coords.latitude;\r\n                    deliveryData.lon = position.coords.longitude;\r\n\r\n                    \/\/ 1. Get readable address\r\n                    const locationName = await getAddress(deliveryData.lat, deliveryData.lon);\r\n                    deliveryData.address = locationName;\r\n\r\n                    \/\/ 2. Show confirmation UI\r\n                    status.innerHTML = `\r\n                        <div class=\"address-preview\">\r\n                            <strong>Location Found:<\/strong><br>\r\n                            ${locationName}<br><br>\r\n                            <em>Is this correct?<\/em>\r\n                        <\/div>\r\n                    `;\r\n\r\n                    mainBtn.innerText = \"Step 2: Confirm & Save\";\r\n                    mainBtn.onclick = saveToWordPress; \r\n                    mainBtn.classList.add(\"btn-confirm\"); \r\n                    mainBtn.disabled = false;\r\n                    document.getElementById('resetBtn').style.display = \"inline-block\";\r\n\r\n                }, (error) => {\r\n                    status.innerHTML = \"\u274c <strong>Error:<\/strong> \" + error.message;\r\n                    mainBtn.disabled = false;\r\n                });\r\n            } else {\r\n                status.innerHTML = \"\u274c Geolocation is not supported by your browser.\";\r\n            }\r\n        }\r\n\r\n        async function saveToWordPress() {\r\n            const status = document.getElementById('status');\r\n            const mainBtn = document.getElementById('mainBtn');\r\n\r\n            mainBtn.disabled = true;\r\n            status.innerHTML = \"\ud83d\udcbe <strong>Saving...<\/strong><br>Adding to Sam's Ice Cream database.\";\r\n\r\n            const auth = btoa(`${WP_USERNAME}:${WP_APP_PASS}`);\r\n\r\n            try {\r\n                const response = await fetch(`${WP_SITE_URL}\/wp-json\/wp\/v2\/driver_log`, {\r\n                    method: 'POST',\r\n                    headers: {\r\n                        'Content-Type': 'application\/json',\r\n                        'Authorization': `Basic ${auth}`\r\n                    },\r\n                    body: JSON.stringify({\r\n                        title: `Delivery by ${deliveryData.name}`,\r\n                        content: `Driver: ${deliveryData.name}\\nAddress: ${deliveryData.address}\\nGPS: ${deliveryData.lat}, ${deliveryData.lon}`,\r\n                        status: 'publish'\r\n                    })\r\n                });\r\n\r\n                if (response.ok) {\r\n                    status.innerHTML = \"<span class='success-msg'>\u2705 Successfully saved to WordPress!<\/span>\";\r\n                    mainBtn.style.display = \"none\";\r\n                } else {\r\n                    const errorData = await response.json();\r\n                    status.innerHTML = \"\u274c <strong>Error:<\/strong> \" + (errorData.message || \"Check URL\/Password.\");\r\n                    mainBtn.disabled = false;\r\n                }\r\n            } catch (err) {\r\n                status.innerHTML = \"\u274c <strong>Network Error:<\/strong> \" + err.message;\r\n                mainBtn.disabled = false;\r\n            }\r\n        }\r\n\r\n        async function getAddress(lat, lon) {\r\n            try {\r\n                const response = await fetch(`https:\/\/nominatim.openstreetmap.org\/reverse?format=json&lat=${lat}&lon=${lon}`);\r\n                const data = await response.json();\r\n                return data.display_name || \"Unknown Location\";\r\n            } catch (err) {\r\n                return `Lat: ${lat}, Lon: ${lon}`;\r\n            }\r\n        }\r\n    <\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Sam&#8217;s Ice Cream &#8211; Delivery Check-In \ud83c\udf66 Sam&#8217;s Ice Cream Delivery Tracking System Driver Name Step 1: Find My Location Start Over \/ Reset<\/p>\n","protected":false},"author":28,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"class_list":["post-8359","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/samsicecream.my\/index.php\/wp-json\/wp\/v2\/pages\/8359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/samsicecream.my\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/samsicecream.my\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/samsicecream.my\/index.php\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/samsicecream.my\/index.php\/wp-json\/wp\/v2\/comments?post=8359"}],"version-history":[{"count":19,"href":"https:\/\/samsicecream.my\/index.php\/wp-json\/wp\/v2\/pages\/8359\/revisions"}],"predecessor-version":[{"id":8407,"href":"https:\/\/samsicecream.my\/index.php\/wp-json\/wp\/v2\/pages\/8359\/revisions\/8407"}],"wp:attachment":[{"href":"https:\/\/samsicecream.my\/index.php\/wp-json\/wp\/v2\/media?parent=8359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}