Plugin Directory

Changeset 3327167


Ignore:
Timestamp:
07/13/2025 08:07:34 PM (9 months ago)
Author:
roundupwp
Message:
  • Fix: Improved how the attedance count display and event attendee list are updated after a registration or cancellation.
Location:
registrations-for-the-events-calendar
Files:
143 added
6 edited

Legend:

Unmodified
Added
Removed
  • registrations-for-the-events-calendar/trunk/inc/form/form-functions.php

    r3183954 r3327167  
    350350    $event_meta = rtec_get_event_meta( $event_id );
    351351
    352     $to_include           = array(
    353         'first',
    354         'last',
    355         'user_id',
     352    // Get the attendance count template from options
     353    global $rtec_options;
     354    $template = isset( $rtec_options['attendance_count_message_template'] ) ? $rtec_options['attendance_count_message_template'] : __( 'Attendance: {num} / {max}', 'registrations-for-the-events-calendar' );
     355    $template = rtec_get_text( $template, __( 'Attendance: {num} / {max}', 'registrations-for-the-events-calendar' ) );
     356   
     357    $attendance_count_html = rtec_attendance_count_display( $event_id, $template );
     358
     359    // Only include attendee list if it's enabled for this event
     360    $attendee_list_html = '';
     361    if ( $event_meta['show_registrants_data'] ) {
     362        $to_include           = array(
     363            'first',
     364            'last',
     365            'user_id',
     366        );
     367        $attendee_list_fields = apply_filters( 'rtec_attendee_list_fields', $to_include );
     368        $registrants_data     = $rtec->db_frontend->get_registrants_data( $event_meta, $attendee_list_fields );
     369
     370        ob_start();
     371        do_action( 'rtec_the_attendee_list', $registrants_data );
     372        $attendee_list_html = ob_get_contents();
     373        ob_get_clean();
     374    }
     375
     376    $return = array(
     377        'attendee_list' => $attendee_list_html,
     378        'attendance_count' => $attendance_count_html,
    356379    );
    357     $attendee_list_fields = apply_filters( 'rtec_attendee_list_fields', $to_include );
    358     $registrants_data     = $rtec->db_frontend->get_registrants_data( $event_meta, $attendee_list_fields );
    359 
    360     ob_start();
    361     do_action( 'rtec_the_attendee_list', $registrants_data );
    362     $html = ob_get_contents();
    363     ob_get_clean();
    364 
    365     echo $html;
    366 
    367     die();
     380
     381    wp_send_json_success( $return );
    368382}
    369383add_action( 'wp_ajax_nopriv_rtec_refresh_event_info', 'rtec_refresh_event_info' );
  • registrations-for-the-events-calendar/trunk/inc/helper-functions.php

    r3194453 r3327167  
    430430        $context = array(
    431431            'series_relationship_label' => _x( 'Event Series:', 'Series relationship marker prefix, with colon.', 'icaltec' ),
    432             'series_title'              => apply_filters( 'the_title', $series_post->post_title ),
     432            'series_title'              => apply_filters( 'the_title', $series_post->post_title, $series_post->ID ),
    433433            'series_link'               => get_edit_post_link( $series_post->ID ),
    434434        );
  • registrations-for-the-events-calendar/trunk/inc/services/class-rtec-footer-listener-service.php

    r3223149 r3327167  
    236236        $event_id = isset( $_POST['event_id'] ) ? (int) $_POST['event_id'] : 0;
    237237
    238         $return = array(
    239                 'success' => false,
    240                 'html' => ''
    241         );
    242238        if ( empty( $event_id ) ) {
    243             $return['html'] = 'No Event ID';
    244             wp_send_json_error( $return );
     239            wp_send_json_error( array( 'message' => 'No Event ID' ) );
    245240        }
    246241
     
    249244
    250245        if ( empty( $logged_in_event_goer->get_entry_id() ) ) {
    251             $return['html'] = 'No Record Found';
    252             wp_send_json_error( $return );
     246            wp_send_json_error( array( 'message' => 'No Record Found' ) );
    253247        }
    254248
     
    272266            $templater = new RTEC_Templater();
    273267
    274             $return['success'] = true;
    275             $return['html'] = '<p class="rtec-attendance tribe-events-notices rtec-scrollto">' . wp_kses_post( $templater->event_details_search_and_replace( RTEC_Settings::get( 'success_unregistration' ), $event_id ) ) . '</p>';
     268            // Get updated event info after unregistration
     269            $rtec = RTEC();
     270            $event_meta = rtec_get_event_meta( $event_id );
     271
     272            // Get the attendance count template from options
     273            $template = isset( $rtec_options['attendance_count_message_template'] ) ? $rtec_options['attendance_count_message_template'] : __( 'Attendance: {num} / {max}', 'registrations-for-the-events-calendar' );
     274            $template = rtec_get_text( $template, __( 'Attendance: {num} / {max}', 'registrations-for-the-events-calendar' ) );
     275           
     276            $attendance_count_html = rtec_attendance_count_display( $event_id, $template );
     277
     278            // Only include attendee list if it's enabled for this event
     279            $attendee_list_html = '';
     280            if ( $event_meta['show_registrants_data'] ) {
     281                $to_include = array(
     282                    'first',
     283                    'last',
     284                    'user_id',
     285                );
     286                $attendee_list_fields = apply_filters( 'rtec_attendee_list_fields', $to_include );
     287                $registrants_data = $rtec->db_frontend->get_registrants_data( $event_meta, $attendee_list_fields );
     288
     289                ob_start();
     290                do_action( 'rtec_the_attendee_list', $registrants_data );
     291                $attendee_list_html = ob_get_contents();
     292                ob_get_clean();
     293            }
     294
     295            $return = array(
     296                'attendee_list' => $attendee_list_html,
     297                'attendance_count' => $attendance_count_html,
     298                'success_message' => '<p class="rtec-attendance tribe-events-notices rtec-scrollto">' . wp_kses_post( $templater->event_details_search_and_replace( RTEC_Settings::get( 'success_unregistration' ), $event_id ) ) . '</p>'
     299            );
     300
    276301            wp_send_json_success( $return );
    277302
    278303            do_action( 'rtec_after_unregistration', array( $event_data['id'] ), $event_id, 'footer_listener_unregister_by_event_id_for_logged_in_user' );
    279304        } else {
    280             $return['html'] = '<p class="rtec-attendance tribe-events-notices rtec-scrollto">' . esc_html__( 'No record found.', 'registrations-for-the-events-calendar' ) . '</p>';
    281         }
    282 
    283         wp_send_json_error( $return );
     305            wp_send_json_error( array( 'message' => __( 'No record found.', 'registrations-for-the-events-calendar' ) ) );
     306        }
    284307    }
    285308
  • registrations-for-the-events-calendar/trunk/js/rtec-scripts.js

    r3150239 r3327167  
    147147                    $spinner = '<div class="rtec-spinner-wrap">' + $spinnerImg + '</div>';
    148148
    149 
    150149                    var $wrapEl = $(this).closest('.rtec-already-registered-options'),
     150                        $rtecWrap = $wrapEl.closest('.rtec-outer-wrap'),
    151151                        submittedData = {
    152152                            'event_id': $(this).attr('data-event-id'),
     
    154154                        };
    155155
     156                    if ( !$wrapEl.closest('.rtec-outer-wrap').length) {
     157                        $rtecWrap = $('.rtec').closest('div');
     158                    }
     159
    156160                    $wrapEl.append($spinner);
    157 
    158161
    159162                    $.ajax({
     
    162165                        data : submittedData,
    163166                        success : function(data) {
    164                             var $rtecWrap = $wrapEl.closest('.rtec-outer-wrap'),
    165                                 $rtecAttendanceNearest = $rtecWrap.find('.rtec-attendance');
    166 
    167                             if ( !$wrapEl.closest('.rtec-outer-wrap').length) {
    168                                 $rtecWrap = $('.rtec').closest('div');
     167                            // Parse the JSON response from wp_send_json_success
     168                            var response = data;
     169                            if (typeof data === 'string') {
     170                                try {
     171                                    response = JSON.parse(data);
     172                                } catch (e) {
     173                                    console.error('Failed to parse JSON response:', e);
     174                                    return;
     175                                }
    169176                            }
    170 
    171                             $rtecWrap.find('.rtec').fadeOut(400,'linear', function() {
    172                                 $(this).remove();
    173                                 $rtecWrap.html(data.data.html)
    174                             });
    175                             $rtecAttendanceNearest.fadeOut(400,'linear', function() {
    176                                 $(this).remove();
    177                             });
     177                           
     178                            // Check if the response has the expected structure
     179                            if (response && response.success && response.data) {
     180                                var attendeeList = response.data.attendee_list;
     181                                var attendanceCount = response.data.attendance_count;
     182                                var successMessage = response.data.success_message;
     183                               
     184                                // Remove the registration form and show success message
     185                                $rtecWrap.find('.rtec').fadeOut(400,'linear', function() {
     186                                    $(this).remove();
     187                                    if (successMessage) {
     188                                        if ($rtecWrap.find('.rtec-attendance.tribe-events-notices').length) {
     189                                            $rtecWrap.find('.rtec-attendance.tribe-events-notices').replaceWith(successMessage  );
     190                                        } else {
     191                                            $rtecWrap.append(successMessage);
     192                                        }
     193                                        $rtecWrap.find('.rtec-attendance').fadeIn();
     194                                    }
     195                                });
     196                               
     197                                // Update dynamic elements if they exist
     198                                if (rtecDynamicElementsExist($rtecWrap)) {
     199                                    var dynamicElements = rtecGetDynamicElements($rtecWrap);
     200                                   
     201                                    if (Array.isArray(dynamicElements)) {
     202                                        dynamicElements.forEach(function($element) {
     203                                            var elementType = $element.hasClass('rtec-attendee-list-meta') ? 'attendee-list' : 'attendance';
     204                                           
     205                                            if (elementType === 'attendee-list' && attendeeList) {
     206                                                $element.replaceWith($(attendeeList));
     207                                            } else if (elementType === 'attendance' && attendanceCount) {
     208                                                $element.replaceWith($(attendanceCount));
     209                                            }
     210                                        });
     211                                    }
     212                                }
     213                            } else if (response && !response.success) {
     214                                // Handle error response
     215                                var errorMessage = response.data && response.data.message ? response.data.message : 'An error occurred';
     216                                $wrapEl.append('<p class="rtec-error">' + errorMessage + '</p>');
     217                            }
     218                           
     219                            // Remove processing state
     220                            $(this).removeClass('rtec-processing');
     221                            $wrapEl.find('.rtec-spinner-wrap').remove();
     222                        },
     223                        error: function() {
     224                            // Handle AJAX error
     225                            $wrapEl.append('<p class="rtec-error">An error occurred while processing your request.</p>');
     226                            $(this).removeClass('rtec-processing');
     227                            $wrapEl.find('.rtec-spinner-wrap').remove();
    178228                        }
    179229                    }); // ajax
     
    636686            }rtecMaybeModalInit();
    637687
     688            function rtecDynamicElementsExist($context) {
     689                if ($context.find('.rtec-attendee-list-meta').length) {
     690                    return true;
     691                }
     692                if ($context.find('.rtec-attendance-display').length) {
     693                    return true;
     694                }
     695                return false;
     696            }
     697
     698            function rtecGetDynamicElements($context) {
     699                var dynamicElements = [];
     700                if ($context.find('.rtec-attendee-list-meta').length) {
     701                    dynamicElements.push($context.find('.rtec-attendee-list-meta'));
     702                }
     703                if ($context.find('.rtec-attendance-display').length) {
     704                    dynamicElements.push($context.find('.rtec-attendance-display'));
     705                }
     706                return dynamicElements;
     707            }
     708
     709            function rtecSetToPending($elements) {
     710                // if array, loop through and prepend the spinner
     711                if (Array.isArray($elements)) {
     712                    $elements.forEach(function($element) {
     713                        $element.prepend($('.rtec-spinner').clone()).find('.rtec-spinner').show();
     714                    });
     715                } else {
     716                    $elements.prepend($('.rtec-spinner').clone()).find('.rtec-spinner').show();
     717                }
     718            }
     719
     720            function rtecSetToReady($elements) {
     721                if (Array.isArray($elements)) {
     722                    $elements.forEach(function($element) {
     723                        $element.find('.rtec-spinner').remove();
     724                    });
     725                } else {
     726                    $elements.find('.rtec-spinner').remove();
     727                }
     728            }
     729
    638730            $('#rtec-confirm-unregister-form').on('submit',function(event) {
    639731                event.preventDefault();
     
    671763                var $rtecEl = event.el.closest('.rtec-outer-wrap').length ? event.el.closest('.rtec-outer-wrap') : event.el;
    672764
    673                 if ($rtecEl.find('.rtec-attendee-list-meta').length || $('.rtec-attendee-list-meta').length === 1) {
    674                     var $attendeeList = $rtecEl.find('.rtec-attendee-list-meta').length ? $rtecEl.find('.rtec-attendee-list-meta') : $('.rtec-attendee-list-meta');
    675                     $attendeeList.prepend($rtecEl.find('.rtec-spinner')).find('.rtec-spinner').show();
    676                     $attendeeList.fadeTo(500,.1);
    677 
    678                     var eventId = typeof $attendeeList.closest('.rtec-outer-wrap').find('.rtec').attr('data-event') !== 'undefined' ? $attendeeList.closest('.rtec-outer-wrap').find('.rtec').attr('data-event') : event.el.attr('data-event');
     765                if (rtecDynamicElementsExist($rtecEl)) {
     766                    dynamicElements = rtecGetDynamicElements($rtecEl);
     767                    rtecSetToPending(dynamicElements);
     768
     769                    var eventId = typeof $rtecEl.attr('data-event') !== 'undefined' ? $rtecEl.attr('data-event') : event.el.attr('data-event');
    679770
    680771                    $.ajax({
     
    686777                        },
    687778                        success : function(data) {
    688                             $attendeeList.find('.rtec-spinner').hide();
    689                             $attendeeList.fadeTo(500,1);
    690                             if (data.trim().indexOf('<div') === 0) {
    691                                 $attendeeList.replaceWith(data);
     779                            rtecSetToReady(dynamicElements);
     780                           
     781                            // Parse the JSON response from wp_send_json_success
     782                            var response = data;
     783                            if (typeof data === 'string') {
     784                                try {
     785                                    response = JSON.parse(data);
     786                                } catch (e) {
     787                                    console.error('Failed to parse JSON response:', e);
     788                                    return;
     789                                }
    692790                            }
    693 
     791                           
     792                            // Check if the response has the expected structure
     793                            if (response && response.success && response.data) {
     794                                var attendeeList = response.data.attendee_list;
     795                                var attendanceCount = response.data.attendance_count;
     796                               
     797                                // Update the dynamic elements with new data
     798                                if (Array.isArray(dynamicElements)) {
     799                                    dynamicElements.forEach(function($element) {
     800                                        var elementType = $element.hasClass('rtec-attendee-list-meta') ? 'attendee-list' : 'attendance';
     801                                       
     802                                        if (elementType === 'attendee-list' && attendeeList) {
     803                                            $element.replaceWith($(attendeeList));
     804                                        } else if (elementType === 'attendance' && attendanceCount) {
     805                                            $element.replaceWith($(attendanceCount));
     806                                        }
     807                                    });
     808                                }
     809                            }
    694810                        }
    695811                    }); // ajax
  • registrations-for-the-events-calendar/trunk/readme.txt

    r3279913 r3327167  
    55Tags: registration, The Events Calendar, RSVP, events, event registration
    66Requires at least: 5.6
    7 Tested up to: 6.8
     7Tested up to: 6.7
    88Requires PHP: 7.4
    9 Stable tag: 2.13.5
     9Stable tag: 2.13.6
    1010License: GPLv2 or later
    1111License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    202202
    203203== Changelog ==
     204= 2.13.6 =
     205* Fix: Improved how the attedance count display and event attendee list are updated after a registration or cancellation.
     206
    204207= 2.13.5 =
    205208* Fix: Prevented some of the admin CSS and JS files for the plugin being loaded on pages that were not related to the Events Calendar or Registrations for the Events Calendar.
  • registrations-for-the-events-calendar/trunk/registrations-for-the-events-calendar.php

    r3271225 r3327167  
    33Plugin Name: Registrations for The Events Calendar
    44Description: Collect and manage event registrations with a customizable form and email template. This plugin requires The Events Calendar by Modern Tribe to work.
    5 Version: 2.13.5
     5Version: 2.13.6
    66Author: Roundup WP
    77Author URI: roundupwp.com
     
    3838// Plugin version.
    3939if ( ! defined( 'RTEC_VERSION' ) ) {
    40     define( 'RTEC_VERSION', '2.13.5' );
     40    define( 'RTEC_VERSION', '2.13.6' );
    4141}
    4242// Plugin Folder Path.
     
    5050
    5151if ( ! defined( 'RTEC_TEC_VER_STRING' ) ) {
    52     define( 'RTEC_TEC_VER_STRING', '.6.10.1' );
     52    define( 'RTEC_TEC_VER_STRING', '.6.13.2.1' );
    5353}
    5454
Note: See TracChangeset for help on using the changeset viewer.