diff --git a/assets/squat-radar.js b/assets/squat-radar.js index 00394f9..8939ee9 100644 --- a/assets/squat-radar.js +++ b/assets/squat-radar.js @@ -7,7 +7,7 @@ jQuery(function($){ type: 'POST', data: { action: "squat_radar_events", - instance: window[widget.id], + instance: squat_radar_widget[widget.id], }, success: function(result){ @@ -20,17 +20,6 @@ jQuery(function($){ } else { $(widget).empty(); $(widget).append(result.html); -// $(".squat-li a").on('click', function(e){ - -// if (this.hasAttribute("data-link")) { -// e.preventDefault(); -// $(this).parent().find('p').show(); -// this.textContent = this.getAttribute('data-nog-meer'); -// this.setAttribute('href', this.getAttribute('data-link')); -// this.removeAttribute('data-link'); -// } -// -// }); } }, error: function(res){ diff --git a/includes/squat-radar-widget.php b/includes/squat-radar-widget.php index f4a6eef..26034ac 100644 --- a/includes/squat-radar-widget.php +++ b/includes/squat-radar-widget.php @@ -25,11 +25,11 @@ class Squat_Radar_Widget extends WP_Widget { /** * Register the widget */ - public static function register_widget() { - register_widget( __CLASS__ ); + public static function register_widget() { + register_widget( __CLASS__ ); add_action( 'wp_ajax_squat_radar_events', [__CLASS__, 'ajax_callback'] ); add_action( 'wp_ajax_nopriv_squat_radar_events', [__CLASS__, 'ajax_callback'] ); - add_action( 'wp_enqueue_scripts', [__CLASS__, 'widget_script'] ); + wp_register_script( 'squat-radar-widget', SQUAT_RADAR_URL . 'assets/squat-radar.js', ['jquery'] ); add_action( 'wp_enqueue_scripts', [__CLASS__, 'widget_style'] ); add_action( 'squat_radar_widget_cache_cron', [__CLASS__, 'cache_cron'] ); @@ -44,13 +44,6 @@ class Squat_Radar_Widget extends WP_Widget { wp_enqueue_style( 'squat-radar-widget' ); } - /** - * Enqueue scripts callback, add JS. - */ - static public function widget_script() { - wp_register_script( 'squat-radar-widget', SQUAT_RADAR_URL . 'assets/squat-radar.js', ['jquery'] ); - } - /** * Cron action. * @@ -66,7 +59,7 @@ class Squat_Radar_Widget extends WP_Widget { } } } - add_option('squat_radar_widget_cron_run', $last_run); + update_option('squat_radar_widget_cron_run', $last_run); } /** @@ -75,9 +68,9 @@ class Squat_Radar_Widget extends WP_Widget { protected static function cache_refresh($instance) { $connector = new Squat_Radar_Connector(); - $languages = apply_filters('wpml_active_languages', NULL); - $languages = is_array($languages) ? array_keys($languages) : []; - $languages = array_merge($instance['url']['keys']['language'], $languages); + $languages = apply_filters('wpml_active_languages', NULL); + $languages = is_array($languages) ? array_keys($languages) : []; + $languages = array_merge([$instance['url']['keys']['language']], $languages); foreach ($languages as $language) { try { // Force update. Don't set expire. @@ -119,9 +112,12 @@ class Squat_Radar_Widget extends WP_Widget { } } else { - wp_enqueue_script( 'squat-radar-widget'); - wp_localize_script( 'squat-radar-widget', 'squat_radar_widget', [ 'ajaxurl' => admin_url( 'admin-ajax.php' ) ] ); - wp_localize_script( 'squat-radar-widget', $widget_id, ['number' => $this->number] ); + wp_enqueue_script( 'squat-radar-widget'); + wp_add_inline_script('squat-radar-widget', + 'const squat_radar_widget = ' . json_encode( [ + 'ajaxurl' => admin_url( 'admin-ajax.php' ), + $widget_id => $this->number, + ] ) . ';', 'before'); echo '
' . esc_url( $instance['url']['value'] ) @@ -142,7 +138,7 @@ class Squat_Radar_Widget extends WP_Widget { $data = []; // Load instance configuration from ID. - $instance_number = (int) $_POST['instance']['number']; + $instance_number = (int) $_POST['instance']; $widget_options_all = get_option('widget_squat_radar'); if ( ! isset($widget_options_all[$instance_number]) ) { wp_die(); @@ -181,7 +177,6 @@ class Squat_Radar_Widget extends WP_Widget { * Widget options. */ public function form( $instance ) { - // // Title. // @@ -329,8 +324,7 @@ class Squat_Radar_Widget extends WP_Widget { * Save widget options. */ public function update( $new_instance, $old_instance ) { - $options = []; - + $options = []; if ( ! empty( $new_instance['title'] ) ) { $options['title'] = sanitize_text_field( $new_instance['title'] ); } @@ -338,10 +332,18 @@ class Squat_Radar_Widget extends WP_Widget { $options['title'] = ''; } - if ( ! empty($new_instance['url']) ) { - $keys = $this->connector->decode_search_url($new_instance['url']); + if ( ! empty($new_instance['url']) ) { + // The value passed here changes somewhere post WP5.4. + // More recent versions have the options array in the instance. + if (is_string($new_instance['url'])) { + $url = $new_instance['url']; + } + else { + $url = $new_instance['url']['value']; + } + $keys = $this->connector->decode_search_url($url); $options['url']['keys'] = $keys; - $options['url']['value'] = $new_instance['url']; + $options['url']['value'] = $url; if (empty($keys)) { $options['url']['error'] = 'URL not recognised'; } @@ -350,14 +352,20 @@ class Squat_Radar_Widget extends WP_Widget { $options['url'] = ['value' => '', 'keys' => []]; } - $options['fields'] = []; + // When called by 5.9 ajax this contains the already set array. + // Just check it's sane. + $options['fields'] = is_array($new_instance['fields']) ? $new_instance['fields'] : []; + array_filter($options['fields'], function ($v, $k) { + return ($v == $k) && (preg_match('([^a-zA-Z_:])', $k) === 0); + }, ARRAY_FILTER_USE_BOTH); + foreach ($this->preset_fields() as $field_name => $field_label) { if ( ! empty($new_instance['field-' . $field_name]) ) { $options['fields'][$field_name] = $field_name; } } - if ( ! empty($new_instance['fields']) ) { + if ( ! empty($new_instance['fields']) && is_string($new_instance['fields']) ) { $matches = []; preg_match_all('/([a-zA-Z_:]+)/', $new_instance['fields'], $matches); $options['fields'] += array_combine($matches[0], $matches[0]);