{"id":272,"date":"2026-02-25T09:24:05","date_gmt":"2026-02-25T09:24:05","guid":{"rendered":"https:\/\/macmonir.net\/test\/?page_id=272"},"modified":"2026-02-25T09:39:26","modified_gmt":"2026-02-25T09:39:26","slug":"scanner","status":"publish","type":"page","link":"https:\/\/macmonir.net\/test\/scanner\/","title":{"rendered":"scanner"},"content":{"rendered":"        <div class=\"les-frontend-scanner-wrap\">\n            \n                        \n            <div id=\"les-manual-entry-container\" style=\"margin-bottom: 20px; padding: 15px; background: #fff; border: 1px solid #ddd; border-radius: 5px;\">\n                <h3>Manual Ticket Entry<\/h3>\n                <div class=\"manual-entry-form\" style=\"display:flex; gap: 10px;\">\n                    <input type=\"text\" id=\"manual_ticket_code_input\" placeholder=\"e.g., LESO-123-45678\" style=\"flex-grow:1; max-width:300px;\">\n                    <button class=\"button button-primary\" id=\"verify_manual_code_btn\">Verify<\/button>\n                <\/div>\n            <\/div>\n\n            <div id=\"les-scanner-container\" style=\"margin-bottom: 20px;\">\n                <div id=\"les-qr-reader\" style=\"width: 100%; max-width: 500px; margin: 0 auto;\"><\/div>\n            <\/div>\n            \n            <div id=\"les-scan-result-container\">\n                <div id=\"les-scan-result\" class=\"notice notice-info\" style=\"padding: 10px; border-left: 4px solid #72aee6; background: #fff;\">\n                    <p>Waiting for scan or manual entry...<\/p>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <script src=\"https:\/\/unpkg.com\/html5-qrcode\" type=\"text\/javascript\"><\/script>\n        <script>\n            const les_checkin_i18n = {\"pleaseEnterCode\":\"Please enter a ticket code.\",\"invalidFormat\":\"Invalid Master Ticket Code format.\",\"verifying\":\"Verifying ticket...\",\"serverError\":\"Error connecting to server.\",\"scanNext\":\"Scan Next Ticket\",\"invalidQR\":\"Invalid QR Code.\",\"scanAgain\":\"Scan Again\",\"waiting\":\"Waiting for scan or manual entry...\"};\n            \n            \/\/ Pass the AJAX URL and Nonce dynamically\n            const les_scanner_config = {\n                ajax_url: 'https:\/\/macmonir.net\/test\/wp-admin\/admin-ajax.php',\n                nonce: '18008c519c'\n            };\n\n            jQuery(document).ready(function($) {\n                \n                function verifyTicketCode(code) {\n                    if (!code) {\n                        showResult(les_checkin_i18n.pleaseEnterCode, 'warning');\n                        return;\n                    }\n\n                    const parts = code.split('-');\n                    if (parts.length < 3 || parts[0] !== 'LESO') {\n                        showResult(les_checkin_i18n.invalidFormat, 'error');\n                        return;\n                    }\n                    const orderId = parts[1];\n\n                    showResult(les_checkin_i18n.verifying, 'info');\n                    $('#verify_manual_code_btn').prop('disabled', true);\n\n                    $.ajax({\n                        url: les_scanner_config.ajax_url,\n                        type: 'POST',\n                        data: {\n                            action: 'les_verify_master_ticket',\n                            nonce: les_scanner_config.nonce,\n                            master_ticket_code: code,\n                            order_id: orderId\n                        },\n                        success: function(response) {\n                            if (response.success) {\n                                showResult(response.data.message, 'success');\n                            } else {\n                                showResult(response.data.message, 'error');\n                            }\n                        },\n                        error: function() {\n                            showResult(les_checkin_i18n.serverError, 'error');\n                        },\n                        complete: function() {\n                            $('#verify_manual_code_btn').prop('disabled', false);\n                            $('#manual_ticket_code_input').val('');\n                            $('#les-scan-result').append('<p style=\"margin-top:10px;\"><button class=\"button button-primary\" id=\"restart-scanner-btn\">' + les_checkin_i18n.scanNext + '<\/button><\/p>');\n                        }\n                    });\n                }\n\n                function showResult(msg, type) {\n                    const $el = $('#les-scan-result');\n                    $el.removeClass('notice-info notice-error notice-success notice-warning');\n                    \n                    let color = '#72aee6'; \/\/ info\n                    if(type === 'error') color = '#d63638';\n                    if(type === 'success') color = '#46b450';\n                    if(type === 'warning') color = '#f0b849';\n\n                    $el.css('border-left-color', color);\n                    $el.html('<p>' + msg + '<\/p>');\n                }\n\n                let html5QrcodeScanner = null;\n\n                function startScanner() {\n                    \/\/ Prevent duplicate initialization\n                    if (html5QrcodeScanner) { \n                        html5QrcodeScanner.clear(); \n                    }\n                    \n                    showResult(les_checkin_i18n.waiting, 'info');\n                    \n                    html5QrcodeScanner = new Html5QrcodeScanner(\"les-qr-reader\", { fps: 10, qrbox: 250 });\n                    html5QrcodeScanner.render(onScanSuccess, (err) => { \/* ignore errors *\/ });\n                }\n\n                function onScanSuccess(decodedText, decodedResult) {\n                    html5QrcodeScanner.clear();\n                    try {\n                        const ticketData = JSON.parse(decodedText);\n                        if (!ticketData.master_ticket_code) throw new Error();\n                        verifyTicketCode(ticketData.master_ticket_code);\n                    } catch(e) {\n                        showResult(les_checkin_i18n.invalidQR, 'error');\n                        $('#les-scan-result').append('<p><button class=\"button button-primary\" id=\"restart-scanner-btn\">' + les_checkin_i18n.scanAgain + '<\/button><\/p>');\n                    }\n                }\n\n                \/\/ Auto start scanner\n                startScanner();\n\n                $(document).on('click', '#restart-scanner-btn', function() {\n                    startScanner();\n                });\n                \n                $('#verify_manual_code_btn').on('click', function() {\n                    const manualCode = $('#manual_ticket_code_input').val().trim();\n                    if(html5QrcodeScanner) html5QrcodeScanner.clear();\n                    verifyTicketCode(manualCode);\n                });\n\n                $('#manual_ticket_code_input').on('keypress', function(e) {\n                    if (e.which === 13) $('#verify_manual_code_btn').click();\n                });\n            });\n        <\/script>\n        \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-272","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>scanner - My Plugins Demo<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/macmonir.net\/test\/scanner\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"scanner - My Plugins Demo\" \/>\n<meta property=\"og:url\" content=\"https:\/\/macmonir.net\/test\/scanner\/\" \/>\n<meta property=\"og:site_name\" content=\"My Plugins Demo\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-25T09:39:26+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/macmonir.net\\\/test\\\/scanner\\\/\",\"url\":\"https:\\\/\\\/macmonir.net\\\/test\\\/scanner\\\/\",\"name\":\"scanner - My Plugins Demo\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/macmonir.net\\\/test\\\/#website\"},\"datePublished\":\"2026-02-25T09:24:05+00:00\",\"dateModified\":\"2026-02-25T09:39:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/macmonir.net\\\/test\\\/scanner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/macmonir.net\\\/test\\\/scanner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/macmonir.net\\\/test\\\/scanner\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/macmonir.net\\\/test\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"scanner\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/macmonir.net\\\/test\\\/#website\",\"url\":\"https:\\\/\\\/macmonir.net\\\/test\\\/\",\"name\":\"My Blog\",\"description\":\"My Plugins Demo\",\"publisher\":{\"@id\":\"https:\\\/\\\/macmonir.net\\\/test\\\/#\\\/schema\\\/person\\\/ecff2bb70513f60141e7763107eb9ceb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/macmonir.net\\\/test\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/macmonir.net\\\/test\\\/#\\\/schema\\\/person\\\/ecff2bb70513f60141e7763107eb9ceb\",\"name\":\"ozasg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/abbe28d5cea5474d548af07c9445010cc691868aa22fa07b13d5ab610c89455b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/abbe28d5cea5474d548af07c9445010cc691868aa22fa07b13d5ab610c89455b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/abbe28d5cea5474d548af07c9445010cc691868aa22fa07b13d5ab610c89455b?s=96&d=mm&r=g\",\"caption\":\"ozasg\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/abbe28d5cea5474d548af07c9445010cc691868aa22fa07b13d5ab610c89455b?s=96&d=mm&r=g\"},\"sameAs\":[\"http:\\\/\\\/macmonir.net\\\/test\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"scanner - My Plugins Demo","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/macmonir.net\/test\/scanner\/","og_locale":"en_US","og_type":"article","og_title":"scanner - My Plugins Demo","og_url":"https:\/\/macmonir.net\/test\/scanner\/","og_site_name":"My Plugins Demo","article_modified_time":"2026-02-25T09:39:26+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/macmonir.net\/test\/scanner\/","url":"https:\/\/macmonir.net\/test\/scanner\/","name":"scanner - My Plugins Demo","isPartOf":{"@id":"https:\/\/macmonir.net\/test\/#website"},"datePublished":"2026-02-25T09:24:05+00:00","dateModified":"2026-02-25T09:39:26+00:00","breadcrumb":{"@id":"https:\/\/macmonir.net\/test\/scanner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/macmonir.net\/test\/scanner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/macmonir.net\/test\/scanner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/macmonir.net\/test\/"},{"@type":"ListItem","position":2,"name":"scanner"}]},{"@type":"WebSite","@id":"https:\/\/macmonir.net\/test\/#website","url":"https:\/\/macmonir.net\/test\/","name":"My Blog","description":"My Plugins Demo","publisher":{"@id":"https:\/\/macmonir.net\/test\/#\/schema\/person\/ecff2bb70513f60141e7763107eb9ceb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/macmonir.net\/test\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/macmonir.net\/test\/#\/schema\/person\/ecff2bb70513f60141e7763107eb9ceb","name":"ozasg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/abbe28d5cea5474d548af07c9445010cc691868aa22fa07b13d5ab610c89455b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/abbe28d5cea5474d548af07c9445010cc691868aa22fa07b13d5ab610c89455b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/abbe28d5cea5474d548af07c9445010cc691868aa22fa07b13d5ab610c89455b?s=96&d=mm&r=g","caption":"ozasg"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/abbe28d5cea5474d548af07c9445010cc691868aa22fa07b13d5ab610c89455b?s=96&d=mm&r=g"},"sameAs":["http:\/\/macmonir.net\/test"]}]}},"_links":{"self":[{"href":"https:\/\/macmonir.net\/test\/wp-json\/wp\/v2\/pages\/272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/macmonir.net\/test\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/macmonir.net\/test\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/macmonir.net\/test\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/macmonir.net\/test\/wp-json\/wp\/v2\/comments?post=272"}],"version-history":[{"count":3,"href":"https:\/\/macmonir.net\/test\/wp-json\/wp\/v2\/pages\/272\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/macmonir.net\/test\/wp-json\/wp\/v2\/pages\/272\/revisions\/275"}],"wp:attachment":[{"href":"https:\/\/macmonir.net\/test\/wp-json\/wp\/v2\/media?parent=272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}