Как остановить спам в контактной форме - Silverstripe - PullRequest
1 голос
/ 05 апреля 2020

У меня есть контактная форма на моем веб-сайте, которая использует reCAPTCHA version 2 для предотвращения спам-сообщений. Тем не менее, довольно многие проходят через! Как я мог остановить это? Любая помощь будет принята с благодарностью!

Вот содержимое ContactForm. php file:


class ContactForm extends Form {

    public function __construct(Controller $controller, $name)
    {
        $emails = array(
            'e-mail address here'=>'General',
            'e-mail address here'=>'Sales',
            'e-mail address here'=>'Technical Support',
        );

        $fields = FieldList::create(
            TextField::create('Name')->setAttribute('placeholder', 'Name'),
            EmailField::create('Email')->setAttribute('placeholder', 'Email'),
            DropdownField::create('Destination', 'Enquiry', $emails)->setEmptyString("(Department)"),
            TextareaField::create('Message')
                ->setAttribute('placeholder', 'Message')
                ->setAttribute('rows', 9)
                ->setAttribute('cols', 25),
            LiteralField::create('Captcha', '<div class="g-recaptcha" data-sitekey="MY KEY GOES HERE"></div>')
        );

        $actions = new FieldList(
            FormAction::create('Contact', 'Send')->setAttribute('disabled',true)
        );

        $validator = new RequiredFields('Name', 'Email', 'Message', 'Destination');
        //return Form::create($controller, $name, $fields, $actions, $validator);
        parent::__construct($controller, $name, $fields, $actions, $validator);
    }

    public function Contact($data)
    {
        $email = new Email();
        $email->setFrom($data['Email']);
        $email->setSubject("Website Enquiry");
        $email->setTo($data['Destination']);
        $messageBody = "<p><strong>Name:</strong> {$data['Name']}</p><p><strong>Message:</strong> {$data['Subject']}</p><p><strong>Message:</strong> {$data['Message']}</p>";
        $email->setBody($messageBody);
        $email->send();

        Controller::curr()->redirectBack();
    }

}

Это код ContactPage_Controller. php file:

<?php

class ContactPage_Controller extends Page_Controller {

    public static $allowed_actions = array(
        'ContactForm'
    );

    public function ContactForm(){
        return ContactForm::create($this, 'ContactForm');
    }
}

Это содержимое файла ContactPage.ss:

<div class="service-menu-wrapper">
    <ul class="services-menu">
        <% control $ServiceMenu %>
            <li><a class="hvr-float-shadow internal-link $LinkingMode" href="$Link"><i class="fa $Icon"></i></a></li>
        <% end_control %>
    </ul>
</div>

<div class="typography container">
    <div class="content-container js-content">

        <article>
            <div class="custom-title">
                <span>Contact us</span>
            </div>

            <div class="panel">
                <div class="section left contact-form-wrapper">
                    $ContactForm
                </div>
                <div class="section right map">

                    <iframe src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d92480.79610056261!2d-4.0153309783259425!3d52.475305088108385!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc657c04368dfd9ad!2sAtebol!5e0!3m2!1sen!2suk!4v1526831824458"
                            width="100%" height="450" frameborder="0" style="border:0"
                            allowfullscreen></iframe>
                </div>
            </div>
        </article>
    </div>
</div>
<script>
    $("form").submit(function(event) {

        var recaptcha = $("#g-recaptcha-response").val();
        if (recaptcha === "") {
            event.preventDefault();
            alert("Please fill in ReCaptcha");
        }
    });
</script>

Это содержимое файла ContactPage. php Файл:

<?php

class ContactPage extends Page
{

    private static $db = array();

    private static $has_one = array();

    private static $has_many = array();

    private static $summary_fields = array();

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();

        return $fields;
    }
}
...