From f275210756787221476fbc317eda8f9232960a3a Mon Sep 17 00:00:00 2001 From: Honore Hounwanou Date: Tue, 29 Mar 2016 21:37:38 -0400 Subject: [PATCH 1/4] Add QRCode Scanning --- .../EventQrcodeCheckInController.php | 109 +++++++++ app/Http/routes.php | 21 ++ app/Models/Attendee.php | 2 + composer.json | 3 +- composer.lock | 221 +++++++++++++++++- config/app.php | 3 +- config/javascript.php | 30 +++ public/assets/images/Opera-logo.png | Bin 0 -> 7301 bytes public/assets/images/cam.png | Bin 0 -> 625 bytes public/assets/images/chrome_logo.gif | Bin 0 -> 2262 bytes public/assets/images/down.png | Bin 0 -> 3049 bytes public/assets/images/firefox.png | Bin 0 -> 9454 bytes public/assets/images/vid.png | Bin 0 -> 3755 bytes public/assets/stylesheet/qrcode-check-in.css | 99 ++++++++ public/mp3/beep.mp3 | Bin 0 -> 41924 bytes public/vendor/qrcode-scan/llqrcode.js | 1 + public/vendor/qrcode-scan/webqr.js | 218 +++++++++++++++++ .../views/ManageEvent/QrcodeCheckIn.blade.php | 105 +++++++++ .../Shared/Layouts/ViewJavascript.blade.php | 0 19 files changed, 806 insertions(+), 6 deletions(-) create mode 100644 app/Http/Controllers/EventQrcodeCheckInController.php create mode 100644 config/javascript.php create mode 100755 public/assets/images/Opera-logo.png create mode 100755 public/assets/images/cam.png create mode 100755 public/assets/images/chrome_logo.gif create mode 100755 public/assets/images/down.png create mode 100755 public/assets/images/firefox.png create mode 100755 public/assets/images/vid.png create mode 100644 public/assets/stylesheet/qrcode-check-in.css create mode 100644 public/mp3/beep.mp3 create mode 100644 public/vendor/qrcode-scan/llqrcode.js create mode 100644 public/vendor/qrcode-scan/webqr.js create mode 100644 resources/views/ManageEvent/QrcodeCheckIn.blade.php create mode 100644 resources/views/Shared/Layouts/ViewJavascript.blade.php diff --git a/app/Http/Controllers/EventQrcodeCheckInController.php b/app/Http/Controllers/EventQrcodeCheckInController.php new file mode 100644 index 00000000..9cf344c9 --- /dev/null +++ b/app/Http/Controllers/EventQrcodeCheckInController.php @@ -0,0 +1,109 @@ +findOrFail($event_id); + + JavaScript::put([ + 'qrcodeCheckInRoute' => route('postQRCodeCheckInAttendee', ['event_id' => $event->id]) + ]); + + return view('ManageEvent.QrcodeCheckIn', compact('event')); + } + + /** + * Check in an attendee + * + * @param $event_id + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function postCheckInAttendee($event_id, Request $request) + { + $event = Event::scope()->findOrFail($event_id); + + $qrcodeToken = $request->get('qrcode_token'); + + $attendee = Attendee::scope()->withoutCancelled() + ->join('tickets', 'tickets.id', '=', 'attendees.ticket_id') + ->where(function ($query) use ($event, $qrcodeToken) { + $query->where('attendees.event_id', $event->id) + ->where('attendees.private_reference_number', $qrcodeToken); + })->select([ + 'attendees.id', + 'attendees.order_id', + 'attendees.first_name', + 'attendees.last_name', + 'attendees.email', + 'attendees.reference', + 'attendees.arrival_time', + 'attendees.has_arrived', + 'tickets.title as ticket', + ])->first(); + + if(is_null($attendee)){ + return response()->json(['status' => 'error', 'message' => "Invalid Ticket !"]); + } + + $relatedAttendesCount = Attendee::where([ + 'order_id' => $attendee->order_id, + 'has_arrived' => false + ])->count(); + + if($relatedAttendesCount >= 1){ + $confirmOrderTicketsRoute = route('confirmCheckInOrderTickets', [$event->id, $attendee->order_id]); + + $appendedText = '

'. csrf_field() .'
'; + } else { + $appendedText = ''; + } + + if ($attendee->has_arrived) { + return response()->json([ + 'status' => 'error', + 'message' => 'Warning: This Attendee Has Already Been Checked In at '. $attendee->arrival_time->format('H:i A, F j'). '.' . $appendedText + ]); + } + + Attendee::find($attendee->id)->update(['has_arrived' => true, 'arrival_time' => Carbon::now()]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Success !
Name: ' . $attendee->first_name . ' ' . $attendee->last_name . '
Reference: '. $attendee->reference . '
Ticket: '. $attendee->ticket . '.' . $appendedText + ]); + } + + /** + * Confirm tickets of same order. + * + * @param $event_id + * @param $order_id + * @return \Illuminate\Http\Response + */ + public function confirmOrderTickets($event_id, $order_id) + { + $updateRowsCount = Attendee::where(['order_id' => $order_id, 'has_arrived' => false]) + ->update(['has_arrived' => true, 'arrival_time' => Carbon::now()]); + + session()->flash('success_message', $updateRowsCount . ' other tickets checked in.'); + return back(); + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index 5b43fedf..98ccfcf2 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -562,6 +562,27 @@ Route::group(['middleware' => ['auth', 'first.run']], function () { 'uses' => 'EventCheckInController@postCheckInAttendee', ]); + + /* + * ------- + * QRCode Check In App + * ------- + */ + Route::get('{event_id}/qrcode_check_in', [ + 'as' => 'showQRCodeChechIn', + 'uses' => 'EventQrcodeCheckInController@showCheckIn', + ]); + + Route::post('{event_id}/qrcode_check_in', [ + 'as' => 'postQRCodeCheckInAttendee', + 'uses' => 'EventQrcodeCheckInController@postCheckInAttendee', + ]); + + Route::match(['PUT', 'PATCH'], '{event_id}/confirm_order_tickets/{order_id}', [ + 'as' => 'confirmCheckInOrderTickets', + 'uses' => 'EventQrcodeCheckInController@confirmOrderTickets', + ]); + /* * ------- * Promote diff --git a/app/Models/Attendee.php b/app/Models/Attendee.php index 4c29e953..caa548ae 100644 --- a/app/Models/Attendee.php +++ b/app/Models/Attendee.php @@ -32,6 +32,8 @@ class Attendee extends MyBaseModel 'ticket_id', 'account_id', 'reference', + 'has_arrived', + 'arrival_time' ]; /** diff --git a/composer.json b/composer.json index 1054622e..a03a5dd7 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,8 @@ "omnipay/paypal": "*", "omnipay/bitpay": "dev-master", "omnipay/coinbase": "dev-master", - "barryvdh/laravel-ide-helper": "^2.1" + "barryvdh/laravel-ide-helper": "^2.1", + "laracasts/utilities": "^2.1" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 3470e142..49f9932b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "acfabb6575d92d14c44717c0d3e371c7", - "content-hash": "7874f34b6511337f2d983c8e81cf82db", + "hash": "a32ff9293593f1a4ebbba773feb95f77", + "content-hash": "047498c5561f95ec60c3ab8660f2c2dc", "packages": [ { "name": "aws/aws-sdk-php", @@ -370,7 +370,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/eaa6b4f3cb9a779bd9f8ead71bd30427f8e863e1", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/adf81af61c89f0be9c091e905ca7c6f1f2398271", "reference": "eaa6b4f3cb9a779bd9f8ead71bd30427f8e863e1", "shasum": "" }, @@ -1183,6 +1183,50 @@ ], "time": "2015-12-05 17:17:57" }, + { + "name": "laracasts/utilities", + "version": "2.1", + "source": { + "type": "git", + "url": "https://github.com/laracasts/PHP-Vars-To-Js-Transformer.git", + "reference": "4402a0ed774f8eb36ea7ba169341d9d5b6049378" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laracasts/PHP-Vars-To-Js-Transformer/zipball/4402a0ed774f8eb36ea7ba169341d9d5b6049378", + "reference": "4402a0ed774f8eb36ea7ba169341d9d5b6049378", + "shasum": "" + }, + "require": { + "illuminate/support": "~5.0", + "php": ">=5.4.0" + }, + "require-dev": { + "phpspec/phpspec": "~2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laracasts\\Utilities\\JavaScript\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeffrey Way", + "email": "jeffrey@laracasts.com" + } + ], + "description": "Transform your PHP to JavaScript", + "keywords": [ + "javascript", + "laravel" + ], + "time": "2015-10-01 05:16:28" + }, { "name": "laravel/framework", "version": "v5.1.20", @@ -2099,6 +2143,121 @@ ], "time": "2016-03-11 14:25:56" }, + { + "name": "omnipay/bitpay", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/omnipay-bitpay.git", + "reference": "cf813f1d5436a1d2f942d3df6666695d1e2b5280" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/omnipay-bitpay/zipball/cf813f1d5436a1d2f942d3df6666695d1e2b5280", + "reference": "cf813f1d5436a1d2f942d3df6666695d1e2b5280", + "shasum": "" + }, + "require": { + "omnipay/common": "~2.0" + }, + "require-dev": { + "omnipay/tests": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Omnipay\\BitPay\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrian Macneil", + "email": "adrian@adrianmacneil.com" + }, + { + "name": "Omnipay Contributors", + "homepage": "https://github.com/thephpleague/omnipay-bitpay/contributors" + } + ], + "description": "BitPay driver for the Omnipay payment processing library", + "homepage": "https://github.com/thephpleague/omnipay-bitpay", + "keywords": [ + "bitcoin", + "bitpay", + "gateway", + "merchant", + "omnipay", + "pay", + "payment" + ], + "time": "2016-03-10 03:16:04" + }, + { + "name": "omnipay/coinbase", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/omnipay-coinbase.git", + "reference": "69c4f07d88ef3bdb2b42cd90234b358b641dfa29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/omnipay-coinbase/zipball/69c4f07d88ef3bdb2b42cd90234b358b641dfa29", + "reference": "69c4f07d88ef3bdb2b42cd90234b358b641dfa29", + "shasum": "" + }, + "require": { + "omnipay/common": "~2.0" + }, + "require-dev": { + "omnipay/tests": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Omnipay\\Coinbase\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrian Macneil", + "email": "adrian@adrianmacneil.com" + }, + { + "name": "Omnipay Contributors", + "homepage": "https://github.com/thephpleague/omnipay-coinbase/contributors" + } + ], + "description": "Coinbase driver for the Omnipay payment processing library", + "homepage": "https://github.com/thephpleague/omnipay-coinbase", + "keywords": [ + "coinbase", + "gateway", + "merchant", + "omnipay", + "pay", + "payment" + ], + "time": "2015-03-06 05:35:39" + }, { "name": "omnipay/common", "version": "v2.5.0", @@ -3822,6 +3981,58 @@ ], "time": "2015-06-14 21:17:01" }, + { + "name": "fzaninotto/faker", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "d0190b156bcca848d401fb80f31f504f37141c8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d", + "reference": "d0190b156bcca848d401fb80f31f504f37141c8d", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "suggest": { + "ext-intl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2015-05-29 06:29:14" + }, { "name": "phpspec/php-diff", "version": "v1.0.2", @@ -4793,7 +5004,9 @@ "nitmedia/wkhtml2pdf": 20, "dompdf/dompdf": 20, "vinelab/http": 20, - "maxhoffmann/parsedown-laravel": 20 + "maxhoffmann/parsedown-laravel": 20, + "omnipay/bitpay": 20, + "omnipay/coinbase": 20 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/config/app.php b/config/app.php index f8d3b5d2..fd10da83 100644 --- a/config/app.php +++ b/config/app.php @@ -69,7 +69,7 @@ return [ | */ 'key' => env('APP_KEY', 'SomeRandomString'), - 'cipher' => MCRYPT_RIJNDAEL_128, + 'cipher' => 'AES-256-CBC', /* |-------------------------------------------------------------------------- | Logging Configuration @@ -146,6 +146,7 @@ return [ Mews\Purifier\PurifierServiceProvider::class, MaxHoffmann\Parsedown\ParsedownServiceProvider::class, Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, + Laracasts\Utilities\JavaScript\JavaScriptServiceProvider::class, ], /* |-------------------------------------------------------------------------- diff --git a/config/javascript.php b/config/javascript.php new file mode 100644 index 00000000..4d165a6d --- /dev/null +++ b/config/javascript.php @@ -0,0 +1,30 @@ + ['Shared.Layouts.ViewJavascript'], + + /* + |-------------------------------------------------------------------------- + | JavaScript Namespace + |-------------------------------------------------------------------------- + | + | By default, we'll add variables to the global window object. However, + | it's recommended that you change this to some namespace - anything. + | That way, you can access vars, like "SomeNamespace.someVariable." + | + */ + 'js_namespace' => 'Attendize' + +]; diff --git a/public/assets/images/Opera-logo.png b/public/assets/images/Opera-logo.png new file mode 100755 index 0000000000000000000000000000000000000000..90610937db5b9bdb215cae3bf98a8e965495fbc5 GIT binary patch literal 7301 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 n{1iC>o z0okBrg3t*{CullB+6mH30G*)OAl)Ezg4C|g=yEak0jA=ClRo7ljQw$cK07?0&%v1G zCK$O)1Sf(ML5Iw=5{6;Zn5D$pGRLdLN6U3%i5Jk{CEn-xLU9l^FGMgK0XdCK^TJsyMwGnbDvLeI zH)LfAdIj;OkaS3<3m4}N<}M^o4wtCsDKmRHah{uE&_pmsS!WIEmhRhf3EFlN<(>oR z2c%P%E?}&dlvurhj~8g()m1s^=;9PD>MGE&!+j?*URXkh?P43YWU(XTof9e2c^?%_467(hKcfHHkcXx@`uYmCywcI>EYOEUoKC!N7OOWDw44;tE|k-&BMgSOu9#rk&~jLq~b9z@xTS*FD}s%~~Ga!N1{_wB9 z#FUh_&`+vQ=CT{g-|+a{S)at@=b)ne=H`*VluNWl(;XpCoZr&I5AN32(M0m!gTT_^(BJK6so?AD>&VmEmcZm@m%5X| z==Q(9&Pq<LjkVuJpZ zIY5nqRh@7uU8=AGIR#$Q4Cr~ID$z7v6htV|W*gJ5U!Sxo0VV=eHBtu*NTVjJ))FLk z1bR}@jX!^2^AfB8<_`%;WX&oVOgI9V5|T*#38V;w0g86<>dpJX8wf;!{_OZ$qVwU- ziFYhc0s@2*6cr{$o}9PYF(svwVAi~2b8XRq5Ro>G0tpgQs_(M?`YjFsP^@5=RwNq{ zqH-mYG&X(OxAn&nR}WuGCC-Znppc;dNUo%tEfG`Dp-U$YQ-MT0ct`<+WzdWq3hlhv z|E7+>)pY2=pB)9&;RYT5IKZC+1L?Ql9t;v>Ac79QL7+eiJ{Vy^73zUtK`@LHM;x#S zB8YX)>_ZJUA+*>+CX5h6-ynu;v4I6}SU|}^b>MN=kN&vvPh@t?0i-{2eE5$XLB0W` zKs_Gm&m9CYsRxrl_Cd!TN6w)KL3H%drGErPB4Qll;9?>Y$c%D<3pV^9XEjG?!^kr? z!l9?076@Qa9Y)TP$9{gy@!yYg+@Xgae%zJEKuqT0Poi&7=|G@&*s%weR0@QpKY8rI z=v_YI@rE0B1o~l^liuOR9zM?hvEe^doEe7(1enOl5(u#1!VxyuaD)q?TtLsB$XbA3 zK}^m;W=(6eR)u1Z$R6vrwb26us;S9q%OmT5@big1^JlpKN=Ub z$D{-`;w}acaI=IEQ8>a+0xT!Mj}t;7%1(40g%Cpc(t;H<6H>?-1eu#qWJ>?zGs7DX z@4uLO4urW5k77(%p+Hxbg zws1Z3ymUcxAIv%4I~zoLWPZObPz_(W8;3sA#PEs=w6nnm?UTHcfhLqQV93pxS1kJ8 z0;x`V-JF9yx<7gMP5kLYFJyw$gpc@%2j`@aLJZt@pF%0tXaTU*#$wS)y!xt*FKn*guzJN03FhUOoI6xy9Aso`^9T}og5IWqYc~7g~K-dRC zBQ=i>M(Wh@BKW-aaZGayfdmE)@dDSOf*EKSf(liL221ope0!?g76vf^gGg!)fcr-s z5TrhWP|zTA0~{UyZWy5r>dkZ>)Pti6ltU<7q6UqaTGd9>fm$ph3|P#@HB`}$WSMOS zW&j?TjO33#_(2Xn5>gK*=s6>zOH5^aLmtQ&F*mMpe(<}?9ORG(GZEgG`n5gw5Jme3LM`V^J-#|u0eexeLs0Rkd z@C7MOv1)7ZfdSaMB8(9T@(?oMCgEgoh*;cc zoP{966{L`}h+mXpod8t`6i(sJRTAL~@f^oE){qZTY=8mzyuu@RPykGDAfOmU2o&%k zfr8dx3`A%|BWi#HGLT^gg8&3YDFBa)X7r^6fr2NR&`}!D00Tb2fChL02r2MD9tEI4 z09No%m>QKJTnGkDJ34|9yrTdGU;+h%nu>WG^{NHo0y`wogeJHm0AOv!E>_S5teVvz k9^gVH7O{vfxb&=WjjLSeO4qvD^{#l$t6ukt(SQH|I|jK&i~s-t literal 0 HcmV?d00001 diff --git a/public/assets/images/down.png b/public/assets/images/down.png new file mode 100755 index 0000000000000000000000000000000000000000..e0172a103cec5e07e9dd5be97a8e64625855aeba GIT binary patch literal 3049 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 Vt3Sqt9h3k7002ovPDHLkV1mmjBrX5| literal 0 HcmV?d00001 diff --git a/public/assets/stylesheet/qrcode-check-in.css b/public/assets/stylesheet/qrcode-check-in.css new file mode 100644 index 00000000..2d289264 --- /dev/null +++ b/public/assets/stylesheet/qrcode-check-in.css @@ -0,0 +1,99 @@ +body{ + font-family: "Source Sans Pro", sans-serif; +} + +a:active, a:focus, a:visited{ + text-decoration: none; +} + +a:hover{ + text-decoration: underline; +} + +#outdiv +{ + width: 400px; + height: 250px; + margin: 0; + padding: 0; +} + +#v{ + width: 400px; + height: auto; + margin: 0; + padding: 0; + border: 2px solid #c5c5c5; +} + +#qrfile{ + border: 2px solid #c5c5c5; + width: 400px; + height: 250px; +} + +#qr-canvas{ + display:none; +} + +#help-text{ + z-index: 9999999999; + position: relative; + color: #00AEFB; + top: 0; +} + +#imghelp{ + position:relative; + left:0px; + top:-160px; + z-index:100; + background:#f2f2f2; + margin-left:35px; + margin-right:35px; + padding-top:15px; + padding-bottom:15px; + border-radius:20px; +} + +.selector{ + cursor:pointer; +} + +#result{ + border: 1px solid #eaeaea; + padding: 10px; + margin-top: 3em; + color: #456D86; + width: 50%; + background-color: #f2f2f2; + font-size: 1.5em; + font-weight: 500; + box-shadow: none; + border-radius: 3px; + transition: background 0.4s ease-in-out; +} + +/* Mobile */ +@media only screen and (max-width: 480px) { + #result{ + width: 90%; + } + + #outdiv{ + width: 300px; + height: auto; + } + + #help-text{ + top: -35px; + } + + #qrfile{ + width: 300px; + } + + #v{ + width: 300px; + } +} diff --git a/public/mp3/beep.mp3 b/public/mp3/beep.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8c4a6dee561b4fde5d01f1be24d4d399b4aaa240 GIT binary patch literal 41924 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"Error._ab "}c=false;if(a==-1){e[g]=0;c=true}else{if(a==d){e[g]=d-1;c=true}}if(h==-1){e[g+1]=0;c=true}else{if(h==b){e[g+1]=b-1;c=true}}}c=true;for(var g=e.length-2;g>=0&&c;g-=2){var a=Math.floor(e[g]);var h=Math.floor(e[g+1]);if(a<-1||a>d||h<-1||h>b){throw"Error._ab "}c=false;if(a==-1){e[g]=0;c=true}else{if(a==d){e[g]=d-1;c=true}}if(h==-1){e[g+1]=0;c=true}else{if(h==b){e[g+1]=b-1;c=true}}}};_aa._af=function(b,d,a){var l=new _ac(d);var k=new Array(d<<1);for(var g=0;g>1)+0.5;k[i+1]=j}a._ad(k);_aa._ab(b,k);try{for(var i=0;i>1,g)}}}catch(c){throw"Error._ab"}}return l};_aa._ah=function(h,o,l,k,r,q,b,a,f,e,n,m,t,s,d,c,j,i){var g=_ae._ag(l,k,r,q,b,a,f,e,n,m,t,s,d,c,j,i);return _aa._af(h,o,g)};function _a1(b,a){this.count=b;this._fc=a;this.__defineGetter__("Count",function(){return this.count});this.__defineGetter__("_dm",function(){return this._fc})}function _a2(a,c,b){this._bm=a;if(b){this._do=new Array(c,b)}else{this._do=new Array(c)}this.__defineGetter__("_bo",function(){return this._bm});this.__defineGetter__("_dn",function(){return this._bm*this._fo});this.__defineGetter__("_fo",function(){var e=0;for(var d=0;d6){o._bq(r-11,0,3,6);o._bq(0,r-11,6,3)}return o};this._bu=function(i){return this._do[i.ordinal()]}}_a3._bv=new Array(31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017);_a3.VERSIONS=_ay();_a3._av=function(a){if(a<1||a>40){throw"bad arguments"}return _a3.VERSIONS[a-1]};_a3._at=function(b){if(b%4!=1){throw"Error _at"}try{return _a3._av((b-17)>>2)}catch(a){throw"Error _av"}};_a3._aw=function(d){var b=4294967295;var f=0;for(var c=0;c<_a3._bv.length;c++){var a=_a3._bv[c];if(a==d){return this._av(c+7)}var e=_ax._gj(d,a);if(eMath.abs(c-m);if(d){var s=m;m=l;l=s;s=c;c=b;b=s}var j=Math.abs(c-m);var i=Math.abs(b-l);var q=-j>>1;var v=l0){if(g==b){break}g+=v;q-=j}}var k=c-m;var r=b-l;return Math.sqrt((k*k+r*r))};this._bh=function(i,g,h,f){var b=this._bi(i,g,h,f);var e=1;var d=i-(h-i);if(d<0){e=i/(i-d);d=0}else{if(d>=qrcode.width){e=(qrcode.width-1-i)/(d-i);d=qrcode.width-1}}var c=Math.floor(g-(f-g)*e);e=1;if(c<0){e=g/(g-c);c=0}else{if(c>=qrcode.height){e=(qrcode.height-1-g)/(c-g);c=qrcode.height-1}}d=Math.floor(i+(d-i)*e);b+=this._bi(i,g,d,c);return b-1};this._bj=function(c,d){var b=this._bh(Math.floor(c.X),Math.floor(c.Y),Math.floor(d.X),Math.floor(d.Y));var e=this._bh(Math.floor(d.X),Math.floor(d.Y),Math.floor(c.X),Math.floor(c.Y));if(isNaN(b)){return e/7}if(isNaN(e)){return b/7}return(b+e)/14};this._bk=function(d,c,b){return(this._bj(d,c)+this._bj(d,b))/2};this.distance=function(c,b){xDiff=c.X-b.X;yDiff=c.Y-b.Y;return Math.sqrt((xDiff*xDiff+yDiff*yDiff))};this._bx=function(g,f,d,e){var b=Math.round(this.distance(g,f)/e);var c=Math.round(this.distance(g,d)/e);var h=((b+c)>>1)+7;switch(h&3){case 0:h++;break;case 2:h--;break;case 3:throw"Error"}return h};this._bl=function(g,f,d,j){var k=Math.floor(j*g);var h=Math.max(0,f-k);var i=Math.min(qrcode.width-1,f+k);if(i-h0){var f=h.X-j.X+n.X;var e=h.Y-j.Y+n.Y;var c=1-3/k;var u=Math.floor(j.X+c*(f-j.X));var t=Math.floor(j.Y+c*(e-j.Y));for(var q=4;q<=16;q<<=1){l=this._bl(d,u,t,q);break}}var g=this.createTransform(j,h,n,l,s);var m=this._bz(this.image,g,s);var o;if(l==null){o=new Array(n,j,h)}else{o=new Array(n,j,h,l)}return new _bg(m,o)};this.detect=function(){var b=new _cc()._ce(this.image);return this._cd(b)}}var _ca=21522;var _cb=new Array(new Array(21522,0),new Array(20773,1),new Array(24188,2),new Array(23371,3),new Array(17913,4),new Array(16590,5),new Array(20375,6),new Array(19104,7),new Array(30660,8),new Array(29427,9),new Array(32170,10),new Array(30877,11),new Array(26159,12),new Array(25368,13),new Array(27713,14),new Array(26998,15),new Array(5769,16),new Array(5054,17),new Array(7399,18),new Array(6608,19),new Array(1890,20),new Array(597,21),new Array(3340,22),new Array(2107,23),new Array(13663,24),new Array(12392,25),new Array(16177,26),new Array(14854,27),new Array(9396,28),new Array(8579,29),new Array(11994,30),new Array(11245,31));var _ch=new Array(0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4);function _ax(a){this._cf=_cg.forBits((a>>3)&3);this._fe=(a&7);this.__defineGetter__("_cg",function(){return this._cf});this.__defineGetter__("_dx",function(){return this._fe});this.GetHashCode=function(){return(this._cf.ordinal()<<3)|_fe};this.Equals=function(c){var b=c;return this._cf==b._cf&&this._fe==b._fe}}_ax._gj=function(d,c){d^=c;return _ch[d&15]+_ch[(_ew(d,4)&15)]+_ch[(_ew(d,8)&15)]+_ch[(_ew(d,12)&15)]+_ch[(_ew(d,16)&15)]+_ch[(_ew(d,20)&15)]+_ch[(_ew(d,24)&15)]+_ch[(_ew(d,28)&15)]};_ax._ci=function(a){var b=_ax._cj(a);if(b!=null){return b}return _ax._cj(a^_ca)};_ax._cj=function(d){var b=4294967295;var a=0;for(var c=0;c<_cb.length;c++){var g=_cb[c];var f=g[0];if(f==d){return new _ax(g[1])}var e=this._gj(d,f);if(e=FOR_BITS.length){throw"bad arguments"}return FOR_BITS[a]};var L=new _cg(0,1,"L");var M=new _cg(1,0,"M");var Q=new _cg(2,3,"Q");var H=new _cg(3,2,"H");var FOR_BITS=new Array(M,L,H,Q);function _ac(d,a){if(!a){a=d}if(d<1||a<1){throw"Both dimensions must be greater than 0"}this.width=d;this.height=a;var c=d>>5;if((d&31)!=0){c++}this.rowSize=c;this.bits=new Array(c*a);for(var b=0;b>5);return((_ew(this.bits[f],(e&31)))&1)!=0};this._dq=function(e,g){var f=g*this.rowSize+(e>>5);this.bits[f]|=1<<(e&31)};this.flip=function(e,g){var f=g*this.rowSize+(e>>5);this.bits[f]^=1<<(e&31)};this.clear=function(){var e=this.bits.length;for(var f=0;fthis.height||l>this.width){throw"The region must fit inside the matrix"}for(var i=j;i>5)]|=1<<(k&31)}}}}function _dl(a,b){this._dv=a;this._dw=b;this.__defineGetter__("_du",function(){return this._dv});this.__defineGetter__("Codewords",function(){return this._dw})}_dl._gn=function(c,h,s){if(c.length!=h._dp){throw"bad arguments"}var k=h._bu(s);var e=0;var d=k._fb();for(var r=0;r=0){var w=l[b]._dw.length;if(w==u){break}b--}b++;var g=u-k._bo;var a=0;for(var r=0;r=0;c--){g=this._dk(8,c,g)}this._co=_ax._ci(g);if(this._co!=null){return this._co}var f=this._au.Dimension;g=0;var d=f-8;for(var e=f-1;e>=d;e--){g=this._dk(e,8,g)}for(var c=f-7;c>2;if(f<=6){return _a3._av(f)}var g=0;var e=h-11;for(var c=5;c>=0;c--){for(var d=h-9;d>=e;d--){g=this._dk(d,c,g)}}this._cp=_a3._aw(g);if(this._cp!=null&&this._cp._cr==h){return this._cp}g=0;for(var d=5;d>=0;d--){for(var c=h-9;c>=e;c--){g=this._dk(d,c,g)}}this._cp=_a3._aw(g);if(this._cp!=null&&this._cp._cr==h){return this._cp}throw"Error _cq"};this._gk=function(){var r=this._cm();var o=this._cq();var c=_dx._gl(r._dx);var f=this._au.Dimension;c._dj(this._au,f);var k=o._aq();var n=true;var s=new Array(o._dp);var m=0;var q=0;var h=0;for(var e=f-1;e>0;e-=2){if(e==6){e--}for(var l=0;l7){throw"bad arguments"}return _dx._dy[a]};function _fg(){this._dj=function(c,d){for(var b=0;b=Math.floor(R/2)){var rLastLast=rLast;var _ga=sLast;var _gb=tLast;rLast=r;sLast=s;tLast=t;if(rLast.Zero){throw"r_{i-1} was zero"}r=rLastLast;var q=this._fa.Zero;var _df=rLast._ex(rLast._ec);var _fy=this._fa.inverse(_df);while(r._ec>=rLast._ec&&!r.Zero){var _fx=r._ec-rLast._ec;var scale=this._fa.multiply(r._ex(r._ec),_fy);q=q._bd(this._fa._ba(_fx,scale));r=r._bd(rLast._dc(_fx,scale))}s=q.multiply1(sLast)._bd(_ga);t=q.multiply1(tLast)._bd(_gb)}var _de=t._ex(0);if(_de==0){throw"ReedSolomonException sigmaTilde(0) was zero"}var inverse=this._fa.inverse(_de);var sigma=t.multiply2(inverse);var omega=r.multiply2(inverse);return new Array(sigma,omega)};this._ey=function(_ez){var _fz=_ez._ec;if(_fz==1){return new Array(_ez._ex(1))}var result=new Array(_fz);var e=0;for(var i=1;i<256&&e<_fz;i++){if(_ez.evaluateAt(i)==0){result[e]=this._fa.inverse(i);e++}}if(e!=_fz){throw"Error locator degree does not match number of roots"}return result};this._di=function(_fs,_dz,_fq){var s=_dz.length;var result=new Array(s);for(var i=0;i1&&e[0]==0){var d=1;while(dn.length){var j=o;o=n;n=j}var h=new Array(n.length);var k=n.length-o.length;for(var m=0;m=l._ec&&!o.Zero){var m=o._ec-l._ec;var h=this._fa.multiply(o._ex(o._ec),n);var i=l._dc(m,h);var k=this._fa._ba(m,h);j=j._bd(k);o=o._bd(i)}return new Array(j,o)}}function _az(b){this._gh=new Array(256);this._gi=new Array(256);var a=1;for(var e=0;e<256;e++){this._gh[e]=a;a<<=1;if(a>=256){a^=b}}for(var e=0;e<255;e++){this._gi[this._gh[e]]=e}var d=new Array(1);d[0]=0;this.zero=new _bp(this,new Array(d));var c=new Array(1);c[0]=1;this.one=new _bp(this,new Array(c));this.__defineGetter__("Zero",function(){return this.zero});this.__defineGetter__("One",function(){return this.one});this._ba=function(j,f){if(j<0){throw"bad arguments"}if(f==0){return zero}var h=new Array(j+1);for(var g=0;gqrcode.maxImgSize){var k=c.width/c.height;f=Math.sqrt(qrcode.maxImgSize/k);l=k*f}i.width=l;i.height=f;h.drawImage(c,0,0,i.width,i.height);qrcode.width=i.width;qrcode.height=i.height;try{qrcode.imagedata=h.getImageData(0,0,i.width,i.height)}catch(m){qrcode.result="Cross domain image reading not supported in your browser! Save it to your computer then drag and drop the file!";if(qrcode.callback!=null){qrcode.callback(qrcode.result)}return}try{qrcode.result=qrcode.process(h)}catch(m){console.log(m);qrcode.result="error decoding QR Code"}if(qrcode.callback!=null){qrcode.callback(qrcode.result)}};c.src=d}};qrcode.isUrl=function(a){var b=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return b.test(a)};qrcode.decode_url=function(b){var d="";try{d=escape(b)}catch(c){console.log(c);d=b}var a="";try{a=decodeURIComponent(d)}catch(c){console.log(c);a=d}return a};qrcode.decode_utf8=function(a){if(qrcode.isUrl(a)){return qrcode.decode_url(a)}else{return a}};qrcode.process=function(r){var a=new Date().getTime();var c=qrcode.grayScaleToBitmap(qrcode.grayscale());if(qrcode.debug){for(var m=0;mf[a][o][1]){f[a][o][1]=h}}}}}var m=new Array(c);for(var b=0;b=0){return a>>b}else{return(a>>b)+(2<<~b)}}Array.prototype.remove=function(c,b){var a=this.slice((b||c)+1||this.length);this.length=c<0?this.length+c:c;return this.push.apply(this,a)};var _gf=3;var _eh=57;var _el=8;var _eg=2;qrcode._er=function(c){function b(l,k){xDiff=l.X-k.X;yDiff=l.Y-k.Y;return Math.sqrt((xDiff*xDiff+yDiff*yDiff))}function d(k,o,n){var m=o.x;var l=o.y;return((n.x-m)*(k.y-l))-((n.y-l)*(k.x-m))}var i=b(c[0],c[1]);var f=b(c[1],c[2]);var e=b(c[0],c[2]);var a,j,h;if(f>=i&&f>=e){j=c[0];a=c[1];h=c[2]}else{if(e>=f&&e>=i){j=c[1];a=c[0];h=c[2]}else{j=c[2];a=c[0];h=c[1]}}if(d(a,j,h)<0){var g=a;a=h;h=g}c[0]=a;c[1]=j;c[2]=h};function _cz(c,a,b){this.x=c;this.y=a;this.count=1;this._aj=b;this.__defineGetter__("_ei",function(){return this._aj});this.__defineGetter__("Count",function(){return this.count});this.__defineGetter__("X",function(){return this.x});this.__defineGetter__("Y",function(){return this.y});this._ek=function(){this.count++};this._ev=function(f,e,d){if(Math.abs(e-this.y)<=f&&Math.abs(d-this.x)<=f){var g=Math.abs(f-this._aj);return g<=1||g/this._aj<=1}return false}}function _es(a){this._go=a[0];this._gu=a[1];this._gr=a[2];this.__defineGetter__("_gp",function(){return this._go});this.__defineGetter__("_gq",function(){return this._gu});this.__defineGetter__("_gs",function(){return this._gr})}function _cc(){this.image=null;this._cv=[];this._ge=false;this._al=new Array(0,0,0,0,0);this._am=null;this.__defineGetter__("_da",function(){this._al[0]=0;this._al[1]=0;this._al[2]=0;this._al[3]=0;this._al[4]=0;return this._al});this._ao=function(f){var b=0;for(var d=0;d<5;d++){var e=f[d];if(e==0){return false}b+=e}if(b<7){return false}var c=Math.floor((b<<_el)/7);var a=Math.floor(c/2);return Math.abs(c-(f[0]<<_el))=0&&c[j+f*qrcode.width]){b[2]++;f--}if(f<0){return NaN}while(f>=0&&!c[j+f*qrcode.width]&&b[1]<=d){b[1]++;f--}if(f<0||b[1]>d){return NaN}while(f>=0&&c[j+f*qrcode.width]&&b[0]<=d){b[0]++;f--}if(b[0]>d){return NaN}f=a+1;while(f=d){return NaN}while(f=d){return NaN}var e=b[0]+b[1]+b[2]+b[3]+b[4];if(5*Math.abs(e-g)>=2*g){return NaN}return this._ao(b)?this._an(b,f):NaN};this._ej=function(b,a,e,h){var d=this.image;var i=qrcode.width;var c=this._da;var g=b;while(g>=0&&d[g+a*qrcode.width]){c[2]++;g--}if(g<0){return NaN}while(g>=0&&!d[g+a*qrcode.width]&&c[1]<=e){c[1]++;g--}if(g<0||c[1]>e){return NaN}while(g>=0&&d[g+a*qrcode.width]&&c[0]<=e){c[0]++;g--}if(c[0]>e){return NaN}g=b+1;while(g=e){return NaN}while(g=e){return NaN}var f=c[0]+c[1]+c[2]+c[3]+c[4];if(5*Math.abs(f-h)>=h){return NaN}return this._ao(c)?this._an(c,g):NaN};this._cu=function(c,f,e){var d=c[0]+c[1]+c[2]+c[3]+c[4];var n=this._an(c,e);var b=this._ap(f,Math.floor(n),c[2],d);if(!isNaN(b)){n=this._ej(Math.floor(n),Math.floor(b),c[2],d);if(!isNaN(n)){var l=d/7;var m=false;var h=this._cv.length;for(var g=0;g3){var b=0;var j=0;for(var d=0;d3;d++){var f=this._cv[d];if(Math.abs(f._ei-a)>c){this._cv.remove(d);d--}}}if(this._cv.length>3){this._cv.sort(function(k,i){if(k.count>i.count){return -1}if(k.count=_eg){if(c==null){c=a}else{this._ge=true;return Math.floor((Math.abs(c.X-a.X)-Math.abs(c.Y-a.Y))/2)}}}return 0};this._cx=function(){var g=0;var c=0;var a=this._cv.length;for(var d=0;d=_eg){g++;c+=f._ei}}if(g<3){return false}var e=c/a;var b=0;for(var d=0;dd[2]){h+=m-d[2]-a;f=k-1}}}else{do{f++}while(f=h){return false}}return true};this._ap=function(h,r,l,o){var k=this.image;var q=qrcode.height;var j=this._al;j[0]=0;j[1]=0;j[2]=0;var n=h;while(n>=0&&k[r+n*qrcode.width]&&j[1]<=l){j[1]++;n--}if(n<0||j[1]>l){return NaN}while(n>=0&&!k[r+n*qrcode.width]&&j[0]<=l){j[0]++;n--}if(j[0]>l){return NaN}n=h+1;while(nl){return NaN}while(nl){return NaN}var m=j[0]+j[1]+j[2];if(5*Math.abs(m-o)>=2*o){return NaN}return this._ao(j)?this._an(j,n):NaN};this._cu=function(l,o,n){var m=l[0]+l[1]+l[2];var u=this._an(l,n);var k=this._ap(o,Math.floor(u),2*l[1],m);if(!isNaN(k)){var t=(l[0]+l[1]+l[2])/3;var r=this._cv.length;for(var q=0;q>1);var m=new Array(0,0,0);for(var k=0;k>1):-((k+1)>>1));m[0]=0;m[1]=0;m[2]=0;var n=q;while(n=10&&a<=26){this.dataLengthMode=1}else{if(a>=27&&a<=40){this.dataLengthMode=2}}}this._gd=function(f){var k=0;if(f>(this._cw-f+1);this._cw-=f;return k}else{if(f>(8-(f-(this._cw+1))));this._cw=this._cw-f%8;if(this._cw<0){this._cw=8+this._cw}return k}else{if(f>(8-(f-(this._cw+1+8)));k=g+d+l;this._cw=this._cw-(f-8)%8;if(this._cw<0){this._cw=8+this._cw}return k}else{return 0}}}};this.NextMode=function(){if((this._ed>this.blocks.length-this._en-2)){return 0}else{return this._gd(4)}};this.getDataLength=function(d){var e=0;while(true){if((d>>e)==1){break}e++}return this._gd(qrcode._eo[this.dataLengthMode][e])};this.getRomanAndFigureString=function(h){var f=h;var g=0;var j="";var d=new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":");do{if(f>1){g=this._gd(11);var i=Math.floor(g/45);var e=g%45;j+=d[i];j+=d[e];f-=2}else{if(f==1){g=this._gd(6);j+=d[g];f-=1}}}while(f>0);return j};this.getFigureString=function(f){var d=f;var e=0;var g="";do{if(d>=3){e=this._gd(10);if(e<100){g+="0"}if(e<10){g+="0"}d-=3}else{if(d==2){e=this._gd(7);if(e<10){g+="0"}d-=2}else{if(d==1){e=this._gd(4);d-=1}}}g+=e}while(d>0);return g};this.get8bitByteArray=function(g){var e=g;var f=0;var d=new Array();do{f=this._gd(8);d.push(f);e--}while(e>0);return d};this.getKanjiString=function(j){var g=j;var i=0;var h="";do{i=_gd(13);var e=i%192;var f=i/192;var k=(f<<8)+e;var d=0;if(k+33088<=40956){d=k+33088}else{d=k+49472}h+=String.fromCharCode(d);g--}while(g>0);return h};this.__defineGetter__("DataByte",function(){var g=new Array();var e=1;var f=2;var d=4;var n=8;do{var k=this.NextMode();if(k==0){if(g.length>0){break}else{throw"Empty data block"}}if(k!=e&&k!=f&&k!=d&&k!=n){throw"Invalid mode: "+k+" in (block:"+this._ed+" bit:"+this._cw+")"}dataLength=this.getDataLength(k);if(dataLength<1){throw"Invalid data length: "+dataLength}switch(k){case e:var l=this.getFigureString(dataLength);var i=new Array(l.length);for(var h=0;hDrag and drop a QRCode here'+ + '
or select a file


'+ + ''+ + ''+ +''; + +var vidhtml = ''; + +function dragenter(e) { + e.stopPropagation(); + e.preventDefault(); +} + +function dragover(e) { + e.stopPropagation(); + e.preventDefault(); +} +function drop(e) { + e.stopPropagation(); + e.preventDefault(); + + var dt = e.dataTransfer; + var files = dt.files; + if(files.length>0) + { + handleFiles(files); + } + else + if(dt.getData('URL')) + { + qrcode.decode(dt.getData('URL')); + } +} + +function handleFiles(f) +{ + var o=[]; + + for(var i =0;i/g, '>').replace(/"/g, '"'); +} + +function read(qrcode_token) +{ + if(workingAway) { + return; + } + + workingAway = true; + + $.ajax({ + type: "POST", + url: Attendize.qrcodeCheckInRoute, + data: {qrcode_token: qrcode_token}, + cache: false, + complete: function(){ + beepSound.play(); + }, + error: function() { + }, + success: function(response) { + document.getElementById("result").innerHTML = "" + response.message +""; + } + }); +} + +function isCanvasSupported(){ + var elem = document.createElement('canvas'); + return !!(elem.getContext && elem.getContext('2d')); +} +function success(stream) { + if(webkit) + v.src = window.webkitURL.createObjectURL(stream); + else + if(moz) + { + v.mozSrcObject = stream; + v.play(); + } + else + v.src = stream; + gUM=true; + setTimeout(captureToCanvas, 500); +} + +function error(error) { + gUM=false; + return; +} + +function load() +{ + if(isCanvasSupported() && window.File && window.FileReader) + { + initCanvas(800, 600); + qrcode.callback = read; + document.getElementById("mainbody").style.display="inline"; + setwebcam(); + } + else + { + document.getElementById("mainbody").style.display="inline"; + document.getElementById("mainbody").innerHTML='

Attendize Checkpoint Manager for HTML5 capable browsers


'+ + '

sorry your browser is not supported



'+ + '

try or or

'; + } +} + +function setwebcam() +{ + document.getElementById("help-text").style.display = "block"; + document.getElementById("result").innerHTML='Scanning   '; + if(stype==1) + { + setTimeout(captureToCanvas, 500); + return; + } + var n=navigator; + document.getElementById("outdiv").innerHTML = vidhtml; + v=document.getElementById("v"); + + if(n.getUserMedia) + n.getUserMedia({video: true, audio: false}, success, error); + else + if(n.webkitGetUserMedia) + { + webkit=true; + n.webkitGetUserMedia({video:true, audio: false}, success, error); + } + else + if(n.mozGetUserMedia) + { + moz=true; + n.mozGetUserMedia({video: true, audio: false}, success, error); + } + + stype=1; + setTimeout(captureToCanvas, 500); +} +function setimg() +{ + document.getElementById("help-text").style.display = "none"; + document.getElementById("result").innerHTML='Waiting for a QRCode  '; + if(stype==2) + return; + document.getElementById("outdiv").innerHTML = imghtml; + document.getElementById("qrimg").style.opacity=1.0; + document.getElementById("webcamimg").style.opacity=0.2; + var qrfile = document.getElementById("qrfile"); + qrfile.addEventListener("dragenter", dragenter, false); + qrfile.addEventListener("dragover", dragover, false); + qrfile.addEventListener("drop", drop, false); + stype=2; +} diff --git a/resources/views/ManageEvent/QrcodeCheckIn.blade.php b/resources/views/ManageEvent/QrcodeCheckIn.blade.php new file mode 100644 index 00000000..7f4bf5eb --- /dev/null +++ b/resources/views/ManageEvent/QrcodeCheckIn.blade.php @@ -0,0 +1,105 @@ + + + + + Attendize QRCode Check In: {{ $event->title }} + + + + + + {!! HTML::style('assets/stylesheet/qrcode-check-in.css') !!} + {!! HTML::script('vendor/jquery/jquery.js') !!} + + + + @include('Shared/Layouts/ViewJavascript') + + + + + + + {!! HTML::script('vendor/qrcode-scan/llqrcode.js') !!} + {!! HTML::script('vendor/qrcode-scan/webqr.js') !!} + + +
+ + +
+ + @if(session()->has('success_message')) +
+
+
+ +
+
+
+ @endif + +
+ + + + + + + + + + +
+ + + + + + + + +
+ + + +
+
+
+
+
+

Put the QR code in front of your Camera

+
+

Scan another ticket

+
+
+
  + +
+
+
+
© Attendize {{ date('Y') }} · All Rights Reserved.
+
+
+ + + + + + diff --git a/resources/views/Shared/Layouts/ViewJavascript.blade.php b/resources/views/Shared/Layouts/ViewJavascript.blade.php new file mode 100644 index 00000000..e69de29b From 9708f601e803f5655ba421214d215d3aa0628f59 Mon Sep 17 00:00:00 2001 From: Honore Hounwanou Date: Wed, 30 Mar 2016 00:57:08 -0400 Subject: [PATCH 2/4] Remove unnecessary code from webqr.js and qrcode template --- .../EventQrcodeCheckInController.php | 7 +- public/vendor/qrcode-scan/webqr.js | 69 +------------------ .../views/ManageEvent/QrcodeCheckIn.blade.php | 10 +-- 3 files changed, 7 insertions(+), 79 deletions(-) diff --git a/app/Http/Controllers/EventQrcodeCheckInController.php b/app/Http/Controllers/EventQrcodeCheckInController.php index 9cf344c9..677dcac2 100644 --- a/app/Http/Controllers/EventQrcodeCheckInController.php +++ b/app/Http/Controllers/EventQrcodeCheckInController.php @@ -60,10 +60,11 @@ class EventQrcodeCheckInController extends Controller ])->first(); if(is_null($attendee)){ - return response()->json(['status' => 'error', 'message' => "Invalid Ticket !"]); + return response()->json(['status' => 'error', 'message' => "Invalid Ticket! Please try again."]); } - $relatedAttendesCount = Attendee::where([ + $relatedAttendesCount = Attendee::where('id', '!=', $attendee->id) + ->where([ 'order_id' => $attendee->order_id, 'has_arrived' => false ])->count(); @@ -79,7 +80,7 @@ class EventQrcodeCheckInController extends Controller if ($attendee->has_arrived) { return response()->json([ 'status' => 'error', - 'message' => 'Warning: This Attendee Has Already Been Checked In at '. $attendee->arrival_time->format('H:i A, F j'). '.' . $appendedText + 'message' => 'Warning: This attendee has already been checked in at '. $attendee->arrival_time->format('H:i A, F j'). '.' . $appendedText ]); } diff --git a/public/vendor/qrcode-scan/webqr.js b/public/vendor/qrcode-scan/webqr.js index 014ece18..0ffba54b 100644 --- a/public/vendor/qrcode-scan/webqr.js +++ b/public/vendor/qrcode-scan/webqr.js @@ -13,59 +13,8 @@ var v=null; var beepSound = new Audio('/mp3/beep.mp3'); -var imghtml='
'+ - '
Drag and drop a QRCode here'+ - '
or select a file


'+ - ''+ - '
'+ -'
'; - var vidhtml = ''; -function dragenter(e) { - e.stopPropagation(); - e.preventDefault(); -} - -function dragover(e) { - e.stopPropagation(); - e.preventDefault(); -} -function drop(e) { - e.stopPropagation(); - e.preventDefault(); - - var dt = e.dataTransfer; - var files = dt.files; - if(files.length>0) - { - handleFiles(files); - } - else - if(dt.getData('URL')) - { - qrcode.decode(dt.getData('URL')); - } -} - -function handleFiles(f) -{ - var o=[]; - - for(var i =0;i - - - - From c87f519375f0d314e77456a86992f1515d8a1adc Mon Sep 17 00:00:00 2001 From: Honore Hounwanou Date: Wed, 30 Mar 2016 01:00:55 -0400 Subject: [PATCH 3/4] Remove unnecessary images and go back to previous cipher --- config/app.php | 2 +- public/assets/images/cam.png | Bin 625 -> 0 bytes public/assets/images/vid.png | Bin 3755 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100755 public/assets/images/cam.png delete mode 100755 public/assets/images/vid.png diff --git a/config/app.php b/config/app.php index fd10da83..5b5980d6 100644 --- a/config/app.php +++ b/config/app.php @@ -69,7 +69,7 @@ return [ | */ 'key' => env('APP_KEY', 'SomeRandomString'), - 'cipher' => 'AES-256-CBC', + 'cipher' => MCRYPT_RIJNDAEL_128, /* |-------------------------------------------------------------------------- | Logging Configuration diff --git a/public/assets/images/cam.png b/public/assets/images/cam.png deleted file mode 100755 index ca28c2b1868422813fc0e5739982321518f6cfd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 625 zcmV-%0*?KOP){1iC>o z0okBrg3t*{CullB+6mH30G*)OAl)Ezg4C|g=yEak0jA=ClRo7ljQw$cK07?0&%v1G zCK$O)1Sf(ML5Iw=5{6;Zn5D$pGRLdLN6U3%i5Jk{CEn-xLU9l^FGMgK0XdCK^TJsyMwGnbDvLeI zH)LfAdIj;OkaS3<3m4}N<}M^o4wtCsDKmRHah{uE&_pmsS!WIEmhRhf3EFlN<(>oR z2c%P%E?}&dlvurhj~8g()m1s^=;9PD>MGE&!+j?*URXkh?P43YWU(XTof9e2c^?%_467(hKcfHHkcXx@`uYmCywcI>EYOEUoKC!N7OOWDw;800009a7bBm0017s z0017s0dCNBJ^%m;O=&|zP*7-ZbZ>KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde00d`2O+f$vv5tKEQIh}w03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(` z>RI+y?e7jKeZ#YO-C1IS54K~#9!q*%*!+dvGQ;Zp%QN2Z_CLDGTUK}wJ-NK%Q@ zL0m#ga0%`pdRp`D4kib3NdWtiqVQsoUSbD>!DmTH0Dy7a-vPKo=OT%`zPknjF|W<{ zkhhW2^n(AmC<)`ZKLGf3*&76E;Nx?9zx)o4zoaxhTn+r@=HnfJKYk<343YD_R0o{b z1)vUK;gGQ{J*G50UjuwtGF&;>vbh+-7ZfF5u6A0Rvd zI8^@qVIVn&EF_^%E^SU3#$|OJss^*uwlcYQ*aQ6?!XE&KwHSo;JDsb^tR!4T#~YK_ z0CMxHXkHat7XtOyowxt(GeWzgH?PfLQBU zXT9vw*`_)Ym~9QQQ6R8TV}*3{Mg;>y{f`o0{TkXND>1p2}kx@u?=@K3c)GH zM%E_OcW9#kE1jX3RSc-rONNcvn_1NDpx#b!hAaoOhOGgevbTDvCiQ-^PU$?GkX`zX zlgr;B&m4|bmSJ-Zq&C$xYdzWt&2lNNREcKg+U9Z1lX3)MyPPd)XIYC8$lc z2bC-pLGEm5v$s3(5&dCFo-&%l1M?u_W%{!j2@{2kZ$OcoS~rPpSvBMr%+#PI-VbB> zN@@B*@(X~MVhfZ_%XLoGblo`gvZdo%*^?cd+K!%1Z?7p$4+I}Uz9aVo#Y$#?ug#rx zMw-oLF~nHEdlF(lTBp<7Gk{N!ej=X69OGz@W-n8g$9fSo-Qpr?>Z%rXK)G z`4I0zG0e!P`bDSuS~;Yz-89iDnD04|rq`6F2at~dju4Ize((IJGt@P0&Y0)UmetP` z=Ctol{{L{LSw7Fj2}sqmrl0r()W1q~dQW^uaf-b18UP%@#w-yTtj)|V#B7jZ024f3 z4LqgkXp6rtWujJjc)_f($>>$m@BjK*n@`vP?z^9pxn|v2xx`~y__B3eG<)^+cL0GY Vt3Sqt9h3k7002ovPDHLkV1mmjBrX5| From 0f1817791161e7af595f412d39a711930a62b6d6 Mon Sep 17 00:00:00 2001 From: Honore Hounwanou Date: Wed, 30 Mar 2016 01:06:58 -0400 Subject: [PATCH 4/4] Use Event ID for double checking --- app/Http/Controllers/EventQrcodeCheckInController.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/EventQrcodeCheckInController.php b/app/Http/Controllers/EventQrcodeCheckInController.php index 677dcac2..d3093b91 100644 --- a/app/Http/Controllers/EventQrcodeCheckInController.php +++ b/app/Http/Controllers/EventQrcodeCheckInController.php @@ -101,7 +101,11 @@ class EventQrcodeCheckInController extends Controller */ public function confirmOrderTickets($event_id, $order_id) { - $updateRowsCount = Attendee::where(['order_id' => $order_id, 'has_arrived' => false]) + $updateRowsCount = Attendee::where([ + 'event_id' => $event_id, + 'order_id' => $order_id, + 'has_arrived' => false + ]) ->update(['has_arrived' => true, 'arrival_time' => Carbon::now()]); session()->flash('success_message', $updateRowsCount . ' other tickets checked in.');
- - - -
@@ -79,7 +71,7 @@
-

Put the QR code in front of your Camera

+

Put the QR code in front of your Camera (Not too close)