WP RSS Aggregator - Version 4.15.2

Version Description

(2019-10-03) =

Added - Links and integrations with Lorem for custom developer work.

Changed - The default logging type is now "debug". - Feeds are now sorted alphabetically by default.

Fixed - Multisite installations only allowed the main site to have activated licenses. - License notices now only appear on the main site if the site is a multisite network. - Blacklist items would occassionally be saved without a permalink. - Older versions of add-ons triggered errors when trying to log messages with the default log type. - Fixed checkbox legacy display options not saving correctly. - A saved empty useragent string in the settings caused the internal default to not be used. - The certificate path option was not defaulting correctly. - Media thumbnail images were not being detected properly. - An invalid feed would trigger false positive errors on fetch.

Download this release

Release Info

Developer Mekku
Plugin Icon 128x128 WP RSS Aggregator
Version 4.15.2
Comparing to
See all releases

Code changes from version 4.15.1 to 4.15.2

CHANGELOG.md CHANGED
@@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file.
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  ## [4.15.1] - 2019-08-14
8
  ### Added
9
  * New link to the custom feed in the "Custom Feed" settings page.
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
 
7
+ ## [4.15.2] - 2019-10-03
8
+ ### Added
9
+ * Links and integrations with Lorem for custom developer work.
10
+
11
+ ### Changed
12
+ * The default logging type is now "debug".
13
+ - Feeds are now sorted alphabetically by default.
14
+
15
+ ### Fixed
16
+ * Multisite installations only allowed the main site to have activated licenses.
17
+ * License notices now only appear on the main site if the site is a multisite network.
18
+ * Blacklist items would occassionally be saved without a permalink.
19
+ * Older versions of add-ons triggered errors when trying to log messages with the default log type.
20
+ * Fixed checkbox legacy display options not saving correctly.
21
+ * A saved empty useragent string in the settings caused the internal default to not be used.
22
+ * The certificate path option was not defaulting correctly.
23
+ * Media thumbnail images were not being detected properly.
24
+ * An invalid feed would trigger false positive errors on fetch.
25
+
26
  ## [4.15.1] - 2019-08-14
27
  ### Added
28
  * New link to the custom feed in the "Custom Feed" settings page.
README.md DELETED
@@ -1,24 +0,0 @@
1
- ![](https://repository-images.githubusercontent.com/15269888/73ca9400-669f-11e9-9e18-5662f7b5bd68)
2
-
3
- ## Requirements
4
-
5
- **Recommended**
6
- * PHP 7+
7
- * PHP `curl` extension
8
- * PHP `simplexml` extension
9
- * PHP `mbstring` extension
10
- * PHP `gd` extension
11
- * WordPress 5.0+
12
-
13
- **Minimum**
14
- * PHP 5.4+
15
- * PHP `curl` extension
16
- * PHP `simplexml` extension
17
- * WordPress 4.8+
18
-
19
- ## Links
20
-
21
- * [Website](https://wprssaggregator.com)
22
- * [Premium Addons](https://wprssaggregator.com/pricing)
23
- * [Knowledge Base](https://kb.wprssaggregator.com)
24
- * [WordPress.org Page](https://wordpress.org/plugins/wp-rss-aggregator)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/Aventura/Wprss/Core/Licensing/Manager.php CHANGED
@@ -541,7 +541,7 @@ class Manager {
541
  'edd_action' => null,
542
  'license' => null,
543
  'item_name' => null,
544
- 'url' => network_site_url(),
545
  'time' => time(),
546
  );
547
 
541
  'edd_action' => null,
542
  'license' => null,
543
  'item_name' => null,
544
+ 'url' => network_home_url(),
545
  'time' => time(),
546
  );
547
 
includes/Aventura/Wprss/Core/Licensing/Settings.php CHANGED
@@ -112,6 +112,11 @@ class Settings {
112
  if ( ! isset( $args['addon'] ) ) {
113
  return false;
114
  }
 
 
 
 
 
115
  $license = $this->getManager()->getLicense( $args['addon'] );
116
 
117
  return is_null($license) || strlen( $license->getKey() ) === 0;
112
  if ( ! isset( $args['addon'] ) ) {
113
  return false;
114
  }
115
+
116
+ if (!is_main_site()) {
117
+ return false;
118
+ }
119
+
120
  $license = $this->getManager()->getLicense( $args['addon'] );
121
 
122
  return is_null($license) || strlen( $license->getKey() ) === 0;
includes/admin-display.php CHANGED
@@ -230,40 +230,42 @@
230
  if ( !is_admin() || !$query->is_main_query() || $query->get('post_type') !== 'wprss_feed' ) {
231
  return;
232
  }
233
- // Check if the orderby query variable is set
234
- if ( !( $orderby = $query->get( 'orderby' ) ) ) return;
235
 
236
- // We will be sorting using the meta value (unless sorting by title)
237
- $query->set('orderby', 'meta_value' );
238
- // Get the current order
239
- $order = strtoupper( $query->get( 'order' ) );
240
- // Check if it is valid
241
- $got_order = $order === 'ASC' || $order === 'DESC';
 
 
 
 
 
 
 
 
 
242
 
243
  // Check what we are sorting by
244
  switch ( $orderby ) {
245
- case 'title':
246
- $query->set( 'orderby', 'title' );
247
- break;
248
  case 'state':
249
  $query->set('meta_key', 'wprss_state');
 
250
  break;
 
251
  case 'updates':
252
  $query->set('meta_key', 'wprss_next_update');
253
- $query->set('orderby', 'meta_value' );
254
- if ( !$got_order ) $query->set( 'order', 'ASC' );
255
  break;
256
  case 'feed-count':
257
  $query->set('meta_key', 'wprss_items_imported');
258
- $query->set('orderby', 'meta_value_num' );
259
- if ( !$got_order ) $query->set( 'order', 'DESC' );
260
- break;
261
- }
262
 
263
- if ( !$got_order ){
264
- $query->set( 'order', 'ASC' );
265
  }
266
- }
267
 
268
 
269
  add_filter( 'manage_wprss_feed_item_posts_columns', 'wprss_set_feed_item_custom_columns', 20, 1 );
230
  if ( !is_admin() || !$query->is_main_query() || $query->get('post_type') !== 'wprss_feed' ) {
231
  return;
232
  }
 
 
233
 
234
+ // Get the sorting query args
235
+ $order = strtoupper($query->get('order'));
236
+ $orderby = $query->get('orderby');
237
+
238
+ // If order is not specified, default to ascending
239
+ if ($order !== 'ASC' && $order !== 'DESC') {
240
+ $order = 'ASC';
241
+ }
242
+
243
+ $query->set('order', $order);
244
+
245
+ // If not explicitly sorting or sorting by title, sort by title
246
+ if (!$orderby || $orderby === 'title') {
247
+ $query->set('orderby', 'title');
248
+ }
249
 
250
  // Check what we are sorting by
251
  switch ( $orderby ) {
 
 
 
252
  case 'state':
253
  $query->set('meta_key', 'wprss_state');
254
+ $query->set('orderby', 'meta_value');
255
  break;
256
+
257
  case 'updates':
258
  $query->set('meta_key', 'wprss_next_update');
259
+ $query->set('orderby', 'meta_value');
260
+
261
  break;
262
  case 'feed-count':
263
  $query->set('meta_key', 'wprss_items_imported');
264
+ $query->set('orderby', 'meta_value_num');
 
 
 
265
 
266
+ break;
 
267
  }
268
+ }
269
 
270
 
271
  add_filter( 'manage_wprss_feed_item_posts_columns', 'wprss_set_feed_item_custom_columns', 20, 1 );
includes/admin-help.php CHANGED
@@ -81,7 +81,8 @@
81
  <?php wp_nonce_field('wprss_hs_beacon_enabled'); ?>
82
  </form>
83
  </div>
84
- <?php
 
85
  }
86
 
87
  // Handler to update the HS beacon enabled option
81
  <?php wp_nonce_field('wprss_hs_beacon_enabled'); ?>
82
  </form>
83
  </div>
84
+ <?php
85
+ do_action('wpra/help_page/bottom');
86
  }
87
 
88
  // Handler to update the HS beacon enabled option
includes/admin-log.php CHANGED
@@ -105,7 +105,9 @@ function wprss_reset_log()
105
  */
106
  function wprss_log($message, $src = null, $log_level = null)
107
  {
108
- $log_level = ($log_level) ? LogLevel::ERROR : $log_level;
 
 
109
 
110
  wpra_get_logger()->log($log_level, $message);
111
  }
@@ -115,7 +117,7 @@ function wprss_log($message, $src = null, $log_level = null)
115
  *
116
  * @since 3.9.6
117
  */
118
- function wprss_log_obj($message, $obj, $src = '', $log_level = LogLevel::ERROR)
119
  {
120
  $message = sprintf('%s: %s', $message, print_r($obj, true));
121
 
105
  */
106
  function wprss_log($message, $src = null, $log_level = null)
107
  {
108
+ $log_level = ($log_level === null)
109
+ ? LogLevel::DEBUG
110
+ : $log_level;
111
 
112
  wpra_get_logger()->log($log_level, $message);
113
  }
117
  *
118
  * @since 3.9.6
119
  */
120
+ function wprss_log_obj($message, $obj, $src = '', $log_level = null)
121
  {
122
  $message = sprintf('%s: %s', $message, print_r($obj, true));
123
 
includes/admin-options-legacy.php CHANGED
@@ -147,13 +147,12 @@ function wprss_settings_date_callback()
147
  function wprss_setting_title_link_callback($field)
148
  {
149
  $title_link = wprss_get_general_setting('title_link');
150
- $checked = ($title_link == '1');
151
 
152
- echo wprss_settings_render_checkbox(
153
  $field['field_id'],
154
- 'wprss_settings_general[title_link]',
155
- '1',
156
- $checked
157
  );
158
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
159
  }
@@ -192,13 +191,12 @@ function wprss_setting_title_length_callback($field)
192
  function wprss_setting_authors_enable_callback($field)
193
  {
194
  $authors_enable = wprss_get_general_setting('authors_enable');
195
- $checked = ($authors_enable == '1');
196
 
197
- echo wprss_settings_render_checkbox(
198
  $field['field_id'],
199
- 'wprss_settings_general[authors_enable]',
200
- '1',
201
- $checked
202
  );
203
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
204
  }
@@ -291,13 +289,12 @@ function wprss_setting_open_dd_callback($field)
291
  function wprss_setting_follow_dd_callback($field)
292
  {
293
  $follow_dd = wprss_get_general_setting('follow_dd');
294
- $checked = ($follow_dd === 'no_follow');
295
 
296
- echo wprss_settings_render_checkbox(
297
  $field['field_id'],
298
- 'wprss_settings_general[follow_dd]',
299
- 'no_follow',
300
- $checked
301
  );
302
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
303
  }
@@ -312,13 +309,12 @@ function wprss_setting_follow_dd_callback($field)
312
  function wprss_setting_source_enable_callback($field)
313
  {
314
  $source_enable = wprss_get_general_setting('source_enable');
315
- $checked = ($source_enable == '1');
316
 
317
- echo wprss_settings_render_checkbox(
318
  $field['field_id'],
319
- 'wprss_settings_general[source_enable]',
320
- '1',
321
- $checked
322
  );
323
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
324
  }
@@ -352,13 +348,12 @@ function wprss_setting_text_preceding_source_callback($field)
352
  function wprss_setting_source_link_callback($field)
353
  {
354
  $source_link = wprss_get_general_setting('source_link');
355
- $checked = ($source_link == '1');
356
 
357
- echo wprss_settings_render_checkbox(
358
  $field['field_id'],
359
- 'wprss_settings_general[source_link]',
360
- '1',
361
- $checked
362
  );
363
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
364
  }
@@ -373,13 +368,12 @@ function wprss_setting_source_link_callback($field)
373
  function wprss_setting_date_enable_callback($field)
374
  {
375
  $date_enable = wprss_get_general_setting('date_enable');
376
- $checked = ($date_enable == '1');
377
 
378
- echo wprss_settings_render_checkbox(
379
  $field['field_id'],
380
- 'wprss_settings_general[date_enable]',
381
- '1',
382
- $checked
383
  );
384
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
385
  }
@@ -438,13 +432,12 @@ function wprss_setting_date_format_callback($field)
438
  function wprss_setting_time_ago_format_enable_callback($field)
439
  {
440
  $time_ago_format = wprss_get_general_setting('time_ago_format_enable');
441
- $checked = ($time_ago_format == '1');
442
 
443
- echo wprss_settings_render_checkbox(
444
  $field['field_id'],
445
- 'wprss_settings_general[time_ago_format_enable]',
446
- '1',
447
- $checked
448
  );
449
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
450
  }
147
  function wprss_setting_title_link_callback($field)
148
  {
149
  $title_link = wprss_get_general_setting('title_link');
 
150
 
151
+ echo wprss_options_render_checkbox(
152
  $field['field_id'],
153
+ 'title_link',
154
+ $title_link,
155
+ '1'
156
  );
157
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
158
  }
191
  function wprss_setting_authors_enable_callback($field)
192
  {
193
  $authors_enable = wprss_get_general_setting('authors_enable');
 
194
 
195
+ echo wprss_options_render_checkbox(
196
  $field['field_id'],
197
+ 'authors_enable',
198
+ $authors_enable,
199
+ '1'
200
  );
201
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
202
  }
289
  function wprss_setting_follow_dd_callback($field)
290
  {
291
  $follow_dd = wprss_get_general_setting('follow_dd');
 
292
 
293
+ echo wprss_options_render_checkbox(
294
  $field['field_id'],
295
+ 'follow_dd',
296
+ $follow_dd,
297
+ 'no_follow'
298
  );
299
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
300
  }
309
  function wprss_setting_source_enable_callback($field)
310
  {
311
  $source_enable = wprss_get_general_setting('source_enable');
 
312
 
313
+ echo wprss_options_render_checkbox(
314
  $field['field_id'],
315
+ 'source_enable',
316
+ $source_enable,
317
+ '1'
318
  );
319
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
320
  }
348
  function wprss_setting_source_link_callback($field)
349
  {
350
  $source_link = wprss_get_general_setting('source_link');
 
351
 
352
+ echo wprss_options_render_checkbox(
353
  $field['field_id'],
354
+ 'source_link',
355
+ $source_link,
356
+ '1'
357
  );
358
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
359
  }
368
  function wprss_setting_date_enable_callback($field)
369
  {
370
  $date_enable = wprss_get_general_setting('date_enable');
 
371
 
372
+ echo wprss_options_render_checkbox(
373
  $field['field_id'],
374
+ 'date_enable',
375
+ $date_enable,
376
+ '1'
377
  );
378
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
379
  }
432
  function wprss_setting_time_ago_format_enable_callback($field)
433
  {
434
  $time_ago_format = wprss_get_general_setting('time_ago_format_enable');
 
435
 
436
+ echo wprss_options_render_checkbox(
437
  $field['field_id'],
438
+ 'time_ago_format_enable',
439
+ $time_ago_format,
440
+ '1'
441
  );
442
  echo wprss_settings_inline_help($field['field_id'], $field['tooltip']);
443
  }
includes/admin-options.php CHANGED
@@ -14,14 +14,22 @@
14
  /**
15
  * Returns the given general setting option value form the database, or the default value if it is not found.
16
  *
17
- * @param option_name The name of the option to get
 
18
  * @return mixed
19
  * @since 3.7.1
20
  */
21
- function wprss_get_general_setting( $option_name ) {
22
  $options = get_option( 'wprss_settings_general', array() );
23
  $defaults = wprss_get_default_settings_general();
24
- return ( ( isset( $options[ $option_name ] ) )? $options[$option_name] : $defaults[$option_name] );
 
 
 
 
 
 
 
25
  }
26
 
27
  /**
@@ -746,7 +754,7 @@
746
  $attributes = [];
747
 
748
  if ($checked) {
749
- $attributes['checked'] = 'checked';
750
  }
751
 
752
  return wprss_settings_render_input($id, $name, $value, 'checkbox', $attributes);
14
  /**
15
  * Returns the given general setting option value form the database, or the default value if it is not found.
16
  *
17
+ * @param string $option_name The name of the option to get
18
+ * @param bool $not_empty If true, the default value will be returned if the option exists but is empty.
19
  * @return mixed
20
  * @since 3.7.1
21
  */
22
+ function wprss_get_general_setting( $option_name, $not_empty = false ) {
23
  $options = get_option( 'wprss_settings_general', array() );
24
  $defaults = wprss_get_default_settings_general();
25
+
26
+ $value = isset($options[$option_name])
27
+ ? $options[$option_name]
28
+ : $defaults[$option_name];
29
+
30
+ return ($not_empty && empty($value))
31
+ ? $defaults[$option_name]
32
+ : $value;
33
  }
34
 
35
  /**
754
  $attributes = [];
755
 
756
  if ($checked) {
757
+ $attributes['checked'] = '';
758
  }
759
 
760
  return wprss_settings_render_input($id, $name, $value, 'checkbox', $attributes);
includes/admin-update-page.php CHANGED
@@ -51,7 +51,7 @@ function wprss_render_update_page()
51
  'path' => array(
52
  'images' => WPRSS_IMG,
53
  ),
54
- 'changelog' => $parsedown->text($changelog['4.15']['raw'])
55
  ));
56
  }
57
 
51
  'path' => array(
52
  'images' => WPRSS_IMG,
53
  ),
54
+ 'changelog' => $parsedown->text($changelog[WPRSS_VERSION]['raw'])
55
  ));
56
  }
57
 
includes/feed-access.php CHANGED
@@ -49,7 +49,6 @@ class WPRSS_Feed_Access
49
  $wprss = wprss();
50
  add_action( 'wprss_fetch_feed_before', array( $this, 'set_feed_options' ), 10, 2 );
51
  add_action( 'wprss_settings_array', array( $this, 'add_settings' ) );
52
- add_action( 'wprss_default_settings_general', array( $this, 'add_default_settings' ) );
53
  $wprss->on('fields', array($this, 'add_feed_source_fields'));
54
  }
55
 
@@ -111,7 +110,7 @@ class WPRSS_Feed_Access
111
  */
112
  public function get_useragent_setting()
113
  {
114
- return wprss_get_general_setting( self::SETTING_KEY_FEED_REQUEST_USERAGENT );
115
  }
116
 
117
  /**
@@ -236,21 +235,6 @@ class WPRSS_Feed_Access
236
  return $fields;
237
  }
238
 
239
-
240
- /**
241
- * @since 4.7
242
- * @param array $settings The array of settings, where key is
243
- * @return array The new array of default settings
244
- */
245
- public function add_default_settings( $settings ) {
246
- $settings[ self::SETTING_KEY_CERTIFICATE_PATH ] = implode( '/', array( WPINC, 'certificates', 'ca-bundle.crt' ) );
247
- /** @since 4.8.2 */
248
- $settings[ self::SETTING_KEY_FEED_REQUEST_USERAGENT ] = '';
249
-
250
- return $settings;
251
- }
252
-
253
-
254
  /**
255
  * Renders the setting field for the certificate path.
256
  *
49
  $wprss = wprss();
50
  add_action( 'wprss_fetch_feed_before', array( $this, 'set_feed_options' ), 10, 2 );
51
  add_action( 'wprss_settings_array', array( $this, 'add_settings' ) );
 
52
  $wprss->on('fields', array($this, 'add_feed_source_fields'));
53
  }
54
 
110
  */
111
  public function get_useragent_setting()
112
  {
113
+ return wprss_get_general_setting( self::SETTING_KEY_FEED_REQUEST_USERAGENT, true );
114
  }
115
 
116
  /**
235
  return $fields;
236
  }
237
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  /**
239
  * Renders the setting field for the certificate path.
240
  *
includes/feed-blacklist.php CHANGED
@@ -92,9 +92,11 @@ function wprss_blacklist_item( $ID ) {
92
  $id = wp_insert_post(array(
93
  'post_title' => $title,
94
  'post_type' => 'wprss_blacklist',
95
- 'post_status' => 'publish'
 
 
 
96
  ));
97
- update_post_meta( $id, 'wprss_permalink', $permalink );
98
  }
99
 
100
  /**
92
  $id = wp_insert_post(array(
93
  'post_title' => $title,
94
  'post_type' => 'wprss_blacklist',
95
+ 'post_status' => 'publish',
96
+ 'meta_input' => [
97
+ 'wprss_permalink' => $permalink,
98
+ ],
99
  ));
 
100
  }
101
 
102
  /**
includes/feed-importing-images.php CHANGED
@@ -120,8 +120,8 @@ function wpra_import_item_images($itemId, $item, $sourceId)
120
  break;
121
 
122
  case 'media':
123
- if (isset($images['media'])) {
124
- $ftImageUrl = $images['media'];
125
  }
126
  break;
127
 
120
  break;
121
 
122
  case 'media':
123
+ if (isset($images['media']) && !empty($images['media'])) {
124
+ $ftImageUrl = reset($images['media']);
125
  }
126
  break;
127
 
includes/feed-importing.php CHANGED
@@ -238,23 +238,22 @@
238
  /* Fetch the feed from the soure URL specified */
239
  $feed = wprss_fetch_feed( $feed_url, $source, $force_feed );
240
 
 
 
 
 
 
 
 
 
 
241
  update_post_meta( $source, 'wprss_site_url', $feed->get_permalink() );
242
  update_post_meta( $source, 'wprss_feed_image', $feed->get_image_url() );
243
 
244
  // Remove previously added filters and actions
245
  remove_filter( 'wp_feed_cache_transient_lifetime' , 'wprss_feed_cache_lifetime' );
246
 
247
- if ( !is_wp_error( $feed ) ) {
248
- // Return the items in the feed.
249
- return @$feed->get_items();
250
- }
251
-
252
- wpra_get_logger($source)->error('Failed to fetch the feed from {0}. Error: {1}', [
253
- $feed_url,
254
- $feed->get_error_message()
255
- ]);
256
-
257
- return NULL;
258
  }
259
 
260
  //add_action ('cron_request', 'wpse_cron_add_xdebug_cookie', 10, 2) ;
238
  /* Fetch the feed from the soure URL specified */
239
  $feed = wprss_fetch_feed( $feed_url, $source, $force_feed );
240
 
241
+ if (is_wp_error($feed)) {
242
+ wpra_get_logger($source)->error('Failed to fetch the feed from {0}. Error: {1}', [
243
+ $feed_url,
244
+ $feed->get_error_message()
245
+ ]);
246
+
247
+ return NULL;
248
+ }
249
+
250
  update_post_meta( $source, 'wprss_site_url', $feed->get_permalink() );
251
  update_post_meta( $source, 'wprss_feed_image', $feed->get_image_url() );
252
 
253
  // Remove previously added filters and actions
254
  remove_filter( 'wp_feed_cache_transient_lifetime' , 'wprss_feed_cache_lifetime' );
255
 
256
+ return @$feed->get_items();
 
 
 
 
 
 
 
 
 
 
257
  }
258
 
259
  //add_action ('cron_request', 'wpse_cron_add_xdebug_cookie', 10, 2) ;
includes/system-info.php CHANGED
@@ -197,13 +197,23 @@ SETTINGS:
197
 
198
  <?php
199
  $options_table = $wpdb->prefix . 'options';
200
- $options_query = sprintf('SELECT * FROM %s WHERE `option_name` LIKE "wprss%%"', $options_table);
 
 
 
201
  $options = $wpdb->get_results($options_query, OBJECT_K);
202
 
 
 
203
  foreach ($options as $option) {
204
  $unserialized = @unserialize($option->option_value);
 
 
 
 
 
205
 
206
- if (!$unserialized || is_scalar($unserialized)) {
207
  printf(
208
  '%s %s',
209
  str_pad($option->option_name, 30),
@@ -214,7 +224,7 @@ foreach ($options as $option) {
214
  }
215
 
216
  printf('[%s]: ', $option->option_name);
217
- print_r($unserialized);
218
  }
219
 
220
  ?>
197
 
198
  <?php
199
  $options_table = $wpdb->prefix . 'options';
200
+ $options_query = sprintf(
201
+ 'SELECT * FROM %s WHERE `option_name` LIKE "wprss%%" OR `option_name` LIKE "wpra%%"',
202
+ $options_table
203
+ );
204
  $options = $wpdb->get_results($options_query, OBJECT_K);
205
 
206
+ $options = apply_filters('wpra/debug/sysinfo/options', $options);
207
+
208
  foreach ($options as $option) {
209
  $unserialized = @unserialize($option->option_value);
210
+ $value = apply_filters('wpra/debug/sysinfo/option_value', $unserialized, $option->option_name);
211
+
212
+ if ($value === null) {
213
+ continue;
214
+ }
215
 
216
+ if (!$value || is_scalar($value)) {
217
  printf(
218
  '%s %s',
219
  str_pad($option->option_name, 30),
224
  }
225
 
226
  printf('[%s]: ', $option->option_name);
227
+ print_r($value);
228
  }
229
 
230
  ?>
includes/update.php CHANGED
@@ -286,6 +286,7 @@
286
 
287
  // From 4.8.2
288
  'feed_request_useragent' => 'Mozilla/5.0 (Linux 10.0; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
 
289
 
290
  // From 4.11.2
291
  'limit_feed_items_per_import' => null,
286
 
287
  // From 4.8.2
288
  'feed_request_useragent' => 'Mozilla/5.0 (Linux 10.0; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
289
+ 'certificate-path' => implode( '/', array( WPINC, 'certificates', 'ca-bundle.crt' ) ),
290
 
291
  // From 4.11.2
292
  'limit_feed_items_per_import' => null,
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: RSS import, RSS aggregator, feed import, content curation, feed to post
5
  Requires at least: 4.0 or higher
6
  Tested up to: 5.2.2
7
  Requires PHP: 5.4
8
- Stable tag: 4.15.1
9
  License: GPLv3
10
 
11
  WP RSS Aggregator is the original & most popular WordPress solution for importing RSS feeds, auto-blogging, content curation & aggregation.
@@ -259,22 +259,22 @@ Our complete Knowledge Base with FAQs can be found [here](https://kb.wprssaggreg
259
 
260
  == Changelog ==
261
 
262
- = 4.15.1 (2019-08-14) =
263
 
264
  **Added**
265
- - New link to the custom feed in the "Custom Feed" settings page.
266
 
267
  **Changed**
268
- - Updated the logging system to no longer cause VaultPress to trigger false positive warnings.
269
- - The date format in the custom feed now uses the "RFC3339 Extended" format.
270
 
271
  **Fixed**
272
- - Items with the same title were not being imported even when "Unique titles only" was turned off.
273
- - Items with future dates where marked as "scheduled" by WordPress.
274
- - The custom feed's "Content-Type" header was set for RSS 2.0 instead of Atom.
275
- - Imported images were not being deleted from the media library when the imported item is deleted.
276
- - PHP notice for "undefined index enclosure" when a feed cannot be fetched.
277
- - Deprecation notice on PHP 7.2 or later for "each" function.
278
- - Warnings when the `wprss_log` function is used incorrectly.
279
- - PHP notice for "property of non-object" when using YoastSEO.
280
- - After using the Templates add-on, images would continue to be imported after the add-on was deactivated.
5
  Requires at least: 4.0 or higher
6
  Tested up to: 5.2.2
7
  Requires PHP: 5.4
8
+ Stable tag: 4.15.2
9
  License: GPLv3
10
 
11
  WP RSS Aggregator is the original & most popular WordPress solution for importing RSS feeds, auto-blogging, content curation & aggregation.
259
 
260
  == Changelog ==
261
 
262
+ = 4.15.2 (2019-10-03) =
263
 
264
  **Added**
265
+ - Links and integrations with Lorem for custom developer work.
266
 
267
  **Changed**
268
+ - The default logging type is now "debug".
269
+ - Feeds are now sorted alphabetically by default.
270
 
271
  **Fixed**
272
+ - Multisite installations only allowed the main site to have activated licenses.
273
+ - License notices now only appear on the main site if the site is a multisite network.
274
+ - Blacklist items would occassionally be saved without a permalink.
275
+ - Older versions of add-ons triggered errors when trying to log messages with the default log type.
276
+ - Fixed checkbox legacy display options not saving correctly.
277
+ - A saved empty useragent string in the settings caused the internal default to not be used.
278
+ - The certificate path option was not defaulting correctly.
279
+ - Media thumbnail images were not being detected properly.
280
+ - An invalid feed would trigger false positive errors on fetch.
src/Handlers/AbstractSavePostHandler.php CHANGED
@@ -105,7 +105,7 @@ abstract class AbstractSavePostHandler
105
  $this->saving = true;
106
 
107
  // Parse the meta
108
- $metaData = $this->parseArgsWithSchema($_REQUEST, $this->getMetaSchema());
109
  // Check if the post is an auto draft
110
  $autoDraft = ($post->post_status === 'auto-draft');
111
 
@@ -194,5 +194,5 @@ abstract class AbstractSavePostHandler
194
  *
195
  * @return array The schema.
196
  */
197
- abstract protected function getMetaSchema();
198
  }
105
  $this->saving = true;
106
 
107
  // Parse the meta
108
+ $metaData = $this->parseArgsWithSchema($_REQUEST, $this->getMetaSchema($post));
109
  // Check if the post is an auto draft
110
  $autoDraft = ($post->post_status === 'auto-draft');
111
 
194
  *
195
  * @return array The schema.
196
  */
197
+ abstract protected function getMetaSchema(WP_Post $post);
198
  }
src/Handlers/FeedBlacklist/SaveBlacklistHandler.php CHANGED
@@ -39,6 +39,9 @@ class SaveBlacklistHandler extends AbstractSavePostHandler
39
  ];
40
  }
41
 
 
 
 
42
  // Empty titles default to the URL
43
  if (empty($post->post_title)) {
44
  wp_update_post([
@@ -55,11 +58,12 @@ class SaveBlacklistHandler extends AbstractSavePostHandler
55
  *
56
  * @since 4.13
57
  */
58
- protected function getMetaSchema()
59
  {
60
  return [
61
  'wprss_permalink' => [
62
- 'filter' => FILTER_VALIDATE_URL,
 
63
  ],
64
  ];
65
  }
39
  ];
40
  }
41
 
42
+ // Save the the blacklisted permalink
43
+ update_post_meta($post->ID, 'wprss_permalink', $meta['wprss_permalink']);
44
+
45
  // Empty titles default to the URL
46
  if (empty($post->post_title)) {
47
  wp_update_post([
58
  *
59
  * @since 4.13
60
  */
61
+ protected function getMetaSchema(WP_Post $post)
62
  {
63
  return [
64
  'wprss_permalink' => [
65
+ 'filter' => FILTER_SANITIZE_URL,
66
+ 'default' => get_post_meta($post->ID, 'wprss_permalink', true)
67
  ],
68
  ];
69
  }
src/Modules/LoremModule.php CHANGED
@@ -25,7 +25,7 @@ class LoremModule implements ModuleInterface
25
  add_action('wprss_admin_exclusive_scripts_styles', $c->get('wpra/lorem/script/enqueue_fn'));
26
 
27
  // Adds the Lorem embed on the "Help & Support" page, after the page title.
28
- add_action('wpra/help_page/after_title', function () use ($c) {
29
  echo $c->get('wpra/lorem/help_page/html');
30
  });
31
  }
@@ -95,7 +95,7 @@ class LoremModule implements ModuleInterface
95
  * @since 4.15.1
96
  */
97
  'wpra/lorem/help_page/html' => function (ContainerInterface $c) {
98
- return '<div data-lorem-embed-id="rss-help-and-support"></div>';
99
  },
100
  ];
101
  }
25
  add_action('wprss_admin_exclusive_scripts_styles', $c->get('wpra/lorem/script/enqueue_fn'));
26
 
27
  // Adds the Lorem embed on the "Help & Support" page, after the page title.
28
+ add_action('wpra/help_page/bottom', function () use ($c) {
29
  echo $c->get('wpra/lorem/help_page/html');
30
  });
31
  }
95
  * @since 4.15.1
96
  */
97
  'wpra/lorem/help_page/html' => function (ContainerInterface $c) {
98
+ return '<div style="margin-top: 10px;" data-lorem-embed-id="rss-help-and-support-with-prefabs"></div>';
99
  },
100
  ];
101
  }
templates/admin/update-page.twig CHANGED
@@ -2,7 +2,7 @@
2
  <div class="wpra-update wpra-text-center">
3
  <div class="wpra-update__logo">
4
  <img src="https://www.wprssaggregator.com/wp-content/themes/wp_rss_theme/assets/images/wp_rss_logo.png"
5
- alt="WP RSS Aggregator Logo">
6
  </div>
7
  <div class="wpra-update-head__copy">
8
  <div class="wpra-update-head__title">{{ title }}</div>
@@ -15,116 +15,45 @@
15
  <hr class="wp-header-end">
16
 
17
  <div id="wpra-update-app">
18
- <div class="notice notice-warning">
19
- <h3>{% trans "Important!" %}</h3>
20
- <p>
21
- {% trans %}
22
- Version <code>4.14</code> had an unfortunate bug that caused it to import images into your WordPress
23
- media gallery. We're very sorry about that!
24
- {% endtrans %}
25
- </p>
26
- <p>
27
- {% trans %}
28
- With this update the plugin will no longer import images, but unfortunately the images will remain
29
- in your media gallery. If there are too many to delete manually, you can delete and re-import your
30
- feed items to have WordPress automatically delete their attached images. Note that if you do so,
31
- items that are no longer given by the RSS feed won't be re-imported.
32
- {% endtrans %}
33
- </p>
34
- <p>
35
- {% trans %}
36
- If you have the <b>Feed to Post</b> add-on, you should not have been affected by this bug.
37
- {% endtrans %}
38
- </p>
39
- <p>
40
- {% trans %}
41
- We apologize for this inconvience and thank you for using WP RSS Aggregator.
42
- <br/>
43
- <i>-The WP RSS Aggregator Team</i>
44
- {% endtrans %}
45
- </p>
46
- </div>
47
-
48
- <div class="postbox">
49
  <div class="inside wpra-update-feature">
50
  <div class="wpra-update-feature__text">
51
- <h3>{% trans "Better Youtube Feed Support" %}</h3>
 
 
 
 
52
  <p>
53
  {% trans %}
54
- We've made it easier to import videos from YouTube using WP RSS Aggregator. You can now
55
- paste the URL of any YouTube channel or user as your feed source URL and the plugin takes
56
- care of the rest.
 
57
  {% endtrans %}
58
  </p>
59
  <p>
60
  {% trans %}
61
- This makes displaying a feed of YouTube videos much easier. You will now be able to show an
62
- embedded video in the lightbox, and with the introduction of the new Templates add-on you
63
- will also be able to show the video thumbnails and even add the embedded YouTube video
64
- player directly on your site!
65
  {% endtrans %}
66
  </p>
67
  <p>
68
  {% trans %}
69
- This is the first of many exciting updates to come, that will make WP RSS Aggregator
70
- integrate better with popular multimedia and social media platforms!
71
  {% endtrans %}
72
  </p>
73
- <div class="wpra-inline-form">
74
- <a class="button button-large button-icon" target="wpra-kb-youtube"
75
- href="https://kb.wprssaggregator.com/article/211-importing-from-youtube-feeds">
76
  {% trans "Learn more" %}
77
- <span class="dashicons dashicons-arrow-right-alt2"></span>
78
  </a>
79
- </div>
80
- </div>
81
- <div class="wpra-update-feature__image">
82
- <img src="https://www.wprssaggregator.com/wp-content/uploads/2019/07/wpra-core-4.14-youtube_source.png"
83
- alt="Import and Display Youtube Feeds">
84
- </div>
85
- </div>
86
- </div>
87
-
88
- <div class="postbox">
89
- <div class="inside wpra-update-feature">
90
- <div class="wpra-update-feature__text">
91
- <h3>{% trans "Feed Sources Page Improvements" %}</h3>
92
- <p>
93
- {% trans %}
94
- The <b>Feed Sources</b> page has received a major update. We've tweaked the design of the
95
- feed list to make it more informative at a glance, helping you better manage your feed
96
- sources.
97
- {% endtrans %}
98
- </p>
99
- <p>
100
- {% trans %}
101
- We've also added a few new things, such as a new toggle switch for activating and pausing
102
- feeds and an icon to help distinguish between RSS feeds and Youtube feeds. We will be adding
103
- more icons in the future as we start adding support for more kinds of feeds.
104
- {% endtrans %}
105
- </p>
106
- <p>
107
- {% trans %}
108
- What's more, the page is now fully asynchronous! This means that your actions on the page -
109
- activating or pausing a feed, fetching items, deleting items - no longer cause the
110
- page to reload. Updates and errors are now reliably added to the page, making it feel more like
111
- a live dashboard.
112
- {% endtrans %}
113
  </p>
114
- <div class="wpra-inline-form">
115
- <a class="button button-large button-icon" href="https://kb.wprssaggregator.com/article/472-feed-sources-list" target="wpra-kb-block">
116
- Learn more
117
- <span class="dashicons dashicons-arrow-right-alt2"></span>
118
- </a>
119
- </div>
120
- </div>
121
- <div class="wpra-update-feature__image">
122
- <img src="https://www.wprssaggregator.com/wp-content/uploads/2019/07/wpra-core-4.14-feed_sources_list.png" alt="Feed Sources Page Improvements">
123
  </div>
124
  </div>
125
  </div>
126
 
127
- <div class="postbox">
128
  <div class="inside">
129
  <h2>{% trans "Full Changelog" %}</h2>
130
  <div class="wpra-updates">
@@ -169,3 +98,14 @@
169
  });
170
  })(jQuery);
171
  </script>
 
 
 
 
 
 
 
 
 
 
 
2
  <div class="wpra-update wpra-text-center">
3
  <div class="wpra-update__logo">
4
  <img src="https://www.wprssaggregator.com/wp-content/themes/wp_rss_theme/assets/images/wp_rss_logo.png"
5
+ alt="WP RSS Aggregator Logo">
6
  </div>
7
  <div class="wpra-update-head__copy">
8
  <div class="wpra-update-head__title">{{ title }}</div>
15
  <hr class="wp-header-end">
16
 
17
  <div id="wpra-update-app">
18
+ <div class="postbox centered">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  <div class="inside wpra-update-feature">
20
  <div class="wpra-update-feature__text">
21
+ <center>
22
+ <img src="https://www.wprssaggregator.com/wp-content/uploads/2019/09/wp-rss-aggregator-lorem-announcement.jpg"
23
+ alt="Lorem announcement">
24
+ </center>
25
+ <h3>{% trans "Introducing Lorem: A New WP RSS Aggregator Partner" %}</h3>
26
  <p>
27
  {% trans %}
28
+ Over the years we have partnered up with a few trusted companies to offer customisations that go beyond
29
+ our premium support services. Being a small team, we don’t always have the time to offer the level
30
+ of customisation that some of you may need or want. That’s why partnering up with others who excel
31
+ in this area was the logical next step.
32
  {% endtrans %}
33
  </p>
34
  <p>
35
  {% trans %}
36
+ Lorem is a platform through which you can hire expert designers, developers, marketers and more at
37
+ affordable rates. They have a dedicated team that guides you from the moment you start a
38
+ conversation to the moment that a project is delivered.
 
39
  {% endtrans %}
40
  </p>
41
  <p>
42
  {% trans %}
43
+ We chose to work with Lorem in order to provide customisation works as well as support in terms of
44
+ setting up WP RSS Aggregator to meet your exact needs.
45
  {% endtrans %}
46
  </p>
47
+ <p>
48
+ <a href="" target="_blank">
 
49
  {% trans "Learn more" %}
 
50
  </a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  </p>
 
 
 
 
 
 
 
 
 
52
  </div>
53
  </div>
54
  </div>
55
 
56
+ <div class="postbox centered">
57
  <div class="inside">
58
  <h2>{% trans "Full Changelog" %}</h2>
59
  <div class="wpra-updates">
98
  });
99
  })(jQuery);
100
  </script>
101
+
102
+ <style type="text/css">
103
+ .postbox.centered {
104
+ max-width: 720px;
105
+ margin-left: auto;
106
+ margin-right: auto;
107
+ }
108
+ .postbox.centered center > img {
109
+ max-width: 100%;
110
+ }
111
+ </style>
templates/custom-feed/entry.twig CHANGED
@@ -18,8 +18,14 @@
18
  {% endif %}
19
  </author>
20
  {% endif %}
21
- <source>
22
- <id>{{ item.source_url }}</id>
23
- <title>{{ item.source_name }}</title>
24
- </source>
 
 
 
 
 
 
25
  </entry>
18
  {% endif %}
19
  </author>
20
  {% endif %}
21
+ {% if item.source_url|length > 0 or item.source_name|length > 0 %}
22
+ <source>
23
+ {% if item.source_url|length > 0 %}
24
+ <id>{{ item.source_url }}</id>
25
+ {% endif %}
26
+ {% if item.source_name|length > 0 %}
27
+ <title>{{ item.source_name }}</title>
28
+ {% endif %}
29
+ </source>
30
+ {% endif %}
31
  </entry>
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit454b25077a61c37d434b6b16c544309d::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit0a9906e044288a89ce7d4c5685e9efc0::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit454b25077a61c37d434b6b16c544309d
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit454b25077a61c37d434b6b16c544309d
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit454b25077a61c37d434b6b16c544309d', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit454b25077a61c37d434b6b16c544309d', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit454b25077a61c37d434b6b16c544309d::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit454b25077a61c37d434b6b16c544309d
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
- $includeFiles = Composer\Autoload\ComposerStaticInit454b25077a61c37d434b6b16c544309d::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
- composerRequire454b25077a61c37d434b6b16c544309d($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
- function composerRequire454b25077a61c37d434b6b16c544309d($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit0a9906e044288a89ce7d4c5685e9efc0
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit0a9906e044288a89ce7d4c5685e9efc0', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit0a9906e044288a89ce7d4c5685e9efc0', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit0a9906e044288a89ce7d4c5685e9efc0::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
+ $includeFiles = Composer\Autoload\ComposerStaticInit0a9906e044288a89ce7d4c5685e9efc0::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequire0a9906e044288a89ce7d4c5685e9efc0($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
+ function composerRequire0a9906e044288a89ce7d4c5685e9efc0($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit454b25077a61c37d434b6b16c544309d
8
  {
9
  public static $files = array (
10
  '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@@ -1032,10 +1032,10 @@ class ComposerStaticInit454b25077a61c37d434b6b16c544309d
1032
  public static function getInitializer(ClassLoader $loader)
1033
  {
1034
  return \Closure::bind(function () use ($loader) {
1035
- $loader->prefixLengthsPsr4 = ComposerStaticInit454b25077a61c37d434b6b16c544309d::$prefixLengthsPsr4;
1036
- $loader->prefixDirsPsr4 = ComposerStaticInit454b25077a61c37d434b6b16c544309d::$prefixDirsPsr4;
1037
- $loader->prefixesPsr0 = ComposerStaticInit454b25077a61c37d434b6b16c544309d::$prefixesPsr0;
1038
- $loader->classMap = ComposerStaticInit454b25077a61c37d434b6b16c544309d::$classMap;
1039
 
1040
  }, null, ClassLoader::class);
1041
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit0a9906e044288a89ce7d4c5685e9efc0
8
  {
9
  public static $files = array (
10
  '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
1032
  public static function getInitializer(ClassLoader $loader)
1033
  {
1034
  return \Closure::bind(function () use ($loader) {
1035
+ $loader->prefixLengthsPsr4 = ComposerStaticInit0a9906e044288a89ce7d4c5685e9efc0::$prefixLengthsPsr4;
1036
+ $loader->prefixDirsPsr4 = ComposerStaticInit0a9906e044288a89ce7d4c5685e9efc0::$prefixDirsPsr4;
1037
+ $loader->prefixesPsr0 = ComposerStaticInit0a9906e044288a89ce7d4c5685e9efc0::$prefixesPsr0;
1038
+ $loader->classMap = ComposerStaticInit0a9906e044288a89ce7d4c5685e9efc0::$classMap;
1039
 
1040
  }, null, ClassLoader::class);
1041
  }
wp-rss-aggregator.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: WP RSS Aggregator
5
  * Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
6
  * Description: Imports and aggregates multiple RSS Feeds.
7
- * Version: 4.15.1
8
  * Author: RebelCode
9
  * Author URI: https://www.wprssaggregator.com
10
  * Text Domain: wprss
@@ -69,7 +69,7 @@ use RebelCode\Wpra\Core\Plugin;
69
 
70
  // Set the version number of the plugin.
71
  if( !defined( 'WPRSS_VERSION' ) )
72
- define( 'WPRSS_VERSION', '4.15.1' );
73
 
74
  if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
75
  define( 'WPRSS_WP_MIN_VERSION', '4.8' );
@@ -398,7 +398,7 @@ function wpra_modules()
398
  'settings' => new SettingsModule(),
399
  'licensing' => new LicensingModule(),
400
  'upsell' => new UpsellModule(),
401
- // 'lorem' => new LoremModule(),
402
  'logging' => new LoggerModule(),
403
  'i18n' => new I18nModule(),
404
  'twig' => new TwigModule(),
4
  * Plugin Name: WP RSS Aggregator
5
  * Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
6
  * Description: Imports and aggregates multiple RSS Feeds.
7
+ * Version: 4.15.2
8
  * Author: RebelCode
9
  * Author URI: https://www.wprssaggregator.com
10
  * Text Domain: wprss
69
 
70
  // Set the version number of the plugin.
71
  if( !defined( 'WPRSS_VERSION' ) )
72
+ define( 'WPRSS_VERSION', '4.15.2' );
73
 
74
  if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
75
  define( 'WPRSS_WP_MIN_VERSION', '4.8' );
398
  'settings' => new SettingsModule(),
399
  'licensing' => new LicensingModule(),
400
  'upsell' => new UpsellModule(),
401
+ 'lorem' => new LoremModule(),
402
  'logging' => new LoggerModule(),
403
  'i18n' => new I18nModule(),
404
  'twig' => new TwigModule(),