From 1709b7dd6c3d0d6d21c448ad4561d03b846cbad1 Mon Sep 17 00:00:00 2001 From: lucha <lucha@paranoici.org> Date: Sat, 26 Aug 2017 17:41:15 +0200 Subject: [PATCH] [auto] plugin: event-list 0.7.9 --- .../admin/includes/admin-categories.php | 5 +-- .../event-list/admin/includes/admin-main.php | 12 ++++--- .../event-list/admin/includes/admin-new.php | 8 ++--- .../event-list/admin/includes/event_table.php | 7 +--- .../plugins/event-list/admin/js/admin_new.js | 2 +- wp-content/plugins/event-list/event-list.php | 4 +-- .../event-list/includes/categories.php | 5 ++- wp-content/plugins/event-list/includes/db.php | 34 ++++++++++++++++--- .../event-list/includes/js/filterbar.js | 5 +-- .../event-list/includes/sc_event-list.php | 16 +++------ wp-content/plugins/event-list/readme.txt | 11 ++++-- 11 files changed, 69 insertions(+), 40 deletions(-) diff --git a/wp-content/plugins/event-list/admin/includes/admin-categories.php b/wp-content/plugins/event-list/admin/includes/admin-categories.php index 51b8b1e35..fbc85cec6 100644 --- a/wp-content/plugins/event-list/admin/includes/admin-categories.php +++ b/wp-content/plugins/event-list/admin/includes/admin-categories.php @@ -78,10 +78,11 @@ class EL_Admin_Categories { if(!$is_disabled) { // delete categories $slug_array = explode(', ', $_GET['slug']); + $slug_array = array_map('sanitize_title_for_query', $slug_array); $num_affected_events = $this->db->remove_category_in_events($slug_array); if($this->categories->remove_categories($slug_array, false)) { $out .= '<div id="message" class="updated"> - <p><strong>'.sprintf(__('Category "%s" deleted.','event-list'), $_GET['slug']); + <p><strong>'.sprintf(__('Category "%s" deleted.','event-list'), implode(', ', $slug_array)); if($num_affected_events > 0) { $out .= '<br />'.sprintf(__('This Category was also removed from %d events.','event-list'), $num_affected_events); } @@ -89,7 +90,7 @@ class EL_Admin_Categories { </div>'; } else { - $out .= '<div id="message" class="error below-h2"><p><strong>'.sprintf(__('Error while deleting category "%s"','event-list'), $_GET['slug']).'.</strong></p></div>'; + $out .= '<div id="message" class="error below-h2"><p><strong>'.sprintf(__('Error while deleting category "%s"','event-list'), implode(', ', $slug_array)).'.</strong></p></div>'; } } } diff --git a/wp-content/plugins/event-list/admin/includes/admin-main.php b/wp-content/plugins/event-list/admin/includes/admin-main.php index 562fa6dd7..b76ef476d 100644 --- a/wp-content/plugins/event-list/admin/includes/admin-main.php +++ b/wp-content/plugins/event-list/admin/includes/admin-main.php @@ -48,8 +48,10 @@ class EL_Admin_Main { break; case 'delete': if(isset($_GET['id'])) { - $error = !$this->db->delete_events(explode(',', $_GET['id'])); - $this->redirect('deleted', $error, array('id' => $_GET['id'])); + $id_array = explode(',', $_GET['id']); + $id_array = array_map('absint', $id_array); + $error = !$this->db->delete_events($id_array); + $this->redirect('deleted', $error, array('id' => implode(',', $id_array))); } break; // proceed with header if a bulk action was triggered (required due to "noheader" attribute for all action above) @@ -110,7 +112,7 @@ class EL_Admin_Main { private function show_page_header($action, $editview=false) { if($editview) { - $duplicate_link = add_query_arg(array('id'=>$_GET['id'], 'action'=>'copy'), '?page=el_admin_new'); + $duplicate_link = add_query_arg(array('id'=>absint($_GET['id']), 'action'=>'copy'), '?page=el_admin_new'); $header = __('Edit Event','event-list').' <a href="'.$duplicate_link.'" class="add-new-h2">'.__('Duplicate','event-list').'</a>'; } else { @@ -188,9 +190,9 @@ class EL_Admin_Main { $num_deleted = count(explode(',', $_GET['id'])); $plural = ($num_deleted > 1) ? 's' : ''; if(!$error) - $this->show_update_message($num_deleted.' Event'.$plural.' deleted (id'.$plural.': '.$_GET['id'].').'); + $this->show_update_message($num_deleted.' Event'.$plural.' deleted (id'.$plural.': '.htmlentities($_GET['id']).').'); else - $this->show_error_message('Error while deleting '.$num_deleted.' Event'.$plural.'.'); + $this->show_error_message('Error: Deleting failed (Event id'.$plural.': '.htmlentities($_GET['id']).')!'); break; } } diff --git a/wp-content/plugins/event-list/admin/includes/admin-new.php b/wp-content/plugins/event-list/admin/includes/admin-new.php index 7af47b000..44af157af 100644 --- a/wp-content/plugins/event-list/admin/includes/admin-new.php +++ b/wp-content/plugins/event-list/admin/includes/admin-new.php @@ -30,7 +30,7 @@ class EL_Admin_New { $this->options = &EL_Options::get_instance(); $this->categories = &EL_Categories::get_instance(); $this->is_new = !(isset($_GET['action']) && ('edit' === $_GET['action'] || 'added' === $_GET['action'] || 'modified' === $_GET['action'])); - $this->is_duplicate = $this->is_new && isset($_GET['id']) && is_numeric($_GET['id']); + $this->is_duplicate = $this->is_new && isset($_GET['id']) && intval($_GET['id']) > 0; } public function show_new() { @@ -40,7 +40,7 @@ class EL_Admin_New { $out = '<div class="wrap"> <div id="icon-edit-pages" class="icon32"><br /></div><h2>'.__('Add New Event','event-list').'</h2>'; if($this->is_duplicate) { - $out .= '<span style="color:silver">('.sprintf(__('Duplicate of event id:%d','event-list'), $_GET['id']).')</span>'; + $out .= '<span style="color:silver">('.sprintf(__('Duplicate of event id:%d','event-list'), absint($_GET['id'])).')</span>'; } $out .= $this->edit_event(); $out .= '</div>'; @@ -72,7 +72,7 @@ class EL_Admin_New { } else { // set event data and existing date - $event = $this->db->get_event($_GET['id']); + $event = $this->db->get_event(absint($_GET['id'])); $start_date = strtotime($event->start_date); $end_date = strtotime($event->end_date); } @@ -98,7 +98,7 @@ class EL_Admin_New { else { $out .= ' <input type="hidden" name="action" value="edited" /> - <input type="hidden" name="id" value="'.$_GET['id'].'" />'; + <input type="hidden" name="id" value="'.absint($_GET['id']).'" />'; } $out .= ' <table class="form-table"> diff --git a/wp-content/plugins/event-list/admin/includes/event_table.php b/wp-content/plugins/event-list/admin/includes/event_table.php index a2ee5756b..f75991196 100644 --- a/wp-content/plugins/event-list/admin/includes/event_table.php +++ b/wp-content/plugins/event-list/admin/includes/event_table.php @@ -45,7 +45,7 @@ class EL_Event_Table extends WP_List_Table { case 'date' : return $this->format_event_date($item->start_date, $item->end_date, $item->time); case 'details' : - return $this->db->truncate(wpautop('<div>'.$item->details.'</div>'), 100); + return $this->db->truncate('<div>'.wpautop($item->details).'</div>', 100); case 'pub_user' : return get_userdata($item->pub_user)->user_login; case 'pub_date' : @@ -277,11 +277,6 @@ class EL_Event_Table extends WP_List_Table { } // event time if('' !== $start_time) { - // set time format if a known format is available, else only show the text - $date_array = date_parse($start_time); - if(empty($date_array['errors']) && is_numeric($date_array['hour']) && is_numeric($date_array['minute'])) { - $start_time = mysql2date(get_option('time_format'), $start_time); - } $out .= '<br /> <span class="time">'.esc_html($start_time).'</span>'; } diff --git a/wp-content/plugins/event-list/admin/js/admin_new.js b/wp-content/plugins/event-list/admin/js/admin_new.js index b4131a57f..e87c87455 100644 --- a/wp-content/plugins/event-list/admin/js/admin_new.js +++ b/wp-content/plugins/event-list/admin/js/admin_new.js @@ -4,7 +4,7 @@ jQuery(document).ready(function($) { // Read required config data from hidden field json_for_js var json = $("#json_for_js").val(); - var conf = eval('(' + json + ')'); + var conf = JSON.parse(json); // Show or hide end_date if ($("#start_date").val() == $("#end_date").val()) { diff --git a/wp-content/plugins/event-list/event-list.php b/wp-content/plugins/event-list/event-list.php index bf84127ac..a8faf4bb9 100644 --- a/wp-content/plugins/event-list/event-list.php +++ b/wp-content/plugins/event-list/event-list.php @@ -3,7 +3,7 @@ Plugin Name: Event List Plugin URI: http://wordpress.org/extend/plugins/event-list/ Description: Manage your events and show them in a list view on your site. -Version: 0.7.8 +Version: 0.7.9 Author: mibuthu Author URI: http://wordpress.org/extend/plugins/event-list/ Text Domain: event-list @@ -84,7 +84,7 @@ class Event_List { } else { // use fork of wordpress function load_plugin_textdomain (see wp-includes/l10n.php) to prefer language files included in plugin (wp-content/plugins/event-list/languages/) and additionally from language dir - $locale = apply_filters('plugin_locale', is_admin() ? get_user_locale() : get_locale(), $domain); + $locale = apply_filters('plugin_locale', is_callable('get_user_locale') ? get_user_locale() : get_locale(), $domain); $mofile = $domain.'-'.$locale.'.mo'; load_textdomain($domain, WP_PLUGIN_DIR.'/'.$el_lang_path.'/'.$mofile); load_textdomain($domain, WP_LANG_DIR.'/plugins/'.$mofile); diff --git a/wp-content/plugins/event-list/includes/categories.php b/wp-content/plugins/event-list/includes/categories.php index b4cafbf57..8ff278e9f 100644 --- a/wp-content/plugins/event-list/includes/categories.php +++ b/wp-content/plugins/event-list/includes/categories.php @@ -316,7 +316,10 @@ class EL_Categories { } public function get_category_data($slug) { - return $this->cat_array[$slug]; + if(isset($this->cat_array[$slug])) { + return $this->cat_array[$slug]; + } + return false; } /** diff --git a/wp-content/plugins/event-list/includes/db.php b/wp-content/plugins/event-list/includes/db.php index fe0934529..a6d402286 100644 --- a/wp-content/plugins/event-list/includes/db.php +++ b/wp-content/plugins/event-list/includes/db.php @@ -61,13 +61,13 @@ class EL_Db { if('upcoming' === $date_filter && is_numeric($num_events) && 0 < $num_events) { $sql .= ' LIMIT '.$num_events; } - return $wpdb->get_results($sql); + return $this->convert_events_timeformat($wpdb->get_results($sql)); } public function get_event( $id ) { global $wpdb; $sql = 'SELECT * FROM '.$this->table.' WHERE id = '.$id.' LIMIT 1'; - return $wpdb->get_row( $sql ); + return $this->convert_event_timeformat($wpdb->get_row($sql)); } public function get_distinct_event_data($search_string, $date_filter, $cat_filter, $order='asc') { @@ -113,7 +113,7 @@ class EL_Db { } //time if( !isset( $event_data['time'] ) ) { $sqldata['time'] = ''; } - else { $sqldata['time'] = stripslashes($event_data['time']); } + else { $sqldata['time'] = $this->validate_time($event_data['time']); } //title if( !isset( $event_data['title'] ) || $event_data['title'] === '' ) { return false; } $sqldata['title'] = stripslashes( $event_data['title'] ); @@ -205,6 +205,32 @@ class EL_Db { return false; } + private function validate_time($timestring) { + // Try to extract a correct time from the provided text + $timestamp = strtotime(stripslashes($timestring)); + // Return a standard time format if the conversion was successful + if($timestamp) { + return date('H:i:s', $timestamp); + } + // Else return the given text + return $timestring; + } + + private function convert_events_timeformat($events) { + foreach($events as $event) { + $this->convert_event_timeformat($event); + } + return $events; + } + + private function convert_event_timeformat($event) { + $timestamp = strtotime($event->time); + if($timestamp) { + $event->time = date_i18n(get_option('time_format'), $timestamp); + } + return $event; + } + private function get_sql_filter_string($date_filter=null, $cat_filter=null) { $sql_filter_string = ''; // date filter @@ -332,7 +358,7 @@ class EL_Db { $openingTag = array_pop($tags); if($openingTag != $tagName) { // Not properly nested tag found: trigger a warning and add the not matching opening tag again - trigger_error('Not properly nested tag found (last opening tag: '.$openingTag.', closing tag: '.$tagName.')', E_USER_WARNING); + trigger_error('Not properly nested tag found (last opening tag: '.$openingTag.', closing tag: '.$tagName.')', E_USER_NOTICE); $tags[] = $openingTag; } else { diff --git a/wp-content/plugins/event-list/includes/js/filterbar.js b/wp-content/plugins/event-list/includes/js/filterbar.js index daa83bb06..323f5405b 100644 --- a/wp-content/plugins/event-list/includes/js/filterbar.js +++ b/wp-content/plugins/event-list/includes/js/filterbar.js @@ -21,9 +21,10 @@ function updateUrlParameter(url, paramName, paramVal, sc_id) { urlArray = oldParams.split("&"); for(i=0; i<urlArray.length; i++) { if(urlArray[i].split("=")[0] == "event_id"+sc_id) { - // do nothing + // do nothing: + continue; } - else if(urlArray[i].split("=")[0] == paramName) { + if(urlArray[i].split("=")[0] == paramName) { newParams += seperator + paramName + "=" + paramVal; paramNameAdded = true; } diff --git a/wp-content/plugins/event-list/includes/sc_event-list.php b/wp-content/plugins/event-list/includes/sc_event-list.php index c34ddbef3..538b31c91 100644 --- a/wp-content/plugins/event-list/includes/sc_event-list.php +++ b/wp-content/plugins/event-list/includes/sc_event-list.php @@ -101,17 +101,17 @@ class SC_Event_List { $a['actual_date'] = $this->get_actual_date($a); $a['actual_cat'] = $this->get_actual_cat($a); if(isset($_GET['event_id'.$a['sc_id']])) { - $a['event_id'] = (int)$_GET['event_id'.$a['sc_id']]; + $a['event_id'] = absint($_GET['event_id'.$a['sc_id']]); } elseif('all' != $a['initial_event_id'] && !isset($_GET['date'.$a['sc_id']]) && !isset($_GET['cat'.$a['sc_id']])) { - $a['event_id'] = (int)$a['initial_event_id']; + $a['event_id'] = intval($a['initial_event_id']); } else { $a['event_id'] = null; } // fix sc_id_for_url if required if(!is_numeric($a['sc_id_for_url'])) { - $a['sc_id_for_url'] = $a['sc_id']; + $a['sc_id_for_url'] = intval($a['sc_id']); } $out = ' @@ -215,16 +215,10 @@ class SC_Event_List { $out .= '</h3></div>'; // event time if('' != $event->time && $this->is_visible($a['show_starttime'])) { - // set time format if a known format is available, else only show the text - $date_array = date_parse($event->time); - $time = $event->time; - if(empty($date_array['errors']) && is_numeric($date_array['hour']) && is_numeric($date_array['minute'])) { - $time = mysql2date(get_option('time_format'), $event->time); - } if('' == $this->options->get('el_html_tags_in_time')) { - $time = esc_attr($time); + $event->time = esc_attr($event->time); } - $out .= '<span class="event-time">'.$time.'</span>'; + $out .= '<span class="event-time">'.$event->time.'</span>'; } // event location if('' != $event->location && $this->is_visible($a['show_location'])) { diff --git a/wp-content/plugins/event-list/readme.txt b/wp-content/plugins/event-list/readme.txt index afb84bda4..16a3c755f 100644 --- a/wp-content/plugins/event-list/readme.txt +++ b/wp-content/plugins/event-list/readme.txt @@ -3,8 +3,8 @@ Contributors: mibuthu, clhunsen Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W54LNZMWF9KW2 Tags: event, events, list, listview, calendar, schedule, shortcode, page, category, categories, filter, admin, attribute, widget, sidebar, feed, rss Requires at least: 3.8 -Tested up to: 4.7 -Stable tag: 0.7.8 +Tested up to: 4.8 +Stable tag: 0.7.9 Plugin URI: http://wordpress.org/extend/plugins/event-list Licence: GPLv2 License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -82,6 +82,13 @@ Another possibility would be to call the wordpress function "do_shortcode()". == Changelog == += 0.7.9 (2017-06-12) = +* fixed security vulnerability reported by wordpress +* fixed / improved time handling and sorting according to time (fixed sorting will only work in new or modified events) +* fixed problem with locale handling in older wordpress versions +* fixed url when going back from event details page to event list page with a drowdown filter +* fixed HTML format issue in admin event table (with not properly nested tag warning) + = 0.7.8 (2017-03-17) = * improved datepicker style in new/edit event view * show datepicker in correct language -- GitLab