Events Manager - Version 5.7.3

Version Description

  • fixed previous meta not getting deleted from recurrences resulting in non-saved information such as a changed featured image or location
  • fixed newly submitted recurrences first saved in draft or pending mode not creating new events without a reschedule
  • fixed export settings button not working in MultiSite
  • fixed CSS issue in search form advanced field dropdowns on firefox
  • fixed PHP warning when displaying locations and events map via shortcode (kudos @Beee)
  • fixed minor PHP warning on category admin pages where image isn't defined (kudos @Beee)
  • fixed booking admin 'Add Note' button not being translatable
  • added fifth day of month in recurrences pattern
  • added ability to change event times on recurring events without recreating recurrences
Download this release

Release Info

Developer netweblogic
Plugin Icon 128x128 Events Manager
Version 5.7.3
Comparing to
See all releases

Code changes from version 5.7.2 to 5.7.3

admin/em-bookings.php CHANGED
@@ -472,7 +472,7 @@ function em_bookings_single(){
472
  <textarea class="widefat" rows="5" name="booking_note"></textarea>
473
  <input type="hidden" name="action" value="bookings_add_note" />
474
  <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce('bookings_add_note'); ?>" />
475
- <input type="submit" class="em-button button-primary" value="Add Note" />
476
  </form>
477
  </div>
478
  </div>
472
  <textarea class="widefat" rows="5" name="booking_note"></textarea>
473
  <input type="hidden" name="action" value="bookings_add_note" />
474
  <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce('bookings_add_note'); ?>" />
475
+ <input type="submit" class="em-button button-primary" value="<?php esc_html_e('Add Note', 'events-manager'); ?>" />
476
  </form>
477
  </div>
478
  </div>
admin/em-ms-options.php CHANGED
@@ -66,7 +66,7 @@ function em_ms_admin_options_page() {
66
  $bookings_placeholder_tip = " ". sprintf(__('This accepts %s, %s and %s placeholders.','events-manager'), $bookings_placeholders, $events_placeholders, $locations_placeholders);
67
 
68
  global $save_button;
69
- $save_button = '<tr><th>&nbsp;</th><td><p class="submit" style="margin:0px; padding:0px; text-align:right;"><input type="submit" id="dbem_options_submit" name="Submit" value="'. __( 'Save Changes', 'events-manager') .' ('. __('All','events-manager') .')" /></p></ts></td></tr>';
70
  //Do some multisite checking here for reuse
71
  ?>
72
  <script type="text/javascript" charset="utf-8"><?php include(EM_DIR.'/includes/js/admin-settings.js'); ?></script>
@@ -189,7 +189,7 @@ function em_ms_admin_options_page() {
189
  </div> <!-- .em-menu-pages -->
190
 
191
  <p class="submit">
192
- <input type="submit" id="dbem_options_submit" name="Submit" value="<?php esc_attr_e( 'Save Changes' )?>" />
193
  <input type="hidden" name="em-submitted" value="1" />
194
  <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce('events-manager-options'); ?>" />
195
  </p>
66
  $bookings_placeholder_tip = " ". sprintf(__('This accepts %s, %s and %s placeholders.','events-manager'), $bookings_placeholders, $events_placeholders, $locations_placeholders);
67
 
68
  global $save_button;
69
+ $save_button = '<tr><th>&nbsp;</th><td><p class="submit" style="margin:0px; padding:0px; text-align:right;"><input type="submit" class="button-primary" name="Submit" value="'. __( 'Save Changes', 'events-manager') .' ('. __('All','events-manager') .')" /></p></td></tr>';
70
  //Do some multisite checking here for reuse
71
  ?>
72
  <script type="text/javascript" charset="utf-8"><?php include(EM_DIR.'/includes/js/admin-settings.js'); ?></script>
189
  </div> <!-- .em-menu-pages -->
190
 
191
  <p class="submit">
192
+ <input type="submit" class="button-primary" name="Submit" value="<?php esc_attr_e( 'Save Changes', 'events-manager'); ?>" />
193
  <input type="hidden" name="em-submitted" value="1" />
194
  <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce('events-manager-options'); ?>" />
195
  </p>
admin/em-options.php CHANGED
@@ -226,8 +226,7 @@ function em_options_save(){
226
  header('Content-Disposition: attachment; filename="events-manager-settings.txt"');
227
  echo json_encode($options);
228
  exit();
229
- }
230
- if( !empty($_REQUEST['action']) && $_REQUEST['action'] == 'export_ms_em_settings' && check_admin_referer('export_ms_em_settings') && is_multisite() && is_super_admin() ){
231
  //delete transients, and add a flag to recheck dev version next time round
232
  global $EM_MS_Globals, $wpdb;
233
  $options = array();
@@ -346,7 +345,7 @@ function em_admin_options_page() {
346
  $bookings_placeholder_tip = " ". sprintf(__('This accepts %s, %s and %s placeholders.','events-manager'), $bookings_placeholders, $events_placeholders, $locations_placeholders);
347
 
348
  global $save_button;
349
- $save_button = '<tr><th>&nbsp;</th><td><p class="submit" style="margin:0px; padding:0px; text-align:right;"><input type="submit" class="button-primary" id="dbem_options_submit" name="Submit" value="'. __( 'Save Changes', 'events-manager') .' ('. __('All','events-manager') .')" /></p></ts></td></tr>';
350
 
351
  if( defined('EM_SETTINGS_TABS') && EM_SETTINGS_TABS ){
352
  $tabs_enabled = true;
@@ -416,7 +415,7 @@ function em_admin_options_page() {
416
  */ ?>
417
 
418
  <p class="submit">
419
- <input type="submit" id="dbem_options_submit" class="button-primary" name="Submit" value="<?php esc_attr_e( 'Save Changes', 'events-manager'); ?>" />
420
  <input type="hidden" name="em-submitted" value="1" />
421
  <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce('events-manager-options'); ?>" />
422
  </p>
226
  header('Content-Disposition: attachment; filename="events-manager-settings.txt"');
227
  echo json_encode($options);
228
  exit();
229
+ }elseif( !empty($_REQUEST['action']) && $_REQUEST['action'] == 'export_em_ms_settings' && check_admin_referer('export_em_ms_settings') && is_multisite() && is_super_admin() ){
 
230
  //delete transients, and add a flag to recheck dev version next time round
231
  global $EM_MS_Globals, $wpdb;
232
  $options = array();
345
  $bookings_placeholder_tip = " ". sprintf(__('This accepts %s, %s and %s placeholders.','events-manager'), $bookings_placeholders, $events_placeholders, $locations_placeholders);
346
 
347
  global $save_button;
348
+ $save_button = '<tr><th>&nbsp;</th><td><p class="submit" style="margin:0px; padding:0px; text-align:right;"><input type="submit" class="button-primary" name="Submit" value="'. __( 'Save Changes', 'events-manager') .' ('. __('All','events-manager') .')" /></p></td></tr>';
349
 
350
  if( defined('EM_SETTINGS_TABS') && EM_SETTINGS_TABS ){
351
  $tabs_enabled = true;
415
  */ ?>
416
 
417
  <p class="submit">
418
+ <input type="submit" class="button-primary" name="Submit" value="<?php esc_attr_e( 'Save Changes', 'events-manager'); ?>" />
419
  <input type="hidden" name="em-submitted" value="1" />
420
  <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce('events-manager-options'); ?>" />
421
  </p>
classes/em-categories-taxonomy.php CHANGED
@@ -39,7 +39,7 @@ class EM_Categories_Taxonomy{
39
 
40
  public static function form($tag){
41
  $category_color = '#FFFFFF';
42
- $category_image = '';
43
  if( $tag != EM_TAXONOMY_CATEGORY ){ //not an add new tag form
44
  $EM_Category = new EM_Category($tag);
45
  $category_color = $EM_Category->get_color();
39
 
40
  public static function form($tag){
41
  $category_color = '#FFFFFF';
42
+ $category_image = $category_image_id = '';
43
  if( $tag != EM_TAXONOMY_CATEGORY ){ //not an add new tag form
44
  $EM_Category = new EM_Category($tag);
45
  $category_color = $EM_Category->get_color();
classes/em-event.php CHANGED
@@ -424,39 +424,39 @@ class EM_Event extends EM_Object{
424
  $this->post_type = 'event-recurring';
425
  }
426
 
427
- //Dates and Times - ignored if event is recurring being updated (not new) and not specifically chosen to reschedule event
428
  if( !$this->is_recurring() || (empty($this->event_id) || !empty($_REQUEST['event_reschedule'])) ){
429
  //Event Dates
430
  $this->event_start_date = ( !empty($_POST['event_start_date']) ) ? wp_kses_data($_POST['event_start_date']) : '';
431
  $this->event_end_date = ( !empty($_POST['event_end_date']) ) ? wp_kses_data($_POST['event_end_date']) : $this->event_start_date;
432
- //Sort out time
433
- $this->event_all_day = ( !empty($_POST['event_all_day']) ) ? 1 : 0;
434
- if( $this->event_all_day ){
435
- $times_array = array('event_rsvp_time');
436
- $this->event_start_time = '00:00:00';
437
- $this->event_end_time = '23:59:59';
438
- }else{
439
- $times_array = array('event_start_time','event_end_time', 'event_rsvp_time');
440
- }
441
- foreach( $times_array as $timeName ){
442
- $match = array();
443
- if( !empty($_POST[$timeName]) && preg_match ( '/^([01]\d|[0-9]|2[0-3])(:([0-5]\d))? ?(AM|PM)?$/', $_POST[$timeName], $match ) ){
444
- if( empty($match[3]) ) $match[3] = '00';
445
- if( strlen($match[1]) == 1 ) $match[1] = '0'.$match[1];
446
- if( !empty($match[4]) && $match[4] == 'PM' && $match[1] != 12 ){
447
- $match[1] = 12+$match[1];
448
- }elseif( !empty($match[4]) && $match[4] == 'AM' && $match[1] == 12 ){
449
- $match[1] = '00';
450
- }
451
- $this->$timeName = $match[1].":".$match[3].":00";
452
- }else{
453
- $this->$timeName = ($timeName == 'event_start_time') ? "00:00:00":$this->event_start_time;
454
  }
 
 
 
455
  }
456
- //Start/End times should be available as timestamp
457
- $this->start = strtotime($this->event_start_date." ".$this->event_start_time);
458
- $this->end = strtotime($this->event_end_date." ".$this->event_end_time);
459
  }
 
 
 
460
 
461
  //Get Location info
462
  if( !get_option('dbem_locations_enabled') || (!empty($_POST['no_location']) && !get_option('dbem_require_location',true)) || (empty($_POST['location_id']) && !get_option('dbem_require_location',true) && get_option('dbem_use_select_for_locations')) ){
@@ -2184,6 +2184,10 @@ class EM_Event extends EM_Object{
2184
  global $wpdb;
2185
  $event_ids = $post_ids = array();
2186
  if( $this->can_manage('edit_events','edit_others_events') && ($this->is_published() || 'future' == $this->post_status) ){
 
 
 
 
2187
  do_action('em_event_save_events_pre', $this); //actions/filters only run if event is recurring
2188
  //Make template event index, post, and meta (we change event dates, timestamps, rsvp dates and other recurrence-relative info whilst saving each event recurrence)
2189
  $event = $this->to_array(true); //event template - for index
@@ -2278,7 +2282,7 @@ class EM_Event extends EM_Object{
2278
  //we go through all event main data and meta data, we delete and recreate all meta data
2279
  $meta_inserts = array();
2280
  //now unset some vars we don't need to deal with since we're just updating data in the wp_em_events and posts table
2281
- unset( $event['event_date_created'], $event['recurrence_id'], $event['recurrence'], $event['event_start_date'], $event['event_end_date'], $event['event_start_time'], $event['event_end_time'] );
2282
  $event['event_date_modified'] = current_time('mysql'); //since the recurrences are modified but not recreated
2283
  unset( $post_fields['comment_count'], $post_fields['guid'], $post_fields['menu_order']);
2284
  //now we go through the recurrences and check whether things relative to dates need to be changed
@@ -2301,8 +2305,8 @@ class EM_Event extends EM_Object{
2301
  //add meta fields we deleted and are specific to this event
2302
  $meta_fields['_event_start_date'] = $EM_Event->event_start_date;
2303
  $meta_fields['_event_end_date'] = $EM_Event->event_end_date;
2304
- $meta_fields['_start_ts'] = $EM_Event->start;
2305
- $meta_fields['_end_ts'] = $EM_Event->end;
2306
  //overwrite event and post tables
2307
  $wpdb->update(EM_EVENTS_TABLE, $event, array('event_id' => $EM_Event->event_id));
2308
  $wpdb->update($wpdb->posts, $post_fields, array('ID' => $EM_Event->post_id));
@@ -2313,7 +2317,7 @@ class EM_Event extends EM_Object{
2313
  }
2314
  //delete all meta
2315
  if( !empty($post_ids) ){
2316
- $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id IN (".implode(',', array_keys($post_ids)).")");
2317
  }
2318
  //insert the metas in one go, faster than one by one
2319
  if( count($meta_inserts) > 0 ){
@@ -2528,10 +2532,19 @@ class EM_Event extends EM_Object{
2528
  $current_week_day = ($current_week_day < 6) ? $current_week_day+1 : 0;
2529
  }
2530
  //Now grab from the array the x day of the month
2531
- $matching_day = ($this->recurrence_byweekno > 0) ? $matching_month_days[$this->recurrence_byweekno-1] : array_pop($matching_month_days);
2532
- $matching_date = strtotime(date('Y-m',$current_date).'-'.$matching_day);
2533
- if($matching_date >= $start_date && $matching_date <= $end_date){
2534
- $matching_days[] = $matching_date;
 
 
 
 
 
 
 
 
 
2535
  }
2536
  //add the number of days in this month to make start of next month
2537
  $current_arr['mon'] += $this->recurrence_interval;
@@ -2583,7 +2596,7 @@ class EM_Event extends EM_Object{
2583
  $EM_Event_Recurring = $this->get_event_recurrence();
2584
  $recurrence = $this->to_array();
2585
  $weekdays_name = array( translate('Sunday'),translate('Monday'),translate('Tuesday'),translate('Wednesday'),translate('Thursday'),translate('Friday'),translate('Saturday'));
2586
- $monthweek_name = array('1' => __('the first %s of the month', 'events-manager'),'2' => __('the second %s of the month', 'events-manager'), '3' => __('the third %s of the month', 'events-manager'), '4' => __('the fourth %s of the month', 'events-manager'), '-1' => __('the last %s of the month', 'events-manager'));
2587
  $output = sprintf (__('From %1$s to %2$s', 'events-manager'), $EM_Event_Recurring->event_start_date, $EM_Event_Recurring->event_end_date).", ";
2588
  if ($EM_Event_Recurring->recurrence_freq == 'daily') {
2589
  $freq_desc =__('everyday', 'events-manager');
424
  $this->post_type = 'event-recurring';
425
  }
426
 
427
+ //Dates and Times - dates ignored if event is recurring being updated (not new) and not specifically chosen to reschedule event
428
  if( !$this->is_recurring() || (empty($this->event_id) || !empty($_REQUEST['event_reschedule'])) ){
429
  //Event Dates
430
  $this->event_start_date = ( !empty($_POST['event_start_date']) ) ? wp_kses_data($_POST['event_start_date']) : '';
431
  $this->event_end_date = ( !empty($_POST['event_end_date']) ) ? wp_kses_data($_POST['event_end_date']) : $this->event_start_date;
432
+ }
433
+ //Sort out time
434
+ $this->event_all_day = ( !empty($_POST['event_all_day']) ) ? 1 : 0;
435
+ if( $this->event_all_day ){
436
+ $times_array = array('event_rsvp_time');
437
+ $this->event_start_time = '00:00:00';
438
+ $this->event_end_time = '23:59:59';
439
+ }else{
440
+ $times_array = array('event_start_time','event_end_time', 'event_rsvp_time');
441
+ }
442
+ foreach( $times_array as $timeName ){
443
+ $match = array();
444
+ if( !empty($_POST[$timeName]) && preg_match ( '/^([01]\d|[0-9]|2[0-3])(:([0-5]\d))? ?(AM|PM)?$/', $_POST[$timeName], $match ) ){
445
+ if( empty($match[3]) ) $match[3] = '00';
446
+ if( strlen($match[1]) == 1 ) $match[1] = '0'.$match[1];
447
+ if( !empty($match[4]) && $match[4] == 'PM' && $match[1] != 12 ){
448
+ $match[1] = 12+$match[1];
449
+ }elseif( !empty($match[4]) && $match[4] == 'AM' && $match[1] == 12 ){
450
+ $match[1] = '00';
 
 
 
451
  }
452
+ $this->$timeName = $match[1].":".$match[3].":00";
453
+ }else{
454
+ $this->$timeName = ($timeName == 'event_start_time') ? "00:00:00":$this->event_start_time;
455
  }
 
 
 
456
  }
457
+ //Start/End times should be available as timestamp
458
+ $this->start = strtotime($this->event_start_date." ".$this->event_start_time);
459
+ $this->end = strtotime($this->event_end_date." ".$this->event_end_time);
460
 
461
  //Get Location info
462
  if( !get_option('dbem_locations_enabled') || (!empty($_POST['no_location']) && !get_option('dbem_require_location',true)) || (empty($_POST['location_id']) && !get_option('dbem_require_location',true) && get_option('dbem_use_select_for_locations')) ){
2184
  global $wpdb;
2185
  $event_ids = $post_ids = array();
2186
  if( $this->can_manage('edit_events','edit_others_events') && ($this->is_published() || 'future' == $this->post_status) ){
2187
+ //check if there's any events already created, if not (such as when an event is first submitted for approval and then published), force a reschedule.
2188
+ if( $wpdb->get_var('SELECT COUNT(event_id) FROM '.EM_EVENTS_TABLE.' WHERE recurrence_id='. absint($this->event_id)) == 0 ){
2189
+ $this->recurring_reschedule = true;
2190
+ }
2191
  do_action('em_event_save_events_pre', $this); //actions/filters only run if event is recurring
2192
  //Make template event index, post, and meta (we change event dates, timestamps, rsvp dates and other recurrence-relative info whilst saving each event recurrence)
2193
  $event = $this->to_array(true); //event template - for index
2282
  //we go through all event main data and meta data, we delete and recreate all meta data
2283
  $meta_inserts = array();
2284
  //now unset some vars we don't need to deal with since we're just updating data in the wp_em_events and posts table
2285
+ unset( $event['event_date_created'], $event['recurrence_id'], $event['recurrence'], $event['event_start_date'], $event['event_end_date'] );
2286
  $event['event_date_modified'] = current_time('mysql'); //since the recurrences are modified but not recreated
2287
  unset( $post_fields['comment_count'], $post_fields['guid'], $post_fields['menu_order']);
2288
  //now we go through the recurrences and check whether things relative to dates need to be changed
2305
  //add meta fields we deleted and are specific to this event
2306
  $meta_fields['_event_start_date'] = $EM_Event->event_start_date;
2307
  $meta_fields['_event_end_date'] = $EM_Event->event_end_date;
2308
+ $meta_fields['_start_ts'] = strtotime($EM_Event->event_start_date." ".$this->event_start_time);
2309
+ $meta_fields['_end_ts'] = strtotime($EM_Event->event_end_date." ".$this->event_end_time);
2310
  //overwrite event and post tables
2311
  $wpdb->update(EM_EVENTS_TABLE, $event, array('event_id' => $EM_Event->event_id));
2312
  $wpdb->update($wpdb->posts, $post_fields, array('ID' => $EM_Event->post_id));
2317
  }
2318
  //delete all meta
2319
  if( !empty($post_ids) ){
2320
+ $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id IN (".implode(',', $post_ids).")");
2321
  }
2322
  //insert the metas in one go, faster than one by one
2323
  if( count($meta_inserts) > 0 ){
2532
  $current_week_day = ($current_week_day < 6) ? $current_week_day+1 : 0;
2533
  }
2534
  //Now grab from the array the x day of the month
2535
+ $matching_day = false;
2536
+ if( $this->recurrence_byweekno > 0 ){
2537
+ if( !empty($matching_month_days[$this->recurrence_byweekno-1]) ){
2538
+ $matching_day = $matching_month_days[$this->recurrence_byweekno-1];
2539
+ }
2540
+ }else{
2541
+ $matching_day = array_pop($matching_month_days);
2542
+ }
2543
+ if( !empty($matching_day) ){
2544
+ $matching_date = strtotime(date('Y-m',$current_date).'-'.$matching_day);
2545
+ if($matching_date >= $start_date && $matching_date <= $end_date){
2546
+ $matching_days[] = $matching_date;
2547
+ }
2548
  }
2549
  //add the number of days in this month to make start of next month
2550
  $current_arr['mon'] += $this->recurrence_interval;
2596
  $EM_Event_Recurring = $this->get_event_recurrence();
2597
  $recurrence = $this->to_array();
2598
  $weekdays_name = array( translate('Sunday'),translate('Monday'),translate('Tuesday'),translate('Wednesday'),translate('Thursday'),translate('Friday'),translate('Saturday'));
2599
+ $monthweek_name = array('1' => __('the first %s of the month', 'events-manager'),'2' => __('the second %s of the month', 'events-manager'), '3' => __('the third %s of the month', 'events-manager'), '4' => __('the fourth %s of the month', 'events-manager'), '5' => __('the fifth %s of the month', 'events-manager'), '-1' => __('the last %s of the month', 'events-manager'));
2600
  $output = sprintf (__('From %1$s to %2$s', 'events-manager'), $EM_Event_Recurring->event_start_date, $EM_Event_Recurring->event_end_date).", ";
2601
  if ($EM_Event_Recurring->recurrence_freq == 'daily') {
2602
  $freq_desc =__('everyday', 'events-manager');
em-shortcode.php CHANGED
@@ -39,6 +39,8 @@ function em_get_locations_map_shortcode($args){
39
  $args['height'] = $height;
40
  //assign random number for element id reference
41
  $args['random_id'] = substr(md5(rand().rand()),0,5);
 
 
42
  if( !empty($args['map_style']) ){
43
  $style= base64_decode($args['map_style']);
44
  $style_json= json_decode($style);
@@ -74,6 +76,8 @@ function em_get_events_map_shortcode($args){
74
  $args['height'] = $height;
75
  //assign random number for element id reference
76
  $args['random_id'] = substr(md5(rand().rand()),0,5);
 
 
77
  if( !empty($args['map_style']) ){
78
  $style= base64_decode($args['map_style']);
79
  $style_json= json_decode($style);
39
  $args['height'] = $height;
40
  //assign random number for element id reference
41
  $args['random_id'] = substr(md5(rand().rand()),0,5);
42
+ //add JSON style to map
43
+ $style = '';
44
  if( !empty($args['map_style']) ){
45
  $style= base64_decode($args['map_style']);
46
  $style_json= json_decode($style);
76
  $args['height'] = $height;
77
  //assign random number for element id reference
78
  $args['random_id'] = substr(md5(rand().rand()),0,5);
79
+ //add JSON style to map
80
+ $style = '';
81
  if( !empty($args['map_style']) ){
82
  $style= base64_decode($args['map_style']);
83
  $style_json= json_decode($style);
events-manager.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  Plugin Name: Events Manager
4
- Version: 5.7.2
5
  Plugin URI: http://wp-events-plugin.com
6
  Description: Event registration and booking management for WordPress. Recurring events, locations, google maps, rss, ical, booking registration and more!
7
  Author: Marcus Sykes
1
  <?php
2
  /*
3
  Plugin Name: Events Manager
4
+ Version: 5.7.3
5
  Plugin URI: http://wp-events-plugin.com
6
  Description: Event registration and booking management for WordPress. Recurring events, locations, google maps, rss, ical, booking registration and more!
7
  Author: Marcus Sykes
includes/css/events_manager.css CHANGED
@@ -19,6 +19,7 @@ div#em-loading { position:absolute; width:100%; height:100%; background:#FFFFFF
19
  div.css-search input, div.css-search select, div.css-search option, div.css-search div, div.css-search span, div.css-search button {
20
  width:auto; height:auto; margin:0; padding:0; float:none; display:inline-block; font-size:14px; /* reset everything */
21
  }
 
22
  div.css-search input, div.css-search select { padding:5px; }
23
  div.css-search { background:#fff; border:1px solid #dedede; border-radius:3px; padding:5px; min-height:40px; position:relative; -moz-border-radius:3px; -webkit-border-radius:3px; }
24
  /* Main Search */
19
  div.css-search input, div.css-search select, div.css-search option, div.css-search div, div.css-search span, div.css-search button {
20
  width:auto; height:auto; margin:0; padding:0; float:none; display:inline-block; font-size:14px; /* reset everything */
21
  }
22
+ div.css-search option { display:block; }
23
  div.css-search input, div.css-search select { padding:5px; }
24
  div.css-search { background:#fff; border:1px solid #dedede; border-radius:3px; padding:5px; min-height:40px; position:relative; -moz-border-radius:3px; -webkit-border-radius:3px; }
25
  /* Main Search */
readme.txt CHANGED
@@ -4,8 +4,8 @@ Donate link: http://wp-events-plugin.com
4
  Tags: bookings, calendar, tickets, events, buddypress, event management, google maps, maps, locations, registration
5
  Text Domain: events-manager
6
  Requires at least: 3.5
7
- Tested up to: 4.7.4
8
- Stable tag: 5.7.2
9
 
10
  Fully featured event registration management including recurring events, locations management, calendar, Google map integration, booking management
11
 
@@ -99,6 +99,17 @@ See our [FAQ](http://wp-events-plugin.com/documentation/faq/) page, which is upd
99
  6. Manage attendees with various booking reports
100
 
101
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
102
  = 5.7.2 =
103
  * fixed subsite events in MS Global mode not being able to save new events and resulting in orphaned entries in wp_em_events table
104
  * added admin tool to allow removal of orphaned events in wp_em_events database table
4
  Tags: bookings, calendar, tickets, events, buddypress, event management, google maps, maps, locations, registration
5
  Text Domain: events-manager
6
  Requires at least: 3.5
7
+ Tested up to: 4.8
8
+ Stable tag: 5.7.3
9
 
10
  Fully featured event registration management including recurring events, locations management, calendar, Google map integration, booking management
11
 
99
  6. Manage attendees with various booking reports
100
 
101
  == Changelog ==
102
+ = 5.7.3 =
103
+ * fixed previous meta not getting deleted from recurrences resulting in non-saved information such as a changed featured image or location
104
+ * fixed newly submitted recurrences first saved in draft or pending mode not creating new events without a reschedule
105
+ * fixed export settings button not working in MultiSite
106
+ * fixed CSS issue in search form advanced field dropdowns on firefox
107
+ * fixed PHP warning when displaying locations and events map via shortcode (kudos @Beee)
108
+ * fixed minor PHP warning on category admin pages where image isn't defined (kudos @Beee)
109
+ * fixed booking admin 'Add Note' button not being translatable
110
+ * added fifth day of month in recurrences pattern
111
+ * added ability to change event times on recurring events without recreating recurrences
112
+
113
  = 5.7.2 =
114
  * fixed subsite events in MS Global mode not being able to save new events and resulting in orphaned entries in wp_em_events table
115
  * added admin tool to allow removal of orphaned events in wp_em_events database table
templates/forms/event/recurring-when.php CHANGED
@@ -5,12 +5,19 @@ $days_names = em_get_days_names();
5
  $hours_format = em_get_hour_format();
6
  $classes = array();
7
  ?>
8
- <!-- START recurrence postbox -->
9
- <div id="em-form-recurrence" class="event-form-recurrence event-form-when <?php if( !empty($EM_Event->event_id) ) echo 'em-recurrence-reschedule'; ?>">
 
 
 
 
 
 
 
10
  <?php if( !empty($EM_Event->event_id) ): ?>
11
  <div class="recurrence-reschedule-warning">
12
  <p><em><?php echo sprintf(esc_html__('Current Recurrence Pattern: %s', 'events-manager'), $EM_Event->get_recurrence_description()); ?></em></p>
13
- <p><strong><?php esc_html_e( 'Modifications to event times will cause all recurrences of this event to be deleted and recreated, previous bookings will be deleted.', 'events-manager'); ?></strong></p>
14
  <p>
15
  <a href="<?php echo esc_url( add_query_arg(array('scope'=>'all', 'recurrence_id'=>$EM_Event->event_id), em_get_events_admin_url()) ); ?>">
16
  <strong><?php esc_html_e('You can edit individual recurrences and disassociate them with this recurring event.', 'events-manager'); ?></strong>
@@ -45,7 +52,7 @@ $classes = array();
45
  <p class="alternate-selector" id="monthly-selector" style="display:inline;">
46
  <select id="monthly-modifier" name="recurrence_byweekno">
47
  <?php
48
- $weekno_options = array ("1" => __ ( 'first', 'events-manager'), '2' => __ ( 'second', 'events-manager'), '3' => __ ( 'third', 'events-manager'), '4' => __ ( 'fourth', 'events-manager'), '-1' => __ ( 'last', 'events-manager') );
49
  em_option_items ( $weekno_options, $EM_Event->recurrence_byweekno );
50
  ?>
51
  </select>
@@ -64,13 +71,6 @@ $classes = array();
64
  <input class="em-date-end em-date-input-loc" type="text" />
65
  <input class="em-date-input" type="hidden" name="event_end_date" value="<?php echo $EM_Event->event_end_date ?>" />
66
  </p>
67
- <p class="em-time-range">
68
- <?php _e('Events start from','events-manager'); ?>
69
- <input id="start-time" class="em-time-input em-time-start" type="text" size="8" maxlength="8" name="event_start_time" value="<?php echo date( $hours_format, $EM_Event->start ); ?>" />
70
- <?php _e('to','events-manager'); ?>
71
- <input id="end-time" class="em-time-input em-time-end" type="text" size="8" maxlength="8" name="event_end_time" value="<?php echo date( $hours_format, $EM_Event->end ); ?>" />
72
- <?php _e('All day','events-manager'); ?> <input type="checkbox" class="em-time-allday" name="event_all_day" id="em-time-all-day" value="1" <?php if(!empty($EM_Event->event_all_day)) echo 'checked="checked"'; ?> />
73
- </p>
74
  <p class="em-duration-range">
75
  <?php echo sprintf(__('Each event spans %s day(s)','events-manager'), '<input id="end-days" type="text" size="8" maxlength="8" name="recurrence_days" value="'. $EM_Event->recurrence_days .'" />'); ?>
76
  </p>
@@ -88,4 +88,5 @@ $classes = array();
88
  <input type="hidden" name="event_reschedule" class="em-reschedule-value" value="<?php echo empty($_REQUEST['reschedule']) ? 0:1 ?>" />
89
  </div>
90
  <?php endif; ?>
 
91
  </div>
5
  $hours_format = em_get_hour_format();
6
  $classes = array();
7
  ?>
8
+ <div id="em-form-recurrence" class="event-form-recurrence event-form-when">
9
+ <p class="em-time-range">
10
+ <?php _e('Events start from','events-manager'); ?>
11
+ <input id="start-time" class="em-time-input em-time-start" type="text" size="8" maxlength="8" name="event_start_time" value="<?php echo date( $hours_format, $EM_Event->start ); ?>" />
12
+ <?php _e('to','events-manager'); ?>
13
+ <input id="end-time" class="em-time-input em-time-end" type="text" size="8" maxlength="8" name="event_end_time" value="<?php echo date( $hours_format, $EM_Event->end ); ?>" />
14
+ <?php _e('All day','events-manager'); ?> <input type="checkbox" class="em-time-allday" name="event_all_day" id="em-time-all-day" value="1" <?php if(!empty($EM_Event->event_all_day)) echo 'checked="checked"'; ?> />
15
+ </p>
16
+ <div class="<?php if( !empty($EM_Event->event_id) ) echo 'em-recurrence-reschedule'; ?>">
17
  <?php if( !empty($EM_Event->event_id) ): ?>
18
  <div class="recurrence-reschedule-warning">
19
  <p><em><?php echo sprintf(esc_html__('Current Recurrence Pattern: %s', 'events-manager'), $EM_Event->get_recurrence_description()); ?></em></p>
20
+ <p><strong><?php esc_html_e( 'Modifications to event dates will cause all recurrences of this event to be deleted and recreated, previous bookings will be deleted.', 'events-manager'); ?></strong></p>
21
  <p>
22
  <a href="<?php echo esc_url( add_query_arg(array('scope'=>'all', 'recurrence_id'=>$EM_Event->event_id), em_get_events_admin_url()) ); ?>">
23
  <strong><?php esc_html_e('You can edit individual recurrences and disassociate them with this recurring event.', 'events-manager'); ?></strong>
52
  <p class="alternate-selector" id="monthly-selector" style="display:inline;">
53
  <select id="monthly-modifier" name="recurrence_byweekno">
54
  <?php
55
+ $weekno_options = array ("1" => __ ( 'first', 'events-manager'), '2' => __ ( 'second', 'events-manager'), '3' => __ ( 'third', 'events-manager'), '4' => __ ( 'fourth', 'events-manager'), '5' => __ ( 'fifth', 'events-manager'), '-1' => __ ( 'last', 'events-manager') );
56
  em_option_items ( $weekno_options, $EM_Event->recurrence_byweekno );
57
  ?>
58
  </select>
71
  <input class="em-date-end em-date-input-loc" type="text" />
72
  <input class="em-date-input" type="hidden" name="event_end_date" value="<?php echo $EM_Event->event_end_date ?>" />
73
  </p>
 
 
 
 
 
 
 
74
  <p class="em-duration-range">
75
  <?php echo sprintf(__('Each event spans %s day(s)','events-manager'), '<input id="end-days" type="text" size="8" maxlength="8" name="recurrence_days" value="'. $EM_Event->recurrence_days .'" />'); ?>
76
  </p>
88
  <input type="hidden" name="event_reschedule" class="em-reschedule-value" value="<?php echo empty($_REQUEST['reschedule']) ? 0:1 ?>" />
89
  </div>
90
  <?php endif; ?>
91
+ </div>
92
  </div>