Plugin Directory

Changeset 3435083


Ignore:
Timestamp:
01/08/2026 11:41:33 AM (3 months ago)
Author:
ZanderZ
Message:

Update to version 6.5.0 from GitHub

Location:
recras
Files:
12 edited
1 copied

Legend:

Unmodified
Added
Removed
  • recras/tags/6.5.0/changelog.md

    r3434941 r3435083  
    11# Changelog
     2
     3## 6.5.0 (2026-01-08)
     4* Add anti-spam check to contact forms
    25
    36## 6.4.3 (2026-01-08)
  • recras/tags/6.5.0/js/recras.js

    r3369571 r3435083  
    22{
    33    const els = document.querySelectorAll('.' + className);
    4     for (let i = 0; i < els.length; i++) {
    5         els[i].parentNode.removeChild(els[i]);
     4    for (let el of els) {
     5        el.parentNode.removeChild(el);
    66    }
    77}
     
    1515    let elements = {};
    1616
    17     for (let i = 0; i < formElements.length; i++) {
    18         if (formElements[i].type === 'submit') {
     17    for (let el of formElements) {
     18        if (el.type === 'submit') {
    1919            continue;
    2020        }
    21         if (formElements[i].value === '' && formElements[i].required === false) {
    22             formElements[i].value = null;
     21        if (el.value === '' && el.required === false) {
     22            el.value = null;
    2323        }
    24         if (formElements[i].type === 'radio') {
    25             const selected = document.querySelector('input[name="' + formElements[i].name + '"]:checked');
    26             elements[formElements[i].name] = selected.value;
    27         } else if (formElements[i].type === 'checkbox') {
    28             elements[formElements[i].name] = [];
    29             const checked = document.querySelectorAll('input[name="' + formElements[i].name + '"]:checked');
     24        if (el.type === 'radio') {
     25            const selected = document.querySelector('input[name="' + el.name + '"]:checked');
     26            elements[el.name] = selected.value;
     27        } else if (el.type === 'checkbox') {
     28            elements[el.name] = [];
     29            const checked = document.querySelectorAll('input[name="' + el.name + '"]:checked');
    3030            if (checked.length === 0) {
    31                 const isRequired = document.querySelector('input[name="' + formElements[i].name + '"][data-required="1"]');
     31                const isRequired = document.querySelector('input[name="' + el.name + '"][data-required="1"]');
    3232                if (isRequired) {
    3333                    formEl
    34                         .querySelector('[name="' + formElements[i].name + '"]')
     34                        .querySelector('[name="' + el.name + '"]')
    3535                        .parentNode
    3636                        .insertAdjacentHTML('beforeend', '<span class="recras-error">' + recras_l10n.checkboxRequired + '</span>');
     
    3838                }
    3939            }
    40             for (let j = 0; j < checked.length; j++) {
    41                 elements[formElements[i].name].push(checked[j].value);
     40            for (let c of checked) {
     41                elements[el.name].push(c.value);
    4242            }
    4343        } else {
    44             elements[formElements[i].name] = formElements[i].value;
     44            elements[el.name] = el.value;
    4545        }
    4646    }
     
    5656    xhr.open('POST', 'https://' + instance + '/api2/contactformulieren/' + formEl.dataset.formid + '/opslaan');
    5757    xhr.send(JSON.stringify(elements));
    58     xhr.onreadystatechange = function(){
     58    xhr.onreadystatechange = function () {
    5959        if (xhr.readyState === 4) {
    6060            removeElsWithClass('recras-loading');
     
    112112    if (typeof Pikaday === 'function') {
    113113        const dateEls = document.querySelectorAll('.recras-input-date');
    114         for (let i = 0; i < dateEls.length; i++) {
    115             initPikaday(dateEls[i]);
     114        for (let el of dateEls) {
     115            initPikaday(el);
    116116        }
    117117    }
  • recras/tags/6.5.0/readme.txt

    r3434941 r3435083  
    33Tags: recras, recreation, reservation, booking, voucher
    44Tested up to: 6.9
    5 Stable tag: 6.4.3
     5Stable tag: 6.5.0
    66License: GPLv2 or later
    77License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    7575== Changelog ==
    7676
     77= 6.5.0 =
     78* Add anti-spam check to contact forms
     79
    7780= 6.4.3 =
    7881* Fixed error when using an invalid Recras domain
  • recras/tags/6.5.0/recras-wordpress-plugin.php

    r3434941 r3435083  
    33Plugin Name: Recras
    44Plugin URI: https://www.recras.com/
    5 Version: 6.4.3
     5Version: 6.5.0
    66Description: Easily integrate your Recras data into your own site
    77Requires at least: 6.7
  • recras/tags/6.5.0/src/ContactForm.php

    r3432851 r3435083  
    2424     * @return object|string
    2525     */
    26     public static function getForm(string $instance, int $id)
     26    public static function getForm(string $instance, int $id, bool $useCache = true)
    2727    {
    2828        $form = Transient::get($instance . '_contactform_' . $id . '_v2');
    29         if ($form === false) {
     29        if ($form === false || !$useCache) {
    3030            try {
    3131                $form = Http::get($instance, 'contactformulieren/' . $id . '?embed=Velden');
     
    6565
    6666        // Get basic info for the form
    67         $form = self::getForm($instance, $attributes['id']);
     67        $form = self::getForm($instance, $attributes['id'], false);
    6868        if (is_string($form)) {
    6969            // Not a form, but an error
     
    140140        ];
    141141
    142         return self::generateForm($attributes['id'], $formFields, $options);
     142        return self::generateForm($attributes['id'], $formFields, $form->nonce ?? null, $options);
    143143    }
    144144
     
    206206     * Generate a contact form
    207207     */
    208     public static function generateForm(int $formID, array $formFields, array $options): string
     208    public static function generateForm(int $formID, array $formFields, ?string $nonce = null, array $options): string
    209209    {
    210210        global $recrasPlugin;
     
    437437        }
    438438        $html .= self::generateEndTag($options['element']);
     439        if ($nonce) {
     440            $html .= '<input type="hidden" name="nonce" value="' . $nonce . '">';
     441        }
    439442
    440443        $html .= '<input type="submit" value="' . $options['submitText'] . '">';
     
    452455    const clearRadioEls = document.querySelectorAll(".clearRadioChoice");
    453456    if (clearRadioEls.length) {
    454         for (let i = 0; i < clearRadioEls.length; i++) {
    455             clearRadioEls[i].addEventListener("click", function() {
     457        for (let el of clearRadioEls) {
     458            el.addEventListener("click", function() {
    456459                const radioElChecked = this.parentNode.querySelector("input[type=\'radio\']:checked");
    457460                if (radioElChecked) {
  • recras/tags/6.5.0/src/Plugin.php

    r3432851 r3435083  
    328328        // Generic functionality & localisation script
    329329        $scriptName = 'recras-frontend';
    330         wp_register_script($scriptName, $this->baseUrl . '/js/recras.js', ['jquery'], '6.4.0', true);
     330        wp_register_script($scriptName, $this->baseUrl . '/js/recras.js', ['jquery'], '6.5.0', true);
    331331        wp_localize_script($scriptName, 'recras_l10n', $localisation);
    332332        wp_enqueue_script($scriptName);
  • recras/trunk/changelog.md

    r3434941 r3435083  
    11# Changelog
     2
     3## 6.5.0 (2026-01-08)
     4* Add anti-spam check to contact forms
    25
    36## 6.4.3 (2026-01-08)
  • recras/trunk/js/recras.js

    r3369571 r3435083  
    22{
    33    const els = document.querySelectorAll('.' + className);
    4     for (let i = 0; i < els.length; i++) {
    5         els[i].parentNode.removeChild(els[i]);
     4    for (let el of els) {
     5        el.parentNode.removeChild(el);
    66    }
    77}
     
    1515    let elements = {};
    1616
    17     for (let i = 0; i < formElements.length; i++) {
    18         if (formElements[i].type === 'submit') {
     17    for (let el of formElements) {
     18        if (el.type === 'submit') {
    1919            continue;
    2020        }
    21         if (formElements[i].value === '' && formElements[i].required === false) {
    22             formElements[i].value = null;
     21        if (el.value === '' && el.required === false) {
     22            el.value = null;
    2323        }
    24         if (formElements[i].type === 'radio') {
    25             const selected = document.querySelector('input[name="' + formElements[i].name + '"]:checked');
    26             elements[formElements[i].name] = selected.value;
    27         } else if (formElements[i].type === 'checkbox') {
    28             elements[formElements[i].name] = [];
    29             const checked = document.querySelectorAll('input[name="' + formElements[i].name + '"]:checked');
     24        if (el.type === 'radio') {
     25            const selected = document.querySelector('input[name="' + el.name + '"]:checked');
     26            elements[el.name] = selected.value;
     27        } else if (el.type === 'checkbox') {
     28            elements[el.name] = [];
     29            const checked = document.querySelectorAll('input[name="' + el.name + '"]:checked');
    3030            if (checked.length === 0) {
    31                 const isRequired = document.querySelector('input[name="' + formElements[i].name + '"][data-required="1"]');
     31                const isRequired = document.querySelector('input[name="' + el.name + '"][data-required="1"]');
    3232                if (isRequired) {
    3333                    formEl
    34                         .querySelector('[name="' + formElements[i].name + '"]')
     34                        .querySelector('[name="' + el.name + '"]')
    3535                        .parentNode
    3636                        .insertAdjacentHTML('beforeend', '<span class="recras-error">' + recras_l10n.checkboxRequired + '</span>');
     
    3838                }
    3939            }
    40             for (let j = 0; j < checked.length; j++) {
    41                 elements[formElements[i].name].push(checked[j].value);
     40            for (let c of checked) {
     41                elements[el.name].push(c.value);
    4242            }
    4343        } else {
    44             elements[formElements[i].name] = formElements[i].value;
     44            elements[el.name] = el.value;
    4545        }
    4646    }
     
    5656    xhr.open('POST', 'https://' + instance + '/api2/contactformulieren/' + formEl.dataset.formid + '/opslaan');
    5757    xhr.send(JSON.stringify(elements));
    58     xhr.onreadystatechange = function(){
     58    xhr.onreadystatechange = function () {
    5959        if (xhr.readyState === 4) {
    6060            removeElsWithClass('recras-loading');
     
    112112    if (typeof Pikaday === 'function') {
    113113        const dateEls = document.querySelectorAll('.recras-input-date');
    114         for (let i = 0; i < dateEls.length; i++) {
    115             initPikaday(dateEls[i]);
     114        for (let el of dateEls) {
     115            initPikaday(el);
    116116        }
    117117    }
  • recras/trunk/readme.txt

    r3434941 r3435083  
    33Tags: recras, recreation, reservation, booking, voucher
    44Tested up to: 6.9
    5 Stable tag: 6.4.3
     5Stable tag: 6.5.0
    66License: GPLv2 or later
    77License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    7575== Changelog ==
    7676
     77= 6.5.0 =
     78* Add anti-spam check to contact forms
     79
    7780= 6.4.3 =
    7881* Fixed error when using an invalid Recras domain
  • recras/trunk/recras-wordpress-plugin.php

    r3434941 r3435083  
    33Plugin Name: Recras
    44Plugin URI: https://www.recras.com/
    5 Version: 6.4.3
     5Version: 6.5.0
    66Description: Easily integrate your Recras data into your own site
    77Requires at least: 6.7
  • recras/trunk/src/ContactForm.php

    r3432851 r3435083  
    2424     * @return object|string
    2525     */
    26     public static function getForm(string $instance, int $id)
     26    public static function getForm(string $instance, int $id, bool $useCache = true)
    2727    {
    2828        $form = Transient::get($instance . '_contactform_' . $id . '_v2');
    29         if ($form === false) {
     29        if ($form === false || !$useCache) {
    3030            try {
    3131                $form = Http::get($instance, 'contactformulieren/' . $id . '?embed=Velden');
     
    6565
    6666        // Get basic info for the form
    67         $form = self::getForm($instance, $attributes['id']);
     67        $form = self::getForm($instance, $attributes['id'], false);
    6868        if (is_string($form)) {
    6969            // Not a form, but an error
     
    140140        ];
    141141
    142         return self::generateForm($attributes['id'], $formFields, $options);
     142        return self::generateForm($attributes['id'], $formFields, $form->nonce ?? null, $options);
    143143    }
    144144
     
    206206     * Generate a contact form
    207207     */
    208     public static function generateForm(int $formID, array $formFields, array $options): string
     208    public static function generateForm(int $formID, array $formFields, ?string $nonce = null, array $options): string
    209209    {
    210210        global $recrasPlugin;
     
    437437        }
    438438        $html .= self::generateEndTag($options['element']);
     439        if ($nonce) {
     440            $html .= '<input type="hidden" name="nonce" value="' . $nonce . '">';
     441        }
    439442
    440443        $html .= '<input type="submit" value="' . $options['submitText'] . '">';
     
    452455    const clearRadioEls = document.querySelectorAll(".clearRadioChoice");
    453456    if (clearRadioEls.length) {
    454         for (let i = 0; i < clearRadioEls.length; i++) {
    455             clearRadioEls[i].addEventListener("click", function() {
     457        for (let el of clearRadioEls) {
     458            el.addEventListener("click", function() {
    456459                const radioElChecked = this.parentNode.querySelector("input[type=\'radio\']:checked");
    457460                if (radioElChecked) {
  • recras/trunk/src/Plugin.php

    r3432851 r3435083  
    328328        // Generic functionality & localisation script
    329329        $scriptName = 'recras-frontend';
    330         wp_register_script($scriptName, $this->baseUrl . '/js/recras.js', ['jquery'], '6.4.0', true);
     330        wp_register_script($scriptName, $this->baseUrl . '/js/recras.js', ['jquery'], '6.5.0', true);
    331331        wp_localize_script($scriptName, 'recras_l10n', $localisation);
    332332        wp_enqueue_script($scriptName);
Note: See TracChangeset for help on using the changeset viewer.