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 | WP RSS Aggregator |
Version | 4.11.2 |
Comparing to | |
See all releases |
Code changes from version 4.11.1 to 4.11.2
- css/admin-general-styles.css +14 -0
- css/admin-styles.css +11 -2
- includes/admin-addons.php +39 -35
- includes/admin-help-settings.php +22 -0
- includes/admin-options.php +62 -4
- includes/admin.php +1 -1
- includes/feed-importing.php +179 -1
- includes/scripts.php +2 -0
- includes/update.php +5 -0
- readme.txt +84 -123
- vendor/autoload.php +2 -2
- vendor/composer/ClassLoader.php +5 -7
- vendor/composer/autoload_psr4.php +1 -0
- vendor/composer/autoload_real.php +5 -5
- vendor/composer/autoload_static.php +11 -3
- vendor/composer/installed.json +62 -7
- vendor/container-interop/container-interop/README.md +73 -10
- vendor/container-interop/container-interop/composer.json +4 -0
- vendor/container-interop/container-interop/docs/ContainerInterface-meta.md +1 -1
- vendor/container-interop/container-interop/docs/ContainerInterface.md +19 -14
- vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md +7 -7
- vendor/container-interop/container-interop/docs/Delegate-lookup.md +7 -7
- vendor/container-interop/container-interop/docs/images/interoperating_containers.png +0 -0
- vendor/container-interop/container-interop/docs/images/priority.png +0 -0
- vendor/container-interop/container-interop/docs/images/side_by_side_containers.png +0 -0
- vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php +2 -24
- vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php +3 -1
- vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php +3 -1
- vendor/dhii/di-abstract/nbproject/private/private.xml +0 -4
- vendor/dhii/di-abstract/test/functional/AbstractContainerTest.php +1 -1
- vendor/dhii/di-interface/nbproject/private/private.xml +0 -4
- vendor/psr/container/LICENSE +21 -0
- vendor/psr/container/README.md +5 -0
- vendor/psr/container/composer.json +27 -0
- vendor/psr/container/src/ContainerExceptionInterface.php +13 -0
- vendor/psr/container/src/ContainerInterface.php +37 -0
- vendor/psr/container/src/NotFoundExceptionInterface.php +13 -0
- 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 |
-
|
542 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
19 |
-
|
|
|
|
|
|
|
|
|
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' => __("
|
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' => __("
|
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' => __("
|
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 & 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 & 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 |
-
'
|
78 |
-
'label' => __( 'Limit feed items per
|
79 |
-
'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', __( '
|
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
|
5 |
Requires at least: 4.0
|
6 |
-
Tested up to: 4.
|
7 |
-
|
|
|
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. It
|
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
|
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 |
-
###
|
21 |
-
These are the
|
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
|
28 |
-
*
|
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 author
|
45 |
-
*
|
46 |
-
*
|
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 |
-
|
61 |
-
* PHP 5.3.9 or higher
|
62 |
-
* WordPress 4.0 or higher
|
63 |
|
64 |
-
### Premium Add-
|
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 |
-
|
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. (
|
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 doesn
|
72 |
|
73 |
-
* [WordAi](https://www.wprssaggregator.com/extension/wordai/) allows you to
|
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). (
|
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 |
-
|
88 |
-
* [Content Aggregation and Curation](https://www.wprssaggregator.com/content-aggregation-curation/) with the Advanced Feeds Bundle
|
89 |
|
90 |
-
|
91 |
|
92 |
-
|
|
|
|
|
|
|
|
|
93 |
We offer two free demo sites, each including a different set of add-ons:
|
94 |
|
95 |
-
|
96 |
-
|
|
|
97 |
|
98 |
-
We
|
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/)
|
106 |
|
107 |
### Support ###
|
108 |
-
Support for the free version of WP RSS Aggregator is provided via the plugin
|
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
|
|
|
|
|
|
|
|
|
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 |
-
* [
|
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 |
-
|
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 |
-
|
150 |
|
151 |
-
|
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.
|
165 |
-
> 6. Use the WP RSS Aggregator shortcode in your
|
166 |
|
167 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
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
|
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. It
|
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 |
-
= I
|
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
|
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
|
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 (
|
333 |
$file = $this->findFileWithExtension($class, '.hh');
|
334 |
}
|
335 |
|
336 |
-
if (
|
337 |
// Remember that this class does not exist.
|
338 |
-
$this->
|
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
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit5b1214f1b4db5e953417a3c5488d163a
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
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\
|
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
|
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 =
|
51 |
-
$loader->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.
|
404 |
-
"version_normalized": "1.
|
405 |
"source": {
|
406 |
"type": "git",
|
407 |
"url": "https://github.com/container-interop/container-interop.git",
|
408 |
-
"reference": "
|
409 |
},
|
410 |
"dist": {
|
411 |
"type": "zip",
|
412 |
-
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/
|
413 |
-
"reference": "
|
414 |
"shasum": ""
|
415 |
},
|
416 |
-
"
|
|
|
|
|
|
|
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
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
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
|
15 |
-
Users of dependency injections containers (DIC) are
|
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
|
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
|
93 |
"myController" instance:
|
94 |
|
95 |
-
- The composite
|
96 |
-
- The composite
|
97 |
-
- The composite
|
98 |
- Container 2 sees that "myController" has a dependency on "entityManager".
|
99 |
-
- Container 2 delegates the lookup of "entityManager" to the composite
|
100 |
-
- The composite
|
101 |
-
- The composite
|
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
|
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
|
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()->
|
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.
|
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.
|
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.
|
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 );
|