WP RSS Aggregator - Version 4.11.2

Version Description

(2017-09-18) = * Added 2 new general settings for item import order and per-import limit. * Cosmetic and documentation improvements.

Download this release

Release Info

Developer markzahra
Plugin Icon 128x128 WP RSS Aggregator
Version 4.11.2
Comparing to
See all releases

Code changes from version 4.11.1 to 4.11.2

Files changed (38) hide show
  1. css/admin-general-styles.css +14 -0
  2. css/admin-styles.css +11 -2
  3. includes/admin-addons.php +39 -35
  4. includes/admin-help-settings.php +22 -0
  5. includes/admin-options.php +62 -4
  6. includes/admin.php +1 -1
  7. includes/feed-importing.php +179 -1
  8. includes/scripts.php +2 -0
  9. includes/update.php +5 -0
  10. readme.txt +84 -123
  11. vendor/autoload.php +2 -2
  12. vendor/composer/ClassLoader.php +5 -7
  13. vendor/composer/autoload_psr4.php +1 -0
  14. vendor/composer/autoload_real.php +5 -5
  15. vendor/composer/autoload_static.php +11 -3
  16. vendor/composer/installed.json +62 -7
  17. vendor/container-interop/container-interop/README.md +73 -10
  18. vendor/container-interop/container-interop/composer.json +4 -0
  19. vendor/container-interop/container-interop/docs/ContainerInterface-meta.md +1 -1
  20. vendor/container-interop/container-interop/docs/ContainerInterface.md +19 -14
  21. vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md +7 -7
  22. vendor/container-interop/container-interop/docs/Delegate-lookup.md +7 -7
  23. vendor/container-interop/container-interop/docs/images/interoperating_containers.png +0 -0
  24. vendor/container-interop/container-interop/docs/images/priority.png +0 -0
  25. vendor/container-interop/container-interop/docs/images/side_by_side_containers.png +0 -0
  26. vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php +2 -24
  27. vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php +3 -1
  28. vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php +3 -1
  29. vendor/dhii/di-abstract/nbproject/private/private.xml +0 -4
  30. vendor/dhii/di-abstract/test/functional/AbstractContainerTest.php +1 -1
  31. vendor/dhii/di-interface/nbproject/private/private.xml +0 -4
  32. vendor/psr/container/LICENSE +21 -0
  33. vendor/psr/container/README.md +5 -0
  34. vendor/psr/container/composer.json +27 -0
  35. vendor/psr/container/src/ContainerExceptionInterface.php +13 -0
  36. vendor/psr/container/src/ContainerInterface.php +37 -0
  37. vendor/psr/container/src/NotFoundExceptionInterface.php +13 -0
  38. wp-rss-aggregator.php +3 -3
css/admin-general-styles.css ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * These are the styles that get enqueued by WP RSS Aggregator on all pages of
3
+ * the admin panel.
4
+ */
5
+
6
+ #menu-posts-wprss_feed .dashicons {
7
+ vertical-align: text-top;
8
+ }
9
+
10
+ .dashicons-star-filled.wprss-more-features-glyph {
11
+ color: #ffd700;
12
+ margin-left: 5px;
13
+ font-size: 12pt;
14
+ }
css/admin-styles.css CHANGED
@@ -518,6 +518,7 @@ i.wprss-updating-feed-icon.wprss-show {
518
  border: 1px solid #E5E5E5;
519
  position: relative;
520
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
 
521
  }
522
 
523
  #add-ons .add-on h3 {
@@ -538,8 +539,16 @@ i.wprss-updating-feed-icon.wprss-show {
538
  background: #F5F5F5;
539
  border-top: 1px solid #E1E1E1;
540
  overflow: hidden;
541
- padding: 15px;
542
- position: relative;
 
 
 
 
 
 
 
 
543
  }
544
 
545
  #add-ons .add-on-active .button-disabled:focus,
518
  border: 1px solid #E5E5E5;
519
  position: relative;
520
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
521
+ padding-bottom: 60px;
522
  }
523
 
524
  #add-ons .add-on h3 {
539
  background: #F5F5F5;
540
  border-top: 1px solid #E1E1E1;
541
  overflow: hidden;
542
+ position: absolute;
543
+ width: 100%;
544
+ bottom: 0;
545
+ padding-top: 15px;
546
+ height: 45px;
547
+ }
548
+
549
+ #add-ons .add-on .footer .button {
550
+ float: left;
551
+ margin-left: 15px;
552
  }
553
 
554
  #add-ons .add-on-active .button-disabled:focus,
includes/admin-addons.php CHANGED
@@ -14,9 +14,13 @@
14
  <div class="wrap">
15
  <?php screen_icon( 'wprss-aggregator' ); ?>
16
 
17
- <h2><?php _e( 'Add-Ons', WPRSS_TEXT_DOMAIN ); ?></h2>
18
- <p><?php _e( "The following Add-ons are available to increase the functionality of the WP RSS Aggregator plugin.", WPRSS_TEXT_DOMAIN ); ?><br />
19
- <?php _e( "Each Add-on can be installed as a separate plugin.", WPRSS_TEXT_DOMAIN ); ?></p>
 
 
 
 
20
 
21
  <div id="add-ons" class="clearfix">
22
 
@@ -56,62 +60,62 @@
56
  function wprss_addons_get_extra()
57
  {
58
  return apply_filters('wprss_extra_addons', array(
59
- 'et' => array(
60
- 'title' => 'Excerpts & Thumbnails',
61
- 'description' => __("Adds the ability to display thumbnails and excerpts. Perfect for adding some life and color to your feed item display. For more flexibility Feed to Post is a better option.", WPRSS_TEXT_DOMAIN),
62
- 'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
63
- 'basename' => 'wp-rss-excerpts-thumbnails/wp-rss-excerpts-thumbnails.php',
64
- 'url' => 'http://www.wprssaggregator.com/extension/excerpts-thumbnails/'
65
- ),
66
- 'c' => array(
67
- 'title' => 'Categories',
68
- 'description' => __("Assign categories to your feed sources. Then display a particular category or multiple categories on a post or page via shortcodes.", WPRSS_TEXT_DOMAIN),
69
- 'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
70
- 'basename' => 'wp-rss-categories/wp-rss-categories.php',
71
- 'url' => 'http://www.wprssaggregator.com/extension/categories/'
72
- ),
73
- 'kf' => array(
74
- 'title' => 'Keyword Filtering',
75
- 'description' => __("Import feeds that contain specific keywords in either the title or their content. Control what gets imported to your blog. You can use keywords, keyphrases and categories.", WPRSS_TEXT_DOMAIN),
76
- 'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
77
- 'basename' => 'wp-rss-keyword-filtering/wp-rss-keyword-filtering.php',
78
- 'url' => 'http://www.wprssaggregator.com/extension/keyword-filtering/'
79
- ),
80
  'ftp' => array(
81
  'title' => 'Feed to Post',
82
- 'description' => __("Allows you to import feed items into posts or any other custom post type that you have created. Takes WP RSS Aggregator to a whole new level of flexibility.", WPRSS_TEXT_DOMAIN),
83
  'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
84
  'basename' => 'wp-rss-feed-to-post/wp-rss-feed-to-post.php',
85
  'url' => 'http://www.wprssaggregator.com/extension/feed-to-post/'
86
  ),
87
  'ftr' => array(
88
  'title' => 'Full Text RSS Feeds',
89
- 'description' => __("This add-ons provides the connectivity to our Full Text Premium service, which gives you unlimited feed items returned per feed source.", WPRSS_TEXT_DOMAIN),
90
  'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
91
  'basename' => 'wp-rss-full-text-feeds/wp-rss-full-text.php',
92
  'url' => 'http://www.wprssaggregator.com/extension/full-text-rss-feeds/'
93
  ),
94
  'wai' => array(
95
  'title' => 'WordAi',
96
- 'description' => __("Allows you to spin the content for posts imported by Feed to Post using WordAi. Cleverly rewrite your posts without changing their meaning and maintaining human readability.", WPRSS_TEXT_DOMAIN),
97
  'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
98
  'basename' => 'wp-rss-wordai/wp-rss-wordai.php',
99
  'url' => 'http://www.wprssaggregator.com/extension/wordai/'
100
  ),
101
- 'widget' => array(
102
- 'title' => 'Widget',
103
- 'description' => __("An add-on for WP RSS Aggregator that displays your imported feed items in a widget on your site. Intergrates well with Excerpts &amp; Thumbnails", WPRSS_TEXT_DOMAIN),
104
- 'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
105
- 'basename' => 'wp-rss-widget/wp-rss-widget.php',
106
- 'url' => 'http://www.wprssaggregator.com/extension/widget/'
107
- ),
108
  'spc' => array(
109
  'title' => 'SpinnerChief',
110
  'description' => __("An extension for Feed to Post that allows you to integrate the SpinnerChief article spinner so that the imported content is both completely unique and completely readable.", WPRSS_TEXT_DOMAIN),
111
  'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
112
  'basename' => 'wp-rss-spinnerchief/wp-rss-spinnerchief.php',
113
  'url' => 'http://www.wprssaggregator.com/extension/spinnerchief/'
114
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  ));
116
  }
117
 
14
  <div class="wrap">
15
  <?php screen_icon( 'wprss-aggregator' ); ?>
16
 
17
+ <h2><?php _e( 'More Features With Our Premium Add-Ons', WPRSS_TEXT_DOMAIN ); ?></h2>
18
+ <p><?php echo sprintf(__( 'The following <a href="%1$s" target="_blank">add-ons</a> are available to increase the functionality of the WP RSS Aggregator plugin.', WPRSS_TEXT_DOMAIN ), 'http://www.wprssaggregator.com/extensions') ?></p>
19
+ <p><?php echo sprintf(__(
20
+ 'Save more with our <a href="%1$s" target="_blank"><strong>Simple Feeds Bundle</strong></a> or'
21
+ . ' <a href="%2$s" target="_blank"><strong>Advanced Feeds Bundle</strong></a>!', WPRSS_TEXT_DOMAIN ),
22
+ 'https://www.wprssaggregator.com/extension/simple-feeds-bundle/',
23
+ 'https://www.wprssaggregator.com/extension/advanced-feeds-bundle/'); ?></p>
24
 
25
  <div id="add-ons" class="clearfix">
26
 
60
  function wprss_addons_get_extra()
61
  {
62
  return apply_filters('wprss_extra_addons', array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  'ftp' => array(
64
  'title' => 'Feed to Post',
65
+ 'description' => __("An advanced importer that lets you import RSS feed items as WordPress posts or any other custom post type. You can use it to populate a website in minutes (auto-blog). This is the most popular and feature-filled extension.", WPRSS_TEXT_DOMAIN),
66
  'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
67
  'basename' => 'wp-rss-feed-to-post/wp-rss-feed-to-post.php',
68
  'url' => 'http://www.wprssaggregator.com/extension/feed-to-post/'
69
  ),
70
  'ftr' => array(
71
  'title' => 'Full Text RSS Feeds',
72
+ 'description' => __("Adds connectivity to our premium full text service, which allows you to import the full post content for an unlimited number of feed items per feed source, even when the feed itself doesn't provide it", WPRSS_TEXT_DOMAIN),
73
  'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
74
  'basename' => 'wp-rss-full-text-feeds/wp-rss-full-text.php',
75
  'url' => 'http://www.wprssaggregator.com/extension/full-text-rss-feeds/'
76
  ),
77
  'wai' => array(
78
  'title' => 'WordAi',
79
+ 'description' => __("An extension for Feed to Post that allows you to integrate the WordAi article spinner so that the imported content is both completely unique and completely readable.", WPRSS_TEXT_DOMAIN),
80
  'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
81
  'basename' => 'wp-rss-wordai/wp-rss-wordai.php',
82
  'url' => 'http://www.wprssaggregator.com/extension/wordai/'
83
  ),
 
 
 
 
 
 
 
84
  'spc' => array(
85
  'title' => 'SpinnerChief',
86
  'description' => __("An extension for Feed to Post that allows you to integrate the SpinnerChief article spinner so that the imported content is both completely unique and completely readable.", WPRSS_TEXT_DOMAIN),
87
  'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
88
  'basename' => 'wp-rss-spinnerchief/wp-rss-spinnerchief.php',
89
  'url' => 'http://www.wprssaggregator.com/extension/spinnerchief/'
90
+ ),
91
+ 'et' => array(
92
+ 'title' => 'Excerpts & Thumbnails',
93
+ 'description' => __("Displays an excerpt and thumbnail image (taken from within the RSS feed) together with the title, date and source of each feed item. It uses the shortcode to display the feed items.", WPRSS_TEXT_DOMAIN),
94
+ 'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
95
+ 'basename' => 'wp-rss-excerpts-thumbnails/wp-rss-excerpts-thumbnails.php',
96
+ 'url' => 'http://www.wprssaggregator.com/extension/excerpts-thumbnails/'
97
+ ),
98
+ 'c' => array(
99
+ 'title' => 'Categories',
100
+ 'description' => __("Categorises your feed sources and allows you to display feed items from a particular category within your site using the shortcode parameters.", WPRSS_TEXT_DOMAIN),
101
+ 'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
102
+ 'basename' => 'wp-rss-categories/wp-rss-categories.php',
103
+ 'url' => 'http://www.wprssaggregator.com/extension/categories/'
104
+ ),
105
+ 'kf' => array(
106
+ 'title' => 'Keyword Filtering',
107
+ 'description' => __("Filters the feed items to be imported based on your own keywords, key phrases, or tags; you only get the items you're interested in. It is compatible with all other add-ons.", WPRSS_TEXT_DOMAIN),
108
+ 'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
109
+ 'basename' => 'wp-rss-keyword-filtering/wp-rss-keyword-filtering.php',
110
+ 'url' => 'http://www.wprssaggregator.com/extension/keyword-filtering/'
111
+ ),
112
+ 'widget' => array(
113
+ 'title' => 'Widget',
114
+ 'description' => __("Adds a widget to your website that displays all the imported feed items. It can also display excerpts and thumbnail images when used in conjunction with the Excerpts &amp; Thumbnails add-on", WPRSS_TEXT_DOMAIN),
115
+ 'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
116
+ 'basename' => 'wp-rss-widget/wp-rss-widget.php',
117
+ 'url' => 'http://www.wprssaggregator.com/extension/widget/'
118
+ ),
119
  ));
120
  }
121
 
includes/admin-help-settings.php CHANGED
@@ -32,6 +32,28 @@ function wprss_settings_add_tooltips() {
32
  '. '<hr/>
33
 
34
  '. '<em>Use 0 or leave empty for no limit.</em>', WPRSS_TEXT_DOMAIN),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  // Feed processing interval
36
  'cron-interval' => __('How frequently should the feed sources (that do not have their own update interval) check for updates and fetch items accordingly.
37
 
32
  '. '<hr/>
33
 
34
  '. '<em>Use 0 or leave empty for no limit.</em>', WPRSS_TEXT_DOMAIN),
35
+ // Limit feed items per import
36
+ 'limit_feed_items_per_import' => __('The maximum amount of items to process per import.
37
+ '. '<hr />
38
+
39
+ '. 'Will not process more than this amount of items every time the feed source updates, regardless of other settings.
40
+ '. 'The frequency of updates is determined by the feed processing interval.
41
+ '. '<hr />
42
+
43
+ '. '<em>Leave empty for no limit.</em>',
44
+ WPRSS_TEXT_DOMAIN),
45
+ // Feed items import order
46
+ 'feed_items_import_order' => __('The order, in which the feed items will be imported.
47
+ '. '<hr />
48
+
49
+ '. 'Select <em>Any</em> if the order is not significant.
50
+ '. 'Selecting <em>Latest First</em> will cause the most recent items to be imported first.
51
+ '. 'Selecting <em>Oldest First</em> will cause the oldest items to be imported first.
52
+ '. 'This setting is very useful in combination with the per-import limit.
53
+ '. '<hr />
54
+
55
+ '. '<em>Default: Any.</em>',
56
+ WPRSS_TEXT_DOMAIN),
57
  // Feed processing interval
58
  'cron-interval' => __('How frequently should the feed sources (that do not have their own update interval) check for updates and fetch items accordingly.
59
 
includes/admin-options.php CHANGED
@@ -67,16 +67,24 @@
67
  array(
68
  'general' => array(
69
  'limit-feed-items-by-age' => array(
70
- 'label' => __( 'Limit feed items by age', WPRSS_TEXT_DOMAIN ),
71
  'callback' => 'wprss_setting_limit_feed_items_age_callback'
72
  ),
 
 
 
 
73
  'limit-feed-items-db' => array(
74
  'label' => __( 'Limit feed items stored', WPRSS_TEXT_DOMAIN ),
75
  'callback' => 'wprss_setting_limit_feed_items_callback'
76
  ),
77
- 'limit-feed-items-imported' => array(
78
- 'label' => __( 'Limit feed items per feed', WPRSS_TEXT_DOMAIN ),
79
- 'callback' => 'wprss_setting_limit_feed_items_imported_callback'
 
 
 
 
80
  ),
81
  'cron-interval' => array(
82
  'label' => __( 'Feed processing interval', WPRSS_TEXT_DOMAIN ),
@@ -892,6 +900,56 @@
892
  <?php echo wprss_settings_inline_help( $field['field_id'], $field['tooltip'] );
893
  }
894
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
895
 
896
 
897
  /**
67
  array(
68
  'general' => array(
69
  'limit-feed-items-by-age' => array(
70
+ 'label' => __( 'Limit feed items stored by age', WPRSS_TEXT_DOMAIN ),
71
  'callback' => 'wprss_setting_limit_feed_items_age_callback'
72
  ),
73
+ 'limit-feed-items-imported' => array(
74
+ 'label' => __( 'Limit feed items stored per feed', WPRSS_TEXT_DOMAIN ),
75
+ 'callback' => 'wprss_setting_limit_feed_items_imported_callback'
76
+ ),
77
  'limit-feed-items-db' => array(
78
  'label' => __( 'Limit feed items stored', WPRSS_TEXT_DOMAIN ),
79
  'callback' => 'wprss_setting_limit_feed_items_callback'
80
  ),
81
+ 'limit_feed_items_per_import' => array(
82
+ 'label' => __( 'Limit feed items per import', WPRSS_TEXT_DOMAIN ),
83
+ 'callback' => 'wprss_setting_limit_feed_items_per_import_callback'
84
+ ),
85
+ 'feed_items_import_order' => array(
86
+ 'label' => __( 'Import order', WPRSS_TEXT_DOMAIN ),
87
+ 'callback' => 'wprss_setting_feed_items_import_order_callback'
88
  ),
89
  'cron-interval' => array(
90
  'label' => __( 'Feed processing interval', WPRSS_TEXT_DOMAIN ),
900
  <?php echo wprss_settings_inline_help( $field['field_id'], $field['tooltip'] );
901
  }
902
 
903
+ /**
904
+ * Renders the `limit_feed_items_per_import` setting.
905
+ *
906
+ * @since 4.11.2
907
+ *
908
+ * @param array $field Field data.
909
+ */
910
+ function wprss_setting_limit_feed_items_per_import_callback($field)
911
+ {
912
+ $id = $field['field_id'];
913
+ $mainOptionName = 'wprss_settings_general';
914
+ $value = wprss_get_general_setting($id);
915
+ echo \Aventura\Wprss\Core\Model\SettingsAbstract::getTextHtml($value, array(
916
+ 'id' => $id,
917
+ 'name' => \Aventura\Wprss\Core\Model\SettingsAbstract::getNameHtml(array($mainOptionName, $id)),
918
+ 'placeholder' => __( 'No Limit', WPRSS_TEXT_DOMAIN )
919
+ ));
920
+ ?>
921
+ <?php echo wprss_settings_inline_help( $field['field_id'], $field['tooltip'] );
922
+ }
923
+
924
+ /**
925
+ * Renders the `feed_items_import_order` setting.
926
+ *
927
+ * @since 4.11.2
928
+ *
929
+ * @param array $field Field data.
930
+ */
931
+ function wprss_setting_feed_items_import_order_callback($field)
932
+ {
933
+ $id = $field['field_id'];
934
+ $mainOptionName = 'wprss_settings_general';
935
+ $value = wprss_get_general_setting($id);
936
+ $items = array(
937
+ '' => __('Any', WPRSS_TEXT_DOMAIN),
938
+ 'latest' => __('Latest First', WPRSS_TEXT_DOMAIN),
939
+ 'oldest' => __('Oldest First', WPRSS_TEXT_DOMAIN),
940
+ );
941
+ ?>
942
+ <select id="<?php echo $id ?>" name="<?php echo \Aventura\Wprss\Core\Model\SettingsAbstract::getNameHtml(array($mainOptionName, $id)) ?>">
943
+ <?php
944
+ foreach( $items as $_value => $_label ): ?>
945
+ <option value="<?php echo esc_attr($_value) ?>" <?php selected( $value, $_value ) ?> >
946
+ <?php echo esc_html($_label) ?>
947
+ </option>
948
+ <?php endforeach ?>
949
+ </select>
950
+ <?php echo wprss_settings_inline_help( $field['field_id'], $field['tooltip'] );
951
+ }
952
+
953
 
954
 
955
  /**
includes/admin.php CHANGED
@@ -40,7 +40,7 @@
40
  add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'Export & Import Settings', WPRSS_TEXT_DOMAIN ), __( 'Import & Export', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings' ), 'wprss-import-export-settings', 'wprss_import_export_settings_page_display' );
41
  add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'WP RSS Aggregator Settings', WPRSS_TEXT_DOMAIN ), __( 'Settings', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings' ), 'wprss-aggregator-settings', 'wprss_settings_page_display' );
42
  add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'Debugging', WPRSS_TEXT_DOMAIN ), __( 'Debugging', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings'), 'wprss-debugging', 'wprss_debugging_page_display' );
43
- add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'Add-Ons', WPRSS_TEXT_DOMAIN ), __( 'Add-Ons', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings'), 'wprss-addons', 'wprss_addons_page_display' );
44
  add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'Help & Support', WPRSS_TEXT_DOMAIN ), __( 'Help & Support', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings'), 'wprss-help', 'wprss_help_page_display' );
45
  }
46
 
40
  add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'Export & Import Settings', WPRSS_TEXT_DOMAIN ), __( 'Import & Export', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings' ), 'wprss-import-export-settings', 'wprss_import_export_settings_page_display' );
41
  add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'WP RSS Aggregator Settings', WPRSS_TEXT_DOMAIN ), __( 'Settings', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings' ), 'wprss-aggregator-settings', 'wprss_settings_page_display' );
42
  add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'Debugging', WPRSS_TEXT_DOMAIN ), __( 'Debugging', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings'), 'wprss-debugging', 'wprss_debugging_page_display' );
43
+ add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'More Features', WPRSS_TEXT_DOMAIN ), __( 'More Features', WPRSS_TEXT_DOMAIN ) . '<span class="dashicons dashicons-star-filled wprss-more-features-glyph"></span>', apply_filters( 'wprss_capability', 'manage_feed_settings'), 'wprss-addons', 'wprss_addons_page_display' );
44
  add_submenu_page( 'edit.php?post_type=wprss_feed', __( 'Help & Support', WPRSS_TEXT_DOMAIN ), __( 'Help & Support', WPRSS_TEXT_DOMAIN ), apply_filters( 'wprss_capability', 'manage_feed_settings'), 'wprss-help', 'wprss_help_page_display' );
45
  }
46
 
includes/feed-importing.php CHANGED
@@ -12,6 +12,8 @@
12
  add_filter('wprss_normalize_permalink', 'wprss_google_alerts_url_fix', 10);
13
  add_filter('wprss_normalize_permalink', 'wprss_convert_video_permalink', 100);
14
 
 
 
15
 
16
  add_action( 'wprss_fetch_single_feed_hook', 'wprss_fetch_insert_single_feed_items' );
17
  /**
@@ -72,12 +74,16 @@
72
  wprss_log_obj( 'Feed URL is valid', $feed_url, null, WPRSS_LOG_LEVEL_INFO );
73
  // Get the feed items from the source
74
  $items = wprss_get_feed_items( $feed_url, $feed_ID );
 
75
  // If got NULL, convert to an empty array
76
  if ( $items === NULL ) {
77
  $items = array();
78
  wprss_log( 'Items were NULL. Using empty array', null, WPRSS_LOG_LEVEL_WARNING );
79
  }
80
 
 
 
 
81
  // If using a limit ...
82
  if ( $feed_limit === NULL ) {
83
  $items_to_insert = $items;
@@ -144,6 +150,11 @@
144
  }
145
 
146
  $items_to_insert = $new_items;
 
 
 
 
 
147
 
148
  // If using a limit - delete any excess items to make room for the new items
149
  if ( $feed_limit !== NULL ) {
@@ -693,4 +704,171 @@
693
  }
694
  }
695
  }
696
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  add_filter('wprss_normalize_permalink', 'wprss_google_alerts_url_fix', 10);
13
  add_filter('wprss_normalize_permalink', 'wprss_convert_video_permalink', 100);
14
 
15
+ // Adds comparators for item sorting
16
+ add_filter('wprss_item_comparators', 'wprss_sort_comparators_default');
17
 
18
  add_action( 'wprss_fetch_single_feed_hook', 'wprss_fetch_insert_single_feed_items' );
19
  /**
74
  wprss_log_obj( 'Feed URL is valid', $feed_url, null, WPRSS_LOG_LEVEL_INFO );
75
  // Get the feed items from the source
76
  $items = wprss_get_feed_items( $feed_url, $feed_ID );
77
+
78
  // If got NULL, convert to an empty array
79
  if ( $items === NULL ) {
80
  $items = array();
81
  wprss_log( 'Items were NULL. Using empty array', null, WPRSS_LOG_LEVEL_WARNING );
82
  }
83
 
84
+ // See `wprss_item_comparators` filter
85
+ wprss_sort_items($items);
86
+
87
  // If using a limit ...
88
  if ( $feed_limit === NULL ) {
89
  $items_to_insert = $items;
150
  }
151
 
152
  $items_to_insert = $new_items;
153
+ $per_import = wprss_get_general_setting('limit_feed_items_per_import');
154
+ if (!empty($per_import)) {
155
+ wprss_log_obj( 'Per-import limit', $per_import, null, WPRSS_LOG_LEVEL_SYSTEM );
156
+ $items_to_insert = array_slice( $items_to_insert, 0, $per_import );
157
+ }
158
 
159
  // If using a limit - delete any excess items to make room for the new items
160
  if ( $feed_limit !== NULL ) {
704
  }
705
  }
706
  }
707
+ }
708
+
709
+ /**
710
+ * Validates a feed item.
711
+ *
712
+ * @since 4.11.2
713
+ *
714
+ * @param \SimplePie_Item|mixed $item The item to validate.
715
+ *
716
+ * @return \SimplePie_Item|null The item, if it passes; otherwise, null.
717
+ */
718
+ function wprss_item_filter_valid($item)
719
+ {
720
+ return $item instanceof \SimplePie_Item
721
+ ? $item
722
+ : null;
723
+ }
724
+
725
+ /**
726
+ * Sorts items according to settings.
727
+ *
728
+ * Use the `wprss_item_comparators` filter to change the list of comparators
729
+ * used to determine the new order of items. See {@see wprss_items_sort_compare_items()}.
730
+ *
731
+ * @since 4.11.2
732
+ *
733
+ * @param \SimplePie_Item[] $items The items list.
734
+ * @param \WP_Post $feedSource The feed source, for which to sort, if any.
735
+ */
736
+ function wprss_sort_items(&$items, $feedSource = null)
737
+ {
738
+ // Callbacks used to compare items
739
+ $comparators = apply_filters('wprss_item_comparators', array());
740
+ if (empty($comparators)) {
741
+ return;
742
+ }
743
+
744
+ try {
745
+ usort($items, function ($itemA, $itemB) use ($comparators, $feedSource) {
746
+ return wprss_items_sort_compare_items($itemA, $itemB, $comparators, $feedSource);
747
+ });
748
+
749
+ wprss_log_obj( 'Sorted', NULL, WPRSS_LOG_LEVEL_INFO );
750
+ } catch (\InvalidArgumentException $e) {
751
+ wprss_log( 'Error was encountered while sorting items; list remains unsorted', NULL, WPRSS_LOG_LEVEL_WARNING );
752
+ }
753
+ }
754
+
755
+ /**
756
+ * Recursively compares two items using a list of comparators.
757
+ *
758
+ * If a comparator determines that two items are equal, then the items are
759
+ * evaluated using the next comparator in list, recursively until one of
760
+ * the comparators establishes a difference between items, or the list of
761
+ * comparators is exhausted.
762
+ *
763
+ * @since 4.11.2
764
+ *
765
+ * @param \SimplePie_Item|mixed $itemA The item being compared;
766
+ * @param \SimplePie_Item|mixed $itemB The item being compared to;
767
+ * @param callable[] $comparators A list of functions for item comparison.
768
+ *
769
+ * @return int A result usable as a return value for {@see usort()}.
770
+ *
771
+ * @throws \InvalidArgumentException If the comparator is not callable.
772
+ */
773
+ function wprss_items_sort_compare_items($itemA, $itemB, $comparators, $feedSource = null)
774
+ {
775
+ if (empty($comparators)) {
776
+ return 0;
777
+ }
778
+
779
+ $comparator = array_shift($comparators);
780
+ if (!is_callable($comparator)) {
781
+ throw new \InvalidArgumentException('Comparator must be callable');
782
+ }
783
+
784
+ $result = call_user_func_array($comparator, array($itemA, $itemB, $feedSource));
785
+ if (!$result) {
786
+ return wprss_items_sort_compare_items($itemA, $itemB, $comparators);
787
+ }
788
+
789
+ return $result;
790
+ }
791
+
792
+ /**
793
+ * Retrieves a custom field of a feed source, or a general setting if the field doesn't exist.
794
+ *
795
+ * @since 4.11.2
796
+ *
797
+ * @param string $key The key of the field or setting.
798
+ * @param \WP_Post|null $feedSource The feed source, if any.
799
+ * @return type
800
+ */
801
+ function wprss_get_source_meta_or_setting($key, $feedSource = null)
802
+ {
803
+ $value = null;
804
+ if ($feedSource instanceof \WP_Post) {
805
+ $value = $feedSource->{$key};
806
+ }
807
+
808
+ return $value !== null && $value !== false
809
+ ? $value
810
+ : wprss_get_general_setting($key);
811
+ }
812
+
813
+ /**
814
+ * Determines date order of two feed items.
815
+ *
816
+ * Which should come first is determined by `feed_items_import_order` setting.
817
+ *
818
+ * @since 4.11.2
819
+ *
820
+ * @param \SimplePie_Item|mixed $itemA The first item.
821
+ * @param \SimplePie_Item|mixed $itemB The second item.
822
+ * @param \WP_Post|null $feedSource The feed source for which the items are being compared, if any.
823
+ * @return int A comparison result for {@see usort()}.
824
+ */
825
+ function wprss_item_comparator_date($itemA, $itemB, $feedSource = null)
826
+ {
827
+ $sortOrder = wprss_get_source_meta_or_setting('feed_items_import_order', $feedSource);
828
+ if (empty($sortOrder)) {
829
+ return 0;
830
+ }
831
+
832
+ if (!wprss_item_filter_valid($itemA) || !wprss_item_filter_valid($itemB)) {
833
+ return 0;
834
+ }
835
+
836
+ $aDate = intval($itemA->get_gmdate('U'));
837
+ $bDate = intval($itemB->get_gmdate('U'));
838
+
839
+ switch ($sortOrder) {
840
+ case 'latest':
841
+ if ($aDate === $bDate) {
842
+ return null;
843
+ }
844
+ return $aDate > $bDate ? -1 : 1;
845
+ break;
846
+
847
+ case 'oldest':
848
+ return $aDate < $bDate ? -1 : 1;
849
+ break;
850
+
851
+ case '':
852
+ default:
853
+ return 0;
854
+ break;
855
+ }
856
+ }
857
+
858
+ /**
859
+ * Retrieves default comparators for sorting.
860
+ *
861
+ * @since 4.11.2
862
+ *
863
+ * @param \WP_Post|null $feedSource The feed source, for which to get comparators, if any.
864
+ *
865
+ * @return callable[] The list of comparators.
866
+ */
867
+ function wprss_sort_comparators_default($feedSource = null)
868
+ {
869
+ $helper = wprss_wp_container()->get('wprss.admin_helper');
870
+ $defaultArgs = array(2 => $feedSource);
871
+ return array(
872
+ $helper->createCommand('wprss_item_comparator_date', $defaultArgs),
873
+ );
874
+ }
includes/scripts.php CHANGED
@@ -92,6 +92,7 @@
92
  // On all admin screens
93
  wp_enqueue_style( 'wprss-admin-editor-styles' );
94
  wp_enqueue_style( 'wprss-admin-tracking-styles' );
 
95
 
96
  // Only on WPRA-related admin screens
97
  if ($isWpraScreen) {
@@ -212,5 +213,6 @@
212
  wp_register_style( 'wprss-admin-3.8-styles', WPRSS_CSS . 'admin-3.8.css', array(), $version );
213
  wp_register_style( 'wprss-admin-editor-styles', WPRSS_CSS . 'admin-editor.css', array(), $version );
214
  wp_register_style( 'wprss-admin-tracking-styles', WPRSS_CSS . 'admin-tracking-styles.css', array(), $version );
 
215
  wp_register_style( 'jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css', array(), $version );
216
  }
92
  // On all admin screens
93
  wp_enqueue_style( 'wprss-admin-editor-styles' );
94
  wp_enqueue_style( 'wprss-admin-tracking-styles' );
95
+ wp_enqueue_style( 'wprss-admin-general-styles' );
96
 
97
  // Only on WPRA-related admin screens
98
  if ($isWpraScreen) {
213
  wp_register_style( 'wprss-admin-3.8-styles', WPRSS_CSS . 'admin-3.8.css', array(), $version );
214
  wp_register_style( 'wprss-admin-editor-styles', WPRSS_CSS . 'admin-editor.css', array(), $version );
215
  wp_register_style( 'wprss-admin-tracking-styles', WPRSS_CSS . 'admin-tracking-styles.css', array(), $version );
216
+ wp_register_style( 'wprss-admin-general-styles', WPRSS_CSS . 'admin-general-styles.css', array(), $version );
217
  wp_register_style( 'jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css', array(), $version );
218
  }
includes/update.php CHANGED
@@ -262,6 +262,11 @@
262
 
263
  // From 4.8.2
264
  'feed_request_useragent' => null,
 
 
 
 
 
265
  )
266
  );
267
 
262
 
263
  // From 4.8.2
264
  'feed_request_useragent' => null,
265
+
266
+ // From 4.11.2
267
+ 'limit_feed_items_per_import' => null,
268
+ 'feed_items_import_order' => '',
269
+ 'feed_items_import_order' => '',
270
  )
271
  );
272
 
readme.txt CHANGED
@@ -1,174 +1,143 @@
1
  === WP RSS Aggregator ===
2
  Contributors: RebelCode, jeangalea, Mekku, xedin.unknown, markzahra
3
  Plugin URI: https://www.wprssaggregator.com
4
- Tags: RSS, RSS feeds, aggregation, autoblog, content curation, feed reader, feed to post, RSS aggregator, RSS feeder, RSS import, RSS to post, syndication, multiple feed import
5
  Requires at least: 4.0
6
- Tested up to: 4.7.2
7
- Stable tag: 4.11.1
 
8
  License: GPLv3
 
9
  WP RSS Aggregator is the most comprehensive RSS feed importer and autoblogging plugin for WordPress with premium add-ons for additional functionality.
10
 
11
  == Description ==
12
 
13
- WP RSS Aggregator is the original and best plugin for easily importing, merging and displaying RSS and Atom feeds on your WordPress site. Its the most comprehensive and elegant RSS feed solution for WordPress.
14
 
15
- With the free core version of WP RSS Aggregator you can aggregate as many RSS feeds from as many sources as you need, with the ability to [stagger them](https://docs.wprssaggregator.com/staggering-updates/) for better performance.
16
- Using our [shortcode](http://docs.wprssaggregator.com/shortcodes/) and its parameters you can then display the imported feed items from one or more sources anywhere on your WordPress site.
17
 
18
  [youtube https://www.youtube.com/watch?v=OgB3veegtz4]
19
 
20
- ### Core Features ###
21
- These are the main [features](https://www.wprssaggregator.com/features/) offered with the free core version of WP RSS Aggregator.
22
-
23
- **Import & Display**
24
 
25
  * Import any number of feed items from multiple RSS Feeds.
26
  * Incorporates feed auto-discovery to add feed sources without knowing the exact URL (not guaranteed to work for all sources).
27
- * Display feed items via our [shortcode](https://docs.wprssaggregator.com/shortcodes/) and its parameters.
28
- * Display feed items by [calling the display function from within your theme](http://docs.wprssaggregator.com/shortcodes/#using-shortcodes-directly-in-templates).
29
-
30
- **General Settings**
31
-
32
- * Import feed items with [unique titles only](http://docs.wprssaggregator.com/general-plugin-settings/#unique-titles-only).
33
- * Limit the number of feed items stored [per feed source](http://docs.wprssaggregator.com/general-plugin-settings/#limit-feed-items-per-feed).
34
- * Limit the number of feed items stored [by their age](http://docs.wprssaggregator.com/general-plugin-settings/#limit-feed-items-by-age).
35
- * Link to the [enclosure tag URL](https://docs.wprssaggregator.com/adding-a-feed-source-importing-as-feed-items/#step-5-other-options) for each feed item.
36
- * Set all feed item links as nofollow.
37
- * Easily manage your feed sources and imported feed items.
38
- * [Stagger the update interval](https://docs.wprssaggregator.com/staggering-updates/) of each source to improve site performance.
39
-
40
- **General Display Settings**
41
-
42
  * Link the title and source name to the original source.
43
  * Choose to hide or show the date and source of each feed item.
44
- * Choose to display the original authors name with each feed item.
45
- * Change the date display format based on your needs.
46
- * Style the shortcode’s feed item display with some CSS.
47
- * Change the open link behaviour (lightbox, new window or current window).
48
- * Change the feed item list pagination type.
49
-
50
- **Other Features**
51
-
52
- * Opens YouTube, DailyMotion and Vimeo videos directly.
53
  * Create a [custom RSS feed](https://docs.wprssaggregator.com/custom-feed-url/) from imported feed items.
54
- * Blacklist selected feed items so they’re never imported again.
55
- * Import/export your feed sources using the WordPress or OPML Importer.
56
  * Extendable via [action and filter hooks](https://docs.wprssaggregator.com/category/filters/).
57
  * Integrated with the Simplepie library that comes with WordPress.
58
  * Multilingual ready.
59
 
60
- ### Minimal System Requirements ###
61
- * PHP 5.3.9 or higher
62
- * WordPress 4.0 or higher
63
 
64
- ### Premium Add-Ons ###
65
- With our premium add-ons you can do such things as creating auto-blogging websites, displaying job listings, importing YouTube videos, building news websites, and lots more. Take a look at our [Use Cases](https://www.wprssaggregator.com/use-cases/) and [Showcase](https://www.wprssaggregator.com/showcase/) for more ideas. Go [here](http://docs.wprssaggregator.com/introductory-videos/) to watch the video tutorials for our premium add-ons.
66
 
67
- The add-ons currently available are:
68
 
69
- * [Feed to Post](https://www.wprssaggregator.com/extension/feed-to-post/) is an advanced importer that lets you import RSS feed items as WordPress posts or any other custom post type. You can use it to populate a website in minutes (auto-blog). This is the most popular and feature-filled extension. (It does not use shortcodes)
70
 
71
- * [Full Text RSS Feeds](https://www.wprssaggregator.com/extension/full-text-rss-feeds/) adds connectivity to our premium full text service, which allows you to import the full post content for an unlimited number of feed items per feed source, even when the feed itself doesnt provide it. (Requires [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/))
72
 
73
- * [WordAi](https://www.wprssaggregator.com/extension/wordai/) allows you to take an RSS feed and turn it into new content that is both completely unique and completely readable. (Requires [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/) and a [WordAi account](https://wordai.com/))
74
 
75
- * [SpinnerChief](https://www.wprssaggregator.com/extension/spinnerchief/) is an extension for [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/) that allows you to integrate the SpinnerChief article spinner so that the imported content is both completely unique and completely readable. (Requires [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/) and a [SpinnerChief account](http://www.spinnerchief.com/))
76
 
77
- * [Excerpts & Thumbnails](https://www.wprssaggregator.com/extension/excerpts-thumbnails/) displays an excerpt and thumbnail image (taken from within the RSS feed) together with the title, date and source of each feed item.It uses the shortcode to display the feed items.
78
 
79
- * [Categories](https://www.wprssaggregator.com/extension/categories/) categorises your feed sources and allows you to display feed items from a particular category within your site using the [shortcode parameters](http://docs.wprssaggregator.com/shortcodes/#categories-parameters). (It does not use WordPress Post Categories)
80
 
81
- * [Keyword Filtering](https://www.wprssaggregator.com/extension/keyword-filtering/) filters the feed items to be imported based on your own keywords, key phrases, or tags; you only get the items you're interested in. It is compatible with all other add-ons.
82
 
83
- * [Widget](https://www.wprssaggregator.com/extension/widget/) adds a widget to your website that displays all the imported feed items. It can also display excerpts and thumbnail images when used in conjunction with the [Excerpts & Thumbnails](http://www.wprssaggregator.com/extension/excerpts-thumbnails/) add-on.
84
-
85
- There are also two premium bundles available, the [Simple Feeds Bundle](https://www.wprssaggregator.com/extension/simple-feeds-bundle/) and the [Advanced Feeds Bundle](https://www.wprssaggregator.com/extension/advanced-feeds-bundle/). View a comparison of these bundles [here](http://www.wprssaggregator.com/bundle-comparison/) or follow the guides below for more information:
86
 
87
- * [Enhance Your Feed Display](https://www.wprssaggregator.com/enhance-feed-display/) with the Simple Feeds Bundle
88
- * [Content Aggregation and Curation](https://www.wprssaggregator.com/content-aggregation-curation/) with the Advanced Feeds Bundle
89
 
90
- We also provide a [Feed Creator](http://createfeed.wprssaggregator.com/) service that allows you to generate RSS feeds from any webpage, even if it doesn't have its own RSS feed.
91
 
92
- ### Free Demos ###
 
 
 
 
93
  We offer two free demo sites, each including a different set of add-ons:
94
 
95
- * [Simple Feeds Bundle Demo](http://simple.wprssaggregator.com/)
96
- * [Advanced Feeds Bundle Demo](http://demo.wprssaggregator.com/)
 
97
 
98
- We also have a number of live demo sites built by our team to showcase the power of our add-ons:
99
 
100
  * [WP News Desk](http://wpnewsdesk.com/)
101
  * [Travel Blogger Community](http://travelbloggercommunity.com/)
102
  * [Dribbble Me](http://dribbble.wprssaggregator.com/)
103
 
104
  ### Documentation ###
105
- Our comprehensive [documentation](http://docs.wprssaggregator.com/) provides you with everything you need to install, set up and customise the plugin to your needs. You can also browse through a large number of [FAQs](http://docs.wprssaggregator.com/category/faqs/) that cover almost everything there is to ask.
106
 
107
  ### Support ###
108
- Support for the free version of WP RSS Aggregator is provided via the plugin directory support forum [here](https://wordpress.org/support/plugin/wp-rss-aggregator). It’s important to read and follow the [Support Guidelines](https://wordpress.org/support/topic/support-guidelines-1/) before opening a new ticket.
109
 
110
- For premium support (owners of premium add-on licenses) and pre-sales questions please contact us via our [premium support channel](https://www.wprssaggregator.com/contact/).
111
 
112
- Would you like to praise any member of our team for our plugins or support services? [Share the love!](https://wordpress.org/support/plugin/wp-rss-aggregator/reviews/#new-topic-0)
 
 
 
 
113
 
114
  ### As featured on: ###
115
  * [WP Mayor](http://www.wpmayor.com/rss-feeds-review-wp-rss-aggregator/)
 
116
  * [Elegant Themes](https://www.elegantthemes.com/blog/tips-tricks/how-to-get-the-most-from-your-wordpress-rss-feed)
117
- * [LatestWP](http://www.latestwp.com/2015/03/15/wp-rss-aggregator-plugin-review/)
118
- * [WPBeginner](http://www.wpbeginner.com/plugins/how-to-fetch-feeds-in-wordpress-using-wp-rss-aggregator/)
119
  * [Cloudways](https://www.cloudways.com/blog/wp-rss-aggregator-plugin-rss-feed-importer-autoblogging-plugin/)
120
- * [WPExplorer](http://www.wpexplorer.com/custom-rss-aggregator-plugin/)
121
  * [WPKube](http://www.wpkube.com/wp-rss-aggregator-wordpress-review/)
122
- * [Torque](http://torquemag.io/wp-rss-aggregator-review-do-more-with-rss-feeds/)
123
  * [MyWPexpert](http://www.mywpexpert.com/wordpress-rss-aggregator-plugin)
124
- * [Kikolani](http://kikolani.com/create-latest-posts-portfolio-page-wp-rss-aggregator.html)
125
- * [Tidy Repo](http://tidyrepo.com/wp-rss-aggregator/)
126
- * [WPEka](http://www.wpeka.com/wp-rss-aggregators-plugin.html)
127
- * [IndexWP](http://www.indexwp.com/wp-rss-aggregator-plugin-review/)
128
- * [WPulsar](http://www.wpulsar.com/wp-rss-aggregator-plugin-feed-to-posts-keyword-filtering-review/)
129
- * [Kevin Muldoon](http://www.kevinmuldoon.com/wp-rss-aggregator-wordpress-plugin/)
130
  * [Magazine3](http://magazine3.com/blog/news-aggregator-website/)
 
 
 
131
 
132
  ### Translations ###
133
- Would you like to contribute to a translation for WP RSS Aggregator and its add-ons? [Get in touch](https://www.wprssaggregator.com/contact/).
134
-
135
- * Italian - Davide De Maestri
136
- * Spanish - Andrew Kurtis
137
- * Brazilian Portugese - Bruno Calheira
138
- * Dutch - Erick Suiker
139
 
 
140
 
141
- ### NOTES ###
142
- The core WP RSS Aggregator plugin is free to download from the WordPress.org plugin repository. The plugin works on self-hosted versions of WordPress only (WordPress.org). It is not compatible with the hosted version
143
- of WordPress (WordPress.com). [Click here](https://www.wpmayor.com/differences-between-wordpressorg-and-wordpresscom/) if you're not sure about the difference between the two.
144
-
145
- Terms & conditions can be found [here](https://www.wprssaggregator.com/terms-conditions/).
146
 
147
  == Installation ==
148
 
149
- Follow these instructions to install and set up the core WP RSS Aggregator plugin:
150
 
151
- > 1. Download the plugin from the “Download” button above.
152
- > 2. Upload the `wp-rss-aggregator` zip file to your site's `/wp-content/plugins/` directory.
153
- > 3. Activate the WP RSS Aggregator plugin from the 'Plugins' section in your dashboard.
154
- > 4. Configure the plugin by going to the `RSS Aggregator` menu item that appears in your dashboard menu.
155
- > 5. Set up your [feed sources](https://docs.wprssaggregator.com/adding-a-feed-source-importing-as-feed-items/) and [general settings](https://docs.wprssaggregator.com/general-plugin-settings/).
156
- > 6. Use the WP RSS Aggregator shortcode in your posts and/or pages to display the imported feed items: `[wp-rss-aggregator]`
157
-
158
- Alternatively, you can find our plugin through your WordPress dashboard:
159
 
160
  > 1. Go to the Plugins section in your WordPress site's dashboard.
161
  > 2. Click the "Add New" button.
162
  > 3. Search for "WP RSS Aggregator".
163
  > 4. When found, click on the "Install" button, then hit the "Activate" button once it has installed.
164
- > 5. Set up your [feed sources](https://docs.wprssaggregator.com/adding-a-feed-source-importing-as-feed-items/) and [general settings](https://docs.wprssaggregator.com/general-plugin-settings/).
165
- > 6. Use the WP RSS Aggregator shortcode in your posts and/or pages to display the imported feed items: `[wp-rss-aggregator]`
166
 
167
- You can easily select the source for your feeds and also insert a limit via
168
- [shortcode parameters](http://docs.wprssaggregator.com/shortcodes/#core-parameters) as shown below.
169
- To get your feed source ID simply hover over the required feed source in the feed source listing page. It will appear beneath the name.
170
 
171
- `[wp-rss-aggregator source=”ID” limit=”num”]`
 
 
 
 
 
 
 
 
 
 
172
 
173
  An example of a shortcode parameter in use could be:
174
 
@@ -176,7 +145,7 @@ An example of a shortcode parameter in use could be:
176
 
177
  It is advisable to use the 'HTML' view of the editor when inserting shortcodes with parameters.
178
 
179
- __Usage within theme files__
180
 
181
  Here are two examples of a function call from within the theme's files:
182
  `
@@ -200,18 +169,15 @@ OR
200
  == Frequently Asked Questions ==
201
  = How do I display the imported feed items? =
202
 
203
- You can either use the shortcode in your posts and pages:
204
- `[wp-rss-aggregator]`
205
 
206
- Or you can call the function directly within your theme:
207
- `<?php wprss_display_feed_items(); ?>`
208
 
209
  - - -
210
 
211
  = Is there a limit on the number of feed sources I can use? =
212
 
213
- No, there is no limit for the number of feed sources. Having many (50+) feed sources should not present any problems in itself.
214
- However, pulling in posts from many sites is bound to put your server under some stress, so you might want to consider using a hosting solution that goes beyond your typical shared host.
215
 
216
  Check out our dedicated page on [WordPress hosting](http://www.wprssaggregator.com/recommended-web-hosts/) recommendations.
217
 
@@ -223,44 +189,35 @@ No, our plugin does not currently import from JSON, it only imports from RSS and
223
 
224
  - - -
225
 
226
- = Why do I get No feed items found when I insert the shortcode on a page or post? =
227
 
228
  1. Try adding a few more feed sources and make sure they are valid by using the RSS Feed Validator.
229
 
230
  2. Try out the solutions listed on our [Feed Items Not Importing](http://docs.wprssaggregator.com/feed-items-not-importing/) documentation page.
231
 
232
- 3. Its important to make sure your WordPress cron system is working well. If not, the feeds cannot be imported.
233
- If in doubt, you can install the WP Crontrol plugin to check for [bad cron](https://docs.wprssaggregator.com/cron-intervals/#bad-cron),
234
- or go to RSS Aggregator > Debugging and hit the red button to re-import all feed items.
235
 
236
- If the problems persist, please [contact our support team](https://wordpress.org/support/plugin/wp-rss-aggregator).
237
- If you’re using a premium add-on, please use the [premium support channel](https://www.wprssaggregator.com/contact/).
238
 
239
  - - -
240
 
241
  = Can I store imported feed items as posts? =
242
 
243
- Yes! You can do that with the [Feed to Post](http://www.wprssaggregator.com/extensions/feed-to-post) premium add-on.
244
- You will not only be able to store items as posts, but also as any other custom post type. You can also set the author,
245
- set tags and categories, import images into the gallery or set featured images, and much more.
246
 
247
  - - -
248
 
249
  = Some RSS feeds only give a short excerpt. Any way around that? =
250
 
251
- Yes, along with the [Feed to Post](http://www.wprssaggregator.com/extensions/feed-to-post) add-on we have another add-on
252
- called [Full Text RSS Feeds](http://www.wprssaggregator.com/extension/full-text-rss-feeds/) that can get the full content
253
- of most feeds that only supply a short excerpt. The Full Text RSS Feeds add-on requires Feed to Post and a valid license key to function.
254
 
255
  - - -
256
 
257
- = Im not sure which premium add-ons are right for me. Can you help me out? =
258
 
259
- Sure! We wrote a [post](http://www.wprssaggregator.com/add-ons-purchase/) just for you. Read about which add-ons
260
- you should buy as we explain the different types of usage so you’ll know what to expect when purchasing.
261
 
262
- If you need any further help you can [contact our support team](http://www.wprssaggregator.com/contact/) or try out our
263
- [Simple Feeds Bundle demo](http://simple.wprssaggregator.com/) and [Advanced Feeds Bundle demo](http://demo.wprssaggregator.com/).
264
 
265
  - - -
266
 
@@ -286,6 +243,10 @@ Our complete documentation with FAQs included can be found on our dedicated [doc
286
 
287
  == Changelog ==
288
 
 
 
 
 
289
  = 4.11.1 (2017-03-07) =
290
  * Fixed bug that caused minor publishing controls to be hidden on unrelated Edit screens.
291
 
1
  === WP RSS Aggregator ===
2
  Contributors: RebelCode, jeangalea, Mekku, xedin.unknown, markzahra
3
  Plugin URI: https://www.wprssaggregator.com
4
+ Tags: RSS import, RSS aggregator, autoblog, content curation, feed to post
5
  Requires at least: 4.0
6
+ Tested up to: 4.9.4
7
+ Requires PHP: 5.3.9
8
+ Stable tag: 4.11.2
9
  License: GPLv3
10
+
11
  WP RSS Aggregator is the most comprehensive RSS feed importer and autoblogging plugin for WordPress with premium add-ons for additional functionality.
12
 
13
  == Description ==
14
 
15
+ WP RSS Aggregator is the original and best plugin for easily importing, merging and displaying RSS and Atom feeds on your WordPress site. It's the most comprehensive and elegant RSS feed solution for WordPress.
16
 
17
+ With the free core version of WP RSS Aggregator you can aggregate as many RSS feeds from as many sources as you need, with the ability to [stagger the update process](https://docs.wprssaggregator.com/staggering-updates/) for better performance. Using our [shortcode](http://docs.wprssaggregator.com/shortcodes/) and its parameters you can then display the imported feed items from one or more sources anywhere on your WordPress site.
 
18
 
19
  [youtube https://www.youtube.com/watch?v=OgB3veegtz4]
20
 
21
+ ### Features - Free Version ###
22
+ These are some of the features offered with the free core version of WP RSS Aggregator.
 
 
23
 
24
  * Import any number of feed items from multiple RSS Feeds.
25
  * Incorporates feed auto-discovery to add feed sources without knowing the exact URL (not guaranteed to work for all sources).
26
+ * Display feed items via the [shortcode](https://docs.wprssaggregator.com/shortcodes/).
27
+ * Only import feed items with [unique titles](http://docs.wprssaggregator.com/general-plugin-settings/#unique-titles-only).
28
+ * Limit the number of feed items stored
 
 
 
 
 
 
 
 
 
 
 
 
29
  * Link the title and source name to the original source.
30
  * Choose to hide or show the date and source of each feed item.
31
+ * Choose to display the original author's name with each feed item.
32
+ * Style the shortcode's feed item display [with some CSS](http://docs.wprssaggregator.com/styling-the-feeds/).
33
+ * Open YouTube, DailyMotion and Vimeo videos directly.
 
 
 
 
 
 
34
  * Create a [custom RSS feed](https://docs.wprssaggregator.com/custom-feed-url/) from imported feed items.
 
 
35
  * Extendable via [action and filter hooks](https://docs.wprssaggregator.com/category/filters/).
36
  * Integrated with the Simplepie library that comes with WordPress.
37
  * Multilingual ready.
38
 
39
+ ...and many more. **[Click here to see the full features list.](https://www.wprssaggregator.com/features/)** Looking for more? Check out the premium add-ons listed below.
 
 
40
 
41
+ ### Premium Add-ons ###
 
42
 
43
+ Grow your WordPress site's popularity with related posts, display job listings, import YouTube videos, build news websites, and lots more. Take a look at our [Use Cases](https://www.wprssaggregator.com/use-cases/) for more ideas.
44
 
45
+ * **[Feed to Post](https://www.wprssaggregator.com/extension/feed-to-post/)** is an advanced importer that lets you import RSS feed items as WordPress posts or any other custom post type. You can use it to populate a website in minutes (auto-blog). This is the most popular and feature-filled extension. (Does not use shortcodes)
46
 
47
+ * **[Full Text RSS Feeds](https://www.wprssaggregator.com/extension/full-text-rss-feeds/)** adds connectivity to our premium full text service, which allows you to import the full post content for an unlimited number of feed items per feed source, even when the feed itself doesn't provide it. *(Requires [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/))*
48
 
49
+ * **[WordAi](https://www.wprssaggregator.com/extension/wordai/)** is an extension for [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/) that allows you to integrate the WordAi article spinner so that the imported content is both completely unique and completely readable. *(Requires [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/) and a [WordAi account](https://wordai.com/))*
50
 
51
+ * **[SpinnerChief](https://www.wprssaggregator.com/extension/spinnerchief/)** is an extension for [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/) that allows you to integrate the SpinnerChief article spinner so that the imported content is both completely unique and completely readable. *(Requires [Feed to Post](http://www.wprssaggregator.com/extension/feed-to-post/) and a [SpinnerChief account](http://www.spinnerchief.com/))*
52
 
53
+ * **[Excerpts & Thumbnails](https://www.wprssaggregator.com/extension/excerpts-thumbnails/)** displays an excerpt and thumbnail image (taken from within the RSS feed) together with the title, date and source of each feed item. It uses the shortcode to display the feed items.
54
 
55
+ * **[Categories](https://www.wprssaggregator.com/extension/categories/)** categorises your feed sources and allows you to display feed items from a particular category within your site using the [shortcode parameters](http://docs.wprssaggregator.com/shortcodes/#categories-parameters). *(Does not use WordPress Post Categories)*
56
 
57
+ * **[Keyword Filtering](https://www.wprssaggregator.com/extension/keyword-filtering/)** filters the feed items to be imported based on your own keywords, key phrases, or tags; you only get the items you're interested in. It is compatible with all other add-ons.
58
 
59
+ * **[Widget](https://www.wprssaggregator.com/extension/widget/)** adds a widget to your website that displays all the imported feed items. It can also display excerpts and thumbnail images when used in conjunction with the [Excerpts & Thumbnails](http://www.wprssaggregator.com/extension/excerpts-thumbnails/) add-on.
 
 
60
 
61
+ ### MONEY-SAVING BUNDLES ###
 
62
 
63
+ Save money by opting for one of our premium bundles.
64
 
65
+ Save at least $40 with our **[Advanced Feeds Bundle](https://www.wprssaggregator.com/extension/advanced-feeds-bundle/)** - the most powerful combination of add-ons to import all the content you need into Posts or any other Custom Post Type.
66
+
67
+ Save at least $20 with our **[Simple Feeds Bundle](https://www.wprssaggregator.com/extension/simple-feeds-bundle/)** - a great combination of add-ons to display beautiful feed item listings via our shortcode.
68
+
69
+ ### Free Demo Site ###
70
  We offer two free demo sites, each including a different set of add-ons:
71
 
72
+ The **[Advanced Feeds Bundle Demo](http://demo.wprssaggregator.com/)** includes Feed to Post, Full Text RSS Feeds and Keyword Filtering.
73
+
74
+ The **[Simple Feeds Bundle Demo](http://simple.wprssaggregator.com/)** includes Excerpts & Thumbnails, Categories and Keyword Filtering
75
 
76
+ We have a number of WordPress sites built by our team to showcase the power of our premium add-ons:
77
 
78
  * [WP News Desk](http://wpnewsdesk.com/)
79
  * [Travel Blogger Community](http://travelbloggercommunity.com/)
80
  * [Dribbble Me](http://dribbble.wprssaggregator.com/)
81
 
82
  ### Documentation ###
83
+ Our comprehensive [documentation](http://docs.wprssaggregator.com/) provides you with everything you need to install, set up and customise the plugin to your needs. You can also browse through a large number of [FAQs](http://docs.wprssaggregator.com/category/faqs/).
84
 
85
  ### Support ###
86
+ Support for the free version of WP RSS Aggregator is provided via the plugin repo support forum [here](https://wordpress.org/support/plugin/wp-rss-aggregator). Please read and follow the [Support Guidelines](https://wordpress.org/support/topic/support-guidelines-1/) before opening a new ticket.
87
 
88
+ For premium support (owners of valid premium add-on licenses) and pre-sales questions please contact us via our *[premium support channel](https://www.wprssaggregator.com/contact/)*.
89
 
90
+ Would you like to praise the team for the plugin or our support services? [Share the love!](https://wordpress.org/support/plugin/wp-rss-aggregator/reviews/#new-topic-0)
91
+
92
+ We also provide a [Feed Creator](http://createfeed.wprssaggregator.com/) service that allows you to generate RSS feeds from any webpage, even if it doesn't have its own RSS feed.
93
+
94
+ Terms & conditions can be found [here](https://www.wprssaggregator.com/terms-conditions/).
95
 
96
  ### As featured on: ###
97
  * [WP Mayor](http://www.wpmayor.com/rss-feeds-review-wp-rss-aggregator/)
98
+ * [WPulsar](http://www.wpulsar.com/wp-rss-aggregator-plugin-feed-to-posts-keyword-filtering-review/)
99
  * [Elegant Themes](https://www.elegantthemes.com/blog/tips-tricks/how-to-get-the-most-from-your-wordpress-rss-feed)
 
 
100
  * [Cloudways](https://www.cloudways.com/blog/wp-rss-aggregator-plugin-rss-feed-importer-autoblogging-plugin/)
 
101
  * [WPKube](http://www.wpkube.com/wp-rss-aggregator-wordpress-review/)
 
102
  * [MyWPexpert](http://www.mywpexpert.com/wordpress-rss-aggregator-plugin)
103
+ * [Kevin Muldoon](https://www.kevinmuldoon.com/wp-rss-aggregator-review/)
 
 
 
 
 
104
  * [Magazine3](http://magazine3.com/blog/news-aggregator-website/)
105
+ * [WPBeginner](http://www.wpbeginner.com/plugins/how-to-fetch-feeds-in-wordpress-using-wp-rss-aggregator/)
106
+ * [Torque](http://torquemag.io/wp-rss-aggregator-review-do-more-with-rss-feeds/)
107
+ * [IndexWP](http://www.indexwp.com/wp-rss-aggregator-plugin-review/)
108
 
109
  ### Translations ###
 
 
 
 
 
 
110
 
111
+ WP RSS Aggregator's core plugin is currently available in a number of languages, all of which can be seen [here](https://translate.wordpress.org/projects/wp-plugins/wp-rss-aggregator).
112
 
113
+ We are constantly working on adding new translations every month. Would you like to contribute to a translation for WP RSS Aggregator and its add-ons? [Click here to get started!](https://www.wprssaggregator.com/looking-for-translators/) We offer free licenses for our premium add-ons to all accepted translators.
 
 
 
 
114
 
115
  == Installation ==
116
 
117
+ How to install and set up the core WP RSS Aggregator plugin:
118
 
119
+ Install Method 1:
 
 
 
 
 
 
 
120
 
121
  > 1. Go to the Plugins section in your WordPress site's dashboard.
122
  > 2. Click the "Add New" button.
123
  > 3. Search for "WP RSS Aggregator".
124
  > 4. When found, click on the "Install" button, then hit the "Activate" button once it has installed.
125
+ > 5. Go to the RSS Aggregator menu item, then set up your [feed sources](https://docs.wprssaggregator.com/adding-a-feed-source-importing-as-feed-items/) and [general settings](https://docs.wprssaggregator.com/general-plugin-settings/).
126
+ > 6. Use the WP RSS Aggregator shortcode in your page and/or post to display the imported feed items: `[wp-rss-aggregator]`
127
 
128
+ Install Method 2:
 
 
129
 
130
+ > 1. Click on the "Download" button above.
131
+ > 2. Upload the `wp-rss-aggregator` zip file to your site's `/wp-content/plugins/` directory.
132
+ > 3. Activate the WP RSS Aggregator plugin from the 'Plugins' section in your dashboard.
133
+ > 4. Go to the RSS Aggregator menu item, then set up your [feed sources](https://docs.wprssaggregator.com/adding-a-feed-source-importing-as-feed-items/) and [general settings](https://docs.wprssaggregator.com/general-plugin-settings/).
134
+ > 5. Use the WP RSS Aggregator shortcode in your page and/or post to display the imported feed items: `[wp-rss-aggregator]`
135
+
136
+ *DISPLAYING THE FEED ITEMS*
137
+
138
+ You can easily select the source for your feeds and also insert a limit via [shortcode parameters](http://docs.wprssaggregator.com/shortcodes/#core-parameters) as shown below. To get your feed source ID simply hover over the required feed source in the feed source listing page. It will appear beneath the name.
139
+
140
+ `[wp-rss-aggregator source="ID" limit="num"]`
141
 
142
  An example of a shortcode parameter in use could be:
143
 
145
 
146
  It is advisable to use the 'HTML' view of the editor when inserting shortcodes with parameters.
147
 
148
+ *USAGE WITHIN THEME FILES*
149
 
150
  Here are two examples of a function call from within the theme's files:
151
  `
169
  == Frequently Asked Questions ==
170
  = How do I display the imported feed items? =
171
 
172
+ You can either use the shortcode in your posts and pages: `[wp-rss-aggregator]`
 
173
 
174
+ Or you can call the function directly within your theme: `<?php wprss_display_feed_items(); ?>`
 
175
 
176
  - - -
177
 
178
  = Is there a limit on the number of feed sources I can use? =
179
 
180
+ No, there is no limit for the number of feed sources. Having many (50+) feed sources should not present any problems in itself. However, pulling in posts from many sites is bound to put your server under some stress, so you might want to consider using a hosting solution that goes beyond your typical shared host.
 
181
 
182
  Check out our dedicated page on [WordPress hosting](http://www.wprssaggregator.com/recommended-web-hosts/) recommendations.
183
 
189
 
190
  - - -
191
 
192
+ = Why do I get "No feed items found" when I insert the shortcode on a page or post? =
193
 
194
  1. Try adding a few more feed sources and make sure they are valid by using the RSS Feed Validator.
195
 
196
  2. Try out the solutions listed on our [Feed Items Not Importing](http://docs.wprssaggregator.com/feed-items-not-importing/) documentation page.
197
 
198
+ 3. It's important to make sure your WordPress cron system is working well. If not, the feeds cannot be imported. If in doubt, you can install the WP Crontrol plugin to check for [bad cron](https://docs.wprssaggregator.com/cron-intervals/#bad-cron), or go to RSS Aggregator > Debugging and hit the red button to re-import all feed items.
 
 
199
 
200
+ If the problems persist, please [contact our support team](https://wordpress.org/support/plugin/wp-rss-aggregator). If you're using a premium add-on, please use the [premium support channel](https://www.wprssaggregator.com/contact/).
 
201
 
202
  - - -
203
 
204
  = Can I store imported feed items as posts? =
205
 
206
+ Yes! You can do that with the [Feed to Post](http://www.wprssaggregator.com/extensions/feed-to-post) premium add-on. You will not only be able to store items as posts, but also as any other custom post type. You can also set the author, set tags and categories, import images into the gallery or set featured images, and much more.
 
 
207
 
208
  - - -
209
 
210
  = Some RSS feeds only give a short excerpt. Any way around that? =
211
 
212
+ Yes, along with the [Feed to Post](http://www.wprssaggregator.com/extensions/feed-to-post) add-on we have another add-on called [Full Text RSS Feeds](http://www.wprssaggregator.com/extension/full-text-rss-feeds/) that can get the full content of most feeds that only supply a short excerpt. The Full Text RSS Feeds add-on requires Feed to Post and a valid license key to function.
 
 
213
 
214
  - - -
215
 
216
+ = I'm not sure which premium add-ons are right for me. Can you help me out? =
217
 
218
+ Sure! We wrote a [post](http://www.wprssaggregator.com/add-ons-purchase/) just for you. Read about which add-ons you should buy as we explain the different types of usage so you'll know what to expect when purchasing.
 
219
 
220
+ If you need any further help you can [contact our support team](http://www.wprssaggregator.com/contact/) or try out our [Simple Feeds Bundle demo](http://simple.wprssaggregator.com/) and [Advanced Feeds Bundle demo](http://demo.wprssaggregator.com/).
 
221
 
222
  - - -
223
 
243
 
244
  == Changelog ==
245
 
246
+ = 4.11.2 (2017-09-18) =
247
+ * Added 2 new general settings for item import order and per-import limit.
248
+ * Cosmetic and documentation improvements.
249
+
250
  = 4.11.1 (2017-03-07) =
251
  * Fixed bug that caused minor publishing controls to be hidden on unrelated Edit screens.
252
 
vendor/autoload.php CHANGED
@@ -2,6 +2,6 @@
2
 
3
  // autoload.php @generated by Composer
4
 
5
- require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit5b1214f1b4db5e953417a3c5488d163a::getLoader();
2
 
3
  // autoload.php @generated by Composer
4
 
5
+ require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit4e5092596f60e6fafae6872332cd0798::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -53,8 +53,8 @@ class ClassLoader
53
 
54
  private $useIncludePath = false;
55
  private $classMap = array();
 
56
  private $classMapAuthoritative = false;
57
- private $missingClasses = array();
58
 
59
  public function getPrefixes()
60
  {
@@ -322,20 +322,20 @@ class ClassLoader
322
  if (isset($this->classMap[$class])) {
323
  return $this->classMap[$class];
324
  }
325
- if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
326
  return false;
327
  }
328
 
329
  $file = $this->findFileWithExtension($class, '.php');
330
 
331
  // Search for Hack files if we are running on HHVM
332
- if (false === $file && defined('HHVM_VERSION')) {
333
  $file = $this->findFileWithExtension($class, '.hh');
334
  }
335
 
336
- if (false === $file) {
337
  // Remember that this class does not exist.
338
- $this->missingClasses[$class] = true;
339
  }
340
 
341
  return $file;
@@ -399,8 +399,6 @@ class ClassLoader
399
  if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
400
  return $file;
401
  }
402
-
403
- return false;
404
  }
405
  }
406
 
53
 
54
  private $useIncludePath = false;
55
  private $classMap = array();
56
+
57
  private $classMapAuthoritative = false;
 
58
 
59
  public function getPrefixes()
60
  {
322
  if (isset($this->classMap[$class])) {
323
  return $this->classMap[$class];
324
  }
325
+ if ($this->classMapAuthoritative) {
326
  return false;
327
  }
328
 
329
  $file = $this->findFileWithExtension($class, '.php');
330
 
331
  // Search for Hack files if we are running on HHVM
332
+ if ($file === null && defined('HHVM_VERSION')) {
333
  $file = $this->findFileWithExtension($class, '.hh');
334
  }
335
 
336
+ if ($file === null) {
337
  // Remember that this class does not exist.
338
+ return $this->classMap[$class] = false;
339
  }
340
 
341
  return $file;
399
  if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
400
  return $file;
401
  }
 
 
402
  }
403
  }
404
 
vendor/composer/autoload_psr4.php CHANGED
@@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  'Interop\\Container\\' => array($vendorDir . '/container-interop/service-provider/src', $vendorDir . '/container-interop/container-interop/src/Interop/Container'),
10
  'Dhii\\Stats\\' => array($vendorDir . '/dhii/stats-interface/src', $vendorDir . '/dhii/stats-abstract/src'),
11
  'Dhii\\Di\\' => array($vendorDir . '/dhii/di-interface/src', $vendorDir . '/dhii/di-abstract/src', $vendorDir . '/dhii/di/src'),
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
10
  'Interop\\Container\\' => array($vendorDir . '/container-interop/service-provider/src', $vendorDir . '/container-interop/container-interop/src/Interop/Container'),
11
  'Dhii\\Stats\\' => array($vendorDir . '/dhii/stats-interface/src', $vendorDir . '/dhii/stats-abstract/src'),
12
  'Dhii\\Di\\' => array($vendorDir . '/dhii/di-interface/src', $vendorDir . '/dhii/di-abstract/src', $vendorDir . '/dhii/di/src'),
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit5b1214f1b4db5e953417a3c5488d163a
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit5b1214f1b4db5e953417a3c5488d163a
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit5b1214f1b4db5e953417a3c5488d163a', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit5b1214f1b4db5e953417a3c5488d163a', '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\ComposerStaticInit5b1214f1b4db5e953417a3c5488d163a::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit4e5092596f60e6fafae6872332cd0798
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit4e5092596f60e6fafae6872332cd0798', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit4e5092596f60e6fafae6872332cd0798', 'loadClassLoader'));
25
 
26
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit4e5092596f60e6fafae6872332cd0798::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,9 +4,13 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit5b1214f1b4db5e953417a3c5488d163a
8
  {
9
  public static $prefixLengthsPsr4 = array (
 
 
 
 
10
  'I' =>
11
  array (
12
  'Interop\\Container\\' => 18,
@@ -20,6 +24,10 @@ class ComposerStaticInit5b1214f1b4db5e953417a3c5488d163a
20
  );
21
 
22
  public static $prefixDirsPsr4 = array (
 
 
 
 
23
  'Interop\\Container\\' =>
24
  array (
25
  0 => __DIR__ . '/..' . '/container-interop/service-provider/src',
@@ -47,8 +55,8 @@ class ComposerStaticInit5b1214f1b4db5e953417a3c5488d163a
47
  public static function getInitializer(ClassLoader $loader)
48
  {
49
  return \Closure::bind(function () use ($loader) {
50
- $loader->prefixLengthsPsr4 = ComposerStaticInit5b1214f1b4db5e953417a3c5488d163a::$prefixLengthsPsr4;
51
- $loader->prefixDirsPsr4 = ComposerStaticInit5b1214f1b4db5e953417a3c5488d163a::$prefixDirsPsr4;
52
 
53
  }, null, ClassLoader::class);
54
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit4e5092596f60e6fafae6872332cd0798
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
+ 'P' =>
11
+ array (
12
+ 'Psr\\Container\\' => 14,
13
+ ),
14
  'I' =>
15
  array (
16
  'Interop\\Container\\' => 18,
24
  );
25
 
26
  public static $prefixDirsPsr4 = array (
27
+ 'Psr\\Container\\' =>
28
+ array (
29
+ 0 => __DIR__ . '/..' . '/psr/container/src',
30
+ ),
31
  'Interop\\Container\\' =>
32
  array (
33
  0 => __DIR__ . '/..' . '/container-interop/service-provider/src',
55
  public static function getInitializer(ClassLoader $loader)
56
  {
57
  return \Closure::bind(function () use ($loader) {
58
+ $loader->prefixLengthsPsr4 = ComposerStaticInit4e5092596f60e6fafae6872332cd0798::$prefixLengthsPsr4;
59
+ $loader->prefixDirsPsr4 = ComposerStaticInit4e5092596f60e6fafae6872332cd0798::$prefixDirsPsr4;
60
 
61
  }, null, ClassLoader::class);
62
  }
vendor/composer/installed.json CHANGED
@@ -398,22 +398,76 @@
398
  "di"
399
  ]
400
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
401
  {
402
  "name": "container-interop/container-interop",
403
- "version": "1.1.0",
404
- "version_normalized": "1.1.0.0",
405
  "source": {
406
  "type": "git",
407
  "url": "https://github.com/container-interop/container-interop.git",
408
- "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e"
409
  },
410
  "dist": {
411
  "type": "zip",
412
- "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e",
413
- "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e",
414
  "shasum": ""
415
  },
416
- "time": "2014-12-30 15:22:37",
 
 
 
417
  "type": "library",
418
  "installation-source": "dist",
419
  "autoload": {
@@ -425,6 +479,7 @@
425
  "license": [
426
  "MIT"
427
  ],
428
- "description": "Promoting the interoperability of container objects (DIC, SL, etc.)"
 
429
  }
430
  ]
398
  "di"
399
  ]
400
  },
401
+ {
402
+ "name": "psr/container",
403
+ "version": "dev-master",
404
+ "version_normalized": "9999999-dev",
405
+ "source": {
406
+ "type": "git",
407
+ "url": "https://github.com/php-fig/container.git",
408
+ "reference": "2cc4a01788191489dc7459446ba832fa79a216a7"
409
+ },
410
+ "dist": {
411
+ "type": "zip",
412
+ "url": "https://api.github.com/repos/php-fig/container/zipball/2cc4a01788191489dc7459446ba832fa79a216a7",
413
+ "reference": "2cc4a01788191489dc7459446ba832fa79a216a7",
414
+ "shasum": ""
415
+ },
416
+ "require": {
417
+ "php": ">=5.3.0"
418
+ },
419
+ "time": "2017-06-28 15:35:32",
420
+ "type": "library",
421
+ "extra": {
422
+ "branch-alias": {
423
+ "dev-master": "1.0.x-dev"
424
+ }
425
+ },
426
+ "installation-source": "dist",
427
+ "autoload": {
428
+ "psr-4": {
429
+ "Psr\\Container\\": "src/"
430
+ }
431
+ },
432
+ "notification-url": "https://packagist.org/downloads/",
433
+ "license": [
434
+ "MIT"
435
+ ],
436
+ "authors": [
437
+ {
438
+ "name": "PHP-FIG",
439
+ "homepage": "http://www.php-fig.org/"
440
+ }
441
+ ],
442
+ "description": "Common Container Interface (PHP FIG PSR-11)",
443
+ "homepage": "https://github.com/php-fig/container",
444
+ "keywords": [
445
+ "PSR-11",
446
+ "container",
447
+ "container-interface",
448
+ "container-interop",
449
+ "psr"
450
+ ]
451
+ },
452
  {
453
  "name": "container-interop/container-interop",
454
+ "version": "1.2.0",
455
+ "version_normalized": "1.2.0.0",
456
  "source": {
457
  "type": "git",
458
  "url": "https://github.com/container-interop/container-interop.git",
459
+ "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
460
  },
461
  "dist": {
462
  "type": "zip",
463
+ "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
464
+ "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
465
  "shasum": ""
466
  },
467
+ "require": {
468
+ "psr/container": "^1.0"
469
+ },
470
+ "time": "2017-02-14 19:40:03",
471
  "type": "library",
472
  "installation-source": "dist",
473
  "autoload": {
479
  "license": [
480
  "MIT"
481
  ],
482
+ "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
483
+ "homepage": "https://github.com/container-interop/container-interop"
484
  }
485
  ]
vendor/container-interop/container-interop/README.md CHANGED
@@ -1,11 +1,25 @@
1
  # Container Interoperability
2
 
3
  [![Latest Stable Version](https://poser.pugx.org/container-interop/container-interop/v/stable.png)](https://packagist.org/packages/container-interop/container-interop)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  *container-interop* tries to identify and standardize features in *container* objects (service locators,
6
- dependency injection containers, etc.) to achieve interopererability.
7
 
8
- Through discussions and trials, we try to create a standard, made of common interfaces but also recommendations.
9
 
10
  If PHP projects that provide container implementations begin to adopt these common standards, then PHP
11
  applications and projects that use containers can depend on the common interfaces instead of specific
@@ -22,11 +36,7 @@ this project will pave the way for one or more future PSRs.
22
  You can install this package through Composer:
23
 
24
  ```json
25
- {
26
- "require": {
27
- "container-interop/container-interop": "~1.0"
28
- }
29
- }
30
  ```
31
 
32
  The packages adheres to the [SemVer](http://semver.org/) specification, and there will be full backward compatibility
@@ -41,7 +51,7 @@ between minor versions.
41
  Describes the interface of a container that exposes methods to read its entries.
42
  - [*Delegate lookup feature*](docs/Delegate-lookup.md).
43
  [Meta Document](docs/Delegate-lookup-meta.md).
44
- Describes the ability for a container to delegate the lookup of its dependencies to a third-party container. This
45
  feature lets several containers work together in a single application.
46
 
47
  ### Proposed
@@ -52,19 +62,72 @@ View open [request for comments](https://github.com/container-interop/container-
52
 
53
  ### Projects implementing `ContainerInterface`
54
 
55
- - [Acclimate](https://github.com/jeremeamia/acclimate-container)
56
- - [dcp-di](https://github.com/estelsmith/dcp-di)
 
 
 
 
 
 
 
 
 
57
  - [Mouf](http://mouf-php.com)
58
  - [Njasm Container](https://github.com/njasm/container)
59
  - [PHP-DI](http://php-di.org)
 
60
  - [PimpleInterop](https://github.com/moufmouf/pimple-interop)
 
 
 
 
 
61
  - [XStatic](https://github.com/jeremeamia/xstatic)
 
 
62
 
63
  ### Projects implementing the *delegate lookup* feature
64
 
 
 
 
 
 
65
  - [Mouf](http://mouf-php.com)
 
66
  - [PHP-DI](http://php-di.org)
67
  - [PimpleInterop](https://github.com/moufmouf/pimple-interop)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
  ## Workflow
70
 
1
  # Container Interoperability
2
 
3
  [![Latest Stable Version](https://poser.pugx.org/container-interop/container-interop/v/stable.png)](https://packagist.org/packages/container-interop/container-interop)
4
+ [![Total Downloads](https://poser.pugx.org/container-interop/container-interop/downloads.svg)](https://packagist.org/packages/container-interop/container-interop)
5
+
6
+ ## Deprecation warning!
7
+
8
+ Starting Feb. 13th 2017, container-interop is officially deprecated in favor of [PSR-11](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md).
9
+ Container-interop has been the test-bed of PSR-11. From v1.2, container-interop directly extends PSR-11 interfaces.
10
+ Therefore, all containers implementing container-interop are now *de-facto* compatible with PSR-11.
11
+
12
+ - Projects implementing container-interop interfaces are encouraged to directly implement PSR-11 interfaces instead.
13
+ - Projects consuming container-interop interfaces are very strongly encouraged to directly type-hint on PSR-11 interfaces, in order to be compatible with PSR-11 containers that are not compatible with container-interop.
14
+
15
+ Regarding the delegate lookup feature, that is present in container-interop and not in PSR-11, the feature is actually a design pattern. It is therefore not deprecated. Documentation regarding this design pattern will be migrated from this repository into a separate website in the future.
16
+
17
+ ## About
18
 
19
  *container-interop* tries to identify and standardize features in *container* objects (service locators,
20
+ dependency injection containers, etc.) to achieve interoperability.
21
 
22
+ Through discussions and trials, we try to create a standard, made of common interfaces but also recommendations.
23
 
24
  If PHP projects that provide container implementations begin to adopt these common standards, then PHP
25
  applications and projects that use containers can depend on the common interfaces instead of specific
36
  You can install this package through Composer:
37
 
38
  ```json
39
+ composer require container-interop/container-interop
 
 
 
 
40
  ```
41
 
42
  The packages adheres to the [SemVer](http://semver.org/) specification, and there will be full backward compatibility
51
  Describes the interface of a container that exposes methods to read its entries.
52
  - [*Delegate lookup feature*](docs/Delegate-lookup.md).
53
  [Meta Document](docs/Delegate-lookup-meta.md).
54
+ Describes the ability for a container to delegate the lookup of its dependencies to a third-party container. This
55
  feature lets several containers work together in a single application.
56
 
57
  ### Proposed
62
 
63
  ### Projects implementing `ContainerInterface`
64
 
65
+ - [Acclimate](https://github.com/jeremeamia/acclimate-container): Adapters for
66
+ Aura.Di, Laravel, Nette DI, Pimple, Symfony DI, ZF2 Service manager, ZF2
67
+ Dependency injection and any container using `ArrayAccess`
68
+ - [Aura.Di](https://github.com/auraphp/Aura.Di)
69
+ - [auryn-container-interop](https://github.com/elazar/auryn-container-interop)
70
+ - [Burlap](https://github.com/codeeverything/burlap)
71
+ - [Chernozem](https://github.com/pyrsmk/Chernozem)
72
+ - [Data Manager](https://github.com/chrismichaels84/data-manager)
73
+ - [Disco](https://github.com/bitexpert/disco)
74
+ - [InDI](https://github.com/idealogica/indi)
75
+ - [League/Container](http://container.thephpleague.com/)
76
  - [Mouf](http://mouf-php.com)
77
  - [Njasm Container](https://github.com/njasm/container)
78
  - [PHP-DI](http://php-di.org)
79
+ - [Picotainer](https://github.com/thecodingmachine/picotainer)
80
  - [PimpleInterop](https://github.com/moufmouf/pimple-interop)
81
+ - [Pimple3-ContainerInterop](https://github.com/Sam-Burns/pimple3-containerinterop) (using Pimple v3)
82
+ - [SitePoint Container](https://github.com/sitepoint/Container)
83
+ - [Thruster Container](https://github.com/ThrusterIO/container) (PHP7 only)
84
+ - [Ultra-Lite Container](https://github.com/ultra-lite/container)
85
+ - [Unbox](https://github.com/mindplay-dk/unbox)
86
  - [XStatic](https://github.com/jeremeamia/xstatic)
87
+ - [Zend\ServiceManager](https://github.com/zendframework/zend-servicemanager)
88
+ - [Zit](https://github.com/inxilpro/Zit)
89
 
90
  ### Projects implementing the *delegate lookup* feature
91
 
92
+ - [Aura.Di](https://github.com/auraphp/Aura.Di)
93
+ - [Burlap](https://github.com/codeeverything/burlap)
94
+ - [Chernozem](https://github.com/pyrsmk/Chernozem)
95
+ - [InDI](https://github.com/idealogica/indi)
96
+ - [League/Container](http://container.thephpleague.com/)
97
  - [Mouf](http://mouf-php.com)
98
+ - [Picotainer](https://github.com/thecodingmachine/picotainer)
99
  - [PHP-DI](http://php-di.org)
100
  - [PimpleInterop](https://github.com/moufmouf/pimple-interop)
101
+ - [Ultra-Lite Container](https://github.com/ultra-lite/container)
102
+
103
+ ### Middlewares implementing `ContainerInterface`
104
+
105
+ - [Alias-Container](https://github.com/thecodingmachine/alias-container): add
106
+ aliases support to any container
107
+ - [Prefixer-Container](https://github.com/thecodingmachine/prefixer-container):
108
+ dynamically prefix identifiers
109
+ - [Lazy-Container](https://github.com/snapshotpl/lazy-container): lazy services
110
+
111
+ ### Projects using `ContainerInterface`
112
+
113
+ The list below contains only a sample of all the projects consuming `ContainerInterface`. For a more complete list have a look [here](http://packanalyst.com/class?q=Interop%5CContainer%5CContainerInterface).
114
+
115
+ | | Downloads |
116
+ | --- | --- |
117
+ | [Adroit](https://github.com/bitexpert/adroit) | ![](https://img.shields.io/packagist/dt/bitexpert/adroit.svg) |
118
+ | [Behat](https://github.com/Behat/Behat/pull/974) | ![](https://img.shields.io/packagist/dt/behat/behat.svg) |
119
+ | [blast-facades](https://github.com/phpthinktank/blast-facades): Minimize complexity and represent dependencies as facades. | ![](https://img.shields.io/packagist/dt/blast/facades.svg) |
120
+ | [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di): an extension to [Silex](http://silex.sensiolabs.org/) that adds support for any *container-interop* compatible container | ![](https://img.shields.io/packagist/dt/mouf/interop.silex.di.svg) |
121
+ | [mindplay/walkway](https://github.com/mindplay-dk/walkway): a modular request router | ![](https://img.shields.io/packagist/dt/mindplay/walkway.svg) |
122
+ | [mindplay/middleman](https://github.com/mindplay-dk/middleman): minimalist PSR-7 middleware dispatcher | ![](https://img.shields.io/packagist/dt/mindplay/middleman.svg) |
123
+ | [PHP-DI/Invoker](https://github.com/PHP-DI/Invoker): extensible and configurable invoker/dispatcher | ![](https://img.shields.io/packagist/dt/php-di/invoker.svg) |
124
+ | [Prophiler](https://github.com/fabfuel/prophiler) | ![](https://img.shields.io/packagist/dt/fabfuel/prophiler.svg) |
125
+ | [Silly](https://github.com/mnapoli/silly): CLI micro-framework | ![](https://img.shields.io/packagist/dt/mnapoli/silly.svg) |
126
+ | [Slim v3](https://github.com/slimphp/Slim) | ![](https://img.shields.io/packagist/dt/slim/slim.svg) |
127
+ | [Splash](http://mouf-php.com/packages/mouf/mvc.splash-common/version/8.0-dev/README.md) | ![](https://img.shields.io/packagist/dt/mouf/mvc.splash-common.svg) |
128
+ | [Woohoo Labs. Harmony](https://github.com/woohoolabs/harmony): a flexible micro-framework | ![](https://img.shields.io/packagist/dt/woohoolabs/harmony.svg) |
129
+ | [zend-expressive](https://github.com/zendframework/zend-expressive) | ![](https://img.shields.io/packagist/dt/zendframework/zend-expressive.svg) |
130
+
131
 
132
  ## Workflow
133
 
vendor/container-interop/container-interop/composer.json CHANGED
@@ -2,10 +2,14 @@
2
  "name": "container-interop/container-interop",
3
  "type": "library",
4
  "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
 
5
  "license": "MIT",
6
  "autoload": {
7
  "psr-4": {
8
  "Interop\\Container\\": "src/Interop/Container/"
9
  }
 
 
 
10
  }
11
  }
2
  "name": "container-interop/container-interop",
3
  "type": "library",
4
  "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
5
+ "homepage": "https://github.com/container-interop/container-interop",
6
  "license": "MIT",
7
  "autoload": {
8
  "psr-4": {
9
  "Interop\\Container\\": "src/Interop/Container/"
10
  }
11
+ },
12
+ "require": {
13
+ "psr/container": "^1.0"
14
  }
15
  }
vendor/container-interop/container-interop/docs/ContainerInterface-meta.md CHANGED
@@ -54,7 +54,7 @@ The summary of the analysis showed that:
54
  - all containers offer a method to get an entry by its id
55
  - a large majority name such method `get()`
56
  - for all containers, the `get()` method has 1 mandatory parameter of type string
57
- - some containers have an optional additional argument for `get()`, but it doesn't same the same purpose between containers
58
  - a large majority of the containers offer a method to test if it can return an entry by its id
59
  - a majority name such method `has()`
60
  - for all containers offering `has()`, the method has exactly 1 parameter of type string
54
  - all containers offer a method to get an entry by its id
55
  - a large majority name such method `get()`
56
  - for all containers, the `get()` method has 1 mandatory parameter of type string
57
+ - some containers have an optional additional argument for `get()`, but it doesn't have the same purpose between containers
58
  - a large majority of the containers offer a method to test if it can return an entry by its id
59
  - a majority name such method `has()`
60
  - for all containers offering `has()`, the method has exactly 1 parameter of type string
vendor/container-interop/container-interop/docs/ContainerInterface.md CHANGED
@@ -11,8 +11,8 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
11
  interpreted as described in [RFC 2119][].
12
 
13
  The word `implementor` in this document is to be interpreted as someone
14
- implementing the `ContainerInterface` in a depency injection-related library or framework.
15
- Users of dependency injections containers (DIC) are refered to as `user`.
16
 
17
  [RFC 2119]: http://tools.ietf.org/html/rfc2119
18
 
@@ -31,50 +31,52 @@ Users of dependency injections containers (DIC) are refered to as `user`.
31
  `user` SHOULD NOT rely on getting the same value on 2 successive calls.
32
  While `ContainerInterface` only defines one mandatory parameter in `get()`, implementations
33
  MAY accept additional optional parameters.
34
-
35
  - `has` takes one unique parameter: an entry identifier. It MUST return `true`
36
  if an entry identifier is known to the container and `false` if it is not.
37
-
 
 
38
  ### 1.2 Exceptions
39
 
40
- Exceptions directly thrown by the container MUST implement the
41
  [`Interop\Container\Exception\ContainerException`](../src/Interop/Container/Exception/ContainerException.php).
42
 
43
- A call to the `get` method with a non-existing id should throw a
44
  [`Interop\Container\Exception\NotFoundException`](../src/Interop/Container/Exception/NotFoundException.php).
45
 
46
  ### 1.3 Additional features
47
 
48
- This section describes additional features that MAY be added to a container. Containers are not
49
  required to implement these features to respect the ContainerInterface.
50
 
51
  #### 1.3.1 Delegate lookup feature
52
 
53
- The goal of the *delegate lookup* feature is to allow several containers to share entries.
54
  Containers implementing this feature can perform dependency lookups in other containers.
55
 
56
- Containers implementing this feature will offer a greater lever of interoperability
57
  with other containers. Implementation of this feature is therefore RECOMMENDED.
58
 
59
  A container implementing this feature:
60
 
61
  - MUST implement the `ContainerInterface`
62
- - MUST provide a way to register a delegate container (using a constructor parameter, or a setter,
63
  or any possible way). The delegate container MUST implement the `ContainerInterface`.
64
 
65
  When a container is configured to use a delegate container for dependencies:
66
 
67
- - Calls to the `get` method should only return an entry if the entry is part of the container.
68
- If the entry is not part of the container, an exception should be thrown
69
  (as requested by the `ContainerInterface`).
70
  - Calls to the `has` method should only return `true` if the entry is part of the container.
71
  If the entry is not part of the container, `false` should be returned.
72
- - If the fetched entry has dependencies, **instead** of performing
73
  the dependency lookup in the container, the lookup is performed on the *delegate container*.
74
 
75
  Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself.
76
 
77
- It is however allowed for containers to provide exception cases for special entries, and a way to lookup
78
  into the same container (or another container) instead of the delegate container.
79
 
80
  2. Package
@@ -114,6 +116,9 @@ interface ContainerInterface
114
  * Returns true if the container can return an entry for the given identifier.
115
  * Returns false otherwise.
116
  *
 
 
 
117
  * @param string $id Identifier of the entry to look for.
118
  *
119
  * @return boolean
11
  interpreted as described in [RFC 2119][].
12
 
13
  The word `implementor` in this document is to be interpreted as someone
14
+ implementing the `ContainerInterface` in a dependency injection-related library or framework.
15
+ Users of dependency injections containers (DIC) are referred to as `user`.
16
 
17
  [RFC 2119]: http://tools.ietf.org/html/rfc2119
18
 
31
  `user` SHOULD NOT rely on getting the same value on 2 successive calls.
32
  While `ContainerInterface` only defines one mandatory parameter in `get()`, implementations
33
  MAY accept additional optional parameters.
34
+
35
  - `has` takes one unique parameter: an entry identifier. It MUST return `true`
36
  if an entry identifier is known to the container and `false` if it is not.
37
+ `has($id)` returning true does not mean that `get($id)` will not throw an exception.
38
+ It does however mean that `get($id)` will not throw a `NotFoundException`.
39
+
40
  ### 1.2 Exceptions
41
 
42
+ Exceptions directly thrown by the container MUST implement the
43
  [`Interop\Container\Exception\ContainerException`](../src/Interop/Container/Exception/ContainerException.php).
44
 
45
+ A call to the `get` method with a non-existing id SHOULD throw a
46
  [`Interop\Container\Exception\NotFoundException`](../src/Interop/Container/Exception/NotFoundException.php).
47
 
48
  ### 1.3 Additional features
49
 
50
+ This section describes additional features that MAY be added to a container. Containers are not
51
  required to implement these features to respect the ContainerInterface.
52
 
53
  #### 1.3.1 Delegate lookup feature
54
 
55
+ The goal of the *delegate lookup* feature is to allow several containers to share entries.
56
  Containers implementing this feature can perform dependency lookups in other containers.
57
 
58
+ Containers implementing this feature will offer a greater lever of interoperability
59
  with other containers. Implementation of this feature is therefore RECOMMENDED.
60
 
61
  A container implementing this feature:
62
 
63
  - MUST implement the `ContainerInterface`
64
+ - MUST provide a way to register a delegate container (using a constructor parameter, or a setter,
65
  or any possible way). The delegate container MUST implement the `ContainerInterface`.
66
 
67
  When a container is configured to use a delegate container for dependencies:
68
 
69
+ - Calls to the `get` method should only return an entry if the entry is part of the container.
70
+ If the entry is not part of the container, an exception should be thrown
71
  (as requested by the `ContainerInterface`).
72
  - Calls to the `has` method should only return `true` if the entry is part of the container.
73
  If the entry is not part of the container, `false` should be returned.
74
+ - If the fetched entry has dependencies, **instead** of performing
75
  the dependency lookup in the container, the lookup is performed on the *delegate container*.
76
 
77
  Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself.
78
 
79
+ It is however allowed for containers to provide exception cases for special entries, and a way to lookup
80
  into the same container (or another container) instead of the delegate container.
81
 
82
  2. Package
116
  * Returns true if the container can return an entry for the given identifier.
117
  * Returns false otherwise.
118
  *
119
+ * `has($id)` returning true does not mean that `get($id)` will not throw an exception.
120
+ * It does however mean that `get($id)` will not throw a `NotFoundException`.
121
+ *
122
  * @param string $id Identifier of the entry to look for.
123
  *
124
  * @return boolean
vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md CHANGED
@@ -89,16 +89,16 @@ In the example above, "container 2" contains a controller "myController" and the
89
  Without the *delegate lookup* feature, when requesting the "myController" instance to container 2, it would take
90
  in charge the instanciation of both entries.
91
 
92
- However, using the *delegate lookup* feature, here is what happens when we ask the composite controller for the
93
  "myController" instance:
94
 
95
- - The composite controller asks container 1 if if contains the "myController" instance. The answer is no.
96
- - The composite controller asks container 2 if if contains the "myController" instance. The answer is yes.
97
- - The composite controller performs a `get` call on container 2 for the "myController" instance.
98
  - Container 2 sees that "myController" has a dependency on "entityManager".
99
- - Container 2 delegates the lookup of "entityManager" to the composite controller.
100
- - The composite controller asks container 1 if if contains the "entityManager" instance. The answer is yes.
101
- - The composite controller performs a `get` call on container 1 for the "entityManager" instance.
102
 
103
  In the end, we get a controller instanciated by container 2 that references an entityManager instanciated
104
  by container 1.
89
  Without the *delegate lookup* feature, when requesting the "myController" instance to container 2, it would take
90
  in charge the instanciation of both entries.
91
 
92
+ However, using the *delegate lookup* feature, here is what happens when we ask the composite container for the
93
  "myController" instance:
94
 
95
+ - The composite container asks container 1 if if contains the "myController" instance. The answer is no.
96
+ - The composite container asks container 2 if if contains the "myController" instance. The answer is yes.
97
+ - The composite container performs a `get` call on container 2 for the "myController" instance.
98
  - Container 2 sees that "myController" has a dependency on "entityManager".
99
+ - Container 2 delegates the lookup of "entityManager" to the composite container.
100
+ - The composite container asks container 1 if if contains the "entityManager" instance. The answer is yes.
101
+ - The composite container performs a `get` call on container 1 for the "entityManager" instance.
102
 
103
  In the end, we get a controller instanciated by container 2 that references an entityManager instanciated
104
  by container 1.
vendor/container-interop/container-interop/docs/Delegate-lookup.md CHANGED
@@ -3,10 +3,10 @@ Delegate lookup feature
3
 
4
  This document describes a standard for dependency injection containers.
5
 
6
- The goal set by the *delegate lookup* feature is to allow several containers to share entries.
7
  Containers implementing this feature can perform dependency lookups in other containers.
8
 
9
- Containers implementing this feature will offer a greater lever of interoperability
10
  with other containers. Implementation of this feature is therefore RECOMMENDED.
11
 
12
  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
@@ -15,7 +15,7 @@ interpreted as described in [RFC 2119][].
15
 
16
  The word `implementor` in this document is to be interpreted as someone
17
  implementing the delegate lookup feature in a dependency injection-related library or framework.
18
- Users of dependency injections containers (DIC) are refered to as `user`.
19
 
20
  [RFC 2119]: http://tools.ietf.org/html/rfc2119
21
 
@@ -36,22 +36,22 @@ fetching the dependencies from.
36
  A container implementing the *delegate lookup* feature:
37
 
38
  - MUST implement the [`ContainerInterface`](ContainerInterface.md)
39
- - MUST provide a way to register a delegate container (using a constructor parameter, or a setter,
40
  or any possible way). The delegate container MUST implement the [`ContainerInterface`](ContainerInterface.md).
41
 
42
  When a container is configured to use a delegate container for dependencies:
43
 
44
  - Calls to the `get` method should only return an entry if the entry is part of the container.
45
- If the entry is not part of the container, an exception should be thrown
46
  (as requested by the [`ContainerInterface`](ContainerInterface.md)).
47
  - Calls to the `has` method should only return `true` if the entry is part of the container.
48
  If the entry is not part of the container, `false` should be returned.
49
- - If the fetched entry has dependencies, **instead** of performing
50
  the dependency lookup in the container, the lookup is performed on the *delegate container*.
51
 
52
  Important: By default, the dependency lookups SHOULD be performed on the delegate container **only**, not on the container itself.
53
 
54
- It is however allowed for containers to provide exception cases for special entries, and a way to lookup
55
  into the same container (or another container) instead of the delegate container.
56
 
57
  3. Package / Interface
3
 
4
  This document describes a standard for dependency injection containers.
5
 
6
+ The goal set by the *delegate lookup* feature is to allow several containers to share entries.
7
  Containers implementing this feature can perform dependency lookups in other containers.
8
 
9
+ Containers implementing this feature will offer a greater lever of interoperability
10
  with other containers. Implementation of this feature is therefore RECOMMENDED.
11
 
12
  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
15
 
16
  The word `implementor` in this document is to be interpreted as someone
17
  implementing the delegate lookup feature in a dependency injection-related library or framework.
18
+ Users of dependency injections containers (DIC) are referred to as `user`.
19
 
20
  [RFC 2119]: http://tools.ietf.org/html/rfc2119
21
 
36
  A container implementing the *delegate lookup* feature:
37
 
38
  - MUST implement the [`ContainerInterface`](ContainerInterface.md)
39
+ - MUST provide a way to register a delegate container (using a constructor parameter, or a setter,
40
  or any possible way). The delegate container MUST implement the [`ContainerInterface`](ContainerInterface.md).
41
 
42
  When a container is configured to use a delegate container for dependencies:
43
 
44
  - Calls to the `get` method should only return an entry if the entry is part of the container.
45
+ If the entry is not part of the container, an exception should be thrown
46
  (as requested by the [`ContainerInterface`](ContainerInterface.md)).
47
  - Calls to the `has` method should only return `true` if the entry is part of the container.
48
  If the entry is not part of the container, `false` should be returned.
49
+ - If the fetched entry has dependencies, **instead** of performing
50
  the dependency lookup in the container, the lookup is performed on the *delegate container*.
51
 
52
  Important: By default, the dependency lookups SHOULD be performed on the delegate container **only**, not on the container itself.
53
 
54
+ It is however allowed for containers to provide exception cases for special entries, and a way to lookup
55
  into the same container (or another container) instead of the delegate container.
56
 
57
  3. Package / Interface
vendor/container-interop/container-interop/docs/images/interoperating_containers.png CHANGED
Binary file
vendor/container-interop/container-interop/docs/images/priority.png CHANGED
Binary file
vendor/container-interop/container-interop/docs/images/side_by_side_containers.png CHANGED
Binary file
vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php CHANGED
@@ -5,33 +5,11 @@
5
 
6
  namespace Interop\Container;
7
 
8
- use Interop\Container\Exception\ContainerException;
9
- use Interop\Container\Exception\NotFoundException;
10
 
11
  /**
12
  * Describes the interface of a container that exposes methods to read its entries.
13
  */
14
- interface ContainerInterface
15
  {
16
- /**
17
- * Finds an entry of the container by its identifier and returns it.
18
- *
19
- * @param string $id Identifier of the entry to look for.
20
- *
21
- * @throws NotFoundException No entry was found for this identifier.
22
- * @throws ContainerException Error while retrieving the entry.
23
- *
24
- * @return mixed Entry.
25
- */
26
- public function get($id);
27
-
28
- /**
29
- * Returns true if the container can return an entry for the given identifier.
30
- * Returns false otherwise.
31
- *
32
- * @param string $id Identifier of the entry to look for.
33
- *
34
- * @return boolean
35
- */
36
- public function has($id);
37
  }
5
 
6
  namespace Interop\Container;
7
 
8
+ use Psr\Container\ContainerInterface as PsrContainerInterface;
 
9
 
10
  /**
11
  * Describes the interface of a container that exposes methods to read its entries.
12
  */
13
+ interface ContainerInterface extends PsrContainerInterface
14
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  }
vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php CHANGED
@@ -5,9 +5,11 @@
5
 
6
  namespace Interop\Container\Exception;
7
 
 
 
8
  /**
9
  * Base interface representing a generic exception in a container.
10
  */
11
- interface ContainerException
12
  {
13
  }
5
 
6
  namespace Interop\Container\Exception;
7
 
8
+ use Psr\Container\ContainerExceptionInterface as PsrContainerException;
9
+
10
  /**
11
  * Base interface representing a generic exception in a container.
12
  */
13
+ interface ContainerException extends PsrContainerException
14
  {
15
  }
vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php CHANGED
@@ -5,9 +5,11 @@
5
 
6
  namespace Interop\Container\Exception;
7
 
 
 
8
  /**
9
  * No entry was found in the container.
10
  */
11
- interface NotFoundException extends ContainerException
12
  {
13
  }
5
 
6
  namespace Interop\Container\Exception;
7
 
8
+ use Psr\Container\NotFoundExceptionInterface as PsrNotFoundException;
9
+
10
  /**
11
  * No entry was found in the container.
12
  */
13
+ interface NotFoundException extends ContainerException, PsrNotFoundException
14
  {
15
  }
vendor/dhii/di-abstract/nbproject/private/private.xml DELETED
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project-private xmlns="http://www.netbeans.org/ns/project-private/1">
3
- <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
4
- </project-private>
 
 
 
 
vendor/dhii/di-abstract/test/functional/AbstractContainerTest.php CHANGED
@@ -415,7 +415,7 @@ class AbstractContainerTest extends TestCase
415
  $subject->this()->_cacheService('three', $this->createDefinition(3));
416
  $expected = array('three' => $this->createDefinition(3));
417
 
418
- $this->assertEquals($expected, $subject->this()->services);
419
  }
420
 
421
  /**
415
  $subject->this()->_cacheService('three', $this->createDefinition(3));
416
  $expected = array('three' => $this->createDefinition(3));
417
 
418
+ $this->assertEquals($expected, $subject->this()->serviceCache);
419
  }
420
 
421
  /**
vendor/dhii/di-interface/nbproject/private/private.xml DELETED
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project-private xmlns="http://www.netbeans.org/ns/project-private/1">
3
- <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
4
- </project-private>
 
 
 
 
vendor/psr/container/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013-2016 container-interop
4
+ Copyright (c) 2016 PHP Framework Interoperability Group
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
7
+ this software and associated documentation files (the "Software"), to deal in
8
+ the Software without restriction, including without limitation the rights to
9
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10
+ the Software, and to permit persons to whom the Software is furnished to do so,
11
+ subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
vendor/psr/container/README.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ # PSR Container
2
+
3
+ This repository holds all interfaces/classes/traits related to [PSR-11](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md).
4
+
5
+ Note that this is not a container implementation of its own. See the specification for more details.
vendor/psr/container/composer.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "psr/container",
3
+ "type": "library",
4
+ "description": "Common Container Interface (PHP FIG PSR-11)",
5
+ "keywords": ["psr", "psr-11", "container", "container-interop", "container-interface"],
6
+ "homepage": "https://github.com/php-fig/container",
7
+ "license": "MIT",
8
+ "authors": [
9
+ {
10
+ "name": "PHP-FIG",
11
+ "homepage": "http://www.php-fig.org/"
12
+ }
13
+ ],
14
+ "require": {
15
+ "php": ">=5.3.0"
16
+ },
17
+ "autoload": {
18
+ "psr-4": {
19
+ "Psr\\Container\\": "src/"
20
+ }
21
+ },
22
+ "extra": {
23
+ "branch-alias": {
24
+ "dev-master": "1.0.x-dev"
25
+ }
26
+ }
27
+ }
vendor/psr/container/src/ContainerExceptionInterface.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
4
+ */
5
+
6
+ namespace Psr\Container;
7
+
8
+ /**
9
+ * Base interface representing a generic exception in a container.
10
+ */
11
+ interface ContainerExceptionInterface
12
+ {
13
+ }
vendor/psr/container/src/ContainerInterface.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
4
+ */
5
+
6
+ namespace Psr\Container;
7
+
8
+ /**
9
+ * Describes the interface of a container that exposes methods to read its entries.
10
+ */
11
+ interface ContainerInterface
12
+ {
13
+ /**
14
+ * Finds an entry of the container by its identifier and returns it.
15
+ *
16
+ * @param string $id Identifier of the entry to look for.
17
+ *
18
+ * @throws NotFoundExceptionInterface No entry was found for **this** identifier.
19
+ * @throws ContainerExceptionInterface Error while retrieving the entry.
20
+ *
21
+ * @return mixed Entry.
22
+ */
23
+ public function get($id);
24
+
25
+ /**
26
+ * Returns true if the container can return an entry for the given identifier.
27
+ * Returns false otherwise.
28
+ *
29
+ * `has($id)` returning true does not mean that `get($id)` will not throw an exception.
30
+ * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
31
+ *
32
+ * @param string $id Identifier of the entry to look for.
33
+ *
34
+ * @return bool
35
+ */
36
+ public function has($id);
37
+ }
vendor/psr/container/src/NotFoundExceptionInterface.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
4
+ */
5
+
6
+ namespace Psr\Container;
7
+
8
+ /**
9
+ * No entry was found in the container.
10
+ */
11
+ interface NotFoundExceptionInterface extends ContainerExceptionInterface
12
+ {
13
+ }
wp-rss-aggregator.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: WP RSS Aggregator
4
  * Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
5
  * Description: Imports and aggregates multiple RSS Feeds.
6
- * Version: 4.11.1
7
  * Author: RebelCode
8
  * Author URI: https://www.wprssaggregator.com
9
  * Text Domain: wprss
@@ -30,7 +30,7 @@
30
 
31
  /**
32
  * @package WPRSSAggregator
33
- * @version 4.11.1
34
  * @since 1.0
35
  * @author RebelCode
36
  * @copyright Copyright (c) 2012-2016, RebelCode Ltd.
@@ -44,7 +44,7 @@
44
 
45
  // Set the version number of the plugin.
46
  if( !defined( 'WPRSS_VERSION' ) )
47
- define( 'WPRSS_VERSION', '4.11.1', true );
48
 
49
  if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
50
  define( 'WPRSS_WP_MIN_VERSION', '4.0', true );
3
  * Plugin Name: WP RSS Aggregator
4
  * Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
5
  * Description: Imports and aggregates multiple RSS Feeds.
6
+ * Version: 4.11.2
7
  * Author: RebelCode
8
  * Author URI: https://www.wprssaggregator.com
9
  * Text Domain: wprss
30
 
31
  /**
32
  * @package WPRSSAggregator
33
+ * @version 4.11.2
34
  * @since 1.0
35
  * @author RebelCode
36
  * @copyright Copyright (c) 2012-2016, RebelCode Ltd.
44
 
45
  // Set the version number of the plugin.
46
  if( !defined( 'WPRSS_VERSION' ) )
47
+ define( 'WPRSS_VERSION', '4.11.2', true );
48
 
49
  if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
50
  define( 'WPRSS_WP_MIN_VERSION', '4.0', true );