This forum has moved to a new location and is in read-only mode. Please visit talk.octobercms.com to access the new location.

marmelflo8253
marmelflo8253

Hello, I want to build a function in the code section of my page where I can validate the "Google recaptcha". I know that there is a plugin already for captcha, but I want to have my own code, also for learning. I cannot define a class for an object in the code section. So how and where would I define a class, if I don't want to build a plugin or component? I just want to create an object in the code section out of the class. Is this possible?

Or let me ask different: When I define a class in my component and link this component to my page, how can I create an object in the code section of the page like:

function onStart()
{
$object = new myclass();
}

Thank You!

Last updated

FelixINX
FelixINX

Hi,

Why would you like to create an object? Why not just inclued it in your components, or plugins classes?

marmelflo8253
marmelflo8253

In the example of the recaptcha, the a object is created of a class (given by the google dev). The object should be created in the function onSend(), so that the after submitting a contact form, the secret key from a variable is given to the object and it verifies the key. How would you suggest? Should I drop the class and write the functions of the class in the code section of the page to verify my key? As you realize I am no PHP and no Laravel expert. But I want to get better in programming and I like the idea about Laravel and I like October CMS as a clean CMS. But it is difficult for me to transfer simple php logic to the logic of October. Thank You in advance:)

class ReCaptchaResponse
{
    public $success;
    public $errorCodes;
}
class ReCaptcha
{
    private static $_signupUrl = "https://www.google.com/recaptcha/admin";
    private static $_siteVerifyUrl =
        "https://www.google.com/recaptcha/api/siteverify?";
    private $_secret;
    private static $_version = "php_1.0";
    /**
     * Constructor.
     *
     * @param string $secret shared secret between site and ReCAPTCHA server.
     */
    function ReCaptcha($secret)
    {
        if ($secret == null || $secret == "") {
            die("To use reCAPTCHA you must get an API key from <a href='"
                . self::$_signupUrl . "'>" . self::$_signupUrl . "</a>");
        }
        $this->_secret=$secret;
    }
    /**
     * Encodes the given data into a query string format.
     *
     * @param array $data array of string elements to be encoded.
     *
     * @return string - encoded request.
     */
    private function _encodeQS($data)
    {
        $req = "";
        foreach ($data as $key => $value) {
            $req .= $key . '=' . urlencode(stripslashes($value)) . '&';
        }
        // Cut the last '&'
        $req=substr($req, 0, strlen($req)-1);
        return $req;
    }
    /**
     * Submits an HTTP GET to a reCAPTCHA server.
     *
     * @param string $path url path to recaptcha server.
     * @param array  $data array of parameters to be sent.
     *
     * @return array response
     */
    private function _submitHTTPGet($path, $data)
    {
        $req = $this->_encodeQS($data);
        $response = file_get_contents($path . $req);
        return $response;
    }
    /**
     * Calls the reCAPTCHA siteverify API to verify whether the user passes
     * CAPTCHA test.
     *
     * @param string $remoteIp   IP address of end user.
     * @param string $response   response string from recaptcha verification.
     *
     * @return ReCaptchaResponse
     */
    public function verifyResponse($remoteIp, $response)
    {
        // Discard empty solution submissions
        if ($response == null || strlen($response) == 0) {
            $recaptchaResponse = new ReCaptchaResponse();
            $recaptchaResponse->success = false;
            $recaptchaResponse->errorCodes = 'missing-input';
            return $recaptchaResponse;
        }
        $getResponse = $this->_submitHttpGet(
            self::$_siteVerifyUrl,
            array (
                'secret' => $this->_secret,
                'remoteip' => $remoteIp,
                'v' => self::$_version,
                'response' => $response
            )
        );
        $answers = json_decode($getResponse, true);
        $recaptchaResponse = new ReCaptchaResponse();
        if (trim($answers ['success']) == true) {
            $recaptchaResponse->success = true;
        } else {
            $recaptchaResponse->success = false;
            $recaptchaResponse->errorCodes = $answers [error-codes];
        }
        return $recaptchaResponse;
    }
}

1-3 of 3

You cannot edit posts or make replies: the forum has moved to talk.octobercms.com.