PluginProbe
FeedWordPress / 2010.0903
FeedWordPress v2010.0903
trunk 0.8 0.9 0.91 0.95 0.96 0.97 0.98 0.981 0.99 0.991 0.992 0.993 2008.1030 2008.1101 2008.1105 2008.1214 2009.0612 2009.0613 2009.0618 2009.0707 2009.1111 2009.1112 2010.0127 2010.0528 All 65 releases
← All changes | feeds-page.php +305 -1009 trunk2010.0903 View file →
@@ -1,34 +1,12 @@
1 1 <?php
2 -require_once dirname(__FILE__) . '/admin-ui.php';
3 -require_once dirname(__FILE__) . '/magpiemocklink.class.php';
4 -require_once dirname(__FILE__) . '/feedfinder.class.php';
5 -require_once dirname(__FILE__) . '/updatedpostscontrol.class.php';
2 +require_once(dirname(__FILE__) . '/admin-ui.php');
3 +require_once(dirname(__FILE__) . '/magpiemocklink.class.php');
4 +require_once(dirname(__FILE__) . '/feedfinder.class.php');
5 +require_once(dirname(__FILE__) . '/updatedpostscontrol.class.php');
6 6
7 -/**
8 - * List of feeds for FWP
9 - *
10 - * @extends FeedWordPressAdminPage
11 - * @global $post_source
12 - */
13 7 class FeedWordPressFeedsPage extends FeedWordPressAdminPage {
14 - /**
15 - * List of possible HTTP status messages.
16 - *
17 - * @var array
18 - *
19 - * @note Added a few more, renamed a few to stick to contemporary standard. (gwyneth 20230918)
20 - */
21 - var $HTTPStatusMessages = array(
22 - 100 => 'Continue',
23 - 101 => 'Switching Protocols',
24 - 102 => 'Processing', // WebDAV; RFC 2518
25 - 103 => 'Early Hints', // RFC 8297
26 - 110 => 'Response is Stale', // Obsoleted in 2022 by RFC 9111 (caching-related)
27 - 111 => 'Revalidation Failed', // Obsoleted in 2022 by RFC 9111 (caching-related)
28 - 112 => 'Disconnected Operation', // Obsoleted in 2022 by RFC 9111 (caching-related)
29 - 113 => 'Heuristic Expiration', // Obsoleted in 2022 by RFC 9111 (caching-related)
30 - 199 => 'Miscellaneous Warning', // Obsoleted in 2022 by RFC 9111 (caching-related)
8 + var $HTTPStatusMessages = array (
31 9 200 => 'OK. FeedWordPress had no problems retrieving the content at this URL but the content does not seem to be a feed, and does not seem to include links to any feeds.',
32 10 201 => 'Created',
33 11 202 => 'Accepted',
34 12 203 => 'Non-Authoritative information',
@@ -34,23 +12,15 @@
34 12 203 => 'Non-Authoritative information',
35 13 204 => 'No Content',
36 14 205 => 'Reset Content',
37 15 206 => 'Partial Content',
38 - 207 => 'Multi-Status', // WebDAV; RFC 4918
39 - 208 => 'Already Reported', // WebDAV; RFC 5842
40 - 214 => 'Transformation Applied', // Obsoleted in 2022 by RFC 9111 (caching-related)
41 - 218 => 'This is fine', // Non-standard; used by the Apache HTTP Serve)
42 - 226 => 'IM Used', // RFC 3229
43 - 299 => 'Miscellaneous Persistent Warning', // Obsoleted in 2022 by RFC 9111 (caching-related)
44 16 300 => 'Multiple Choices',
45 17 301 => 'Moved Permanently',
46 - 302 => 'Found', // Previously known as 'Moved temporarily'
18 + 302 => 'Found',
47 19 303 => 'See Other',
48 20 304 => 'Not Modified',
49 21 305 => 'Use Proxy',
50 - 306 => 'Switch Proxy',
51 22 307 => 'Temporary Redirect',
52 - 308 => 'Permanent Redirect',
53 23 400 => 'Bad Request',
54 24 401 => 'Unauthorized. This URL probably needs a username and password for you to access it.',
55 25 402 => 'Payment Required',
56 26 403 => 'Forbidden. The URL is not made available for the machine that FeedWordPress is running on.',
@@ -62,38 +32,13 @@
62 32 409 => 'Conflict',
63 33 410 => 'Gone. This URL is no longer available on this server and no forwarding address is known.',
64 34 411 => 'Length Required',
65 35 412 => 'Precondition Failed',
66 - 413 => 'Payload Too Large', // Previously known as 'Request Entity Too Large'
67 - 414 => 'URI Too Long', // Previously known as 'Request URI Too Long'
36 + 413 => 'Request Entity Too Large',
37 + 414 => 'Request URI Too Long',
68 38 415 => 'Unsupported Media Type',
69 - 416 => 'Range Not Satisfiable', // Previously known as 'Requested Range Not Satisfiable'
39 + 416 => 'Requested Range Not Satisfiable',
70 40 417 => 'Expectation Failed',
71 - 418 => 'I\'m a teapot', // RFC 2324, RFC 7168
72 - 419 => 'Page Expired', // Non-standard; used by the Laravel Framework
73 - 420 => 'Enhance Your Calm', // Non-standard; used by version 1.0 of the Twitter API
74 - 421 => 'Misdirected Request',
75 - 422 => 'Unprocessable Entity',
76 - 423 => 'Locked', // WebDAV; RFC 4918
77 - 424 => 'Failed Dependency', // WebDAV; RFC 4918
78 - 425 => 'Too Early', // RFC 8470
79 - 426 => 'Upgrade Required',
80 - 428 => 'Precondition Required', // RFC 6585
81 - 429 => 'Too Many Requests', // RFC 6585
82 - 431 => 'Request Header Fields Too Large', // RFC 6585
83 - 440 => 'Login Time-out', // Non-standard; used by Microsoft on IIS
84 - 444 => 'No Response', // Non-standard; used internally by the nginx web server
85 - 449 => 'Retry With', // Non-standard; used by Microsoft on IIS
86 - 450 => 'Blocked by Windows Parental Controls', // Non-standard; used by Microsoft
87 - 451 => 'Unavailable For Legal Reasons', // RFC 7725; also: used by Microsoft IIS for a redirect
88 - 460 => 'Too Soon', // Non-standard; used by Amazon on AWS
89 - 463 => 'Too Many IP Addresses', // Non-standard; used by Amazon on AWS
90 - 464 => 'Incompatible Protocol Version', // Non-standard; used by Amazon on AWS
91 - 494 => 'Request Header Too Large', // Non-standard; used by the nginx web server
92 - 495 => 'SSL Certificate Error', // Non-standard; used by the nginx web server
93 - 496 => 'SSL Certificate Required', // Non-standard; used by the nginx web server
94 - 498 => 'Invalid Token', // Non-standard; used by Esri on their ArcGIS for Server product
95 - 499 => 'Token Required', // Non-standard; used by Esri on their ArcGIS for Server product; also used as 'Client Closed Request' by the nginx web server
96 41 500 => 'Internal Server Error. Something unexpected went wrong with the configuration of the server that hosts this URL. You might try again later to see if this issue has been resolved.',
97 42 501 => 'Not Implemented',
98 43 502 => 'Bad Gateway',
99 44 503 => 'Service Unavailable. The server is currently unable to handle the request due to a temporary overloading or maintenance of the server that hosts this URL. This is probably a temporary condition and you should try again later to see if the issue has been resolved.',
@@ -98,47 +43,36 @@
98 43 502 => 'Bad Gateway',
99 44 503 => 'Service Unavailable. The server is currently unable to handle the request due to a temporary overloading or maintenance of the server that hosts this URL. This is probably a temporary condition and you should try again later to see if the issue has been resolved.',
100 45 504 => 'Gateway Timeout',
101 46 505 => 'HTTP Version Not Supported',
102 - 506 => 'Variant Also Negotiates', // RFC 2295
103 - 507 => 'Insufficient Storage', // WebDAV; RFC 4918
104 - 508 => 'Loop Detected', // WebDAV; RFC 5842
105 - 509 => 'Bandwidth Limit Exceeded', // Non-standard; used by the Apache Web Server as well as cPanel
106 - 510 => 'Not Extended', // RFC 2774
107 - 511 => 'Network Authentication Required', // RFC 6585
108 - 520 => 'Web Server Returned an Unknown Error', // Non-Standard; used by Cloudflare
109 - 521 => 'Web Server Is Down', // Non-Standard; used by Cloudflare
110 - 522 => 'Connection Timed Out', // Non-Standard; used by Cloudflare
111 - 523 => 'Origin Is Unreachable', // Non-Standard; used by Cloudflare
112 - 524 => 'A Timeout Occurred', // Non-Standard; used by Cloudflare
113 - 525 => 'SSL Handshake Failed', // Non-Standard; used by Cloudflare
114 - 526 => 'Invalid SSL Certificate', // Non-Standard; used by Cloudflare
115 - 527 => 'Railgun Error', // Non-Standard; used by Cloudflare
116 - 529 => 'Site is overloaded', // Non-standard; used by Qualys on its SSLLabs server testing API
117 - 530 => 'Site is frozen', // Non-standard; used by the Pantheon Systems web platform
118 - 561 => 'Unauthorized', // Non-standard; used by Amazon on AWS
119 - 598 => 'Network Read Timeout Error', // Non-standard; informal convention used by some HTTP procoes
120 - 599 => 'Network Connect Timeout Error', // Non-standard; informal convention used by some HTTP procoes
121 47 );
48 + var $updatedPosts = NULL;
122 49
123 50 /**
124 - * List of updated posts.
51 + * Constructs the Feeds page object
125 52 *
126 - * @var mixed
53 + * @param mixed $link An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings
127 54 */
128 - var $updatedPosts = NULL;
55 + function FeedWordPressFeedsPage ($link = -1) {
56 + if (is_numeric($link) and -1 == $link) :
57 + $link = FeedWordPressAdminPage::submitted_link();
58 + endif;
129 59
130 - /**
131 - * List of special settings.
132 - *
133 - * Regular expression syntax is OK here.
134 - *
135 - * @var Array
136 - */
137 - var $special_settings = array(
60 + FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpressfeeds', $link);
61 +
62 + $this->dispatch = 'feedwordpress_admin_page_feeds';
63 + $this->pagenames = array(
64 + 'default' => 'Feeds',
65 + 'settings-update' => 'Syndicated feed',
66 + 'open-sheet' => 'Feed and Update',
67 + );
68 + $this->filename = __FILE__;
69 + $this->updatedPosts = new UpdatedPostsControl($this);
70 + } /* FeedWordPressFeedsPage constructor */
71 +
72 + var $special_settings = array ( /* Regular expression syntax is OK here */
138 73 'cats',
139 74 'cat_split',
140 - 'fetch timeout',
141 75 'freeze updates',
142 76 'hardcode name',
143 77 'hardcode url',
144 78 'hardcode description',
@@ -149,9 +83,8 @@
149 83 'munge permalink',
150 84 'ping status',
151 85 'post status',
152 86 'postmeta',
153 - 'query parameters',
154 87 'resolve relative',
155 88 'syndicated post type',
156 89 'tags',
157 90 'unfamiliar author',
@@ -157,9 +90,8 @@
157 90 'unfamiliar author',
158 91 'unfamliar categories', /* Deprecated */
159 92 'unfamiliar category',
160 93 'unfamiliar post_tag',
161 - 'add/.*',
162 94 'update/.*',
163 95 'feed/.*',
164 96 'link/.*',
165 97 'match/.*',
@@ -164,65 +96,33 @@
164 96 'link/.*',
165 97 'match/.*',
166 98 );
167 99
168 - /**
169 - * Constructs the Feeds page object
170 - *
171 - * @param mixed $link An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings
172 - * @uses UpdatedPostsControl
173 - */
174 - public function __construct( $link = -1 ) {
175 - if ( is_numeric( $link ) and -1 == $link ) :
176 - $link = $this->submitted_link();
177 - endif;
178 -
179 - parent::__construct( 'feedwordpressfeeds', $link );
180 -
181 - $this->dispatch = 'feedwordpress_admin_page_feeds';
182 - $this->pagenames = array(
183 - 'default' => 'Feeds',
184 - 'settings-update' => 'Syndicated feed',
185 - 'open-sheet' => 'Feed and Update',
186 - );
187 - $this->filename = __FILE__;
188 - $this->updatedPosts = new UpdatedPostsControl( $this );
189 -
190 - $this->special_settings = apply_filters( 'syndicated_feed_special_settings', $this->special_settings, $this );
191 - } /* FeedWordPressFeedsPage constructor */
192 -
193 - /**
194 - * Prints out the feeds page.
195 - *
196 - * @return bool TRUE to continue printing out, FALSE to stop.
197 - * @uses FeedWordPress::param()
198 - */
199 - function display() {
100 + function display () {
101 + global $fwp_post;
200 102 global $post_source;
201 103
202 104 $this->boxes_by_methods = array(
203 - 'feed_information_box' => __( 'Feed Information' ),
204 - 'global_feeds_box' => __( 'Update Scheduling' ),
205 - 'updated_posts_box' => __( 'Updated Posts' ),
206 - 'custom_settings_box' => __( 'Custom Feed Settings (for use in templates)' ),
207 - 'advanced_settings_box' => __( 'Advanced Settings' ),
105 + 'feed_information_box' => __('Feed Information'),
106 + 'global_feeds_box' => __('Update Scheduling'),
107 + 'updated_posts_box' => __('Updated Posts'),
108 + 'custom_settings_box' => __('Custom Feed Settings (for use in templates)'),
208 109 );
209 110 if ($this->for_default_settings()) :
210 - unset( $this->boxes_by_methods['custom_settings_box'] );
211 - endif;
212 -
111 + unset($this->boxes_by_methods['custom_settings_box']);
112 + endif;
113 +
213 114 // Allow overriding of normal source for FeedFinder, which may
214 115 // be called from multiple points.
215 - if ( isset( $post_source ) and ! is_null( $post_source ) ) :
116 + if (isset($post_source) and !is_null($post_source)) :
216 117 $source = $post_source;
217 118 else :
218 119 $source = $this->dispatch;
219 120 endif;
220 121
221 - $feedfinder = FeedWordPress::param( 'feedfinder' );
222 - $action = FeedWordPress::param( 'action' );
223 - if ( $feedfinder || in_array( $action, array( 'feedfinder', FWP_SYNDICATE_NEW ) ) ) :
224 -
122 + if (isset($_REQUEST['feedfinder'])
123 + or (isset($_REQUEST['action']) and $_REQUEST['action']=='feedfinder')
124 + or (isset($_REQUEST['action']) and $_REQUEST['action']==FWP_SYNDICATE_NEW)) :
225 125 // If this is a POST, validate source and user credentials
226 126 FeedWordPressCompatibility::validate_http_request(/*action=*/ $source, /*capability=*/ 'manage_links');
227 127
228 128 return $this->display_feedfinder(); // re-route to Feed Finder page
@@ -231,55 +131,37 @@
231 131 parent::display();
232 132 return false; // Don't continue
233 133 } /* FeedWordPressFeedsPage::display() */
234 134
235 - /**
236 - * Interface with JavaScript calls.
237 - *
238 - */
239 - function ajax_interface_js() {
240 - parent::ajax_interface_js();
135 + function ajax_interface_js () {
136 + FeedWordPressAdminPage::ajax_interface_js();
241 137 ?>
242 - jQuery( document ).ready( function () {
243 - contextual_appearance( 'automatic-updates-selector', 'cron-job-explanation', null, 'no' );
244 - contextual_appearance( 'time-limit', 'time-limit-box', null, 'yes' );
245 - contextual_appearance( 'use-default-update-window-no', 'update-scheduling-note', null, null, 'block', true );
246 - jQuery( '#use-default-update-window-yes, #use-default-update-window-no' ).click( function () {
247 - contextual_appearance( 'use-default-update-window-no', 'update-scheduling-note', null, null, 'block', true );
138 +
139 + jQuery(document).ready( function () {
140 + contextual_appearance('automatic-updates-selector', 'cron-job-explanation', null, 'no');
141 + contextual_appearance('time-limit', 'time-limit-box', null, 'yes');
142 + contextual_appearance('use-default-update-window-no', 'update-scheduling-note', null, null, 'block', true);
143 + jQuery('#use-default-update-window-yes, #use-default-update-window-no').click( function () {
144 + contextual_appearance('use-default-update-window-no', 'update-scheduling-note', null, null, 'block', true);
248 145 } );
249 146
250 - var els = [ 'name', 'description', 'url' ];
251 - for ( var i = 0; i < els.length; i++ ) {
147 + var els = ['name', 'description', 'url'];
148 + for (var i = 0; i < els.length; i++) {
252 149 contextual_appearance(
253 - /*item=*/ 'basics-hardcode-' + els[i],
254 - /*appear=*/ 'basics-' + els[i] + '-view',
255 - /*disappear=*/ 'basics-' + els[i] + '-edit',
256 - /*value=*/ 'no',
150 + /*item=*/ 'basics-hardcode-'+els[i],
151 + /*appear=*/ 'basics-'+els[i]+'-view',
152 + /*disappear=*/ 'basics-'+els[i]+'-edit',
153 + /*value=*/ 'no',
257 154 /*visibleStyle=*/ 'block',
258 - /*checkbox=*/ true
155 + /*checkbox=*/ true
259 156 );
260 157 } /* for */
158 + } );
261 159
262 - // Let's make the interface for the PAUSE/RESUME a bit better
263 - jQuery( '<tr id="reveal-pause-resume"><th></th><td><button id="pause-resume-reveal-button">&mdash; PAUSE or RESUME UPDATES &mdash;</button></td></tr>' ).insertBefore( '#pause-resume' );
264 - jQuery( '#pause-resume' ).hide();
265 - jQuery( '#pause-resume-reveal-button' ).click( function( ev ) {
266 - ev.preventDefault();
267 -
268 - jQuery( '#pause-resume' ).toggle();
269 - return false;
270 - });
271 - } );
272 160 <?php
273 - } /* FeedWordPressFeedsPage::ajax_interface_js() */
274 -
275 - /**
276 - * Displays updated feeds.
277 - *
278 - * @param object $page Current page object (?).
279 - * @param mixed|null $box A box inside this object.
280 - */
281 - /*static*/ function updated_posts_box( $page, $box = NULL ) {
161 + }
162 +
163 + /*static*/ function updated_posts_box ($page, $box = NULL) {
282 164 ?>
283 165 <table class="edit-form">
284 166 <?php $page->updatedPosts->display(); ?>
285 167 </table>
@@ -285,605 +167,224 @@
285 167 </table>
286 168 <?php
287 169 } /* FeedWordPressFeedsPage::updated_posts_box() */
288 170
289 - /**
290 - * Displays form to deal with global feeds.
291 - *
292 - * @param object $page Current page object (?).
293 - * @param mixed|null $box A box inside this object.
294 - *
295 - * @uses FeedWordPress::automatic_update_hook()
296 - */
297 - /*static*/ function global_feeds_box( $page, $box = NULL ) {
298 - global $feedwordpress;
299 - $automatic_updates = $feedwordpress->automatic_update_hook( array( 'setting only' => true ) );
300 - $update_time_limit = (int) get_option( 'feedwordpress_update_time_limit' );
171 + /*static*/ function global_feeds_box ($page, $box = NULL) {
172 + $automatic_updates = get_option('feedwordpress_automatic_updates');
173 + $update_time_limit = (int) get_option('feedwordpress_update_time_limit');
301 174
302 175 // Hey, ho, let's go...
303 176 ?>
304 177
305 - <table class="edit-form"
306 - <?php if ( $page->for_default_settings() ) : ?>
178 + <table class="edit-form">
179 + <?php if ($page->for_default_settings()) : ?>
307 180
308 181 <tr>
309 - <th scope="row"><?php esc_html_e( 'Update Method:' ); ?></th>
182 + <th scope="row">Updates:</th>
310 183 <td><select id="automatic-updates-selector" name="automatic_updates" size="1" onchange="contextual_appearance('automatic-updates-selector', 'cron-job-explanation', null, 'no');">
311 - <option value="shutdown"<?php fwp_selected_flag( 'shutdown' == $automatic_updates ); ?>><?php esc_html_e( 'automatically check for updates after pages load' ); ?></option>
312 - <option value="init"<?php fwp_selected_flag( 'init' == $automatic_updates ); ?>><?php esc_html_e( 'automatically check for updates before pages load' ); ?></option>
313 - <option value="no"<?php fwp_selected_flag( ! $automatic_updates ); ?>><?php esc_html_e( 'cron job or manual updates' ); ?></option>
184 + <option value="shutdown"<?php echo ($automatic_updates=='shutdown')?' selected="selected"':''; ?>>automatically check for updates after pages load</option>
185 + <option value="init"<?php echo ($automatic_updates=='init')?' selected="selected"':''; ?>>automatically check for updates before pages load</option>
186 + <option value="no"<?php echo (!$automatic_updates)?' selected="selected"':''; ?>>cron job or manual updates</option>
314 187 </select>
315 188 <div id="cron-job-explanation" class="setting-description">
316 - <p><?php
317 - /* Do we have shell_exec() available from here, or is it disabled for security reasons?
318 - * If it's available, use it to execute `which` to try to get a realistic path to curl,
319 - * or to wget. If everything fails or shell_exec() isn't available, then just make
320 - * up something for the sake of example.
321 - */
322 - /** var string|null Path to either cURL or wget executables. */
323 - $curlOrWgetPath = NULL;
324 -
325 - /** var bool True if this WP installation can call shell commands. */
326 - $shellExecAvailable = ( is_callable( 'shell_exec' ) && false === stripos( ini_get( 'disable_functions' ), 'shell_exec') );
327 -
328 - if ( $shellExecAvailable ) :
329 - $curlOrWgetPath = `which curl`; $opts = '--silent %s';
330 - endif;
331 -
332 - if ( $shellExecAvailable and ( is_null( $curlOrWgetPath ) or strlen( trim( $curlOrWgetPath ) ) == 0 ) ) :
333 - $curlOrWgetPath = `which wget`; $opts = '-q -O - %s';
334 - endif;
335 -
336 - if ( is_null( $curlOrWgetPath ) or strlen( trim( $curlOrWgetPath ) ) == 0 ) :
337 - $curlOrWgetPath = '/usr/bin/curl'; $opts = '--silent %s';
338 - endif;
339 -
340 - $curlOrWgetPath = preg_replace( '/\n+$/', '', $curlOrWgetPath );
341 -
342 - /** var string Constructed shell command line to call cURL/wget for updating FeedWordPress feeds. */
343 - $cmdline = $curlOrWgetPath . ' ' . sprintf( $opts, get_bloginfo( 'url' ) . '?update_feedwordpress=1' );
344 -
345 - ?><?php esc_html_e( 'If you want to use a cron job, you can perform scheduled updates by sending regularly-scheduled requests to ' ); ?><a href="<?php bloginfo('url'); ?>?update_feedwordpress=1"><code><?php bloginfo('url'); ?>?update_feedwordpress=1</code></a>
346 - <?php esc_html_e( 'For example, inserting the following line in your crontab:' ); ?></p>
347 - <pre style="font-size: 0.80em"><code>*/10 * * * * <?php print esc_html($cmdline); ?></code></pre>
348 - <p class="setting-description"><?php esc_html_e( 'will check in every 10 minutes and check for updates on any feeds that are ready to be polled for updates.' ); ?></p>
189 + <p>If you want to use a cron job,
190 + you can perform scheduled updates by sending regularly-scheduled
191 + requests to <a href="<?php bloginfo('home'); ?>?update_feedwordpress=1"><code><?php bloginfo('url') ?>?update_feedwordpress=1</code></a>
192 + For example, inserting the following line in your crontab:</p>
193 + <pre style="font-size: 0.80em"><code>*/10 * * * * /usr/bin/curl --silent <?php bloginfo('url'); ?>?update_feedwordpress=1</code></pre>
194 + <p class="setting-description">will check in every 10 minutes
195 + and check for updates on any feeds that are ready to be polled for updates.</p>
349 196 </div>
350 197 </td>
351 198 </tr>
352 -
199 +
353 200 <?php else : /* Feed-specific settings */ ?>
354 201
355 202 <tr>
356 - <th scope="row"><?php esc_html_e( 'Last update' ) ?>:</th>
203 + <th scope="row"><?php _e('Last update') ?>:</th>
357 204 <td><?php
358 - if ( isset( $page->link->settings['update/last'] ) ) :
359 - echo esc_html( fwp_time_elapsed( $page->link->settings['update/last'] ) . " " );
205 + if (isset($page->link->settings['update/last'])) :
206 + echo fwp_time_elapsed($page->link->settings['update/last'])." ";
360 207 else :
361 - esc_html_e( " none yet" );
208 + echo " none yet";
362 209 endif;
363 210 ?></td></tr>
364 211
365 - <tr><th><?php esc_html_e( 'Next update' ) ?>:</th>
212 + <tr><th><?php _e('Next update') ?>:</th>
366 213 <td><?php
367 - $holdem = ( isset( $page->link->settings['update/hold'] ) ? $page->link->settings['update/hold'] : 'scheduled' );
214 + $holdem = (isset($page->link->settings['update/hold']) ? $page->link->settings['update/hold'] : 'scheduled');
368 215 ?>
369 216 <select name="update_schedule">
370 - <option value="scheduled"<?php echo ( 'scheduled' == $holdem ) ? ' selected="selected"' : ''; ?>><?php esc_html_e( 'update on schedule' ); ?> <?php
217 + <option value="scheduled"<?php echo ($holdem=='scheduled')?' selected="selected"':''; ?>>update on schedule <?php
371 218 echo " (";
372 - if ( isset( $page->link->settings['update/ttl'] ) and is_numeric( $page->link->settings['update/ttl'] ) ) :
373 - if ( isset( $page->link->settings['update/timed'] ) and 'automatically' == $page->link->settings['update/timed'] ) :
374 - esc_html_e( 'next: ');
375 - $next = $page->link->settings['update/last'] + ( (int) $page->link->settings['update/ttl'] * 60 );
376 - // Note: strftime() is deprecated; use date() instead. (gwyneth 20230918)
377 - if ( strftime( '%x', time() ) != strftime( '%x', $next) ) :
378 - echo esc_html( strftime( '%x', $next ) . ' ' );
219 + if (isset($page->link->settings['update/ttl']) and is_numeric($page->link->settings['update/ttl'])) :
220 + if (isset($page->link->settings['update/timed']) and $page->link->settings['update/timed']=='automatically') :
221 + echo 'next: ';
222 + $next = $page->link->settings['update/last'] + ((int) $page->link->settings['update/ttl'] * 60);
223 + if (strftime('%x', time()) != strftime('%x', $next)) :
224 + echo strftime('%x', $next)." ";
379 225 endif;
380 - echo esc_html( strftime( '%X', $page->link->settings['update/last'] + ( (int) $page->link->settings['update/ttl'] * 60 ) ) );
226 + echo strftime('%X', $page->link->settings['update/last']+((int) $page->link->settings['update/ttl']*60));
381 227 else :
382 - echo esc_html__( "every " ) . esc_html( $page->link->settings['update/ttl'] ) . esc_html__( " minute" )
383 - . ( ( 1 != $page->link->settings['update/ttl'] ) ? esc_html__( "s" ) : "" );
228 + echo "every ".$page->link->settings['update/ttl']." minute".(($page->link->settings['update/ttl']!=1)?"s":"");
384 229 endif;
385 230 else:
386 - esc_html_e( "next scheduled update" );
231 + echo "next scheduled update";
387 232 endif;
388 233 echo ")";
389 234 ?></option>
390 - <option value="next"<?php echo ( 'next' == $holdem ) ? ' selected="selected"' : ''; ?>><?php esc_html_e( 'update ASAP' ); ?></option>
391 - <option value="ping"<?php echo ( 'ping' == $holdem ) ? ' selected="selected"' : ''; ?>><?php esc_html_e( 'update only when pinged' ); ?></option>
235 + <option value="next"<?php echo ($holdem=='next')?' selected="selected"':''; ?>>update ASAP</option>
236 + <option value="ping"<?php echo ($holdem=='ping')?' selected="selected"':''; ?>>update only when pinged</option>
392 237 </select></td></tr>
393 -
238 +
394 239 <?php endif; ?>
395 -
396 - <tr id="pause-resume">
397 - <th scope="row"><?php esc_html_e( 'Pause/Resume:'); ?></th>
398 - <td><?php
399 - $this->setting_radio_control(
400 - 'update/pause',
401 - 'update_pause',
402 - /*options=*/ array(
403 - 'no' => __( '<strong>UPDATE:</strong> import new posts as normal' ),
404 - 'yes' => __( '<strong>PAUSE:</strong> do not import new posts until I unpause updates' ),
405 - ),
406 - /*params=*/ array(
407 - 'setting-default' => NULL,
408 - 'global-setting-default' => 'no',
409 - 'default-input-value' => 'default',
410 - ),
411 - );
412 - ?></td>
413 - </tr>
414 -
240 +
415 241 <tr>
416 - <th scope="row"><?php esc_html_e( 'Update scheduling:') ?></th>
417 - <td><p style="margin-top:0px"><?php esc_html_e( 'How long should FeedWordPress wait between updates before it considers this feed ready to be polled for updates again?' ); ?></p>
242 + <th scope="row"><?php print __('Update scheduling:') ?></th>
243 + <td><p style="margin-top:0px">How long should FeedWordPress wait between updates before it considers this feed ready to be polled for updates again?</p>
418 244 <?php
245 +
419 246 $this->setting_radio_control(
420 - 'update/window',
421 - 'update_window',
422 - array( $this, 'update_window_edit_box' ),
247 + 'update/window', 'update_window',
248 + array(&$this, 'update_window_edit_box'),
423 249 array(
424 250 'global-setting-default' => DEFAULT_UPDATE_PERIOD,
425 - 'default-input-name' => 'use_default_update_window',
426 - 'default-input-id' => 'use-default-update-window-yes',
427 - 'default-input-id-no' => 'use-default-update-window-no',
428 - 'labels' => array($this, 'update_window_currently' ),
251 + 'default-input-name' => 'use_default_update_window',
252 + 'default-input-id' => 'use-default-update-window-yes',
253 + 'default-input-id-no' => 'use-default-update-window-no',
254 + 'labels' => array(&$this, 'update_window_currently'),
429 255 )
430 256 );
431 257 ?></td>
432 258 </tr>
433 259
434 - <tr>
435 - <th scope="row"><?php esc_html_e( 'Minimum Interval:'); ?></th>
436 - <td><p style="margin-top:0px"><?php esc_html_e( 'Some feeds include standard elements that
437 - request a specific update schedule. If the interval requested by the
438 - feed provider is <em>longer</em> than FeedWordPress&rsquo;s normal scheduling,
439 - FeedWordPress will always respect their request to slow down. But what
440 - should it do if the update interval is <em>shorter</em> than the schedule set above?' ); ?></p>
441 - <?php
442 - $this->setting_radio_control(
443 - 'update/minimum', 'update_minimum',
444 - /*options=*/ array(
445 - 'no' => __( 'Speed up and accept the interval from the feed provider' ),
446 - 'yes' => __( 'Keep pace and use the longer scheduling from FeedWordPress' ),
447 - ),
448 - /*params=*/ array(
449 - 'setting-default' => NULL,
450 - 'global-setting-default' => 'no',
451 - 'default-input-value' => 'default',
452 - )
453 - );
454 - ?>
455 - </td>
456 - </tr>
457 -
458 260 <?php if ($this->for_default_settings()) : ?>
459 -
261 +
460 262 <tr>
461 - <th scope="row"><?php esc_html_e( 'Time limit on updates' ); ?>:</th>
462 - <td><select id="time-limit" name="update_time_limit" size="1" onchange="contextual_appearance( 'time-limit', 'time-limit-box', null, 'yes' );">
463 - <option value="no"<?php fwp_selected_flag( $update_time_limit <= 0 ); ?>><?php esc_html_e( 'no time limit on updates' ); ?></option>
464 - <option value="yes"<?php fwp_selected_flag( $update_time_limit > 0 ); ?>><?php esc_html_e( 'limit updates to no more than...' ); ?></option>
263 + <th scope="row"><?php print __('Time limit on updates'); ?>:</th>
264 + <td><select id="time-limit" name="update_time_limit" size="1" onchange="contextual_appearance('time-limit', 'time-limit-box', null, 'yes');">
265 + <option value="no"<?php echo ($update_time_limit>0)?'':' selected="selected"'; ?>>no time limit on updates</option>
266 + <option value="yes"<?php echo ($update_time_limit>0)?' selected="selected"':''; ?>>limit updates to no more than...</option>
465 267 </select>
466 - <span id="time-limit-box"><label><input type="text" name="time_limit_seconds" value="<?php print esc_attr( $update_time_limit ); ?>" size="5" /> <?php esc_html_e( 'seconds' ); ?></label></span>
268 + <span id="time-limit-box"><label><input type="text" name="time_limit_seconds" value="<?php print $update_time_limit; ?>" size="5" /> seconds</label></span>
467 269 </tr>
468 270
469 271 <?php endif; ?>
470 -
272 +
471 273 </table>
472 -
274 +
473 275 <?php
474 276 } /* FeedWordPressFeedsPage::global_feeds_box() */
475 277
476 - /**
477 - * Updates the window edit box.
478 - *
479 - * @param int $updateWindow Minutes between polling.
480 - * @param bool $defaulted Unused.
481 - * @param array $params Unused.
482 - */
483 - function update_window_edit_box( $updateWindow, $defaulted, $params ) {
484 - if ( ! is_numeric( $updateWindow) ) :
278 + function update_window_edit_box ($updateWindow, $defaulted, $params) {
279 + if (!is_numeric($updateWindow)) :
485 280 $updateWindow = DEFAULT_UPDATE_PERIOD;
486 281 endif;
487 282 ?>
488 - <p><?php esc_html_e( 'Wait' ); ?> <input type="text" name="update_window" value="<?php print esc_attr( $updateWindow ); ?>" size="4" /> <?php esc_html_e( 'minutes between polling.' ); ?></p>
283 + <p>Wait <input type="text" name="update_window" value="<?php print $updateWindow; ?>" size="4" /> minutes between polling.</p>
489 284 <div class="setting-description" id="update-scheduling-note">
490 - <p<?php if ( $updateWindow < 50 ) : ?> style="color: white; background-color: #703030; padding: 1.0em;"<?php endif; ?>><?php esc_html_e( '<strong>Recommendation.</strong> Unless you are positive that you have the webmaster&rsquo;s permission, you generally should not set FeedWordPress to poll feeds more frequently than once every 60 minutes. Many webmasters consider more frequent automated polling to be abusive, and may complain to your web host, or ban your IP address, as retaliation for hammering their servers too hard.' ); ?></p>
491 - <p><?php esc_html_e( '<strong>Note.</strong> This is a default setting that FeedWordPress uses to schedule updates when the feed does not provide any scheduling requests. If this feed does provide update scheduling information (through elements such as <code>&lt;rss:ttl&gt;</code> or <code>&lt;sy:updateFrequency&gt;</code>), FeedWordPress will respect the feed&rsquo;s request.' ); ?></p>
285 + <p<?php if ($updateWindow<50) : ?> style="color: white; background-color: #703030; padding: 1.0em;"<?php endif; ?>><strong>Recommendation.</strong> Unless you are positive that you have the webmaster's permission, you generally should not set FeedWordPress to poll feeds more frequently than once every 60 minutes. Many webmasters consider more frequent automated polling to be abusive, and may complain to your web host, or ban your IP address, as retaliation for hammering their servers too hard.</p>
286 + <p><strong>Note.</strong> This is a default setting that FeedWordPress uses to schedule updates when the feed does not provide any scheduling requests. If this feed does provide update scheduling information (through elements such as <code>&lt;rss:ttl&gt;</code> or <code>&lt;sy:updateFrequency&gt;</code>), FeedWordPress will respect the feed's request.</p>
492 287 </div>
493 288 <?php
494 - } /* FeedWordPressFeedsPage::update_window_edit_box() */
495 -
496 - /**
497 - * Auxiliary function to update the window with current polling waiting period.
498 - *
499 - * @param int $updateWindow Minutes between polling.
500 - * @param bool $defaulted Unused.
501 - * @param array $params Unused.
502 - */
503 - function update_window_currently( $updateWindow, $defaulted, $params ) {
289 + } /* FeedWordPressFeedsPage::update_window_edit_box () */
290 +
291 + function update_window_currently ($updateWindow, $defaulted, $params) {
504 292 $updateWindow = (int) $updateWindow;
505 - if ( 1 == $updateWindow ) :
506 - $caption = __( 'wait %d minute between polling' );
293 + if (1==$updateWindow) :
294 + $caption = 'wait %d minute between polling';
507 295 else :
508 - $caption = __( 'wait %d minutes between polling' );
296 + $caption = 'wait %d minutes between polling';
509 297 endif;
510 - return sprintf( $caption, $updateWindow );
511 - } /* FeedWordPressFeedsPage::update_window_currently() */
512 -
513 - /**
514 - * Fetches the timeout setting.
515 - *
516 - * Nothing is returned, this just emits the HTML.
517 - *
518 - * @param int $setting Unused.
519 - * @param bool $defaulted Unused.
520 - * @param array $params Unused.
521 - */
522 - function fetch_timeout_setting( $setting, $defaulted, $params ) {
523 - /** var int Fetch feed timeout in seconds. */
524 - $timeout = intval( $this->setting( 'fetch timeout', FEEDWORDPRESS_FETCH_TIMEOUT_DEFAULT ) );
525 -
526 - if ( $this->for_feed_settings() ) :
527 - $article = __( 'this' );
528 - else :
529 - $article = __( 'a' );
530 - endif;
531 - ?>
532 - <p><?php esc_html_e( 'Wait no more than' ); ?> <input name="fetch_timeout" type="number" min="0" size="3" value="<?php print esc_attr( $timeout ); ?>" />
533 - <?php esc_html_e( 'second(s) when trying to fetch '); print esc_html( $article ); esc_html_e(' feed to check for updates. '); ?></p>
534 - <p><?php esc_html_e( 'If ' ); print esc_html( $article ); esc_html_e(' source&rsquo;s web server does not respond before time runs
535 - out, FeedWordPress will skip over the source and try again during the next update cycle.' ); ?></p>
536 - <?php
537 - } /* FeedWordPressFeedsPage::fetch_timeout_setting() */
538 -
539 - /**
540 - * Properly formats the feed timeout setting, with plurals if required.
541 - *
542 - * Nothing is returned, this just emits the HTML.
543 - *
544 - * @param int $setting Value for the feed timeout, in seconds.
545 - * @param bool $defaulted Unused.
546 - * @param array $params Unused.
547 - */
548 - function fetch_timeout_setting_value( $setting, $defaulted, $params ) {
549 - print number_format( intval( $setting) ) . " " . ( ( 1 == $setting ) ? "second" : "seconds" );
550 - }
551 -
552 - /**
553 - * Displays the advanced settings box on the FWP dashboard page.
554 - *
555 - * @param FeedWordPressFeedsPage $page A page object, unused.
556 - * @param mixed|null $box A box inside this object, unused.
557 - */
558 - function advanced_settings_box( $page, $box = NULL ) {
559 - ?>
560 - <table class="edit-form">
561 - <tr>
562 - <th><?php esc_html_e( 'Fetch Timeout:' ); ?></th>
563 - <td>
564 - <?php
565 - $this->setting_radio_control(
566 - 'fetch timeout', 'fetch_timeout',
567 - array($this, 'fetch_timeout_setting'),
568 - array(
569 - 'global-setting-default' => FEEDWORDPRESS_FETCH_TIMEOUT_DEFAULT,
570 - 'input-name' => 'fetch_timeout',
571 - 'default-input-name' => 'fetch_timeout_default',
572 - 'labels' => array($this, 'fetch_timeout_setting_value'),
573 - )
574 - );
575 - ?>
576 - </td>
577 - </tr>
578 - <tr>
579 - <th><?php esc_html_e( 'Feed Update Type:' ); ?></th>
580 - <td><?php
581 - $this->setting_radio_control( 'update_incremental', 'update_incremental',
582 - /*options=*/ array(
583 - 'incremental' => __( '**Incremental.** When items no longer appear on the feed, keep them in the WordPress posts table.' ),
584 - 'complete' => __( '**Complete.** When items no longer appear on the feed, they are obsolete; retire them from the WordPress posts table.' ),
585 - ),
586 - /*params=*/ array(
587 - 'setting-default' => NULL,
588 - 'global-setting-default' => 'incremental',
589 - 'default-input-value' => 'default',
590 - )
591 - ); ?></td>
592 - </tr>
593 - <tr>
594 - <th><?php esc_html_e( 'Allow Feeds to Delete Posts:' ); ?></th>
595 - <td><?php
596 - $this->setting_radio_control(
597 - 'tombstones',
598 - 'tombstones',
599 - /*options=*/ array(
600 - 'yes' => __( 'Yes. If a feed indicates that one of its posts has been deleted, delete the local copy syndicated to this website.' ),
601 - 'no' => __( 'No. Even if a feed indicates that one of its posts has been deleted, retain the local copy on this website.' ),
602 - ),
603 - /*params=*/ array(
604 - 'setting-default' => NULL,
605 - 'global-setting-default' => 'yes',
606 - 'default-input-value' => 'default',
607 - )
608 - ); ?></td>
609 - </tr>
610 - </table>
611 - <?php
612 - } /* FeedWordPressFeedsPage::advanced_settings_box() */
613 -
614 - /**
615 - * Shows a box for authentication credentials for a feed.
616 - *
617 - * @param array $params Array of parameters to parse.
618 - */
619 - function display_authentication_credentials_box( $params = array() ) {
620 - static $count = 0;
621 -
622 - $params = wp_parse_args(
623 - $params,
624 - array(
625 - 'username' => NULL,
626 - 'password' => NULL,
627 - 'method' => '-',
628 - ),
629 - );
630 -
631 - // Equivalents
632 - if ( is_null( $params['method'] ) ) : $params['method'] = '-'; endif;
633 -
634 - $count++;
635 - /** var string Constructed slug for each feed credential. */
636 - $slug = ( $count > 1 ? '-' . $count : '' );
637 -
638 - global $feedwordpress;
639 - $authMethods = apply_filters(
640 - 'feedwordpress_http_auth_methods',
641 - $feedwordpress->httpauth->methods_available(),
642 - );
643 -
644 - $linkRssAuthId = sanitize_html_class( 'link-rss-authentication' . $slug );
645 - $linkRssCredentialsId = sanitize_html_class( 'link-rss-authentication-credentials' . $slug );
646 - $linkRssAuthMethodId = sanitize_html_class( 'link-rss-authentication-method' . $slug );
647 -
648 - if ( count( $authMethods ) > 1 ) : /* More than '-' */
649 - ?>
650 - <div class="link-rss-authentication" id="<?php print esc_attr( $linkRssAuthId ); ?>">
651 - <table>
652 - <tbody>
653 - <tr class="link-rss-authentication-credentials" id="<?php print esc_attr( $linkRssCredentialsId ); ?>">
654 - <td><label><?php esc_html_e( 'user:' ); ?> <input type="text" name="link_rss_username"
655 - value="<?php print esc_attr( $params['username'] ); ?>" size="16"
656 - placeholder="username to access this feed" /></label></td>
657 - <td><label><?php esc_html_e( 'pass:' ); ?> <input type="text" name="link_rss_password"
658 - value="<?php print esc_attr( $params['password'] ); ?>" size="16"
659 - placeholder=<?php esc_html_e( 'password to access this feed' ); ?> /></label></td>
660 - <td class="link-rss-authentication-method" id="<?php print esc_attr( $linkRssAuthMethodId ); ?>"><label><?php esc_html_e( 'method' ); ?>: <select class="link-rss-auth-method" id="link-rss-auth-method" name="link_rss_auth_method" size="1">
661 -<?php foreach ( $authMethods as $value => $label ) : ?>
662 - <option value="<?php print esc_attr( $value ); ?>"<?php
663 - fwp_selected_flag( $value == $params['method'] );
664 - ?>><?php print esc_html( $label ); ?></option>
665 -<?php endforeach; ?>
666 - </select></label></td>
667 - </tr>
668 - </tbody>
669 - </table>
670 - </div>
671 -
672 - <script type="text/javascript">
673 - jQuery('<td><a class="add-remove remove-it" id="link-rss-userpass-remove<?php print esc_attr( $slug ); ?>" href="#"><span class="x">(X)</span> <?php esc_html_e( 'Remove' ); ?></a></td>')
674 - .appendTo('#<?php print esc_attr( $linkRssCredentialsId ); ?>' )
675 - .click( feedAuthenticationMethodUnPress );
676 - jQuery( '#link-rss-auth-method<?php print esc_attr( $slug ); ?>' ).change( feedAuthenticationMethod );
677 - feedAuthenticationMethod( {
678 - init: true,
679 - node: jQuery( '#<?php print esc_attr( $linkRssAuthId ); ?>' )
680 - } );
681 - </script>
682 -
683 - <?php
684 - endif;
685 - } /* FeedWordPressFeedsPage::display_authentication_credentials_box() */
686 -
687 - /**
688 - * Displays a box with information about a feed.
689 - *
690 - * @param object $page Current page object (?).
691 - * @param mixed|null $box A box inside this object.
692 - *
693 - * @uses get_categories()
694 - * @uses get_category()
695 - * @uses get_option()
696 - * @uses maybe_unserialize()
697 - * @uses FeedWordPress::link_category_id()
698 - */
699 - function feed_information_box( $page, $box = NULL ) {
700 - $link_rss_params = maybe_unserialize( $page->setting( 'query parameters', '' ) );
701 - if ( ! is_array( $link_rss_params ) ) :
702 - $link_rss_params = array();
703 - endif;
704 -
705 - if ( $page->for_feed_settings() ) :
706 - $info['name'] = esc_html( $page->link->link->link_name );
707 - $info['description'] = esc_html( $page->link->link->link_description );
708 - $info['url'] = esc_html( $page->link->link->link_url );
298 + return sprintf(__($caption), $updateWindow);
299 + } /* FeedWordPressFeedsPage::update_window_currently () */
300 +
301 + function feed_information_box ($page, $box = NULL) {
302 + global $wpdb;
303 + if ($page->for_feed_settings()) :
304 + $info['name'] = esc_html($page->link->link->link_name);
305 + $info['description'] = esc_html($page->link->link->link_description);
306 + $info['url'] = esc_html($page->link->link->link_url);
709 307 $rss_url = $page->link->link->link_rss;
710 308
711 - $hardcode['name'] = $page->link->hardcode( 'name' );
712 - $hardcode['description'] = $page->link->hardcode( 'description' );
713 - $hardcode['url'] = $page->link->hardcode( 'url' );
309 + $hardcode['name'] = $page->link->hardcode('name');
310 + $hardcode['description'] = $page->link->hardcode('description');
311 + $hardcode['url'] = $page->link->hardcode('url');
714 312 else :
715 313 $cat_id = FeedWordPress::link_category_id();
716 314
717 315 $params = array();
718 - $params['taxonomy'] = 'link_category';
316 + if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_USES_ARGS_TAXONOMY)) :
317 + $params['taxonomy'] = 'link_category';
318 + else :
319 + $params['type'] = 'link';
320 + endif;
719 321 $params['hide_empty'] = false;
720 - $results = get_categories( $params );
721 -
722 - /** var bool Guarantee that the Contributors category will be in the drop-down chooser, even if it is empty. */
322 + $results = get_categories($params);
323 +
324 + // Guarantee that the Contributors category will be in the drop-down chooser, even if it is empty.
723 325 $found_link_category_id = false;
724 - foreach ( $results as $row ) :
326 + foreach ($results as $row) :
725 327 // Normalize case
726 - if ( ! isset( $row->cat_id ) ) : $row->cat_id = $row->cat_ID; endif;
328 + if (!isset($row->cat_id)) : $row->cat_id = $row->cat_ID; endif;
727 329
728 - if ( $row->cat_id == $cat_id) : $found_link_category_id = true; endif;
330 + if ($row->cat_id == $cat_id) : $found_link_category_id = true; endif;
729 331 endforeach;
730 -
731 - if ( ! $found_link_category_id ) :
732 - $results[] = get_category( $cat_id );
332 +
333 + if (!$found_link_category_id) :
334 + $results[] = get_category($cat_id);
733 335 endif;
734 -
336 +
735 337 $info = array();
736 338 $rss_url = null;
737 339
738 - $hardcode['name'] = get_option( 'feedwordpress_hardcode_name' );
739 - $hardcode['description'] = get_option( 'feedwordpress_hardcode_description' );
740 - $hardcode['url'] = get_option( 'feedwordpress_hardcode_url' );
340 + $hardcode['name'] = get_option('feedwordpress_hardcode_name');
341 + $hardcode['description'] = get_option('feedwordpress_hardcode_description');
342 + $hardcode['url'] = get_option('feedwordpress_hardcode_url');
741 343 endif;
742 344
743 - /** @var bool Hide authentication (unused). */
744 - $hideAuth = false;
745 -
746 - $username = $this->setting( 'http username', NULL );
747 -
748 - if ( is_null( $username ) ) :
749 - $username = '';
750 - $hideAuth = true;
751 - endif;
752 -
753 - $password = $this->setting( 'http password', NULL );
754 - if ( is_null( $password ) ) :
755 - $password = '';
756 - endif;
757 -
758 - $auth = $this->setting( 'http auth method', NULL );
759 -
760 - if ( is_null( $auth ) or ( strlen( $auth ) == 0 ) ) :
761 - $auth = '-';
762 - $hideAuth = true;
763 - endif;
764 -
765 345 // Hey ho, let's go
766 -
767 346 ?>
768 347 <table class="edit-form">
769 348
770 - <?php if ( $page->for_feed_settings() ) : ?>
349 + <?php if ($page->for_feed_settings()) : ?>
771 350
772 351 <tr>
773 - <th scope="row"><?php esc_html_e( 'Feed URL:' ) ?></th>
774 - <td><a href="<?php echo esc_html( $rss_url ); ?>"><?php echo esc_html( $rss_url ); ?></a>
775 - (<a href="<?php echo esc_url( FEEDVALIDATOR_URI ); ?>?url=<?php echo urlencode( $rss_url ); ?>"
776 - title="<?php esc_html_e( 'Check feed' ); ?> &lt;<?php echo esc_html( $rss_url ); ?>&gt; <?php esc_html_e( 'for validity' ); ?>">validate</a>)
777 - <input type="submit" name="feedfinder" value="switch &rarr;" style="font-size:smaller" />
778 -
779 - <?php $this->display_authentication_credentials_box( array(
780 - 'username' => $username,
781 - 'password' => $password,
782 - 'method' => $auth,
783 - )
784 - );
785 - ?>
786 - <table id="link-rss-params">
787 - <tbody>
788 - <?php
789 - $link_rss_params['new'] = array( '', '' );
790 - $i = 0;
791 - foreach ( $link_rss_params as $index => $pair ) :
792 - ?>
793 - <tr class="link-rss-params-row" id="link-rss-params-<?php print esc_attr($index); ?>">
794 - <td><label><?php esc_html_e( 'Parameter' ); ?>: <input type="text" class="link_params_key"
795 - name="link_rss_params_key[<?php print esc_attr( $index ); ?>]" value="<?php print esc_html( $pair[0] ); ?>"
796 - size="5" style="width: 5em" placeholder="name" /></label></td>
797 - <td class="link-rss-params-value-cell"><label class="link_params_value_label">= <input type="text" class="link_params_value"
798 - name="link_rss_params_value[<?php print esc_attr( $index ); ?>]" value="<?php print esc_html( $pair[1] ); ?>"
799 - size="8" placeholder="value" /></label></td>
352 + <th scope="row"><?php _e('Feed URL:') ?></th>
353 + <td><a href="<?php echo esc_html($rss_url); ?>"><?php echo esc_html($rss_url); ?></a>
354 + (<a href="<?php echo FEEDVALIDATOR_URI; ?>?url=<?php echo urlencode($rss_url); ?>"
355 + title="Check feed &lt;<?php echo esc_html($rss_url); ?>&gt; for validity">validate</a>)
356 + <input type="submit" name="feedfinder" value="switch &rarr;" style="font-size:smaller" /></td>
800 357 </tr>
801 - <?php
802 - $i++;
803 - endforeach;
804 - ?>
805 - </tbody>
806 - </table>
807 358
808 - <div><input type="hidden" id="link-rss-params-num" name="link_rss_params_num" value="<?php print esc_attr($i); ?>" /></div>
809 -
810 - <script>
811 - function linkParamsRowRemove( element ) {
812 - jQuery( element ).closest( 'tr' ).fadeOut(
813 - 'slow',
814 - function () {
815 - jQuery( this ).remove();
816 - }
817 - );
818 - }
819 -
820 - jQuery('<td><a href="#" class="add-remove link-rss-params-remove"><span class="x">(X)</span> <?php esc_html_e( 'Remove' ); ?></a></td>' ).insertAfter( '.link-rss-params-value-cell' );
821 -
822 - jQuery( '#link-rss-params-new' ).hide();
823 - jQuery( '<a class="add-remove" id="link-rss-params-add" href="#"><span class="dashicons dashicons-plus fwp-no-underline"></span> <?php esc_html_e( 'Add a query parameter' ); ?></a>').insertAfter( '#link-rss-params' );
824 - jQuery( '#link-rss-params-add' ).click( function () {
825 - var next = jQuery( '#link-rss-params-num' ).val();
826 - var newRow = jQuery( '#link-rss-params-new' ).clone().attr( 'id', 'link-rss-params-' + next );
827 - newRow.find( '.link_params_key' ).attr( 'name', 'link_rss_params_key[' + next + ']' );
828 - newRow.find( '.link_params_value' ).attr( 'name', 'link_rss_params_value[' + next + ']' );
829 -
830 - newRow.find( '.link-rss-params-remove' ).click(
831 - function () {
832 - linkParamsRowRemove( this );
833 - return false;
834 - }
835 - );
836 -
837 - newRow.appendTo( '#link-rss-params' );
838 - newRow.show();
839 -
840 - // Update counter for next row.
841 - next++;
842 - jQuery( '#link-rss-params-num' ).val( next );
843 -
844 - return false;
845 - } );
846 - jQuery( '.link-rss-params-remove' ).click( function () {
847 - linkParamsRowRemove( this );
848 - return false;
849 - } );
850 - </script>
851 - </td>
852 - </tr>
853 -
854 359 <?php
855 360 $rows = array(
856 - "name" => __('Link Name'),
361 + "name" => __('Link Name'),
857 362 "description" => __('Short Description'),
858 - "url" => __('Homepage'),
363 + "url" => __('Homepage'),
859 364 );
860 - foreach ( $rows as $what => $label ) :
861 - $hardcode_name = sanitize_html_class( sprintf( 'hardcode_%s', $what ) );
862 - $hardcode_id = sanitize_html_class( sprintf( 'basics-hardcode-%s', $what ) );
863 - $hardcode_view_id = sanitize_html_class( sprintf( 'basics-%s-view', $what ) );
864 - $hardcode_edit_id = sanitize_html_class( sprintf( 'basics-%s-edit', $what ) );
365 + foreach ($rows as $what => $label) :
865 366 ?>
866 367 <tr>
867 - <th scope="row"><?php print esc_html( $label ); ?></th>
368 + <th scope="row"><?php print $label ?></th>
868 369 <td>
869 - <div id="<?php print esc_attr( $hardcode_edit_id ); ?>"><input type="text" name="link<?php print esc_attr( $what ); ?>"
870 - value="<?php echo esc_attr( $info[$what] ); ?>" style="width: 95%" /></div>
871 - <div id="<?php print esc_attr( $hardcode_view_id ); ?>">
872 - <?php if ( 'url' == $what ) : ?><a href="<?php print esc_url( $info[$what] ); ?>"><?php else : ?><strong><?php endif; ?>
873 - <?php print ( strlen( trim( $info[$what] ) ) > 0 ) ? esc_attr( $info[$what] ) : esc_attr__( '(none provided)' ); ?>
874 - <?php if ( 'url' == $what ) : ?></a><?php else : ?></strong><?php endif; ?></div>
875 -
370 + <div id="basics-<?php print $what; ?>-edit"><input type="text" name="link<?php print $what; ?>"
371 + value="<?php echo $info[$what]; ?>" style="width: 95%" /></div>
372 + <div id="basics-<?php print $what; ?>-view">
373 + <?php if ($what=='url') : ?><a href="<?php print $info[$what]; ?>"><?php else : ?><strong><?php endif; ?>
374 + <?php print (strlen(trim($info[$what])) > 0) ? $info[$what] : '(none provided)'; ?>
375 + <?php if ($what=='url') : ?></a><?php else : ?></strong><?php endif; ?></div>
376 +
876 377 <div>
877 - <label><input id="<?php print esc_attr( $hardcode_id ); ?>"
878 - type="radio" name="<?php print esc_attr( $hardcode_name ); ?>" value="no"
879 - <?php echo ( ('yes' == $hardcode[$what] ) ? '' : ' checked="checked"');?>
880 - onchange="contextual_appearance( 'basics-hardcode-<?php print esc_attr( $what ); ?>', '<?php print esc_attr( $hardcode_view_id ); ?>', '<?php print esc_attr( $hardcode_edit_id ); ?>', 'no', 'block', /*checkbox=*/ true )"
881 - /> <?php esc_html_e( 'Update automatically from feed' ); ?></label>
882 - <label><input type="radio" name="<?php print esc_attr( $hardcode_name ); ?>" value="yes"
883 - <?php echo ( ( 'yes' != $hardcode[$what] ) ? '' : ' checked="checked"' );?>
884 - onchange="contextual_appearance('<?php print esc_attr( $hardcode_id ); ?>', '<?php print esc_attr( $hardcode_view_id ); ?>', '<?php print esc_attr( $hardcode_edit_id ); ?>', 'no', 'block', /*checkbox=*/ true)"
885 - /> <?php esc_html_e( 'Edit manually' ); ?></label>
378 + <label><input id="basics-hardcode-<?php print $what; ?>"
379 + type="radio" name="hardcode_<?php print $what; ?>" value="no"
380 + <?php echo (($hardcode[$what]=='yes')?'':' checked="checked"');?>
381 + onchange="contextual_appearance('basics-hardcode-<?php print $what; ?>', 'basics-<?php print $what; ?>-view', 'basics-<?php print $what; ?>-edit', 'no', 'block', /*checkbox=*/ true)"
382 + /> Update automatically from feed</label>
383 + <label><input type="radio" name="hardcode_<?php print $what; ?>" value="yes"
384 + <?php echo (($hardcode[$what]!='yes')?'':' checked="checked"');?>
385 + onchange="contextual_appearance('basics-hardcode-<?php print $what; ?>', 'basics-<?php print $what; ?>-view', 'basics-<?php print $what; ?>-edit', 'no', 'block', /*checkbox=*/ true)"
386 + /> Edit manually</label>
886 387 </div>
887 388 </td>
888 389 </tr>
889 390 <?php
@@ -892,41 +393,41 @@
892 393
893 394 <?php else : ?>
894 395
895 396 <tr>
896 - <th scope="row"><?php esc_html_e( 'Syndicated Link category:' ); ?></th>
397 + <th scope="row">Syndicated Link category:</th>
897 398 <td><p><select name="syndication_category" size="1">
898 399 <?php
899 - foreach ( $results as $row ) :
400 + foreach ($results as $row) :
900 401 // Normalize case
901 - if ( ! isset( $row->cat_id ) ) : $row->cat_id = $row->cat_ID; endif;
402 + if (!isset($row->cat_id)) : $row->cat_id = $row->cat_ID; endif;
902 403
903 - echo "\n\t" . '<option value="' . esc_attr( $row->cat_id ) . '"';
904 - if ( $row->cat_id == $cat_id) :
905 - echo ' selected="selected"';
404 + echo "\n\t<option value=\"$row->cat_id\"";
405 + if ($row->cat_id == $cat_id) :
406 + echo " selected='selected'";
906 407 endif;
907 - echo '>' . esc_attr( $row->cat_id ) . ': ' . esc_html( $row->cat_name );
908 - echo '</option>' . "\n";
408 + echo ">$row->cat_id: ".esc_html($row->cat_name);
409 + echo "</option>\n";
909 410 endforeach;
910 411 ?></select></p>
911 - <p class="setting-description"><?php esc_html_e( 'FeedWordPress will syndicate the
912 - links placed under this link category.' ); ?></p>
412 + <p class="setting-description">FeedWordPress will syndicate the
413 + links placed under this link category.</p>
913 414 </td>
914 415 </tr>
915 -
416 +
916 417 <tr>
917 - <th scope="row"><?php esc_html_e( 'Link Names:' ); ?></th>
918 - <td><label><input type="checkbox" name="hardcode_name" value="no"<?php echo ( ( 'yes' == $hardcode['name'] )? '' : ' checked="checked"' );?>/> <?php esc_html_e( 'Update contributor titles automatically when the feed title changes' ); ?></label></td>
418 + <th scope="row">Link Names:</th>
419 + <td><label><input type="checkbox" name="hardcode_name" value="no"<?php echo (($hardcode['name']=='yes')?'':' checked="checked"');?>/> Update contributor titles automatically when the feed title changes</label></td>
919 420 </tr>
920 -
421 +
921 422 <tr>
922 - <th scope="row"><?php esc_html_e( 'Short descriptions:' ); ?></th>
923 - <td><label><input type="checkbox" name="hardcode_description" value="no"<?php echo ( ( 'yes' == $hardcode['description'] ) ? '' : ' checked="checked"' );?>/> <?php esc_html_e( 'Update contributor descriptions automatically when the feed tagline changes' ); ?></label></td>
423 + <th scope="row">Short descriptions:</th>
424 + <td><label><input type="checkbox" name="hardcode_description" value="no"<?php echo (($hardcode['description']=='yes')?'':' checked="checked"');?>/> Update contributor descriptions automatically when the feed tagline changes</label></td>
924 425 </tr>
925 -
426 +
926 427 <tr>
927 - <th scope="row"><?php esc_html_e( 'Homepages:' ); ?></th>
928 - <td><label><input type="checkbox" name="hardcode_url" value="no"<?php echo ( ( 'yes' == $hardcode['url'] ) ? '' : ' checked="checked"' );?>/> <?php esc_html_e( 'Update contributor homepages automatically when the feed link changes' ); ?></label></td>
428 + <th scope="row">Homepages:</th>
429 + <td><label><input type="checkbox" name="hardcode_url" value="no"<?php echo (($hardcode['url']=='yes')?'':' checked="checked"');?>/> Update contributor homepages automatically when the feed link changes</label></td>
929 430 </tr>
930 431
931 432 <?php endif; ?>
932 433
@@ -933,16 +434,15 @@
933 434 </table>
934 435 <?php
935 436 } /* FeedWordPressFeedsPage::feed_information_box() */
936 437
937 -
938 - function custom_settings_box( $page, $box = NULL ) {
939 - $postsSettings = $this->admin_page_href('posts-page.php', array(), $page->link);
438 + function custom_settings_box ($page, $box = NULL) {
940 439 ?>
941 440 <p class="setting-description">These custom settings are special fields for the <strong>feed</strong> you are
942 441 syndicating, to be retrieved in templates using the <code>get_feed_meta()</code> function. They do not create
943 442 custom fields on syndicated <strong>posts</strong>. If you want to create custom fields that are applied to each
944 - individual post from this feed, set up the settings in <a href="<?php print esc_url($postsSettings); ?>">Syndicated Posts</a>.</p>
443 + individual post from this feed, set up the settings in <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/posts-page.php&amp;link_id=<?php print $page->link->id; ?>">Syndicated Posts</a>.</p>
444 +
945 445 <div id="postcustomstuff">
946 446 <table id="meta-list" cellpadding="3">
947 447 <tr>
948 448 <th>Key</th>
@@ -948,19 +448,19 @@
948 448 <th>Key</th>
949 449 <th>Value</th>
950 450 <th>Action</th>
951 451 </tr>
952 -
452 +
953 453 <?php
954 454 $i = 0;
955 455 foreach ($page->link->settings as $key => $value) :
956 - if ( !preg_match("\007^((".implode(')|(', $page->special_settings)."))$\007i", $key)) :
456 + if (!preg_match("\007^((".implode(')|(', $page->special_settings)."))$\007i", $key)) :
957 457 ?>
958 458 <tr style="vertical-align:top">
959 - <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo esc_attr($i); ?>][key0]" value="<?php echo esc_html($key); ?>" />
960 - <input id="notes-<?php echo esc_attr($i); ?>-key" name="notes[<?php echo esc_attr($i); ?>][key1]" value="<?php echo esc_html($key); ?>" /></th>
961 - <td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo esc_attr($i); ?>-value" name="notes[<?php echo esc_attr($i); ?>][value]"><?php echo esc_html($value); ?></textarea></td>
962 - <td width="10%"><select name="notes[<?php echo esc_attr($i); ?>][action]">
459 + <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo esc_html($key); ?>" />
460 + <input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo esc_html($key); ?>" /></th>
461 + <td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo $i; ?>-value" name="notes[<?php echo $i; ?>][value]"><?php echo esc_html($value); ?></textarea></td>
462 + <td width="10%"><select name="notes[<?php echo $i; ?>][action]">
963 463 <option value="update">save changes</option>
964 464 <option value="delete">delete this setting</option>
965 465 </select></td>
966 466 </tr>
@@ -969,11 +469,11 @@
969 469 endif;
970 470 endforeach;
971 471 ?>
972 472 <tr>
973 - <th scope="row"><input type="text" size="10" name="notes[<?php echo esc_attr( $i ); ?>][key1]" value="" /></th>
974 - <td><textarea name="notes[<?php echo esc_attr( $i ); ?>][value]" rows="2" cols="40"></textarea></td>
975 - <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo esc_attr( $i ); ?>][action]" value="update" /></td>
473 + <th scope="row"><input type="text" size="10" name="notes[<?php echo $i; ?>][key1]" value="" /></th>
474 + <td><textarea name="notes[<?php echo $i; ?>][value]" rows="2" cols="40"></textarea></td>
475 + <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
976 476 </tr>
977 477 </table>
978 478 </div> <!-- id="postcustomstuff" -->
979 479 <?php
@@ -978,36 +478,13 @@
978 478 </div> <!-- id="postcustomstuff" -->
979 479 <?php
980 480 }
981 481
982 - function url_for_401 ($err) {
983 - $ret = NULL;
984 - if (is_wp_error($err)) :
985 - if ($err->get_error_code()=='http_request_failed') :
986 - $data = $err->get_error_data('http_request_failed');
987 -
988 - if (is_array($data) and isset($data['status'])) :
989 - if (401==$data['status']) :
990 - $ret = $data['uri'];
991 - endif;
992 - endif;
993 - endif;
994 - endif;
995 - return $ret;
996 - }
997 -
998 482 function display_feedfinder () {
999 - $lookup = FeedWordPress::param( 'lookup' );
483 + global $wpdb;
484 +
485 + $lookup = (isset($_REQUEST['lookup']) ? $_REQUEST['lookup'] : NULL);
1000 486
1001 - $auth = FeedWordPress::param( 'link_rss_auth_method' );
1002 - $username = FeedWordPress::param( 'link_rss_username' );
1003 - $password = FeedWordPress::param( 'link_rss_password' );
1004 - $credentials = array(
1005 - "authentication" => $auth,
1006 - "username" => $username,
1007 - "password" => $password,
1008 - );
1009 -
1010 487 $feeds = array(); $feedSwitch = false; $current = null;
1011 488 if ($this->for_feed_settings()) : // Existing feed?
1012 489 $feedSwitch = true;
1013 490 if (is_null($lookup)) :
@@ -1013,26 +490,22 @@
1013 490 if (is_null($lookup)) :
1014 491 // Switch Feed without a specific feed yet suggested
1015 492 // Go to the human-readable homepage to look for
1016 493 // auto-detection links
1017 -
1018 494 $lookup = $this->link->link->link_url;
1019 - $auth = $this->link->setting('http auth method');
1020 - $username = $this->link->setting('http username');
1021 - $password = $this->link->setting('http password');
1022 -
495 +
1023 496 // Guarantee that you at least have the option to
1024 497 // stick with what works.
1025 498 $current = $this->link->link->link_rss;
1026 499 $feeds[] = $current;
1027 500 endif;
1028 - $name = $this->link->link->link_name;
501 + $name = esc_html($this->link->link->link_name);
1029 502 else: // Or a new subscription to add?
1030 - $name = "Subscribe to ".feedwordpress_display_url($lookup);
503 + $name = "Subscribe to <code>".esc_html(feedwordpress_display_url($lookup))."</code>";
1031 504 endif;
1032 505 ?>
1033 506 <div class="wrap" id="feed-finder">
1034 - <h2>Feed Finder: <?php echo esc_html($name); ?></h2>
507 + <h2>Feed Finder: <?php echo $name; ?></h2>
1035 508
1036 509 <?php
1037 510 if ($feedSwitch) :
1038 511 $this->display_alt_feed_box($lookup);
@@ -1038,37 +511,23 @@
1038 511 $this->display_alt_feed_box($lookup);
1039 512 endif;
1040 513
1041 514 $finder = array();
1042 - if ( !is_null($current)) :
515 + if (!is_null($current)) :
1043 516 $finder[$current] = new FeedFinder($current);
1044 517 endif;
1045 518 $finder[$lookup] = new FeedFinder($lookup);
1046 -
519 +
1047 520 foreach ($finder as $url => $ff) :
1048 - $feeds = array_merge($feeds, $ff->find(
1049 - /*url=*/ NULL,
1050 - /*params=*/ $credentials));
521 + $feeds = array_merge($feeds, $ff->find());
1051 522 endforeach;
1052 -
523 +
1053 524 $feeds = array_values( // Renumber from 0..(N-1)
1054 - $feeds
525 + array_unique( // Eliminate duplicates
526 + $feeds
527 + )
1055 528 );
1056 529
1057 - // Allow for some simple FeedFinder results filtering
1058 - $feeds = apply_filters(
1059 - 'feedwordpress_feedfinder_results',
1060 - $feeds,
1061 - array(
1062 - "url" => $lookup,
1063 - "auth" => $auth,
1064 - "username" => $username,
1065 - "password" => $password,
1066 - "finder" => $finder,
1067 - ),
1068 - $this
1069 - );
1070 -
1071 530 if (count($feeds) > 0):
1072 531 if ($feedSwitch) :
1073 532 ?>
1074 533 <h3>Feeds Found</h3>
@@ -1076,9 +535,9 @@
1076 535 endif;
1077 536
1078 537 if (count($feeds) > 1) :
1079 538 $option_template = 'Option %d: ';
1080 - $form_class = 'multi';
539 + $form_class = ' class="multi"';
1081 540 ?>
1082 541 <p><strong>This web page provides at least <?php print count($feeds); ?> different feeds.</strong> These feeds may provide the same information
1083 542 in different formats, or may track different items. (You can check the Feed Information and the
1084 543 Sample Item for each feed to get an idea of what the feed provides.) Please select the feed that you'd like to subscribe to.</p>
@@ -1087,28 +546,12 @@
1087 546 $option_template = '';
1088 547 $form_class = '';
1089 548 endif;
1090 549
1091 - global $fwp_credentials;
1092 -
1093 550 foreach ($feeds as $key => $f):
1094 - $ofc = $fwp_credentials;
1095 - $fwp_credentials = $credentials; // Set
1096 - $pie = FeedWordPress::fetch($f, array("cache" => false));
1097 - $fwp_credentials = $ofc; // Re-Set
1098 -
551 + $pie = FeedWordPress::fetch($f);
1099 552 $rss = (is_wp_error($pie) ? $pie : new MagpieFromSimplePie($pie));
1100 553
1101 - if ($this->url_for_401($pie)) :
1102 - $this->display_alt_feed_box($lookup, array(
1103 - "err" => $pie,
1104 - "auth" => $auth,
1105 - "username" => $username,
1106 - "password" => $password
1107 - ));
1108 - continue;
1109 - endif;
1110 -
1111 554 if ($rss and !is_wp_error($rss)):
1112 555 $feed_link = (isset($rss->channel['link'])?$rss->channel['link']:'');
1113 556 $feed_title = (isset($rss->channel['title'])?$rss->channel['title']:$feed_link);
1114 557 $feed_type = ($rss->feed_type ? $rss->feed_type : 'Unknown');
@@ -1122,14 +565,14 @@
1122 565 $feed_version_template = '';
1123 566 $feed_version = '';
1124 567 endif;
1125 568 ?>
1126 - <form <?php fwp_form_class_attr($form_class); ?> action="<?php print esc_url( $this->form_action( 'syndication.php' ) ); ?>" method="post">
569 + <form<?php print $form_class; ?> action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication.php" method="post">
1127 570 <div class="inside"><?php FeedWordPressCompatibility::stamp_nonce('feedwordpress_switchfeed'); ?>
1128 571
1129 572 <?php
1130 573 $classes = array('feed-found'); $currentFeed = '';
1131 - if ( !is_null($current) and $current==$f) :
574 + if (!is_null($current) and $current==$f) :
1132 575 $classes[] = 'current';
1133 576 $currentFeed = ' (currently subscribed)';
1134 577 endif;
1135 578 if ($key%2) :
@@ -1135,10 +578,10 @@
1135 578 if ($key%2) :
1136 579 $classes[] = 'alt';
1137 580 endif;
1138 581 ?>
1139 - <fieldset class="<?php print esc_attr( implode(" ", $classes) ); ?>">
1140 - <legend><?php print esc_html( sprintf( $option_template, ( $key + 1 ) ) ); print esc_html($feed_type) . " "; print esc_html( sprintf( $feed_version_template, $feed_version ) ); ?> feed<?php print esc_html( $currentFeed ); ?></legend>
582 + <fieldset class="<?php print implode(" ", $classes); ?>">
583 + <legend><?php printf($option_template, ($key+1)); print $feed_type." "; printf($feed_version_template, $feed_version); ?> feed<?php print $currentFeed; ?></legend>
1141 584
1142 585 <?php
1143 586 $this->stamp_link_id();
1144 587
@@ -1144,9 +587,9 @@
1144 587
1145 588 // No feed specified = add new feed; we
1146 589 // need to pass along a starting title
1147 590 // and homepage URL for the new Link.
1148 - if ( ! $this->for_feed_settings()):
591 + if (!$this->for_feed_settings()):
1149 592 ?>
1150 593 <input type="hidden" name="feed_title" value="<?php echo esc_html($feed_title); ?>" />
1151 594 <input type="hidden" name="feed_link" value="<?php echo esc_html($feed_link); ?>" />
1152 595 <?php
@@ -1158,11 +601,11 @@
1158 601
1159 602 <div>
1160 603 <div class="feed-sample">
1161 604 <?php
1162 - $link = null;
1163 - $post = null;
1164 - if ( !is_wp_error($rss) && !empty($rss->items) && is_array($rss->items) ):
605 + $link = NULL;
606 + $post = NULL;
607 + if (!is_wp_error($rss) and count($rss->items) > 0):
1165 608 // Prepare to display Sample Item
1166 609 $link = new MagpieMockLink(array('simplepie' => $pie, 'magpie' => $rss), $f);
1167 610 $post = new SyndicatedPost(array('simplepie' => $rss->originals[0], 'magpie' => $rss->items[0]), $link);
1168 611 ?>
@@ -1167,13 +610,13 @@
1167 610 $post = new SyndicatedPost(array('simplepie' => $rss->originals[0], 'magpie' => $rss->items[0]), $link);
1168 611 ?>
1169 612 <h3>Sample Item</h3>
1170 613 <ul>
1171 - <li><strong>Title:</strong> <a href="<?php echo esc_url( $post->post['meta']['syndication_permalink'] ); ?>"><?php echo esc_html( $post->post['post_title'] ); ?></a></li>
1172 - <li><strong>Date:</strong> <?php print esc_html( date('d-M-y g:i:s a', $post->published() ) ); ?></li>
614 + <li><strong>Title:</strong> <a href="<?php echo $post->post['meta']['syndication_permalink']; ?>"><?php echo $post->post['post_title']; ?></a></li>
615 + <li><strong>Date:</strong> <?php print date('d-M-y g:i:s a', $post->published()); ?></li>
1173 616 </ul>
1174 617 <div class="entry">
1175 - <?php print wp_kses( $post->post['post_content'], 'post' ); ?>
618 + <?php print $post->post['post_content']; ?>
1176 619 </div>
1177 620 <?php
1178 621 do_action('feedwordpress_feed_finder_sample_item', $f, $post, $link);
1179 622 else:
@@ -1181,9 +624,9 @@
1181 624 print '<div class="feed-problem">';
1182 625 print "<h3>Problem:</h3>\n";
1183 626 print "<p>FeedWordPress encountered the following error
1184 627 when trying to retrieve this feed:</p>";
1185 - print '<p style="margin: 1.0em 3.0em"><code>' . esc_html( $rss->get_error_message() ) . '</code></p>';
628 + print '<p style="margin: 1.0em 3.0em"><code>'.$rss->get_error_message().'</code></p>';
1186 629 print "<p>If you think this is a temporary problem, you can still force FeedWordPress to add the subscription. FeedWordPress will not be able to find any syndicated posts until this problem is resolved.</p>";
1187 630 print "</div>";
1188 631 endif;
1189 632 ?>
@@ -1192,22 +635,17 @@
1192 635 <?php
1193 636 endif;
1194 637 ?>
1195 638 </div>
1196 -
639 +
1197 640 <div>
1198 641 <h3>Feed Information</h3>
1199 642 <ul>
1200 - <li><strong>Homepage:</strong> <a href="<?php echo esc_url( $feed_link ); ?>"><?php echo is_null( $feed_title )?'<em>Unknown</em>': esc_html( $feed_title ); ?></a></li>
1201 - <li><strong>Feed URL:</strong> <a title="<?php echo esc_html( $f ); ?>" href="<?php echo esc_url( $f ); ?>"><?php echo esc_html( feedwordpress_display_url($f, 40, 10) ); ?></a> (<a title="Check feed &lt;<?php echo esc_html( $f ); ?>&gt; for validity" href="http://feedvalidator.org/check.cgi?url=<?php echo urlencode( $f ); ?>">validate</a>)</li>
1202 - <li><strong>Encoding:</strong> <?php echo isset($rss->encoding) ? esc_html($rss->encoding) : "<em>Unknown</em>"; ?></li>
1203 - <li><strong>Description:</strong> <?php echo isset($rss->channel['description']) ? esc_html($rss->channel['description']) : "<em>Unknown</em>"; ?></li>
643 + <li><strong>Homepage:</strong> <a href="<?php echo $feed_link; ?>"><?php echo is_null($feed_title)?'<em>Unknown</em>':$feed_title; ?></a></li>
644 + <li><strong>Feed URL:</strong> <a title="<?php echo esc_html($f); ?>" href="<?php echo esc_html($f); ?>"><?php echo esc_html(feedwordpress_display_url($f, 40, 10)); ?></a> (<a title="Check feed &lt;<?php echo esc_html($f); ?>&gt; for validity" href="http://feedvalidator.org/check.cgi?url=<?php echo urlencode($f); ?>">validate</a>)</li>
645 + <li><strong>Encoding:</strong> <?php echo isset($rss->encoding)?esc_html($rss->encoding):"<em>Unknown</em>"; ?></li>
646 + <li><strong>Description:</strong> <?php echo isset($rss->channel['description'])?esc_html($rss->channel['description']):"<em>Unknown</em>"; ?></li>
1204 647 </ul>
1205 - <?php $this->display_authentication_credentials_box(array(
1206 - 'username' => $username,
1207 - 'password' => $password,
1208 - 'method' => $auth,
1209 - )); ?>
1210 648 <?php do_action('feedwordpress_feedfinder_form', $f, $post, $link, $this->for_feed_settings()); ?>
1211 649 <div class="submit"><input type="submit" class="button-primary" name="Use" value="&laquo; Use this feed" />
1212 650 <input type="submit" class="button" name="Cancel" value="× Cancel" /></div>
1213 651 </div>
@@ -1220,58 +658,39 @@
1220 658 unset($post);
1221 659 endforeach;
1222 660 else:
1223 661 foreach ($finder as $url => $ff) :
1224 - print '<h3>Searched for feeds at '. esc_html( $url ) . '</h3>' . "\n";
1225 - print '<p><strong>' . esc_html__( 'Error' ) . ':</strong> ' . esc_html__( 'FeedWordPress couldn\'t find any feeds at' ).' <code><a href="' . esc_url( $lookup ) . '">' . esc_html( $lookup ) . '</a></code>';
1226 - print '. ' . esc_html__( 'Try another URL' ) . '.</p>';
1227 -
662 + $url = esc_html($url);
663 + print "<h3>Searched for feeds at ${url}</h3>\n";
664 + print "<p><strong>".__('Error').":</strong> ".__("FeedWordPress couldn't find any feeds at").' <code><a href="'.htmlspecialchars($lookup).'">'.htmlspecialchars($lookup).'</a></code>';
665 + print ". ".__('Try another URL').".</p>";
666 +
1228 667 // Diagnostics
1229 668 print "<div class=\"updated\" style=\"margin-left: 3.0em; margin-right: 3.0em;\">\n";
1230 - print '<h3>' . esc_html__( 'Diagnostic information' ) . '</h3>' . "\n";
1231 - if ( !is_null($ff->error()) and strlen($ff->error()) > 0) :
1232 - print '<h4>'. esc_html__( 'HTTP request failure' ) . '</h4>' . "\n";
1233 - print '<p>' . esc_html( $ff->error() ) ."</p>\n";
669 + print "<h3>".__('Diagnostic information')."</h3>\n";
670 + if (!is_null($ff->error()) and strlen($ff->error()) > 0) :
671 + print "<h4>".__('HTTP request failure')."</h4>\n";
672 + print "<p>".$ff->error()."</p>\n";
1234 673 else :
1235 - print '<h4>' . esc_html__( 'HTTP request completed' ) . '</h4>' . "\n";
1236 - print '<p><strong>Status ' . esc_html( $ff->status() ) . ':</strong> '. esc_html( $this->HTTPStatusMessages[ (int) $ff->status() ] ) ."</p>\n";
674 + print "<h4>".__('HTTP request completed')."</h4>\n";
675 + print "<p><strong>Status ".$ff->status().":</strong> ".$this->HTTPStatusMessages[(int) $ff->status()]."</p>\n";
1237 676 endif;
1238 677
1239 678 // Do some more diagnostics if the API for it is available.
1240 - // Note to @radgeek: consider using a hook instead: https://developer.wordpress.org/reference/hooks/http_api_transports/ (gwyneth 20230920)
1241 - if ( function_exists( '_wp_http_get_object' ) ) :
679 + if (function_exists('_wp_http_get_object')) :
1242 680 $httpObject = _wp_http_get_object();
1243 -
1244 - /*
1245 - // _getTransport() was totally deprecated (gwyneth 20230920)
1246 - if (is_callable(array($httpObject, '_getTransport'))) :
1247 -
1248 - $transports = $httpObject->_getTransport();
1249 -
1250 - print "<h4>".__('HTTP Transports available').":</h4>\n";
1251 - print "<ol>\n";
1252 - print "<li>".implode("</li>\n<li>", array_map('get_class', $transports))."</li>\n";
1253 - print "</ol>\n";
1254 - else
1255 - */
1256 - if ( is_callable( array( $httpObject, '_get_first_available_transport' ) ) ) :
1257 - $transport = $httpObject->_get_first_available_transport(
1258 - array(),
1259 - $url
1260 - );
1261 -
1262 - print "<h4>" . esc_html__("HTTP Transport") . ":</h4>\n";
1263 - print "<ol>\n";
1264 - print "<li>" . esc_html( MyPHP::val($transport) ) . "</li>\n";
1265 - print "</ol>\n";
1266 - endif;
1267 -
681 + $transports = $httpObject->_getTransport();
682 +
683 + print "<h4>".__('HTTP Transports available').":</h4>\n";
684 + print "<ol>\n";
685 + print "<li>".implode("</li>\n<li>", array_map('get_class', $transports))."</li>\n";
686 + print "</ol>\n";
1268 687 print "</div>\n";
1269 688 endif;
1270 689 endforeach;
1271 690 endif;
1272 -
1273 - if ( ! $feedSwitch) :
691 +
692 + if (!$feedSwitch) :
1274 693 $this->display_alt_feed_box($lookup, /*alt=*/ true);
1275 694 endif;
1276 695 ?>
1277 696 </div> <!-- class="wrap" -->
@@ -1278,40 +697,19 @@
1278 697 <?php
1279 698 return false; // Don't continue
1280 699 } /* FeedWordPressFeedsPage::display_feedfinder() */
1281 700
1282 - function display_alt_feed_box ($lookup, $params = false)
1283 - {
1284 - if (is_bool($params)) :
1285 - $params = array("alt" => $params);
1286 - endif;
1287 -
1288 - $params = wp_parse_args($params, array( // Defaults
1289 - "alt" => false,
1290 - "err" => NULL,
1291 - "auth" => NULL,
1292 - "password" => NULL,
1293 - "username" => NULL,
1294 - ));
1295 - $alt = $params['alt'];
1296 -
701 + function display_alt_feed_box ($lookup, $alt = false) {
702 + global $fwp_post;
1297 703 ?>
1298 - <form action="<?php print esc_url( $this->form_action('syndication.php') ); ?>" method="post">
704 + <form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
1299 705 <div class="inside"><?php
1300 - FeedWordPressCompatibility::stamp_nonce('feedwordpress_feeds');
706 + FeedWordPressCompatibility::stamp_nonce($this->dispatch);
1301 707 ?>
1302 708 <fieldset class="alt"
1303 - <?php if ( ! $alt): ?>style="margin: 1.0em 3.0em; font-size: smaller;"<?php endif; ?>>
709 + <?php if (!$alt): ?>style="margin: 1.0em 3.0em; font-size: smaller;"<?php endif; ?>>
1304 710 <legend><?php if ($alt) : ?>Alternative feeds<?php else: ?>Find feeds<?php endif; ?></legend>
1305 711 <?php if ($alt) : ?><h3>Use a different feed</h3><?php endif; ?>
1306 - <?php if (is_wp_error($params['err'])) :
1307 - ?>
1308 - <p><em><strong>401 Not Authorized.</strong> This URL may require
1309 - a username and password to access it.</em> You may want to add login
1310 - credentials below and check it again.</p>
1311 - <?php
1312 - endif;
1313 - ?>
1314 712 <div><label>Address:
1315 713 <input type="text" name="lookup" id="use-another-feed"
1316 714 placeholder="URL"
1317 715 <?php if (is_null($lookup)) : ?>
@@ -1322,55 +720,25 @@
1322 720 size="64" style="max-width: 80%" /></label>
1323 721 <?php if (is_null($lookup)) : ?>
1324 722 <?php FeedWordPressSettingsUI::magic_input_tip_js('use-another-feed'); ?>
1325 723 <?php endif; ?>
1326 -
1327 724 <?php $this->stamp_link_id('link_id'); ?>
1328 725 <input type="hidden" name="action" value="feedfinder" />
1329 726 <input type="submit" class="button<?php if ($alt): ?>-primary<?php endif; ?>" value="Check &raquo;" /></div>
1330 -
1331 - <?php $this->display_authentication_credentials_box(array(
1332 - 'username' => $params['username'],
1333 - 'password' => $params['password'],
1334 - 'method' => $params['auth'],
1335 - )); ?>
1336 -
1337 727 <p>This can be the address of a feed, or of a website. FeedWordPress
1338 728 will try to automatically detect any feeds associated with a
1339 729 website.</p>
1340 730 </div> <!-- class="inside" -->
1341 731 </fieldset></form>
1342 -
732 +
1343 733 <?php
1344 734 } /* FeedWordPressFeedsPage::display_alt_feed_box() */
1345 -
1346 - function save_settings () {
735 +
736 + function save_settings ($post) {
1347 737 if ($this->for_feed_settings()) :
1348 - $params_key = FeedWordPress::post( 'link_rss_params_key', array() );
1349 -
1350 - if ( is_array( $params_key ) && count($params_key) > 0 ) :
1351 - $params_values = FeedWordPress::post( 'link_rss_params_value', array() );
1352 - $qp = array();
1353 - foreach ( $params_key as $index => $key ) :
1354 - if (strlen($key) > 0) :
1355 -
1356 - if ( isset( $params_values[ $index ] ) ) :
1357 -
1358 - $params_value = $params_values[ $index ];
1359 - if ( strlen($params_value) > 0 ) :
1360 - $qp[] = array( $key, $params_value );
1361 - endif;
1362 - endif;
1363 - endif;
1364 - endforeach;
1365 - $this->update_setting('query parameters', serialize($qp));
1366 -
1367 - endif;
1368 -
1369 738 // custom feed settings first
1370 - $param_notes = FeedWordPress::post( 'notes', array() );
1371 - foreach ( $param_notes as $mn ) :
1372 - $mn['key0'] = ( isset($mn['key0']) ? trim($mn['key0']) : null );
739 + foreach ($post['notes'] as $mn) :
740 + $mn['key0'] = (isset($mn['key0']) ? trim($mn['key0']) : NULL);
1373 741 $mn['key1'] = trim($mn['key1']);
1374 742 if (preg_match("\007^(("
1375 743 .implode(')|(',$this->special_settings)
1376 744 ."))$\007i",
@@ -1380,138 +748,66 @@
1380 748
1381 749 if (strlen($mn['key0']) > 0) :
1382 750 unset($this->link->settings[$mn['key0']]); // out with the old
1383 751 endif;
1384 -
752 +
1385 753 if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) :
1386 754 $this->link->settings[$mn['key1']] = $mn['value']; // in with the new
1387 755 endif;
1388 756 endforeach;
1389 -
757 +
1390 758 // now stuff through the web form
1391 759 // hardcoded feed info
1392 -
760 +
1393 761 foreach (array('name', 'description', 'url') as $what) :
1394 762 // We have a checkbox for "No," so if it's unchecked, mark as "Yes."
1395 - $this->link->settings["hardcode {$what}"] = FeedWordPress::post( "hardcode_{$what}", 'yes' );
763 + $this->link->settings["hardcode {$what}"] = (isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes');
1396 764 if (FeedWordPress::affirmative($this->link->settings, "hardcode {$what}")) :
1397 - $this->link->link->{'link_'.$what} = FeedWordPress::post( 'link' . $what );
765 + $this->link->link->{'link_'.$what} = $post['link'.$what];
1398 766 endif;
1399 767 endforeach;
1400 -
768 +
1401 769 // Update scheduling
1402 - $update_schedule = FeedWordPress::post( 'update_schedule' );
1403 - if ( ! is_null( $update_schedule ) ) :
1404 - $this->link->settings['update/hold'] = $update_schedule;
770 + if (isset($post['update_schedule'])) :
771 + $this->link->settings['update/hold'] = $post['update_schedule'];
1405 772 endif;
1406 773
1407 - $use_default_update_window = FeedWordPress::post( 'use_default_update_window' );
1408 - $update_window = FeedWordPress::post( 'update_window' );
1409 - if ( FeedWordPress::affirmative( $use_default_update_window ) ) :
774 + if (isset($post['use_default_update_window']) and strtolower($post['use_default_update_window'])=='yes') :
1410 775 unset($this->link->settings['update/window']);
1411 - elseif ( ! is_null( $update_window ) ) :
1412 - $update_window = intval( $update_window );
1413 - if ( $update_window > 0 ) :
1414 - $this->link->settings['update/window'] = $update_window;
776 + elseif (isset($post['update_window'])):
777 + if ((int) $post['update_window'] > 0) :
778 + $this->link->settings['update/window'] = (int) $post['update_window'];
1415 779 endif;
1416 780 endif;
1417 -
781 +
1418 782 else :
1419 783 // Global
1420 - update_option('feedwordpress_cat_id', FeedWordPress::post( 'syndication_category' ) );
1421 -
1422 - $automatic_updates = FeedWordPress::post( 'automatic_updates' );
1423 - if ( ! in_array( $automatic_updates, array( 'init', 'shutdown' ) ) ) :
1424 - $automatic_updates = null;
784 + update_option('feedwordpress_cat_id', $post['syndication_category']);
785 +
786 + if (!isset($post['automatic_updates']) or !in_array($post['automatic_updates'], array('init', 'shutdown'))) :
787 + $automatic_updates = false;
788 + else :
789 + $automatic_updates = $post['automatic_updates'];
1425 790 endif;
1426 791 update_option('feedwordpress_automatic_updates', $automatic_updates);
1427 792
1428 - $update_window = FeedWordPress::post( 'update_window' );
1429 - if ( ! is_null( $update_window ) ) :
1430 - $update_window = intval( $update_window );
1431 - if ( $update_window > 0 ) :
1432 - update_option( 'feedwordpress_update_window', $update_window );
793 + if (isset($post['update_window'])):
794 + if ((int) $post['update_window'] > 0) :
795 + update_option('feedwordpress_update_window', (int) $post['update_window']);
1433 796 endif;
1434 797 endif;
1435 798
1436 - $update_time_limit = FeedWordPress::post( 'update_time_limit' );
1437 - $time_limit_seconds = 0;
1438 - if ( FeedWordPress::affirmative( $update_time_limit ) ) :
1439 - $time_limit_seconds = intval( FeedWordPress::post( 'time_limit_seconds' ) );
1440 - endif;
1441 - update_option( 'feedwordpress_update_time_limit', $time_limit_seconds );
799 + update_option('feedwordpress_update_time_limit', ($post['update_time_limit']=='yes')?(int) $post['time_limit_seconds']:0);
1442 800
1443 801 foreach (array('name', 'description', 'url') as $what) :
1444 802 // We have a checkbox for "No," so if it's unchecked, mark as "Yes."
1445 - $hardcode = FeedWordPress::post( "hardcode_{$what}", 'yes' );
1446 - update_option( "feedwordpress_hardcode_{$what}", $hardcode );
803 + $hardcode = (isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes');
804 + update_option("feedwordpress_hardcode_{$what}", $hardcode);
1447 805 endforeach;
1448 -
1449 806 endif;
1450 -
1451 - $update_pause = FeedWordPress::post( 'update_pause' );
1452 - if ( ! is_null( $update_pause ) ) :
1453 - $this->update_setting( 'update/pause', $update_pause );
1454 - endif;
1455 -
1456 - $fetch_timeout = FeedWordPress::post( 'fetch_timeout' );
1457 - if ( ! is_null( $fetch_timeout ) ) :
1458 - $fetch_timeout_default = FeedWordPress::post( 'fetch_timeout_default' );
1459 - if ( FeedWordPress::affirmative( $fetch_timeout_default ) ) :
1460 - $fetch_timeout = null;
1461 - endif;
1462 -
1463 - if ( is_int( $fetch_timeout ) ) :
1464 - $fetch_timeout = intval( $fetch_timeout );
1465 - endif;
1466 - $this->update_setting( 'fetch timeout', $fetch_timeout );
1467 - endif;
1468 -
1469 - $update_incremental = FeedWordPress::post( 'update_incremental' );
1470 - if ( ! is_null( $update_incremental ) ) :
1471 - $this->update_setting( 'update_incremental', $update_incremental );
1472 - endif;
1473 -
1474 - $tombstones = FeedWordPress::post( 'tombstones' );
1475 - if ( ! is_null( $tombstones ) ) :
1476 - $this->update_setting('tombstones', $tombstones );
1477 - endif;
1478 -
1479 - $update_minimum = FeedWordPress::post( 'update_minimum' );
1480 - if ( ! is_null( $update_minimum ) ) :
1481 - $this->update_setting( 'update/minimum', $update_minimum );
1482 - endif;
1483 -
1484 - $link_rss_auth_method = FeedWordPress::post( 'link_rss_auth_method' );
1485 - if (
1486 - ! $link_rss_auth_method
1487 - || '-' == $link_rss_auth_method
1488 - ) :
1489 - $link_rss_auth_method = null;
1490 - endif;
1491 - $this->update_setting( 'http auth method', $link_rss_auth_method );
1492 -
1493 - $link_rss_username = FeedWordPress::post( 'link_rss_username' );
1494 - if (
1495 - ! $link_rss_username
1496 - || is_null( $link_rss_auth_method )
1497 - ) :
1498 - $link_rss_username = null;
1499 - endif;
1500 - $this->update_setting( 'http username', $link_rss_username );
1501 -
1502 - $link_rss_password = FeedWordPress::post( 'link_rss_password' );
1503 - if (
1504 - strlen( $link_rss_password ) == 0
1505 - || is_null( $link_rss_auth_method )
1506 - ) :
1507 - $link_rss_password = null;
1508 - endif;
1509 - $this->update_setting( 'http password', $link_rss_password );
1510 -
1511 - $this->updatedPosts->accept_POST();
1512 -
1513 - parent::save_settings();
807 +
808 + $this->updatedPosts->accept_POST($post);
809 + parent::save_settings($post);
1514 810 } /* FeedWordPressFeedsPage::save_settings() */
1515 811
1516 812 } /* class FeedWordPressFeedsPage */
1517 813