Plugin Directory

Changeset 1011855


Ignore:
Timestamp:
10/22/2014 01:38:25 AM (11 years ago)
Author:
loushou
Message:
  • added better error handling on ticket reservation form
  • improved 'qsBlock' code to adjust properly to covered element size
  • updated 'over available tickets' check to be more universal

loushou

Location:
opentickets-community-edition/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • opentickets-community-edition/trunk/assets/js/utils/tools.js

    r1008758 r1011855  
    171171
    172172(function($) {
     173    /*
    173174  $.fn.qsBlock = function(settings) {
    174175    return this.each(function() {
     
    201202
    202203  $.fn.qsUnblock = function(element) { return this.each(function() { $(this).trigger('unblock'); }); };
     204    */
     205  $.fn.qsBlock = function(settings) {
     206    return this.each(function() {
     207      var element = $(this), position = element.css( 'position' ),
     208          sets = $.extend(true, { msg:'<h1>Loading...</h1>', css:{ backgroundColor:'#000000', opacity:0.5 }, msgcss:{ color:'#ffffff' } }, settings),
     209          bd = $('<div class="block-backdrop"></div>').appendTo( element ), msg = $('<div class="block-msg"></div>').appendTo( element ),
     210                    dims = { width:element.outerWidth(), height:element.outerHeight() };
     211            if ( position == 'static' )
     212                element.css( { position:'relative' } );
     213            $(sets.msg).css({ color:'inherit' }).appendTo(msg);
     214      var mhei = msg.height();
     215      bd.css($.extend({
     216        position: 'absolute',
     217        width: 'auto',
     218        height: 'auto',
     219        top: 0, bottom:0,
     220        left: 0, right:0
     221      }, sets.css));
     222      msg.css($.extend({
     223        textAlign: 'center',
     224        position: 'absolute',
     225        width: dims.width,
     226        top: '50%',
     227        left: 0,
     228                marginTop: -mhei
     229      }, sets.msgcss));
     230            msg.find('h1').css({ fontSize: dims.height > 30 ? 28 : '100%' });
     231
     232      var ublock = function() { element.css( { position:position } ); bd.remove(); msg.remove(); element.off('unblock', ublock); }
     233      element.on('unblock', ublock);
     234    });
     235  }; 
     236
     237  $.fn.qsUnblock = function(element) { return this.each(function() { $(this).trigger('unblock'); }); };
    203238})(jQuery);
    204239
  • opentickets-community-edition/trunk/inc/core/zoner.class.php

    r1004826 r1011855  
    305305        } else {
    306306            // get the available occupancy of the event
    307             $available = apply_filters('qsot-get-event-available-tickets', 0, $event, $ticket_type_id);
     307            $available = apply_filters('qsot-get-event-available-tickets', 0, $event);
    308308            // determine how many this person already has reserved
    309             $owns = apply_filters('qsot-zoner-owns', 0, $event, $ticket_type_id, self::$o->{'z.states.r'}, $customer_id);
     309            $owns = array_sum( array_values( apply_filters('qsot-zoner-owns', 0, $event, 0, self::$o->{'z.states.r'}, $customer_id) ) );
     310            //$owns_tt = apply_filters('qsot-zoner-owns', 0, $event, $ticket_type_id, self::$o->{'z.states.r'}, $customer_id);
    310311
    311312            // if this user already owns some seats for this event, then
    312313            if ($owns) {
    313314                // if they are requesting more than is available, then just fail
    314                 if ($count > ($available + $owns)) return false;
     315                if ($count > ($available + $owns)) return new WP_Error( 'There are not ' . $count . ' tickets available to reserve.' );
    315316                // otherwise update the reservation count for this user for this event
    316317                $res = $wpdb->update(
     
    323324            } else {
    324325                // if the user is requesting more than what is currently available, then just fail
    325                 if ($count > $available) return false;
     326                if ($count > $available) return new WP_Error( 'There are not ' . $count . ' tickets available to reserve.' );
    326327                // oterhwise, insert the reservations for these seats now
    327328                $res = $wpdb->insert(
  • opentickets-community-edition/trunk/inc/venues/event-area/post-type.class.php

    r1008903 r1011855  
    357357        if ($qty > 0 && is_object($event) && is_object($event->meta) && is_object($event->meta->_event_area_obj) && is_object($event->meta->_event_area_obj->ticket)) {
    358358            $res = apply_filters('qsot-zoner-reserve-current-user', false, $event, $event->meta->_event_area_obj->ticket->id, $qty);
    359             if ($res) {
     359            if ($res && ! is_wp_error( $res ) ) {
    360360                $resp['s'] = true;
    361361                $resp['m'] = array('Updated your reservations successfully.');
     
    366366                $resp['data']['available_more'] = $resp['data']['available'] - $resp['data']['owns'];
    367367                WC()->cart->maybe_set_cart_cookies();
     368            } else if ( is_wp_error( $res ) ) {
     369                $resp['e'] = array_merge( $res['e'], $res->get_error_messages() );
    368370            } else {
    369371                $resp['e'][] = 'Could not update your reservations.';
     
    388390        if (is_object($event) && is_object($event->meta) && is_object($event->meta->_event_area_obj) && is_object($event->meta->_event_area_obj->ticket)) {
    389391            $customer_id = apply_filters('qsot-zoner-current-user', md5(isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : time()));
    390             $where = array(
    391                 'customer_id' => $customer_id,
    392                 'event_id' => $event->ID,
    393                 'ticket_type_id' => $event->meta->_event_area_obj->ticket->id,
    394                 'state' => self::$o->{'z.states.r'},
    395             );
    396             if ($data['quantity'] <= 0) {
    397                 $set = array(
    398                     'qty' => 0,
    399                     '_delete' => true,
     392
     393            // get the available occupancy of the event
     394            $available = apply_filters('qsot-get-event-available-tickets', 0, $event);
     395            // determine how many this person already has reserved
     396            $owns = apply_filters( 'qsot-zoner-owns', 0, $event, 0, self::$o->{'z.states.r'}, $customer_id );
     397            $owns_all = array_sum( array_values( $owns ) );
     398
     399            $quantity = $data['quantity'];
     400
     401            if ( $quantity <= $available ) {
     402                $where = array(
     403                    'customer_id' => $customer_id,
     404                    'event_id' => $event->ID,
     405                    'ticket_type_id' => $event->meta->_event_area_obj->ticket->id,
     406                    'state' => self::$o->{'z.states.r'},
    400407                );
    401             } else {
    402                 $set = array(
    403                     'qty' => $data['quantity'],
    404                 );
    405             }
    406             $res = apply_filters('qsot-zoner-update-reservation', false, $where, $set);
    407             $owns = apply_filters('qsot-zoner-owns-current-user', 0, $event, $event->meta->_event_area_obj->ticket->id, self::$o->{'z.states.r'});
    408 
    409             if ($data['quantity'] <= 0) {
    410                 if (!$owns && $res) {
    411                     $resp['s'] = true;
    412                     $resp['m'] = array('Updated your reservations successfully.');
    413                     $resp['data'] = array(
    414                         'owns' => $owns,
    415                         'available' => $event->meta->available,
     408                if ($data['quantity'] <= 0) {
     409                    $set = array(
     410                        'qty' => 0,
     411                        '_delete' => true,
    416412                    );
    417                     $resp['data']['available_more'] = $resp['data']['available'] - $resp['data']['owns'];
    418413                } else {
    419                     if ($owns) $resp['e'][] = 'A problem occurred when trying to remove your reservations.';
    420                     else $resp['e'][] = 'Could not update your reservations.';
     414                    $set = array(
     415                        'qty' => $data['quantity'],
     416                    );
     417                }
     418                $res = apply_filters('qsot-zoner-update-reservation', false, $where, $set);
     419                $owns = apply_filters('qsot-zoner-owns-current-user', 0, $event, $event->meta->_event_area_obj->ticket->id, self::$o->{'z.states.r'});
     420
     421                if ($data['quantity'] <= 0) {
     422                    if (!$owns && $res) {
     423                        $resp['s'] = true;
     424                        $resp['m'] = array('Updated your reservations successfully.');
     425                        $resp['data'] = array(
     426                            'owns' => $owns,
     427                            'available' => $event->meta->available,
     428                        );
     429                        $resp['data']['available_more'] = $resp['data']['available'] - $resp['data']['owns'];
     430                    } else {
     431                        if ($owns) $resp['e'][] = 'A problem occurred when trying to remove your reservations.';
     432                        else $resp['e'][] = 'Could not update your reservations.';
     433                    }
     434                } else {
     435                    if (!$res || !$owns) {
     436                        if ($owns) $resp['e'][] = 'A problem occurred when trying to update your reservations.';
     437                        else $resp['e'][] = 'Could not update your reservations.';
     438                    } else {
     439                        $resp['s'] = true;
     440                        $resp['m'] = array('Updated your reservations successfully.');
     441                        $resp['data'] = array(
     442                            'owns' => $owns,
     443                            'available' => $event->meta->available,
     444                        );
     445                        $resp['data']['available_more'] = $resp['data']['available'] - $resp['data']['owns'];
     446                    }
    421447                }
    422448            } else {
    423                 if (!$res || !$owns) {
    424                     if ($owns) $resp['e'][] = 'A problem occurred when trying to update your reservations.';
    425                     else $resp['e'][] = 'Could not update your reservations.';
    426                 } else {
    427                     $resp['s'] = true;
    428                     $resp['m'] = array('Updated your reservations successfully.');
    429                     $resp['data'] = array(
    430                         'owns' => $owns,
    431                         'available' => $event->meta->available,
    432                     );
    433                     $resp['data']['available_more'] = $resp['data']['available'] - $resp['data']['owns'];
    434                 }
     449                $resp['e'][] = __( sprintf(
     450                    'There are not enough available tickets to increase the quantity of %s to %d. There are only %d available.',
     451                    $event->meta->_event_area_obj->ticket->get_title(),
     452                    $quantity,
     453                    $available
     454                ), 'qsot' );
    435455            }
    436456        } else {
     
    717737            if (empty($customer_id)) $customer_id = md5($order->id);
    718738            $res = apply_filters('qsot-zoner-reserve', false, $event, $event->meta->_event_area_obj->ticket->id, $qty, $customer_id, $oid);
    719             if ($res) {
     739            if ( $res && ! is_wp_error( $res ) ) {
    720740                do_action('qsot-order-admin-added-tickets', $order, $event, $event->meta->_event_area_obj->ticket->id, $qty);
    721741                $resp['s'] = true;
     
    11141134                if ($requested_count > 0) {
    11151135                    $success = apply_filters('qsot-zoner-reserve-current-user', false, $event, $ticket_type_id, $requested_count);
    1116                     if (!$success) {
     1136                    if ( ! $success || is_wp_error( $success ) ) {
    11171137                        $available = apply_filters('qsot-get-event-available-tickets', 0, $event, $ticket_type_id);
    11181138                        $ticket = get_product($ticket_type_id);
     
    11461166                    $owns = apply_filters('qsot-zoner-owns-current-user', 0, $event, $ticket_type_id, self::$o->{'z.states.r'});
    11471167                    $success = apply_filters('qsot-zoner-reserve-current-user', false, $event, $ticket_type_id, $requested_count);
    1148                     if (!$success) {
     1168                    if ( ! $success | is_wp_error( $success ) ) {
    11491169                        $available = apply_filters('qsot-get-event-available-tickets', 0, $event, $ticket_type_id);
    11501170                        $ticket = get_product($ticket_type_id);
  • opentickets-community-edition/trunk/inc/venues/event-area/pricing.class.php

    r1009193 r1011855  
    3737            add_action('woocommerce_order_status_changed', array(__CLASS__, 'order_status_changed'), 100, 3);
    3838            add_action('woocommerce_before_cart_item_quantity_zero', array(__CLASS__, 'delete_cart_ticket'), 10, 1);
    39             add_action('woocommerce_after_cart_item_quantity_update', array(__CLASS__, 'not_more_than_available'), 10, 2);
    4039            add_filter('woocommerce_get_cart_item_from_session', array(__CLASS__, 'load_item_data'), 20, 3);
    4140            add_action('woocommerce_add_order_item_meta', array(__CLASS__, 'add_item_meta'), 10, 3);
     
    5049
    5150            add_filter('qsot-item-is-ticket', array(__CLASS__, 'item_is_ticket'), 10, 2);
     51
     52            if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) {
     53                add_action('woocommerce_after_cart_item_quantity_update', array(__CLASS__, 'not_more_than_available'), 10, 2);
     54            }
    5255
    5356            if (is_admin()) {
  • opentickets-community-edition/trunk/launcher.php

    r1010904 r1011855  
    44 * Plugin URI:  http://opentickets.com/
    55 * Description: Event Management and Online Ticket Sales Platform
    6  * Version:     1.6.11
     6 * Version:     1.6.12
    77 * Author:      Quadshot Software LLC
    88 * Author URI:  http://quadshot.com/
     
    4141            'fctm' => 'fc',
    4242            'always_reserve' => 0,
    43             'version' => '1.6.11',
     43            'version' => '1.6.12',
    4444            'min_wc_version' => '2.1.0',
    4545            'core_post_type' => 'qsot-event',
  • opentickets-community-edition/trunk/readme.txt

    r1010904 r1011855  
    140140== Changelog ==
    141141
     142= 1.6.12 =
     143* added better error handling on ticket reservation form
     144* improved 'qsBlock' code to adjust properly to covered element size
     145* updated 'over available tickets' check to be more universal
     146
    142147= 1.6.11 =
    143148* repaired 'my-orders' section of the my account printout on the edit user page in the admin (thanks @rjh1990)
Note: See TracChangeset for help on using the changeset viewer.