src/ApplicationBundle/Modules/HoneybeeWeb/Resources/views/pages/views/verify_otp_honeybee.html.twig line 1

Open in your IDE?
  1. {# {% include '@Application/inc/buddybee_new_header.html.twig' %} #}
  2. {% include '@Application/inc/central_header.html.twig' %}
  3. <style>
  4.     .email-input{
  5.         position: relative;
  6.     }
  7.     .otp_in{  }
  8.     /* Chrome, Safari, Edge, Opera */
  9.     input::-webkit-outer-spin-button,
  10.     input::-webkit-inner-spin-button {
  11.         -webkit-appearance: none;
  12.         margin: 0;
  13.     }
  14.     /* Firefox */
  15.     input[type=number] {
  16.         -moz-appearance: textfield;
  17.     }
  18. </style>
  19. {# honeybee otp verrify form section #}
  20. <section class="verification-code-page section"> 
  21.     <div class="container d-flex justify-content-center align-items-center">
  22.         <div class="card text-center login-inputs">
  23.             <h2 class="section-title">We've sent you a code to your email address </h2>
  24.             <p style="margin: 0; text-align: center; color: #eb9f9f;">{{ message==''?'':message }}</p>
  25.             <p>Please check your email and enter the code from there.</p>
  26.             {# form #}
  27.             <form action="" id="relevantForm" method="post"> 
  28.                 <div class="email-input d-flex justify-content-center " id="code-input">
  29.                     {# otp digit 1 #}
  30.                     <input type="number" id="otp_in_1" name="otp_in_1" placeholder="" maxlength="1" data-prev-id="_NONE_" data-next-id="2"  class="code-box mx-1 otp_in otp_in_1" required>
  31.                     {# otp digit 2 #}
  32.                     <input type="number" id="otp_in_2" name="otp_in_2" placeholder="" maxlength="1" data-prev-id="1"      data-next-id="3"  class="code-box mx-1 otp_in otp_in_2" required>
  33.                     {# otp digit 3 #}
  34.                     <input type="number" id="otp_in_3" name="otp_in_3" placeholder="" maxlength="1" data-prev-id="2"      data-next-id="4"  class="code-box mx-1 otp_in otp_in_3" required>
  35.                     {# otp digit 4 #}
  36.                     <input type="number" id="otp_in_4" name="otp_in_4" placeholder="" maxlength="1" data-prev-id="3"      data-next-id="_NONE_"  class="code-box mx-1 otp_in otp_in_4" required>
  37.                     <input type="hidden" id="otp" name="otp" placeholder="otp" maxlength="4" class="input_field" required>
  38.                     <div class="eye-onoff d-none">
  39.                         <i class="fas fa-times small_error_icon email"></i>
  40.                     </div>
  41.                     {# error message #}
  42.                     <p class="small_error_text email"></p>
  43.                 </div>
  44.                 
  45.                 
  46.                 <h6 class='mt-5' style="margin: 10px 0 10px;color: #615A5A;font-size:12px;text-align: center;"><span id="otpExpireTextPrefix">The OTP will expire</span> <span style="" id="otpExpireText" 
  47.                         class="time convert_to_moment_time" data-moment-ts-format="_today_or_date_"
  48.                         data-moment-ts="{{ otpExpireTs }}"></span> <a class="resend_otp_button" style="display: inline-block;" href="#"> Resend OTP</a>
  49.                 </h6>
  50.                 <button type="submit" class="honeybtn rel_form_submit mt-4">Confirm</button>
  51.             </form>
  52.             
  53.             <p class="mt-3"><small>Not you? </small><a href="{{ url('central_landing') }}" >Login with another account?</a></p>
  54.         </div>
  55.     </div>
  56. </section>
  57. {% include '@HoneybeeWeb/footer/central_footer.html.twig' %}
  58. {# {% include '@Application/footer/buddybee_new_footer.html.twig' %} #}
  59. <script type="text/javascript" src="{{ absolute_url(path('dashboard')) }}js/onscan.min.js"></script>
  60. {#<script type="text/javascript" src="{{ absolute_url(path('dashboard')) }}buddybee_assets/js/detect_autofill.js"></script>#}
  61. <script>
  62.     var fbt='';
  63.     var cndDwnInterval='';
  64.     $(document).ready(function () {
  65.         function ConvertToMomentTimeOtpExpire(elem) {
  66.             elem=elem||$('#otpExpireText');
  67.             var moment_time = moment.unix($(elem).attr('data-moment-ts'));
  68.             //    console.log($(elem).attr('data-moment-ts'));
  69.             $('#otpExpireTextPrefix').text('This OTP will Expire');
  70.             var format = $(elem).attr('data-moment-ts-format');
  71.             var toReplaceStr = '';
  72.             if ($(elem).attr('data-moment-ts') <= 0) {
  73.                 clearInterval(cndDwnInterval);
  74.                 toReplaceStr = ''
  75.             }
  76.             else {
  77.                 if (format == '_today_or_date_') {
  78.         //      toReplaceStr = moment_time.fromNow()
  79.                     if (moment() > moment_time) {
  80.         //      alert('here')
  81.                         $('#otpExpireTextPrefix').text('The OTP has Expired');
  82.                         toReplaceStr = ''
  83.                         clearInterval(cndDwnInterval);
  84.                     }
  85.                     else {
  86.                         toReplaceStr = moment_time.fromNow()
  87.                     }
  88.                 }
  89.                 else {
  90.                     toReplaceStr = moment_time.format(format)
  91.                 }
  92.             }
  93.             $(elem).text(toReplaceStr)
  94.         }
  95.         function resendOtp(options){
  96.             options=options||{
  97.                         {#userId:{{ session[UserConstants.USER_ID] is defined?session[UserConstants.USER_ID]:'0' }},#}
  98.                         userId:{{ session[UserConstants.USER_ID] is defined?session[UserConstants.USER_ID]:(userId is defined?userId:'0') }},
  99.                         userType:{{ session[UserConstants.USER_TYPE] is defined?session[UserConstants.USER_TYPE]:(userType is defined?userType:'0') }},
  100.                         userCategory:'{{ userCategory is defined?userCategory:'_BUDDYBEE_USER_' }}',
  101.                         otpActionId:'{{ otpActionId is defined?otpActionId:1 }}',
  102.                         otpExpireSecond:180,
  103.                         email:'{{ email is defined?email:'_NONE_' }}',
  104.                     }
  105.             $.post('{{ url('send_otp_ajax') }}', options)
  106.                     .done(function (data) {
  107.             //                        //    console.log(data);
  108.                         if (data.success == true) {
  109.                             $('#otpExpireText').attr('data-moment-ts',data.otpExpireTs);
  110.                             reset_otp()
  111.                             clearInterval(cndDwnInterval);
  112.                             cndDwnInterval = setInterval(ConvertToMomentTimeOtpExpire, 1000);
  113.                         } else {
  114.             //                            $('#barcode_selector_cont').waitMe('hide');
  115.                         }
  116.                     })
  117.                     .fail(function () {
  118.             //                        $('#barcode_selector_cont').waitMe('hide');
  119.                     });
  120.         }
  121.             //        cndDwnInterval = setInterval(ConvertToMomentTimeOtpExpire($('#otpExpireText')), 1000);
  122.         function paste_otp(curr_number){
  123.             $('.otp_in_1').val(Math.floor(curr_number/1000));curr_number=curr_number%1000;
  124.             $('.otp_in_2').val(Math.floor(curr_number/100));curr_number=curr_number%100;
  125.             $('.otp_in_3').val(Math.floor(curr_number/10));curr_number=curr_number%10;
  126.             $('.otp_in_4').val(Math.floor(curr_number/1));curr_number=curr_number%1;
  127.             update_otp_field()
  128.         }
  129.         function reset_otp(){
  130.             $('.otp_in_1').val('').focus();
  131.             $('.otp_in_2').val('');
  132.             $('.otp_in_3').val('');
  133.             $('.otp_in_4').val('');
  134.         }
  135.         function update_otp_field(){
  136.             $('#otp').val(
  137.                     1000*($('.otp_in_1').val())+
  138.                     100*($('.otp_in_2').val())+
  139.                     10*($('.otp_in_3').val())+
  140.                     1*($('.otp_in_4').val())
  141.             )
  142.             check_doc_and_submit(0); //check only not submit
  143.         }
  144. //        $('.otp_in').keydown(function(event){
  145. ////            alert('keydown')
  146. //            alert($(this).val())
  147. //SS
  148. //
  149. //
  150. //
  151. //        })
  152. //        $('.otp_in').keydown(function(event){
  153. ////            alert('blur')
  154. ////            alert($(this).val())
  155. //            if(1*$(this).val()>=1000) {
  156. //                alert($(this).val())
  157. //                paste_otp(1 * $(this).val())
  158. //
  159. //            }
  160. //
  161. //
  162. //
  163. //
  164. //        })
  165.         $('.otp_in_1').keydown(function(event){
  166. //            $('#enter_otp_title').text(
  167. //                    '_'+$(this).val()+'_'
  168. //            )
  169.             if($(this).val().length>=4)
  170.             paste_otp($(this).val())
  171.         })
  172. //        document.addEventListener('onautocomplete', function(e) {
  173. //            e.target.hasAttribute('autocompleted'); // true or false
  174. ////            alert(event.target.value)
  175. //            paste_otp(event.target.value)
  176. ////            e.preventDefault(); // prevent autocomplete
  177. //            // do you stuff...
  178. //        })
  179.         $('.otp_in').keyup(function(event){
  180.             var prev_data_id=$(this).data('prevId')
  181.             var next_data_id=$(this).data('nextId')
  182.            // alert(event.keyCode)
  183.             if ( event.which == 13 ) {
  184.                 event.preventDefault();
  185.             }
  186.             else if ( event.which == 8 ) {
  187.                 event.preventDefault();
  188.                 $(this).val('');
  189.                 if(prev_data_id!='_NONE_')
  190.                     $('.otp_in_'+prev_data_id).focus();
  191. //                $('.otp_in_'+prev_data_id).val('').focus();
  192.             }
  193.             else if ( event.which == 39 ) {
  194.                 event.preventDefault();
  195.                 if (next_data_id != '_NONE_') {
  196.                     $('.otp_in_' + next_data_id).focus();
  197.                 }
  198.             }
  199.             else if ( event.which == 37 ) {
  200.                 event.preventDefault();
  201.                 if(prev_data_id!='_NONE_')
  202.                     $('.otp_in_'+prev_data_id).focus();
  203.             }
  204.             else
  205.             {
  206.                 if(event.key >=0 && event.key<=9 ) {
  207. //                    alert(event.which)
  208. //                    alert(event.key)
  209. //                    alert(String.fromCharCode(event.which))
  210. //                    $(this).val(String.fromCharCode(event.which));
  211.                     $(this).val(event.key);
  212.                     if (next_data_id != '_NONE_') {
  213.                         $('.otp_in_' + next_data_id).focus();
  214.                     }
  215.                 }
  216. //                alert($(this).val())
  217. //                alert(isNaN($(this).val()))
  218.              if( isNaN($(this).val()))
  219.                  $(this).val('');
  220.             }
  221.             update_otp_field()
  222.         })
  223.         function attach_onscan() {
  224. //            alert('pika')
  225.             onScan.attachTo(document, {
  226.                 singleScanQty: 1,
  227.                 minLength:4,
  228.                 suffixKeyCodes: [13], // enter-key expected at the end of a scan
  229.                 reactToPaste: true, // Compatibility to built-in scanners in paste-mode (as opposed to keyboard-mode)
  230.                 onScan: function (sCode, iQty) { // Alternative to document.addEventListener('scan')
  231. //                    //    console.log('Scanned: ' + iQty + 'x ' + sCode);
  232. //
  233. //                    var foundIds = [];
  234. //
  235. ////                //    console.log('PIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
  236. //                    //    console.log(sCode);
  237. //                    lastScanCrossMatched = 1;
  238.                     if (!isNaN(sCode)) {
  239.                         paste_otp(sCode)
  240.                     }
  241. ////                dynamic_product_selector.focus();
  242. //                //    console.log(dynamic_product_selector.currentResults.items);
  243. ////                dynamic_product_selector.setValue(dynamic_product_selector.currentResults.items[0].id);
  244. //                if(dynamic_product_selector.currentResults.items.length>=1) {
  245. ////                    alert(dynamic_product_selector.currentResults.items.length+','+dynamic_product_selector.currentResults.items[0].id)
  246. //                    dynamic_product_selector.setValue(dynamic_product_selector.currentResults.items[0].id);
  247. //                    ////    console.log(this.currentResults.items.length);
  248. //
  249. //                    dynamic_product_selector.focus();
  250. //                }
  251.                 },
  252. //            onKeyDetect: function(iKeyCode){ // output all potentially relevant key events - great for debugging!
  253. //                //    console.log('Pressed: ' + iKeyCode);
  254. //            }
  255.             });
  256.         }
  257.         function detach_onscan() {
  258.             onScan.detachFrom(document);
  259.         }
  260. //        $('#deliveryInfoModal').on('hidden.bs.modal', function (e) {
  261. //            attach_onscan();
  262. //        })
  263. //        $('#deliveryInfoModal').on('shown.bs.modal', function (e) {
  264. //            detach_onscan();
  265. //        })
  266.         attach_onscan();
  267.         $('.otp_in_'+1).focus();
  268.         $('.resend_otp_button').click(function(e){
  269.             e.preventDefault();
  270.            {# console.log("resend clicked")   #}
  271.             resendOtp();
  272.         })
  273.         $('.login-inputs input').focus(function () {
  274. //            if()
  275. //            $('.login-inputs input').removeClass('error_class');
  276.             $(this).removeClass('error_class');
  277.         })
  278.         $('.login-inputs input').change(function () {
  279. //            if()
  280. //            $('.login-inputs input').removeClass('error_class');
  281.             if($(this).hasClass('checkIfExists'))
  282.             {
  283.                 check_field_validity($(this).attr('data-field-type'))
  284.             }
  285.             check_doc_and_submit(0); //check only not submit
  286.         })
  287.         function  check_field_validity(fieldType)
  288.         {
  289.             fieldType = fieldType || 'email';
  290.             $('.small_error_text.' + fieldType).text('')
  291.             $('.small_error_text.' + fieldType).hide()
  292.             $('.small_error_icon.' + fieldType).removeClass('success').removeClass('error');
  293.             $('.small_error_icon.' + fieldType).removeClass('fa-check').removeClass('fa-times');
  294.             $('.small_error_icon.' + fieldType).addClass('fa-spinner');
  295.             $('.small_error_icon.' + fieldType).show()
  296. //            $.post( "example.php", function() {
  297. //                        alert( "success" );
  298. //                    })
  299. //                    .done(function() {
  300. //                        alert( "second success" );
  301. //                    })
  302. //                    .fail(function() {
  303. //                        alert( "error" );
  304. //                    })
  305. //                    .always(function() {
  306. //                        alert( "finished" );
  307. //                    });
  308.             //{#//    console.log({#}
  309.             //{# fieldType: fieldType,#}
  310.             //{#fieldValue: $('.input_field.' + fieldType).val(),#}
  311.             //{#signUpUserType: {{ signUpUserType }},#}
  312.             //{#}) #}
  313.             if(fieldType=='password')
  314.             {
  315. //                if($('#password2').val()=='')
  316. //                        return;
  317.                 if($('#password').val()!==$('#password2').val())
  318.                     //                if(0)
  319.                 {
  320.                     $('.small_error_text.' + fieldType).text('Passwords do not Match')
  321.                     $('.small_error_text.' + fieldType).show()
  322.                     $('.small_error_icon.' + fieldType).removeClass('fa-spinner').removeClass('success');
  323.                     $('.small_error_icon.' + fieldType).addClass('fa-times').addClass('error');
  324.                     $('.small_error_icon.' + fieldType).show()
  325.                 }
  326.                 else {
  327.                     $('.small_error_text.' + fieldType).text('')
  328.                     $('.small_error_text.' + fieldType).hide()
  329.                     $('.small_error_icon.' + fieldType).removeClass('fa-spinner').removeClass('error');
  330.                     $('.small_error_icon.' + fieldType).addClass('fa-check').addClass('success');
  331.                     $('.small_error_icon.' + fieldType).show()
  332.                 }
  333.                 return;
  334.             }
  335.             $.post('{{ url('check_if_email_exists_already') }}', {
  336.                         fieldType: fieldType,
  337.                         fieldValue: $('.input_field.' + fieldType).val(),
  338.                         signUpUserType: {{ userType }},
  339.                     })
  340.                     .done(function (data) {
  341.                                 //sales.clearItemTable()
  342.                                 fieldType=data.fieldType;
  343.                                 if (data.alreadyExists != true) {
  344.                                     $('.small_error_text.' + fieldType).text('Couldnot find your email')
  345.                                     $('.small_error_text.' + fieldType).show()
  346.                                     $('.small_error_icon.' + fieldType).removeClass('fa-spinner').removeClass('success');
  347.                                     $('.small_error_icon.' + fieldType).addClass('fa-times').addClass('error');
  348.                                     $('.small_error_icon.' + fieldType).show()
  349.                                 }
  350.                                 else {
  351.                                     $('.small_error_text.' + fieldType).text('')
  352.                                     $('.small_error_text.' + fieldType).hide()
  353.                                     $('.small_error_icon.' + fieldType).removeClass('fa-spinner').removeClass('error');
  354.                                     $('.small_error_icon.' + fieldType).addClass('fa-check').addClass('success');
  355.                                     $('.small_error_icon.' + fieldType).show()
  356.                                 }
  357.                             }
  358.                     );
  359.         }
  360.         function check_doc_and_submit(submitFlag) {
  361.             var checkFailed = 0;
  362.             submitFlag=submitFlag||0
  363.             ///check if any checking needed here
  364.             $('.login-inputs input').each(function(ind,elem){
  365.                 if($(this).prop('required')){
  366.                     if($(this).val()=='' )
  367.                         checkFailed=1;
  368.                     //    console.log("REQ");
  369.                 } else {
  370.                    //    console.log("NREQ");
  371.                 }
  372.             });
  373.             $('.small_error_text').each(function(ind,elem)
  374.             {
  375.                 if($(elem).text()!='')
  376.                     checkFailed=1;
  377.             })
  378.             $('.small_error_text').each(function(ind,elem)
  379.             {
  380.                 if($(elem).text()!='')
  381.                     checkFailed=1;
  382.             })
  383.             if(checkFailed==0)
  384.                 $('.rel_form_submit').addClass('ready');
  385.             else
  386.             {
  387.                 $('.rel_form_submit').removeClass('ready');
  388.             }
  389.             if (checkFailed == 0 && submitFlag==1) {
  390.                 $('.rel_form_submit').removeClass('ready');
  391.                 $('.rel_form_submit').hide();
  392.                 $('#relevantForm').submit();
  393.             }
  394.         }
  395.         //For save action
  396.         $('input[type="submit"], button[type="submit"], .rel_form_submit').click(function (event) {
  397.             event.preventDefault();
  398.             check_doc_and_submit(1);
  399.         })
  400.         $('.convert_to_moment_time').each(function (ind, elem) {
  401.             ConvertToMomentTimeOtpExpire(elem);
  402.         });
  403.         cndDwnInterval = setInterval(ConvertToMomentTimeOtpExpire, 1000);
  404.         check_doc_and_submit(0)
  405.     })
  406. </script>