Search code examples
phpjoomlarecaptchajoomla-k2

Install reCaptcha using php plugin in joomla K2


I was trying to implement reCaptcha on K2 frontend submition form. I'v downloaded PHP library, installed it and could succesfully display capcha image in submition form, but the last step is confusing me. I need to put that code to form action php file:

<?php
  require_once(JPATH_SITE.'/libraries/recaptcha/recaptchalib.php');
  $privatekey = "MY PRIVATE KEY";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
    alert(0);
  }
  ?>

The problem is that action file just happens to be index.php for some reason. If i just put that piece of code there, main page stops loading with the warning that I misspeld Captcha key. I'll post my K2frontend php file below, hope u can help me cause it's critical feature to me.

<?php
defined('_JEXEC') or die('Restricted access');

$document = & JFactory::getDocument();
$document->addScriptDeclaration("
    Joomla.submitbutton = function(pressbutton){
        if (pressbutton == 'cancel') {
            submitform( pressbutton );
            return;
        }
        if (\$K2.trim(\$K2('#title').val()) == '') {
            alert( '".JText::_('K2_ITEM_MUST_HAVE_A_TITLE', true)."' );
        }
        else if (\$K2.trim(\$K2('#catid').val()) == '0') {
            alert( '".JText::_('K2_PLEASE_SELECT_A_CATEGORY', true)."' );
        }
        else {
            syncExtraFieldsEditor();
            \$K2('#selectedTags option').attr('selected', 'selected');
            submitform( pressbutton );
        }
    }
");

?>
<div id="overallholderarticle" style="overflow:hidden;">

<form action="index.php" enctype="multipart/form-data" method="post" name="adminForm" id="adminForm">
    <?php if($this->mainframe->isSite()): ?>
    <div id="k2FrontendContainer">
        <div id="k2Frontend" style="background: url('<?php echo JURI::base(); ?>templates/<?php echo $template; ?>/images/bg_windows_bright_noise.png');">
            <div id="k2FrontendEditToolbar">
                <div class="titenewseditor">
                    <?php echo (JRequest::getInt('cid')) ? JText::_('K2_EDIT_ITEM') : JText::_('Добавить новость'); ?>
                </div>
            </div>
            <div class="clr"></div>
            <?php if(!$this->permissions->get('publish')): ?>
            <div id="k2FrontendPermissionsNotice">
                <p><?php echo JText::_('K2_FRONTEND_PERMISSIONS_NOTICE'); ?></p>
            </div>
            <?php endif; ?>
            <?php endif; ?>
            <div id="k2ToggleSidebarContainer"> <a href="#" id="k2ToggleSidebar"><?php echo JText::_('K2_TOGGLE_SIDEBAR'); ?></a> </div>
            <table cellspacing="0" cellpadding="0" border="0" class="adminFormK2Container">
                <tbody>
                    <tr>
                        <td>
                            <table class="adminFormK2">
                                <tr>
                                    <td class="adminK2LeftCol">
                                        <label for="title"><?php echo JText::_('K2_TITLE'); ?></label>
..........................
.........CODE HERE........
..........................

            </table>
            <div class="clr"></div>
            <?php if($this->mainframe->isSite()): ?>
        </div>
    </div>
    <!--BOTTOM ACTION BUTTONS-->
    <div id="k2Frontend">
        <!--reCAPCHA-->
        <?php
        require_once(JPATH_SITE.'/libraries/recaptcha/recaptchalib.php');
        $publickey = "MY PUBLIC KEY";
        echo recaptcha_get_html($publickey);
        ?>
            <table class="k2FrontendToolbar" cellpadding="2" cellspacing="4">
                <tr>
                    <td id="toolbar-save" class="button">
                        <a class="toolbar" href="#" onclick="javascript: submitbutton('save'); return false;"> <span title="<?php echo JText::_('K2_SAVE'); ?>" class="icon-32-save"></span> <?php echo JText::_('K2_SAVE'); ?> </a>
                    </td>
                    <td id="toolbar-cancel" class="button"> 
<a class="toolbar" href="#" onclick="javascript:history.go(-1)"> <span title="<?php echo JText::_('K2_CANCEL'); ?>" class="icon-32-cancel"></span> <?php echo JText::_('K2_CLOSE'); ?> </a> 
</td> 
                </tr>
            </table>
    </div>
    <?php endif; ?>
</form>
</div>

Solution

  • If you are working in Admin section You can validate captcha in save function of item controller . In this file administrator/components/com_k2/controllers/item.php check for below function and add the code.

    function save() {
     JRequest::checkToken() or jexit('Invalid Token');
     //add library and captcha validation code here
     $model = & $this->getModel('item');
     $model->save();
    }
    

    It's better to check or try for plugin.

    Hope this will be helpful too-

    1) How to use joomla recaptcha plugin to my custom Module

    2) Using ReCaptcha with my custom form in Joomla