1737192474a:1:{s:25:"officer/guest-checkin.htm";a:9:{s:8:"fileName";s:25:"officer/guest-checkin.htm";s:7:"content";s:4154:"title = "Guest Check In"
url = "/officer/check-in"
layout = "BaliTiket2"

[session]
security = "user"
allowedUserGroups[] = "officer"
redirect = "bali-tiket/login"
==
<?php
	use Yuren\BaliTiket\Models\Vendor;

	use Winter\Storm\Auth\AuthManager;
	use Auth;
    use Flash;

	function onStart()
	{
		$user = Auth::getUser();
		if ($user) {
			$this['user'] = $user;

			$this['vendors'] = Vendor::where('id', $user->vendor)->first();
			
		} 
	}
?>
==


<div class="container py-md-4 py-3" id="demo-content">
    <div class="">
        {% flash %}
        <div class="alert alert-{{ (type == 'success') ? 'success' : 'danger' }} mt-3">
            {{ message }}
        </div>
        {% endflash %}
    </div>

	<h1 class="fw-bold">Guest Check In</h1>
	<p>Scan Barcode after that press button verification</p>

	<div class="mt-4 mb-4">
		<video id="video" width="100%" height="400" style="border: 1px solid gray"></video>
	</div>

	<div class="d-flex align-items-center mb-4">
		Result: 
		<code class="bg-light p-2" id="result"></code>
	</div>

	<p class="text-md-start text-center">
		<a class="btn btn-success px-4 py-2 me-3" id="verifyButton">Verifikasi</a>
		<a class="btn btn-warning px-4 py-2" id="resetButton">Reset</a>
	</p>
</div>

{% put scripts %}
<script type="text/javascript" src="https://unpkg.com/@zxing/library@latest/umd/index.min.js"></script>
<script type="text/javascript">
    window.addEventListener('load', function () {
        let selectedDeviceId;
        let scannedResult = null;
        const codeReader = new ZXing.BrowserMultiFormatReader();
        console.log('ZXing code reader initialized');

        // List video input devices
        codeReader.listVideoInputDevices()
            .then((videoInputDevices) => {
                // Cari kamera belakang berdasarkan label perangkat
                const backCamera = videoInputDevices.find((device) =>
                    device.label.toLowerCase().includes('back')
                );

                // Jika ditemukan, gunakan kamera belakang, jika tidak, fallback ke perangkat pertama
                selectedDeviceId = backCamera ? backCamera.deviceId : videoInputDevices[0].deviceId;

                // Mulai scanning langsung saat halaman dimuat
                codeReader.decodeFromVideoDevice(selectedDeviceId, 'video', (result, err) => {
                    if (result) {
                        console.log(result);
                        scannedResult = result.text; // Simpan hasil pemindaian
                        document.getElementById('result').textContent = scannedResult;
                    }
                    if (err && !(err instanceof ZXing.NotFoundException)) {
                        console.error(err);
                    }
                });
                console.log(`Started continuous decode from camera with id ${selectedDeviceId}`);
            })
            .catch((err) => {
                console.error(err);
            });

        // Fungsi reset
        document.getElementById('resetButton').addEventListener('click', () => {
            scannedResult = null;
            document.getElementById('result').textContent = '';
            console.log('Reset.');
        });

        // Fungsi verifikasi
        document.getElementById('verifyButton').addEventListener('click', () => {
            if (scannedResult) {
                console.log('Redirecting to:', scannedResult);
                if (isValidURL(scannedResult)) {
                    window.location.href = scannedResult; // Redirect ke URL hasil pemindaian
                } else {
                    alert('Hasil pemindaian bukan URL yang valid.');
                }
            } else {
                alert('Tidak ada hasil pemindaian untuk diverifikasi.');
            }
        });
    });

    // Fungsi untuk validasi URL
    function isValidURL(string) {
        try {
            new URL(string);
            return true;
        } catch (err) {
            return false;
        }
    }
</script>
{% endput %}
";s:5:"mtime";i:1735820679;s:6:"markup";s:3670:"<div class="container py-md-4 py-3" id="demo-content">
    <div class="">
        {% flash %}
        <div class="alert alert-{{ (type == 'success') ? 'success' : 'danger' }} mt-3">
            {{ message }}
        </div>
        {% endflash %}
    </div>

	<h1 class="fw-bold">Guest Check In</h1>
	<p>Scan Barcode after that press button verification</p>

	<div class="mt-4 mb-4">
		<video id="video" width="100%" height="400" style="border: 1px solid gray"></video>
	</div>

	<div class="d-flex align-items-center mb-4">
		Result: 
		<code class="bg-light p-2" id="result"></code>
	</div>

	<p class="text-md-start text-center">
		<a class="btn btn-success px-4 py-2 me-3" id="verifyButton">Verifikasi</a>
		<a class="btn btn-warning px-4 py-2" id="resetButton">Reset</a>
	</p>
</div>

{% put scripts %}
<script type="text/javascript" src="https://unpkg.com/@zxing/library@latest/umd/index.min.js"></script>
<script type="text/javascript">
    window.addEventListener('load', function () {
        let selectedDeviceId;
        let scannedResult = null;
        const codeReader = new ZXing.BrowserMultiFormatReader();
        console.log('ZXing code reader initialized');

        // List video input devices
        codeReader.listVideoInputDevices()
            .then((videoInputDevices) => {
                // Cari kamera belakang berdasarkan label perangkat
                const backCamera = videoInputDevices.find((device) =>
                    device.label.toLowerCase().includes('back')
                );

                // Jika ditemukan, gunakan kamera belakang, jika tidak, fallback ke perangkat pertama
                selectedDeviceId = backCamera ? backCamera.deviceId : videoInputDevices[0].deviceId;

                // Mulai scanning langsung saat halaman dimuat
                codeReader.decodeFromVideoDevice(selectedDeviceId, 'video', (result, err) => {
                    if (result) {
                        console.log(result);
                        scannedResult = result.text; // Simpan hasil pemindaian
                        document.getElementById('result').textContent = scannedResult;
                    }
                    if (err && !(err instanceof ZXing.NotFoundException)) {
                        console.error(err);
                    }
                });
                console.log(`Started continuous decode from camera with id ${selectedDeviceId}`);
            })
            .catch((err) => {
                console.error(err);
            });

        // Fungsi reset
        document.getElementById('resetButton').addEventListener('click', () => {
            scannedResult = null;
            document.getElementById('result').textContent = '';
            console.log('Reset.');
        });

        // Fungsi verifikasi
        document.getElementById('verifyButton').addEventListener('click', () => {
            if (scannedResult) {
                console.log('Redirecting to:', scannedResult);
                if (isValidURL(scannedResult)) {
                    window.location.href = scannedResult; // Redirect ke URL hasil pemindaian
                } else {
                    alert('Hasil pemindaian bukan URL yang valid.');
                }
            } else {
                alert('Tidak ada hasil pemindaian untuk diverifikasi.');
            }
        });
    });

    // Fungsi untuk validasi URL
    function isValidURL(string) {
        try {
            new URL(string);
            return true;
        } catch (err) {
            return false;
        }
    }
</script>
{% endput %}";s:4:"code";s:288:"
	use Yuren\BaliTiket\Models\Vendor;

	use Winter\Storm\Auth\AuthManager;
	use Auth;
    use Flash;

	function onStart()
	{
		$user = Auth::getUser();
		if ($user) {
			$this['user'] = $user;

			$this['vendors'] = Vendor::where('id', $user->vendor)->first();
			
		} 
	}
";s:5:"title";s:14:"Guest Check In";s:3:"url";s:17:"/officer/check-in";s:6:"layout";s:10:"BaliTiket2";s:7:"session";a:3:{s:8:"security";s:4:"user";s:17:"allowedUserGroups";a:1:{i:0;s:7:"officer";}s:8:"redirect";s:16:"bali-tiket/login";}}}