×
New project by Yuriy Vdovytchenko (01 март 2017)

ITCOD WEB DESKTOP - следующий этап развития проекта ITCOD.

Как подключить recaptcha 2.0

Больше
9 мес. 3 нед. назад - 9 мес. 3 нед. назад #1 от Aleksej
Топик является продолжением статьи Как подключить recaptcha 2.0. jTriad contact form и показывает git show, иллюстрирующий процесс подключения recaptcha 2.0 для модуля jTriad Contact form. Приятного всем чтения!


Reinit recaptcha all time when error happened instead of ask user about it

diff --git a/assets/js/script.js b/assets/js/script.js
index 4003cc1..ae97480 100644
--- a/assets/js/script.js
+++ b/assets/js/script.js
@@ -16,27 +16,29 @@ jQuery(document).ready(function(){
         })
 
        jQuery('#contact-form').submit(function(e){
-                       if(use_ajax){
-                               jQuery('#loading').css('visibility','visible');
-                               jQuery.post(
-                                       window.location
-                                       ,jQuery(this).serialize() + '&ajax=1',
-                                       function(data){
-                                               if(data.Error){
-                                                       jQuery('#errorMessage').html(data.Data.strErr);
-                                                       jQuery('#errorMessage').slideDown();
-                                                       if (data.Data.err[7])
-                                                               jQuery.validationEngine.buildPrompt('#recaptcha_response_field', '* Неправильное значение! На
-                                               }
-                                               else{
-                                                       jQuery('#contact-form').hide('slow').after('<h1>Спасибо!</h1>');
-                                               }
+               if(use_ajax){
+                       jQuery('#loading').css('visibility','visible');
+                       jQuery.post(
+                               window.location
+                               ,jQuery(this).serialize() + '&ajax=1',
+                               function(data){
+                                       if(data.Error){
+                                               jQuery('#errorMessage').html(data.Data.strErr);
+                                               jQuery('#errorMessage').slideDown();
 
-                                               jQuery('#loading').css('visibility','hidden');
+                                               /* Always reinit recaptcha element to update code and check */
+                                               jQuery('#dynamic_recaptcha_1').replaceWith(data.recaptchaHTML);
+                                               window.JoomlaInitReCaptcha2();
                                        }
-                                       ,'json'
-                               );
-                       }
-                       e.preventDefault();
+                                       else{
+                                               jQuery('#contact-form').hide('slow').after('<h1>Спасибо!</h1>');
+                                       }
+
+                                       jQuery('#loading').css('visibility','hidden');
+                               }
+                               ,'json'
+                       );
+               }
+               e.preventDefault();
        })
 });
diff --git a/helper.php b/helper.php
index 61ecca4..9aae245 100644
--- a/helper.php
+++ b/helper.php
@@ -9,6 +9,8 @@
 
 defined('_JEXEC') or die;
 
+JPluginHelper::importPlugin('captcha');
+
 /**
  * Helper for mod_contactform_masterpro
  *
@@ -36,9 +38,7 @@ class ModContactformMasterpro{
                if(!self::checkLen($input->getString('message')))
                        $err[6] = '6) Сообщение должно быть заполнено!';
 
-               JPluginHelper::importPlugin('captcha');
-               $dispatcher = JDispatcher::getInstance();
-               $res = $dispatcher->trigger('onCheckAnswer', $input->get('recaptcha_response_field'));
+               $res = JDispatcher::getInstance()->trigger('onCheckAnswer', $input->get('recaptcha_response_field'));
                if(!(isset($res[0]) and $res[0])){
                        $err[7] = '7) Не корректный код подтверждения!';
                }
@@ -109,13 +109,16 @@ IP:       ' . $input->server->get('REMOTE_ADDR') . '<br /><br />
        * @param $data Will be put in session var state and returned in json Data field
        **/
        public static function processAnswer($isAjax, $status, $data){
+               $recaptcha = JDispatcher::getInstance()->trigger('onDisplay', array(null, 'dynamic_recaptcha_1', 'class=""'));
+               $recaptchaHTML = isset($recaptcha[0]) ? $recaptcha[0] : '';
+
                if($isAjax){
-                       exit(json_encode(array('Error' => $status, 'Data' => $data)));
+                       exit(json_encode(array('Error' => $status, 'Data' => $data, 'recaptchaHTML' => $recaptchaHTML)));
+               }
+               else if($input->server->getString('HTTP_REFERER')){
+                       $session->set('state', $data, SESSION_NAMESPACE);
+                       header('Location: ' . $input->server->getString('HTTP_REFERER'));
                }
-//             else if($input->server->getString('HTTP_REFERER')){
-//                     $session->set('state', $data, SESSION_NAMESPACE);
-//                     header('Location: ' . $input->server->getString('HTTP_REFERER'));
-//             }
 
                exit();
        }
diff --git a/tmpl/default.php b/tmpl/default.php
index 0209eff..d8d37ce 100644
--- a/tmpl/default.php
+++ b/tmpl/default.php
@@ -12,7 +12,7 @@ $session->clear('email', SESSION_NAMESPACE);
 
 $oldData = $session->get('postTwergewrtgert', '', SESSION_NAMESPACE);
 ?>
-<?=$css?>
+<?=@$css?>
 
 <div id="main-container">
 
@@ -21,7 +21,7 @@ $oldData = $session->get('postTwergewrtgert', '', SESSION_NAMESPACE);
                <table width="100%" border="0" cellspacing="0" cellpadding="5">
                        <tr>
                                <td width="15%"><label for="name">ФИО</label></td>
-                               <td width="70%"><input type="text" class="validate[required,custom[onlyLetter]]" name="name" id="name" value="<?=htmlentities
+                               <td width="70%"><input type="text" class="validate[required,custom[onlyLetter]]" name="name" id="name" value="<?=htmlentities
                                <td width="15%" id="errOffset">&nbsp;</td>
                        </tr>
                        <tr>
@@ -40,7 +40,7 @@ $oldData = $session->get('postTwergewrtgert', '', SESSION_NAMESPACE);
                        </tr>
                        <tr>
                                <td><label for="phone">Телефон</label></td>
-                               <td><input type="text" class="validate[required,custom[telephone]]" name="phone" id="phone" value="<?=htmlentities($oldData['
+                               <td><input type="text" class="validate[required,custom[telephone]]" name="phone" id="phone" value="<?=htmlentities(@$oldData[
                                <td>&nbsp;</td>
                        <tr>
                                <td><label for="vacancy">Вакансия</label></td>
@@ -58,17 +58,20 @@ $oldData = $session->get('postTwergewrtgert', '', SESSION_NAMESPACE);
                        </tr>
                        <tr>
                                <td valign="top"><label for="message">Опыт работы</label></td>
-                               <td><textarea name="message" id="message" class="validate[required]" cols="30" rows="7"><?=htmlentities($oldData['message'], 
+                               <td><textarea name="message" id="message" class="validate[required]" cols="30" rows="7"><?=htmlentities(@$oldData['message'],
                                <td valign="top">&nbsp;</td>
                        </tr>
                        <tr>
                                <td valign="top"><label for="message1">Дополнительно</label></td>
-                               <td><textarea name="message1" id="message1" cols="30" rows="7"><?=htmlentities($oldData['message1'], ENT_QUOTES, "UTF-8")?></
+                               <td><textarea name="message1" id="message1" cols="30" rows="7"><?=htmlentities(@$oldData['message1'], ENT_QUOTES, "UTF-8")?><
                                <td valign="top">&nbsp;</td>
                        </tr>
                        <tr>
-                               <td colspan="3"><? 
-    $recaptcha = $dispatcher->trigger('onDisplay', array(null, 'dynamic_recaptcha_1', 'class=""')); echo (isset($recaptcha[0])) ? $recaptcha[0] : ''; ?></td
+                               <td colspan="3"><?
+                                       $recaptcha = $dispatcher->trigger('onDisplay', array(null, 'dynamic_recaptcha_1', 'class=""'));
+                                       echo (isset($recaptcha[0])) ? $recaptcha[0] : '';
+                               ?>
+                               </td>
                        </tr>
                        <tr>
                                <td valign="top">&nbsp;</td>
(END)
Последнее редактирование: 9 мес. 3 нед. назад от Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.