| @@ -1,8 +1,9 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | require_once(dirname(__FILE__) . '/admin-ui.php'); |
| 3 | 3 | require_once(dirname(__FILE__) . '/magpiemocklink.class.php'); |
| 4 | 4 | require_once(dirname(__FILE__) . '/feedfinder.class.php'); |
| 5 | +require_once(dirname(__FILE__) . '/updatedpostscontrol.class.php'); | |
| 5 | 6 | |
| 6 | 7 | class FeedWordPressFeedsPage extends FeedWordPressAdminPage { |
| 7 | 8 | var $HTTPStatusMessages = array ( |
| 8 | 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.', |
| @@ -43,166 +44,147 @@ | ||
| 43 | 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.', |
| 44 | 45 | 504 => 'Gateway Timeout', |
| 45 | 46 | 505 => 'HTTP Version Not Supported', |
| 46 | 47 | ); |
| 48 | + var $updatedPosts = NULL; | |
| 47 | 49 | |
| 48 | - /** | |
| 49 | - * Constructs the Feeds page object | |
| 50 | - * | |
| 51 | - * @param mixed $link An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings | |
| 52 | - */ | |
| 53 | - function FeedWordPressFeedsPage ($link = -1) { | |
| 54 | - if (is_numeric($link) and -1 == $link) : | |
| 55 | - $link = FeedWordPressAdminPage::submitted_link(); | |
| 56 | - endif; | |
| 57 | - | |
| 58 | - FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpressfeeds', $link); | |
| 59 | - | |
| 60 | - $this->dispatch = get_class($this); | |
| 61 | - $this->filename = __FILE__; | |
| 62 | - } /* FeedWordPressFeedsPage constructor */ | |
| 63 | - | |
| 64 | 50 | var $special_settings = array ( /* Regular expression syntax is OK here */ |
| 65 | 51 | 'cats', |
| 66 | 52 | 'cat_split', |
| 53 | + 'fetch timeout', | |
| 54 | + 'freeze updates', | |
| 67 | 55 | 'hardcode name', |
| 68 | 56 | 'hardcode url', |
| 69 | 57 | 'hardcode description', |
| 70 | 58 | 'hardcode categories', /* Deprecated */ |
| 71 | - 'post status', | |
| 72 | 59 | 'comment status', |
| 60 | + 'terms', | |
| 61 | + 'map authors', | |
| 62 | + 'munge permalink', | |
| 73 | 63 | 'ping status', |
| 64 | + 'post status', | |
| 65 | + 'postmeta', | |
| 66 | + 'query parameters', | |
| 67 | + 'resolve relative', | |
| 68 | + 'syndicated post type', | |
| 69 | + 'tags', | |
| 74 | 70 | 'unfamiliar author', |
| 75 | 71 | 'unfamliar categories', /* Deprecated */ |
| 76 | 72 | 'unfamiliar category', |
| 77 | - 'map authors', | |
| 78 | - 'tags', | |
| 79 | - 'postmeta', | |
| 73 | + 'unfamiliar post_tag', | |
| 74 | + 'add/.*', | |
| 80 | 75 | 'update/.*', |
| 81 | 76 | 'feed/.*', |
| 82 | 77 | 'link/.*', |
| 78 | + 'match/.*', | |
| 83 | 79 | ); |
| 84 | 80 | |
| 81 | + /** | |
| 82 | + * Constructs the Feeds page object | |
| 83 | + * | |
| 84 | + * @param mixed $link An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings | |
| 85 | + */ | |
| 86 | + function FeedWordPressFeedsPage ($link = -1) { | |
| 87 | + if (is_numeric($link) and -1 == $link) : | |
| 88 | + $link = FeedWordPressAdminPage::submitted_link(); | |
| 89 | + endif; | |
| 90 | + | |
| 91 | + FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpressfeeds', $link); | |
| 92 | + | |
| 93 | + $this->dispatch = 'feedwordpress_admin_page_feeds'; | |
| 94 | + $this->pagenames = array( | |
| 95 | + 'default' => 'Feeds', | |
| 96 | + 'settings-update' => 'Syndicated feed', | |
| 97 | + 'open-sheet' => 'Feed and Update', | |
| 98 | + ); | |
| 99 | + $this->filename = __FILE__; | |
| 100 | + $this->updatedPosts = new UpdatedPostsControl($this); | |
| 101 | + | |
| 102 | + $this->special_settings = apply_filters('syndicated_feed_special_settings', $this->special_settings, $this); | |
| 103 | + } /* FeedWordPressFeedsPage constructor */ | |
| 104 | + | |
| 85 | 105 | function display () { |
| 86 | - global $wpdb; | |
| 87 | 106 | global $fwp_post; |
| 88 | 107 | global $post_source; |
| 89 | - | |
| 90 | - if (FeedWordPress::needs_upgrade()) : | |
| 91 | - fwp_upgrade_page(); | |
| 92 | - return; | |
| 93 | - endif; | |
| 94 | 108 | |
| 109 | + $this->boxes_by_methods = array( | |
| 110 | + 'feed_information_box' => __('Feed Information'), | |
| 111 | + 'global_feeds_box' => __('Update Scheduling'), | |
| 112 | + 'updated_posts_box' => __('Updated Posts'), | |
| 113 | + 'custom_settings_box' => __('Custom Feed Settings (for use in templates)'), | |
| 114 | + 'fetch_settings_box' => __('Settings for Fetching Feeds (Advanced)'), | |
| 115 | + ); | |
| 116 | + if ($this->for_default_settings()) : | |
| 117 | + unset($this->boxes_by_methods['custom_settings_box']); | |
| 118 | + endif; | |
| 119 | + | |
| 95 | 120 | // Allow overriding of normal source for FeedFinder, which may |
| 96 | 121 | // be called from multiple points. |
| 97 | 122 | if (isset($post_source) and !is_null($post_source)) : |
| 98 | 123 | $source = $post_source; |
| 99 | 124 | else : |
| 100 | - $source = get_class($this); | |
| 125 | + $source = $this->dispatch; | |
| 101 | 126 | endif; |
| 102 | 127 | |
| 103 | - // If this is a POST, validate source and user credentials | |
| 104 | - FeedWordPressCompatibility::validate_http_request(/*action=*/ $source, /*capability=*/ 'manage_links'); | |
| 105 | - | |
| 106 | 128 | if (isset($_REQUEST['feedfinder']) |
| 107 | 129 | or (isset($_REQUEST['action']) and $_REQUEST['action']=='feedfinder') |
| 108 | 130 | or (isset($_REQUEST['action']) and $_REQUEST['action']==FWP_SYNDICATE_NEW)) : |
| 131 | + // If this is a POST, validate source and user credentials | |
| 132 | + FeedWordPressCompatibility::validate_http_request(/*action=*/ $source, /*capability=*/ 'manage_links'); | |
| 133 | + | |
| 109 | 134 | return $this->display_feedfinder(); // re-route to Feed Finder page |
| 110 | - else : | |
| 111 | - if (strtoupper($_SERVER['REQUEST_METHOD'])=='POST') : | |
| 112 | - $this->accept_POST($fwp_post); | |
| 113 | - do_action('feedwordpress_admin_page_feeds_save', $GLOBALS['fwp_post'], $this); | |
| 114 | - endif; | |
| 115 | - | |
| 116 | - //////////////////////////////////////////////// | |
| 117 | - // Prepare settings page /////////////////////// | |
| 118 | - //////////////////////////////////////////////// | |
| 119 | - | |
| 120 | - $this->ajax_interface_js(); | |
| 121 | - $this->display_update_notice_if_updated('Syndicated feed'); | |
| 122 | - $this->open_sheet('Feed and Update'); | |
| 123 | - ?> | |
| 124 | - <div id="post-body"> | |
| 125 | - <?php | |
| 126 | - //////////////////////////////////////////////// | |
| 127 | - // Display settings boxes ////////////////////// | |
| 128 | - //////////////////////////////////////////////// | |
| 129 | - | |
| 130 | - $boxes_by_methods = array( | |
| 131 | - 'feed_information_box' => __('Feed Information'), | |
| 132 | - 'global_feeds_box' => __('Update Scheduling'), | |
| 133 | - 'posts_box' => __('Syndicated Posts, Links, Comments & Pings'), | |
| 134 | - 'authors_box' => __('Syndicated Authors'), | |
| 135 | - 'categories_box' => __('Categories'.FEEDWORDPRESS_AND_TAGS), | |
| 136 | - 'custom_settings_box' => __('Custom Feed Settings (for use in templates)'), | |
| 137 | - ); | |
| 138 | - if ($this->for_default_settings()) : | |
| 139 | - unset($boxes_by_methods['custom_settings_box']); | |
| 140 | - endif; | |
| 141 | - | |
| 142 | - foreach ($boxes_by_methods as $method => $row) : | |
| 143 | - if (is_array($row)) : | |
| 144 | - $id = $row['id']; | |
| 145 | - $title = $row['title']; | |
| 146 | - else : | |
| 147 | - $id = 'feedwordpress_'.$method; | |
| 148 | - $title = $row; | |
| 149 | - endif; | |
| 150 | - | |
| 151 | - fwp_add_meta_box( | |
| 152 | - /*id=*/ $id, | |
| 153 | - /*title=*/ $title, | |
| 154 | - /*callback=*/ array(get_class($this), $method), | |
| 155 | - /*page=*/ $this->meta_box_context(), | |
| 156 | - /*context=*/ $this->meta_box_context() | |
| 157 | - ); | |
| 158 | - endforeach; | |
| 159 | - do_action('feedwordpress_admin_page_feeds_meta_boxes', $this); | |
| 160 | - ?> | |
| 161 | - <div class="metabox-holder"> | |
| 162 | - <?php | |
| 163 | - fwp_do_meta_boxes($this->meta_box_context(), $this->meta_box_context(), $this); | |
| 164 | - ?> | |
| 165 | - </div> <!-- class="metabox-holder" --> | |
| 166 | - </div> <!-- id="post-body" --> | |
| 167 | - <?php $this->close_sheet(); ?> | |
| 135 | + endif; | |
| 168 | 136 | |
| 169 | - <script type="text/javascript"> | |
| 170 | - var els = ['name', 'description', 'url']; | |
| 171 | - for (var i = 0; i < els.length; i++) { | |
| 172 | - contextual_appearance( | |
| 173 | - /*item=*/ 'basics-hardcode-'+els[i], | |
| 174 | - /*appear=*/ 'basics-'+els[i]+'-view', | |
| 175 | - /*disappear=*/ 'basics-'+els[i]+'-edit', | |
| 176 | - /*value=*/ 'no', | |
| 177 | - /*visibleStyle=*/ 'block', | |
| 178 | - /*checkbox=*/ true | |
| 179 | - ); | |
| 180 | - } /* for */ | |
| 181 | - </script> | |
| 182 | - <?php | |
| 183 | - endif; | |
| 137 | + parent::display(); | |
| 184 | 138 | return false; // Don't continue |
| 185 | 139 | } /* FeedWordPressFeedsPage::display() */ |
| 186 | 140 | |
| 187 | - /*static*/ function global_feeds_box ($page, $box = NULL) { | |
| 188 | - global $wpdb; | |
| 141 | + function ajax_interface_js () { | |
| 142 | + FeedWordPressAdminPage::ajax_interface_js(); | |
| 143 | + ?> | |
| 189 | 144 | |
| 190 | - $defaultUpdateWindow = get_option('feedwordpress_update_window'); | |
| 191 | - if (!is_numeric($defaultUpdateWindow)) : | |
| 192 | - $defaultUpdateWindow = DEFAULT_UPDATE_PERIOD; | |
| 193 | - else : | |
| 194 | - $defaultUpdateWindow = (int) $defaultUpdateWindow; | |
| 195 | - endif; | |
| 145 | + jQuery(document).ready( function () { | |
| 146 | + contextual_appearance('automatic-updates-selector', 'cron-job-explanation', null, 'no'); | |
| 147 | + contextual_appearance('time-limit', 'time-limit-box', null, 'yes'); | |
| 148 | + contextual_appearance('use-default-update-window-no', 'update-scheduling-note', null, null, 'block', true); | |
| 149 | + jQuery('#use-default-update-window-yes, #use-default-update-window-no').click( function () { | |
| 150 | + contextual_appearance('use-default-update-window-no', 'update-scheduling-note', null, null, 'block', true); | |
| 151 | + } ); | |
| 152 | + | |
| 153 | + var els = ['name', 'description', 'url']; | |
| 154 | + for (var i = 0; i < els.length; i++) { | |
| 155 | + contextual_appearance( | |
| 156 | + /*item=*/ 'basics-hardcode-'+els[i], | |
| 157 | + /*appear=*/ 'basics-'+els[i]+'-view', | |
| 158 | + /*disappear=*/ 'basics-'+els[i]+'-edit', | |
| 159 | + /*value=*/ 'no', | |
| 160 | + /*visibleStyle=*/ 'block', | |
| 161 | + /*checkbox=*/ true | |
| 162 | + ); | |
| 163 | + } /* for */ | |
| 164 | + } ); | |
| 165 | + | |
| 166 | + <?php | |
| 167 | + } | |
| 168 | + | |
| 169 | + /*static*/ function updated_posts_box ($page, $box = NULL) { | |
| 196 | 170 | ?> |
| 197 | - | |
| 198 | 171 | <table class="edit-form"> |
| 172 | + <?php $page->updatedPosts->display(); ?> | |
| 173 | + </table> | |
| 199 | 174 | <?php |
| 200 | - if ($page->for_default_settings()) : | |
| 201 | - $automatic_updates = get_option('feedwordpress_automatic_updates'); | |
| 202 | - $update_time_limit = (int) get_option('feedwordpress_update_time_limit'); | |
| 175 | + } /* FeedWordPressFeedsPage::updated_posts_box() */ | |
| 176 | + | |
| 177 | + /*static*/ function global_feeds_box ($page, $box = NULL) { | |
| 178 | + $automatic_updates = get_option('feedwordpress_automatic_updates'); | |
| 179 | + $update_time_limit = (int) get_option('feedwordpress_update_time_limit'); | |
| 180 | + | |
| 181 | + // Hey, ho, let's go... | |
| 203 | 182 | ?> |
| 204 | 183 | |
| 184 | + <table class="edit-form"> | |
| 185 | + <?php if ($page->for_default_settings()) : ?> | |
| 186 | + | |
| 205 | 187 | <tr> |
| 206 | 188 | <th scope="row">Updates:</th> |
| 207 | 189 | <td><select id="automatic-updates-selector" name="automatic_updates" size="1" onchange="contextual_appearance('automatic-updates-selector', 'cron-job-explanation', null, 'no');"> |
| 208 | 190 | <option value="shutdown"<?php echo ($automatic_updates=='shutdown')?' selected="selected"':''; ?>>automatically check for updates after pages load</option> |
| @@ -211,11 +193,11 @@ | ||
| 211 | 193 | </select> |
| 212 | 194 | <div id="cron-job-explanation" class="setting-description"> |
| 213 | 195 | <p>If you want to use a cron job, |
| 214 | 196 | you can perform scheduled updates by sending regularly-scheduled |
| 215 | - requests to <a href="<?php bloginfo('home'); ?>?update_feedwordpress=1"><code><?php bloginfo('home') ?>?update_feedwordpress=1</code></a> | |
| 197 | + requests to <a href="<?php bloginfo('home'); ?>?update_feedwordpress=1"><code><?php bloginfo('url') ?>?update_feedwordpress=1</code></a> | |
| 216 | 198 | For example, inserting the following line in your crontab:</p> |
| 217 | - <pre style="font-size: 0.80em"><code>*/10 * * * * /usr/bin/curl --silent <?php bloginfo('home'); ?>?update_feedwordpress=1</code></pre> | |
| 199 | + <pre style="font-size: 0.80em"><code>*/10 * * * * /usr/bin/curl --silent <?php bloginfo('url'); ?>?update_feedwordpress=1</code></pre> | |
| 218 | 200 | <p class="setting-description">will check in every 10 minutes |
| 219 | 201 | and check for updates on any feeds that are ready to be polled for updates.</p> |
| 220 | 202 | </div> |
| 221 | 203 | </td> |
| @@ -220,39 +202,10 @@ | ||
| 220 | 202 | </div> |
| 221 | 203 | </td> |
| 222 | 204 | </tr> |
| 223 | 205 | |
| 224 | - <tr> | |
| 225 | - <th scope="row"><?php print __('Update scheduling:') ?></th> | |
| 226 | - <td><p style="margin-top:0px">How long should FeedWordPress wait between updates before it considers a feed ready to be polled for updates again?</p> | |
| 227 | - <p style="font-style: italic; margin-left: 2.0em"><label>Wait <input type="text" name="update_window" value="<?php print $defaultUpdateWindow; ?>" size="4" /> minutes between polling.</label></p> | |
| 228 | - <div class="setting-description"> | |
| 229 | - <p<?php if ($defaultUpdateWindow<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> | |
| 230 | - <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 a feed does provide update scheduling information (through elements such as <code><rss:ttl></code> or <code><sy:updateFrequency></code>), FeedWordPress will respect the feed's request.</p> | |
| 231 | - </div></td> | |
| 232 | - </tr> | |
| 233 | - | |
| 234 | - <tr> | |
| 235 | - <th scope="row"><?php print __('Time limit on updates'); ?>:</th> | |
| 236 | - <td><select id="time-limit" name="update_time_limit" size="1" onchange="contextual_appearance('time-limit', 'time-limit-box', null, 'yes');"> | |
| 237 | - <option value="no"<?php echo ($update_time_limit>0)?'':' selected="selected"'; ?>>no time limit on updates</option> | |
| 238 | - <option value="yes"<?php echo ($update_time_limit>0)?' selected="selected"':''; ?>>limit updates to no more than...</option> | |
| 239 | - </select> | |
| 240 | - <span id="time-limit-box"><label><input type="text" name="time_limit_seconds" value="<?php print $update_time_limit; ?>" size="5" /> seconds</label></span> | |
| 241 | - </tr> | |
| 206 | + <?php else : /* Feed-specific settings */ ?> | |
| 242 | 207 | |
| 243 | - <?php else : | |
| 244 | - $useDefaultUpdateWindow = !(isset($page->link->settings['update/window'])); | |
| 245 | - | |
| 246 | - $updateWindow = (isset($page->link->settings['update/window']) ? $page->link->settings['update/window'] : null); | |
| 247 | - if (!is_numeric($updateWindow)) : | |
| 248 | - $updateWindow = 60; | |
| 249 | - else : | |
| 250 | - $updateWindow = (int) $updateWindow; | |
| 251 | - endif; | |
| 252 | - | |
| 253 | - ?> | |
| 254 | - | |
| 255 | 208 | <tr> |
| 256 | 209 | <th scope="row"><?php _e('Last update') ?>:</th> |
| 257 | 210 | <td><?php |
| 258 | 211 | if (isset($page->link->settings['update/last'])) : |
| @@ -287,39 +240,116 @@ | ||
| 287 | 240 | ?></option> |
| 288 | 241 | <option value="next"<?php echo ($holdem=='next')?' selected="selected"':''; ?>>update ASAP</option> |
| 289 | 242 | <option value="ping"<?php echo ($holdem=='ping')?' selected="selected"':''; ?>>update only when pinged</option> |
| 290 | 243 | </select></td></tr> |
| 291 | - | |
| 244 | + | |
| 245 | + <?php endif; ?> | |
| 246 | + | |
| 292 | 247 | <tr> |
| 293 | 248 | <th scope="row"><?php print __('Update scheduling:') ?></th> |
| 294 | 249 | <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> |
| 295 | - <ul> | |
| 296 | - <li><label><input type="radio" name="use_default_update_window" value="Yes" <?php if ($useDefaultUpdateWindow) : ?>checked="checked"<?php endif; ?> /> Use site-wide setting (currently <?php print $defaultUpdateWindow; ?> minutes)</li> | |
| 297 | - <li><label><input type="radio" name="use_default_update_window" value="No" <?php if (!$useDefaultUpdateWindow) : ?>checked="checked"<?php endif; ?> /> Wait <input type="text" name="update_window" value="<?php print $updateWindow; ?>" size="4" /> minutes between polling.</label></li> | |
| 298 | - </ul> | |
| 250 | + <?php | |
| 251 | + | |
| 252 | + $this->setting_radio_control( | |
| 253 | + 'update/window', 'update_window', | |
| 254 | + array(&$this, 'update_window_edit_box'), | |
| 255 | + array( | |
| 256 | + 'global-setting-default' => DEFAULT_UPDATE_PERIOD, | |
| 257 | + 'default-input-name' => 'use_default_update_window', | |
| 258 | + 'default-input-id' => 'use-default-update-window-yes', | |
| 259 | + 'default-input-id-no' => 'use-default-update-window-no', | |
| 260 | + 'labels' => array(&$this, 'update_window_currently'), | |
| 261 | + ) | |
| 262 | + ); | |
| 263 | + ?></td> | |
| 264 | + </tr> | |
| 265 | + | |
| 266 | + <?php if ($this->for_default_settings()) : ?> | |
| 299 | 267 | |
| 300 | - <div class="setting-description"> | |
| 301 | - <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> | |
| 302 | - <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><rss:ttl></code> or <code><sy:updateFrequency></code>), FeedWordPress will respect the feed's request.</p> | |
| 303 | - </div></td> | |
| 268 | + <tr> | |
| 269 | + <th scope="row"><?php print __('Time limit on updates'); ?>:</th> | |
| 270 | + <td><select id="time-limit" name="update_time_limit" size="1" onchange="contextual_appearance('time-limit', 'time-limit-box', null, 'yes');"> | |
| 271 | + <option value="no"<?php echo ($update_time_limit>0)?'':' selected="selected"'; ?>>no time limit on updates</option> | |
| 272 | + <option value="yes"<?php echo ($update_time_limit>0)?' selected="selected"':''; ?>>limit updates to no more than...</option> | |
| 273 | + </select> | |
| 274 | + <span id="time-limit-box"><label><input type="text" name="time_limit_seconds" value="<?php print $update_time_limit; ?>" size="5" /> seconds</label></span> | |
| 304 | 275 | </tr> |
| 276 | + | |
| 305 | 277 | <?php endif; ?> |
| 278 | + | |
| 279 | + </table> | |
| 280 | + | |
| 281 | + <?php | |
| 282 | + } /* FeedWordPressFeedsPage::global_feeds_box() */ | |
| 306 | 283 | |
| 284 | + function update_window_edit_box ($updateWindow, $defaulted, $params) { | |
| 285 | + if (!is_numeric($updateWindow)) : | |
| 286 | + $updateWindow = DEFAULT_UPDATE_PERIOD; | |
| 287 | + endif; | |
| 288 | + ?> | |
| 289 | + <p>Wait <input type="text" name="update_window" value="<?php print $updateWindow; ?>" size="4" /> minutes between polling.</p> | |
| 290 | + <div class="setting-description" id="update-scheduling-note"> | |
| 291 | + <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> | |
| 292 | + <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><rss:ttl></code> or <code><sy:updateFrequency></code>), FeedWordPress will respect the feed's request.</p> | |
| 293 | + </div> | |
| 294 | + <?php | |
| 295 | + } /* FeedWordPressFeedsPage::update_window_edit_box () */ | |
| 296 | + | |
| 297 | + function update_window_currently ($updateWindow, $defaulted, $params) { | |
| 298 | + $updateWindow = (int) $updateWindow; | |
| 299 | + if (1==$updateWindow) : | |
| 300 | + $caption = 'wait %d minute between polling'; | |
| 301 | + else : | |
| 302 | + $caption = 'wait %d minutes between polling'; | |
| 303 | + endif; | |
| 304 | + return sprintf(__($caption), $updateWindow); | |
| 305 | + } /* FeedWordPressFeedsPage::update_window_currently () */ | |
| 306 | + | |
| 307 | + function fetch_timeout_setting ($setting, $defaulted, $params) { | |
| 308 | + $timeout = intval($this->setting('fetch timeout', FEEDWORDPRESS_FETCH_TIMEOUT_DEFAULT)); | |
| 307 | 309 | |
| 308 | -</table> | |
| 309 | -<script type="text/javascript"> | |
| 310 | -contextual_appearance('automatic-updates-selector', 'cron-job-explanation', null, 'no'); | |
| 311 | -contextual_appearance('time-limit', 'time-limit-box', null, 'yes'); | |
| 312 | -</script> | |
| 313 | -<?php | |
| 314 | - } /* FeedWordPressFeedsPage::global_feeds_box() */ | |
| 315 | - | |
| 310 | + if ($this->for_feed_settings()) : | |
| 311 | + $article = 'this'; | |
| 312 | + else : | |
| 313 | + $article = 'a'; | |
| 314 | + endif; | |
| 315 | + ?> | |
| 316 | + <p>Wait no more than | |
| 317 | + than <input name="fetch_timeout" type="number" min="0" size="3" value="<?php print $timeout; ?>" /> | |
| 318 | + second(s) when trying to fetch <?php print $article; ?> feed to check for updates.</p> | |
| 319 | + <p>If <?php print $article; ?> source's web server does not respond before time runs | |
| 320 | + out, FeedWordPress will skip over the source and try again during | |
| 321 | + the next update cycle.</p> | |
| 322 | + <?php | |
| 323 | + } | |
| 324 | + function fetch_timeout_setting_value ($setting, $defaulted, $params) { | |
| 325 | + print number_format(intval($setting)) . " " . (($setting==1) ? "second" : "seconds"); | |
| 326 | + } | |
| 327 | + | |
| 328 | + function fetch_settings_box ($page, $box = NULL) { | |
| 329 | + $this->setting_radio_control( | |
| 330 | + 'fetch timeout', 'fetch_timeout', | |
| 331 | + array(&$this, 'fetch_timeout_setting'), | |
| 332 | + array( | |
| 333 | + 'global-setting-default' => FEEDWORDPRESS_FETCH_TIMEOUT_DEFAULT, | |
| 334 | + 'input-name' => 'fetch_timeout', | |
| 335 | + 'default-input-name' => 'fetch_timeout_default', | |
| 336 | + 'labels' => array(&$this, 'fetch_timeout_setting_value'), | |
| 337 | + ) | |
| 338 | + ); | |
| 339 | + } /* FeedWordPressFeedsPage::fetch_settings_box () */ | |
| 340 | + | |
| 316 | 341 | function feed_information_box ($page, $box = NULL) { |
| 317 | 342 | global $wpdb; |
| 343 | + $link_rss_params = maybe_unserialize($page->setting('query parameters', '')); | |
| 344 | + if (!is_array($link_rss_params)) : | |
| 345 | + $link_rss_params = array(); | |
| 346 | + endif; | |
| 347 | + | |
| 318 | 348 | if ($page->for_feed_settings()) : |
| 319 | - $info['name'] = wp_specialchars($page->link->link->link_name, 1); | |
| 320 | - $info['description'] = wp_specialchars($page->link->link->link_description, 'both'); | |
| 321 | - $info['url'] = wp_specialchars($page->link->link->link_url, 1); | |
| 349 | + $info['name'] = esc_html($page->link->link->link_name); | |
| 350 | + $info['description'] = esc_html($page->link->link->link_description); | |
| 351 | + $info['url'] = esc_html($page->link->link->link_url); | |
| 322 | 352 | $rss_url = $page->link->link->link_rss; |
| 323 | 353 | |
| 324 | 354 | $hardcode['name'] = $page->link->hardcode('name'); |
| 325 | 355 | $hardcode['description'] = $page->link->hardcode('description'); |
| @@ -325,26 +355,29 @@ | ||
| 325 | 355 | $hardcode['description'] = $page->link->hardcode('description'); |
| 326 | 356 | $hardcode['url'] = $page->link->hardcode('url'); |
| 327 | 357 | else : |
| 328 | 358 | $cat_id = FeedWordPress::link_category_id(); |
| 329 | - if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_21)) : | |
| 330 | - $results = get_categories(array( | |
| 331 | - "type" => 'link', | |
| 332 | - "hide_empty" => false, | |
| 333 | - )); | |
| 359 | + | |
| 360 | + $params = array(); | |
| 361 | + if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_USES_ARGS_TAXONOMY)) : | |
| 362 | + $params['taxonomy'] = 'link_category'; | |
| 363 | + else : | |
| 364 | + $params['type'] = 'link'; | |
| 365 | + endif; | |
| 366 | + $params['hide_empty'] = false; | |
| 367 | + $results = get_categories($params); | |
| 334 | 368 | |
| 335 | - // Guarantee that the Contributors category will be in the drop-down chooser, even if it is empty. | |
| 336 | - $found_link_category_id = false; | |
| 337 | - foreach ($results as $row) : | |
| 338 | - // Normalize case | |
| 339 | - if (!isset($row->cat_id)) : $row->cat_id = $row->cat_ID; endif; | |
| 369 | + // Guarantee that the Contributors category will be in the drop-down chooser, even if it is empty. | |
| 370 | + $found_link_category_id = false; | |
| 371 | + foreach ($results as $row) : | |
| 372 | + // Normalize case | |
| 373 | + if (!isset($row->cat_id)) : $row->cat_id = $row->cat_ID; endif; | |
| 340 | 374 | |
| 341 | - if ($row->cat_id == $cat_id) : $found_link_category_id = true; endif; | |
| 342 | - endforeach; | |
| 343 | - | |
| 344 | - if (!$found_link_category_id) : $results[] = get_category($cat_id); endif; | |
| 345 | - else : | |
| 346 | - $results = $wpdb->get_results("SELECT cat_id, cat_name, auto_toggle FROM $wpdb->linkcategories ORDER BY cat_id"); | |
| 375 | + if ($row->cat_id == $cat_id) : $found_link_category_id = true; endif; | |
| 376 | + endforeach; | |
| 377 | + | |
| 378 | + if (!$found_link_category_id) : | |
| 379 | + $results[] = get_category($cat_id); | |
| 347 | 380 | endif; |
| 348 | 381 | |
| 349 | 382 | $info = array(); |
| 350 | 383 | $rss_url = null; |
| @@ -355,15 +388,8 @@ | ||
| 355 | 388 | endif; |
| 356 | 389 | |
| 357 | 390 | // Hey ho, let's go |
| 358 | 391 | ?> |
| 359 | - <style type="text/css"> | |
| 360 | - table.edit-form { width: 100%; } | |
| 361 | - table.edit-form th { width: 25%; vertical-align: top; text-align: right; padding: 0.5em; } | |
| 362 | - table.edit-form td { width: 75%; vertical-align: top; padding: 0.5em; } | |
| 363 | - table.edit-form td ul.options { margin: 0; padding: 0; list-style: none; } | |
| 364 | - </style> | |
| 365 | - | |
| 366 | 392 | <table class="edit-form"> |
| 367 | 393 | |
| 368 | 394 | <?php if ($page->for_feed_settings()) : ?> |
| 369 | 395 | |
| @@ -368,14 +394,76 @@ | ||
| 368 | 394 | <?php if ($page->for_feed_settings()) : ?> |
| 369 | 395 | |
| 370 | 396 | <tr> |
| 371 | 397 | <th scope="row"><?php _e('Feed URL:') ?></th> |
| 372 | - <td><a href="<?php echo wp_specialchars($rss_url, 'both'); ?>"><?php echo wp_specialchars($rss_url, 'both'); ?></a> | |
| 398 | + <td><a href="<?php echo esc_html($rss_url); ?>"><?php echo esc_html($rss_url); ?></a> | |
| 373 | 399 | (<a href="<?php echo FEEDVALIDATOR_URI; ?>?url=<?php echo urlencode($rss_url); ?>" |
| 374 | - title="Check feed <<?php echo wp_specialchars($rss_url, 'both'); ?>> for validity">validate</a>) | |
| 375 | - <input type="submit" name="feedfinder" value="switch →" style="font-size:smaller" /></td> | |
| 400 | + title="Check feed <<?php echo esc_html($rss_url); ?>> for validity">validate</a>) | |
| 401 | + <input type="submit" name="feedfinder" value="switch →" style="font-size:smaller" /> | |
| 402 | + | |
| 403 | + <table id="link-rss-params"> | |
| 404 | + <tbody> | |
| 405 | + <?php | |
| 406 | + $link_rss_params['new'] = array('', ''); | |
| 407 | + $i = 0; | |
| 408 | + foreach ($link_rss_params as $index => $pair) : | |
| 409 | + ?> | |
| 410 | + <tr class="link-rss-params-row" id="link-rss-params-<?php print $index; ?>"> | |
| 411 | + <td><label>Parameter: <input type="text" class="link_params_key" | |
| 412 | + name="link_rss_params_key[<?php print $index; ?>]" value="<?php print esc_html($pair[0]); ?>" | |
| 413 | + size="5" style="width: 5em" placeholder="name" /></label></td> | |
| 414 | + <td class="link-rss-params-value-cell"><label class="link_params_value_label">= <input type="text" class="link_params_value" | |
| 415 | + name="link_rss_params_value[<?php print $index; ?>]" value="<?php print esc_html($pair[1]); ?>" | |
| 416 | + size="8" placeholder="value" /></label></td> | |
| 376 | 417 | </tr> |
| 418 | + <?php | |
| 419 | + $i++; | |
| 420 | + endforeach; | |
| 421 | + ?> | |
| 422 | + </tbody> | |
| 423 | + </table> | |
| 424 | + | |
| 425 | + <div><input type="hidden" id="link-rss-params-num" name="link_rss_params_num" value="<?php print $i; ?>" /></div> | |
| 426 | + | |
| 427 | + <script type="text/javascript"> | |
| 428 | + function linkParamsRowRemove (element) { | |
| 429 | + jQuery(element).closest('tr').fadeOut('slow', function () { | |
| 430 | + jQuery(this).remove(); | |
| 431 | + } ); | |
| 432 | + } | |
| 377 | 433 | |
| 434 | + jQuery('<td><a href="#" class="add-remove link-rss-params-remove"><span class="x">(X)</span> Remove</a></td>').insertAfter('.link-rss-params-value-cell'); | |
| 435 | + | |
| 436 | + jQuery('#link-rss-params-new').hide(); | |
| 437 | + jQuery('<a class="add-remove" id="link-rss-params-add" href="#">+ Add a query parameter</a>').insertAfter('#link-rss-params'); | |
| 438 | + jQuery('#link-rss-params-add').click( function () { | |
| 439 | + var next = jQuery('#link-rss-params-num').val(); | |
| 440 | + var newRow = jQuery('#link-rss-params-new').clone().attr('id', 'link-rss-params-'+next); | |
| 441 | + newRow.find('.link_params_key').attr('name', 'link_rss_params_key['+next+']'); | |
| 442 | + newRow.find('.link_params_value').attr('name', 'link_rss_params_value['+next+']'); | |
| 443 | + | |
| 444 | + newRow.find('.link-rss-params-remove').click( function () { | |
| 445 | + linkParamsRowRemove(this); | |
| 446 | + return false; | |
| 447 | + } ); | |
| 448 | + | |
| 449 | + newRow.appendTo('#link-rss-params'); | |
| 450 | + newRow.show(); | |
| 451 | + | |
| 452 | + // Update counter for next row. | |
| 453 | + next++; | |
| 454 | + jQuery('#link-rss-params-num').val(next); | |
| 455 | + | |
| 456 | + return false; | |
| 457 | + } ); | |
| 458 | + jQuery('.link-rss-params-remove').click( function () { | |
| 459 | + linkParamsRowRemove(this); | |
| 460 | + return false; | |
| 461 | + } ); | |
| 462 | + </script> | |
| 463 | + </td> | |
| 464 | + </tr> | |
| 465 | + | |
| 378 | 466 | <?php |
| 379 | 467 | $rows = array( |
| 380 | 468 | "name" => __('Link Name'), |
| 381 | 469 | "description" => __('Short Description'), |
| @@ -423,9 +511,9 @@ | ||
| 423 | 511 | echo "\n\t<option value=\"$row->cat_id\""; |
| 424 | 512 | if ($row->cat_id == $cat_id) : |
| 425 | 513 | echo " selected='selected'"; |
| 426 | 514 | endif; |
| 427 | - echo ">$row->cat_id: ".wp_specialchars($row->cat_name); | |
| 515 | + echo ">$row->cat_id: ".esc_html($row->cat_name); | |
| 428 | 516 | echo "</option>\n"; |
| 429 | 517 | endforeach; |
| 430 | 518 | ?></select></p> |
| 431 | 519 | <p class="setting-description">FeedWordPress will syndicate the |
| @@ -453,20 +541,8 @@ | ||
| 453 | 541 | </table> |
| 454 | 542 | <?php |
| 455 | 543 | } /* FeedWordPressFeedsPage::feed_information_box() */ |
| 456 | 544 | |
| 457 | - function posts_box ($page, $box = NULL) { | |
| 458 | - FeedWordPressSettingsUI::instead_of_posts_box($page->link->id); | |
| 459 | - } /* FeedWordPressFeedsPage::posts_box() */ | |
| 460 | - | |
| 461 | - function authors_box ($page, $box = NULL) { | |
| 462 | - FeedWordPressSettingsUI::instead_of_authors_box($page->link->id); | |
| 463 | - } /* FeedWordPressFeedsPage::authors_box() */ | |
| 464 | - | |
| 465 | - function categories_box ($page, $box = NULL) { | |
| 466 | - FeedWordPressSettingsUI::instead_of_categories_box($page->link->id); | |
| 467 | - } /* FeedWordPressFeedsPage::categories_box() */ | |
| 468 | - | |
| 469 | 545 | function custom_settings_box ($page, $box = NULL) { |
| 470 | 546 | ?> |
| 471 | 547 | <p class="setting-description">These custom settings are special fields for the <strong>feed</strong> you are |
| 472 | 548 | syndicating, to be retrieved in templates using the <code>get_feed_meta()</code> function. They do not create |
| @@ -486,11 +562,11 @@ | ||
| 486 | 562 | foreach ($page->link->settings as $key => $value) : |
| 487 | 563 | if (!preg_match("\007^((".implode(')|(', $page->special_settings)."))$\007i", $key)) : |
| 488 | 564 | ?> |
| 489 | 565 | <tr style="vertical-align:top"> |
| 490 | - <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo wp_specialchars($key, 'both'); ?>" /> | |
| 491 | - <input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo wp_specialchars($key, 'both'); ?>" /></th> | |
| 492 | - <td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo $i; ?>-value" name="notes[<?php echo $i; ?>][value]"><?php echo wp_specialchars($value, 'both'); ?></textarea></td> | |
| 566 | + <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo esc_html($key); ?>" /> | |
| 567 | + <input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo esc_html($key); ?>" /></th> | |
| 568 | + <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> | |
| 493 | 569 | <td width="10%"><select name="notes[<?php echo $i; ?>][action]"> |
| 494 | 570 | <option value="update">save changes</option> |
| 495 | 571 | <option value="delete">delete this setting</option> |
| 496 | 572 | </select></td> |
| @@ -514,66 +590,107 @@ | ||
| 514 | 590 | global $wpdb; |
| 515 | 591 | |
| 516 | 592 | $lookup = (isset($_REQUEST['lookup']) ? $_REQUEST['lookup'] : NULL); |
| 517 | 593 | |
| 594 | + $feeds = array(); $feedSwitch = false; $current = null; | |
| 518 | 595 | if ($this->for_feed_settings()) : // Existing feed? |
| 519 | - if (is_null($lookup)) : $lookup = $this->link->link->link_url; endif; | |
| 520 | - $name = wp_specialchars($this->link->link->link_name, 'both'); | |
| 596 | + $feedSwitch = true; | |
| 597 | + if (is_null($lookup)) : | |
| 598 | + // Switch Feed without a specific feed yet suggested | |
| 599 | + // Go to the human-readable homepage to look for | |
| 600 | + // auto-detection links | |
| 601 | + $lookup = $this->link->link->link_url; | |
| 602 | + | |
| 603 | + // Guarantee that you at least have the option to | |
| 604 | + // stick with what works. | |
| 605 | + $current = $this->link->link->link_rss; | |
| 606 | + $feeds[] = $current; | |
| 607 | + endif; | |
| 608 | + $name = esc_html($this->link->link->link_name); | |
| 521 | 609 | else: // Or a new subscription to add? |
| 522 | - $name = "Subscribe to <code>".wp_specialchars(feedwordpress_display_url($lookup))."</code>"; | |
| 610 | + $name = "Subscribe to <code>".esc_html(feedwordpress_display_url($lookup))."</code>"; | |
| 523 | 611 | endif; |
| 524 | 612 | ?> |
| 525 | - <style type="text/css"> | |
| 526 | - form.fieldset { | |
| 527 | - clear: both; | |
| 528 | - } | |
| 529 | - .feed-sample { | |
| 530 | - float: right; | |
| 531 | - background-color: #D0D0D0; | |
| 532 | - color: black; | |
| 533 | - width: 45%; | |
| 534 | - font-size: 70%; | |
| 535 | - border-left: 1px dotted #A0A0A0; | |
| 536 | - margin-left: 1.0em; | |
| 537 | - } | |
| 538 | - .feed-sample p, .feed-sample h3 { | |
| 539 | - padding-left: 0.5em; | |
| 540 | - padding-right: 0.5em; | |
| 541 | - } | |
| 542 | - .feed-sample .feed-problem { | |
| 543 | - background-color: #ffd0d0; | |
| 544 | - border-bottom: 1px dotted black; | |
| 545 | - padding-bottom: 0.5em; | |
| 546 | - margin-bottom: 0.5em; | |
| 547 | - } | |
| 548 | - </style> | |
| 549 | - | |
| 550 | - <div class="wrap"> | |
| 613 | + <div class="wrap" id="feed-finder"> | |
| 551 | 614 | <h2>Feed Finder: <?php echo $name; ?></h2> |
| 552 | 615 | |
| 553 | 616 | <?php |
| 554 | - $f =& new FeedFinder($lookup); | |
| 555 | - $feeds = $f->find(); | |
| 617 | + if ($feedSwitch) : | |
| 618 | + $this->display_alt_feed_box($lookup); | |
| 619 | + endif; | |
| 620 | + | |
| 621 | + $finder = array(); | |
| 622 | + if (!is_null($current)) : | |
| 623 | + $finder[$current] = new FeedFinder($current); | |
| 624 | + endif; | |
| 625 | + $finder[$lookup] = new FeedFinder($lookup); | |
| 626 | + | |
| 627 | + foreach ($finder as $url => $ff) : | |
| 628 | + $feeds = array_merge($feeds, $ff->find()); | |
| 629 | + endforeach; | |
| 630 | + | |
| 631 | + $feeds = array_values( // Renumber from 0..(N-1) | |
| 632 | + array_unique( // Eliminate duplicates | |
| 633 | + $feeds | |
| 634 | + ) | |
| 635 | + ); | |
| 636 | + | |
| 556 | 637 | if (count($feeds) > 0): |
| 638 | + if ($feedSwitch) : | |
| 639 | + ?> | |
| 640 | + <h3>Feeds Found</h3> | |
| 641 | + <?php | |
| 642 | + endif; | |
| 643 | + | |
| 644 | + if (count($feeds) > 1) : | |
| 645 | + $option_template = 'Option %d: '; | |
| 646 | + $form_class = ' class="multi"'; | |
| 647 | + ?> | |
| 648 | + <p><strong>This web page provides at least <?php print count($feeds); ?> different feeds.</strong> These feeds may provide the same information | |
| 649 | + in different formats, or may track different items. (You can check the Feed Information and the | |
| 650 | + 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> | |
| 651 | + <?php | |
| 652 | + else : | |
| 653 | + $option_template = ''; | |
| 654 | + $form_class = ''; | |
| 655 | + endif; | |
| 656 | + | |
| 557 | 657 | foreach ($feeds as $key => $f): |
| 558 | - $rss = @fetch_rss($f); | |
| 559 | - if ($rss): | |
| 560 | - $feed_title = isset($rss->channel['title'])?$rss->channel['title']:$rss->channel['link']; | |
| 561 | - $feed_link = isset($rss->channel['link'])?$rss->channel['link']:''; | |
| 658 | + $pie = FeedWordPress::fetch($f); | |
| 659 | + $rss = (is_wp_error($pie) ? $pie : new MagpieFromSimplePie($pie)); | |
| 660 | + | |
| 661 | + if ($rss and !is_wp_error($rss)): | |
| 662 | + $feed_link = (isset($rss->channel['link'])?$rss->channel['link']:''); | |
| 663 | + $feed_title = (isset($rss->channel['title'])?$rss->channel['title']:$feed_link); | |
| 562 | 664 | $feed_type = ($rss->feed_type ? $rss->feed_type : 'Unknown'); |
| 665 | + $feed_version_template = '%.1f'; | |
| 666 | + $feed_version = $rss->feed_version; | |
| 563 | 667 | else : |
| 564 | 668 | // Give us some sucky defaults |
| 565 | 669 | $feed_title = feedwordpress_display_url($lookup); |
| 566 | 670 | $feed_link = $lookup; |
| 567 | 671 | $feed_type = 'Unknown'; |
| 672 | + $feed_version_template = ''; | |
| 673 | + $feed_version = ''; | |
| 568 | 674 | endif; |
| 569 | 675 | ?> |
| 570 | - <form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication.php" method="post"> | |
| 571 | - <div><?php FeedWordPressCompatibility::stamp_nonce('feedwordpress_switchfeed'); ?></div> | |
| 572 | - <fieldset> | |
| 573 | - <legend><?php echo $feed_type; ?> <?php echo $rss->feed_version; ?> feed</legend> | |
| 676 | + <form<?php print $form_class; ?> action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication.php" method="post"> | |
| 677 | + <div class="inside"><?php FeedWordPressCompatibility::stamp_nonce('feedwordpress_switchfeed'); ?> | |
| 574 | 678 | |
| 575 | 679 | <?php |
| 680 | + $classes = array('feed-found'); $currentFeed = ''; | |
| 681 | + if (!is_null($current) and $current==$f) : | |
| 682 | + $classes[] = 'current'; | |
| 683 | + $currentFeed = ' (currently subscribed)'; | |
| 684 | + endif; | |
| 685 | + if ($key%2) : | |
| 686 | + $classes[] = 'alt'; | |
| 687 | + endif; | |
| 688 | + ?> | |
| 689 | + <fieldset class="<?php print implode(" ", $classes); ?>"> | |
| 690 | + <legend><?php printf($option_template, ($key+1)); print $feed_type." "; printf($feed_version_template, $feed_version); ?> feed<?php print $currentFeed; ?></legend> | |
| 691 | + | |
| 692 | + <?php | |
| 576 | 693 | $this->stamp_link_id(); |
| 577 | 694 | |
| 578 | 695 | // No feed specified = add new feed; we |
| 579 | 696 | // need to pass along a starting title |
| @@ -579,25 +696,26 @@ | ||
| 579 | 696 | // need to pass along a starting title |
| 580 | 697 | // and homepage URL for the new Link. |
| 581 | 698 | if (!$this->for_feed_settings()): |
| 582 | 699 | ?> |
| 583 | - <input type="hidden" name="feed_title" value="<?php echo wp_specialchars($feed_title, 'both'); ?>" /> | |
| 584 | - <input type="hidden" name="feed_link" value="<?php echo wp_specialchars($feed_link, 'both'); ?>" /> | |
| 700 | + <input type="hidden" name="feed_title" value="<?php echo esc_html($feed_title); ?>" /> | |
| 701 | + <input type="hidden" name="feed_link" value="<?php echo esc_html($feed_link); ?>" /> | |
| 585 | 702 | <?php |
| 586 | 703 | endif; |
| 587 | 704 | ?> |
| 588 | 705 | |
| 589 | - <input type="hidden" name="feed" value="<?php echo wp_specialchars($f, 'both'); ?>" /> | |
| 706 | + <input type="hidden" name="feed" value="<?php echo esc_html($f); ?>" /> | |
| 590 | 707 | <input type="hidden" name="action" value="switchfeed" /> |
| 591 | 708 | |
| 592 | 709 | <div> |
| 593 | 710 | <div class="feed-sample"> |
| 594 | - | |
| 595 | 711 | <?php |
| 596 | - if (count($rss->items) > 0): | |
| 712 | + $link = NULL; | |
| 713 | + $post = NULL; | |
| 714 | + if (!is_wp_error($rss) and count($rss->items) > 0): | |
| 597 | 715 | // Prepare to display Sample Item |
| 598 | - $link =& new MagpieMockLink($rss, $f); | |
| 599 | - $post =& new SyndicatedPost($rss->items[0], $link); | |
| 716 | + $link = new MagpieMockLink(array('simplepie' => $pie, 'magpie' => $rss), $f); | |
| 717 | + $post = new SyndicatedPost(array('simplepie' => $rss->originals[0], 'magpie' => $rss->items[0]), $link); | |
| 600 | 718 | ?> |
| 601 | 719 | <h3>Sample Item</h3> |
| 602 | 720 | <ul> |
| 603 | 721 | <li><strong>Title:</strong> <a href="<?php echo $post->post['meta']['syndication_permalink']; ?>"><?php echo $post->post['post_title']; ?></a></li> |
| @@ -606,15 +724,16 @@ | ||
| 606 | 724 | <div class="entry"> |
| 607 | 725 | <?php print $post->post['post_content']; ?> |
| 608 | 726 | </div> |
| 609 | 727 | <?php |
| 728 | + do_action('feedwordpress_feed_finder_sample_item', $f, $post, $link); | |
| 610 | 729 | else: |
| 611 | - if (magpie_error()) : | |
| 730 | + if (is_wp_error($rss)) : | |
| 612 | 731 | print '<div class="feed-problem">'; |
| 613 | 732 | print "<h3>Problem:</h3>\n"; |
| 614 | 733 | print "<p>FeedWordPress encountered the following error |
| 615 | 734 | when trying to retrieve this feed:</p>"; |
| 616 | - print '<p style="margin: 1.0em 3.0em"><code>'.magpie_error().'</code></p>'; | |
| 735 | + print '<p style="margin: 1.0em 3.0em"><code>'.$rss->get_error_message().'</code></p>'; | |
| 617 | 736 | 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>"; |
| 618 | 737 | print "</div>"; |
| 619 | 738 | endif; |
| 620 | 739 | ?> |
| @@ -628,171 +747,203 @@ | ||
| 628 | 747 | <div> |
| 629 | 748 | <h3>Feed Information</h3> |
| 630 | 749 | <ul> |
| 631 | 750 | <li><strong>Homepage:</strong> <a href="<?php echo $feed_link; ?>"><?php echo is_null($feed_title)?'<em>Unknown</em>':$feed_title; ?></a></li> |
| 632 | - <li><strong>Feed URL:</strong> <a href="<?php echo wp_specialchars($f, 'both'); ?>"><?php echo wp_specialchars($f, 'both'); ?></a> (<a title="Check feed <<?php echo wp_specialchars($f, 'both'); ?>> for validity" href="http://feedvalidator.org/check.cgi?url=<?php echo urlencode($f); ?>">validate</a>)</li> | |
| 633 | - <li><strong>Encoding:</strong> <?php echo isset($rss->encoding)?wp_specialchars($rss->encoding, 'both'):"<em>Unknown</em>"; ?></li> | |
| 634 | - <li><strong>Description:</strong> <?php echo isset($rss->channel['description'])?wp_specialchars($rss->channel['description'], 'both'):"<em>Unknown</em>"; ?></li> | |
| 751 | + <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 <<?php echo esc_html($f); ?>> for validity" href="http://feedvalidator.org/check.cgi?url=<?php echo urlencode($f); ?>">validate</a>)</li> | |
| 752 | + <li><strong>Encoding:</strong> <?php echo isset($rss->encoding)?esc_html($rss->encoding):"<em>Unknown</em>"; ?></li> | |
| 753 | + <li><strong>Description:</strong> <?php echo isset($rss->channel['description'])?esc_html($rss->channel['description']):"<em>Unknown</em>"; ?></li> | |
| 635 | 754 | </ul> |
| 636 | - <div class="submit"><input type="submit" name="Use" value="« Use this feed" /></div> | |
| 637 | - <div class="submit"><input type="submit" name="Cancel" value="« Cancel" /></div> | |
| 755 | + <?php do_action('feedwordpress_feedfinder_form', $f, $post, $link, $this->for_feed_settings()); ?> | |
| 756 | + <div class="submit"><input type="submit" class="button-primary" name="Use" value="« Use this feed" /> | |
| 757 | + <input type="submit" class="button" name="Cancel" value="× Cancel" /></div> | |
| 638 | 758 | </div> |
| 639 | 759 | </div> |
| 640 | 760 | </fieldset> |
| 761 | + </div> <!-- class="inside" --> | |
| 641 | 762 | </form> |
| 642 | 763 | <?php |
| 764 | + unset($link); | |
| 765 | + unset($post); | |
| 643 | 766 | endforeach; |
| 644 | 767 | else: |
| 645 | - print "<p><strong>".__('Error').":</strong> ".__("FeedWordPress couldn't find any feeds at").' <code><a href="'.htmlspecialchars($lookup).'">'.htmlspecialchars($lookup).'</a></code>'; | |
| 646 | - print ". ".__('Try another URL').".</p>"; | |
| 768 | + foreach ($finder as $url => $ff) : | |
| 769 | + $url = esc_html($url); | |
| 770 | + print "<h3>Searched for feeds at ${url}</h3>\n"; | |
| 771 | + print "<p><strong>".__('Error').":</strong> ".__("FeedWordPress couldn't find any feeds at").' <code><a href="'.htmlspecialchars($lookup).'">'.htmlspecialchars($lookup).'</a></code>'; | |
| 772 | + print ". ".__('Try another URL').".</p>"; | |
| 647 | 773 | |
| 648 | - // Diagnostics | |
| 649 | - print "<div class=\"updated\" style=\"margin-left: 3.0em; margin-right: 3.0em;\">\n"; | |
| 650 | - print "<h3>".__('Diagnostic information')."</h3>\n"; | |
| 651 | - if (!is_null($f->error()) and strlen($f->error()) > 0) : | |
| 652 | - print "<h4>".__('HTTP request failure')."</h4>\n"; | |
| 653 | - print "<p>".$f->error()."</p>\n"; | |
| 654 | - else : | |
| 655 | - print "<h4>".__('HTTP request completed')."</h4>\n"; | |
| 656 | - print "<p><strong>Status ".$f->status().":</strong> ".$this->HTTPStatusMessages[(int) $f->status()]."</p>\n"; | |
| 657 | - endif; | |
| 774 | + // Diagnostics | |
| 775 | + print "<div class=\"updated\" style=\"margin-left: 3.0em; margin-right: 3.0em;\">\n"; | |
| 776 | + print "<h3>".__('Diagnostic information')."</h3>\n"; | |
| 777 | + if (!is_null($ff->error()) and strlen($ff->error()) > 0) : | |
| 778 | + print "<h4>".__('HTTP request failure')."</h4>\n"; | |
| 779 | + print "<p>".$ff->error()."</p>\n"; | |
| 780 | + else : | |
| 781 | + print "<h4>".__('HTTP request completed')."</h4>\n"; | |
| 782 | + print "<p><strong>Status ".$ff->status().":</strong> ".$this->HTTPStatusMessages[(int) $ff->status()]."</p>\n"; | |
| 783 | + endif; | |
| 658 | 784 | |
| 659 | - // Do some more diagnostics if the API for it is available. | |
| 660 | - if (function_exists('_wp_http_get_object')) : | |
| 661 | - $httpObject = _wp_http_get_object(); | |
| 662 | - $transports = $httpObject->_getTransport(); | |
| 785 | + // Do some more diagnostics if the API for it is available. | |
| 786 | + if (function_exists('_wp_http_get_object')) : | |
| 787 | + $httpObject = _wp_http_get_object(); | |
| 788 | + $transports = $httpObject->_getTransport(); | |
| 789 | + | |
| 790 | + print "<h4>".__('HTTP Transports available').":</h4>\n"; | |
| 791 | + print "<ol>\n"; | |
| 792 | + print "<li>".implode("</li>\n<li>", array_map('get_class', $transports))."</li>\n"; | |
| 793 | + print "</ol>\n"; | |
| 794 | + print "</div>\n"; | |
| 795 | + endif; | |
| 796 | + endforeach; | |
| 797 | + endif; | |
| 798 | + | |
| 799 | + if (!$feedSwitch) : | |
| 800 | + $this->display_alt_feed_box($lookup, /*alt=*/ true); | |
| 801 | + endif; | |
| 802 | + ?> | |
| 803 | + </div> <!-- class="wrap" --> | |
| 804 | + <?php | |
| 805 | + return false; // Don't continue | |
| 806 | + } /* FeedWordPressFeedsPage::display_feedfinder() */ | |
| 663 | 807 | |
| 664 | - print "<h4>".__('HTTP Transports available').":</h4>\n"; | |
| 665 | - print "<ol>\n"; | |
| 666 | - print "<li>".implode("</li>\n<li>", array_map('get_class', $transports))."</li>\n"; | |
| 667 | - print "</ol>\n"; | |
| 668 | - print "</div>\n"; | |
| 669 | - endif; | |
| 670 | - | |
| 671 | - endif; | |
| 672 | - ?> | |
| 673 | - </div> | |
| 674 | - | |
| 808 | + function display_alt_feed_box ($lookup, $alt = false) { | |
| 809 | + global $fwp_post; | |
| 810 | + ?> | |
| 675 | 811 | <form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post"> |
| 676 | - <div><?php | |
| 677 | - FeedWordPressCompatibility::stamp_nonce(get_class($this)); | |
| 678 | - ?></div> | |
| 679 | - <div class="wrap"> | |
| 680 | - <h2>Use another feed</h2> | |
| 681 | - <div><label>Feed:</label> | |
| 682 | - <input type="text" name="lookup" id="use-another-feed" value="URI" /> | |
| 812 | + <div class="inside"><?php | |
| 813 | + FeedWordPressCompatibility::stamp_nonce($this->dispatch); | |
| 814 | + ?> | |
| 815 | + <fieldset class="alt" | |
| 816 | + <?php if (!$alt): ?>style="margin: 1.0em 3.0em; font-size: smaller;"<?php endif; ?>> | |
| 817 | + <legend><?php if ($alt) : ?>Alternative feeds<?php else: ?>Find feeds<?php endif; ?></legend> | |
| 818 | + <?php if ($alt) : ?><h3>Use a different feed</h3><?php endif; ?> | |
| 819 | + <div><label>Address: | |
| 820 | + <input type="text" name="lookup" id="use-another-feed" | |
| 821 | + placeholder="URL" | |
| 822 | + <?php if (is_null($lookup)) : ?> | |
| 823 | + value="URL" | |
| 824 | + <?php else : ?> | |
| 825 | + value="<?php print esc_html($lookup); ?>" | |
| 826 | + <?php endif; ?> | |
| 827 | + size="64" style="max-width: 80%" /></label> | |
| 828 | + <?php if (is_null($lookup)) : ?> | |
| 683 | 829 | <?php FeedWordPressSettingsUI::magic_input_tip_js('use-another-feed'); ?> |
| 830 | + <?php endif; ?> | |
| 684 | 831 | <?php $this->stamp_link_id('link_id'); ?> |
| 685 | - <input type="hidden" name="action" value="feedfinder" /></div> | |
| 686 | - <div class="submit"><input type="submit" value="Use this feed »" /></div> | |
| 687 | - </div> | |
| 688 | - </form> | |
| 832 | + <input type="hidden" name="action" value="feedfinder" /> | |
| 833 | + <input type="submit" class="button<?php if ($alt): ?>-primary<?php endif; ?>" value="Check »" /></div> | |
| 834 | + <p>This can be the address of a feed, or of a website. FeedWordPress | |
| 835 | + will try to automatically detect any feeds associated with a | |
| 836 | + website.</p> | |
| 837 | + </div> <!-- class="inside" --> | |
| 838 | + </fieldset></form> | |
| 839 | + | |
| 689 | 840 | <?php |
| 690 | - return false; // Don't continue | |
| 691 | - } /* WordPressFeedsPage::display_feedfinder() */ | |
| 692 | - | |
| 693 | - function accept_POST ($post) { | |
| 694 | - global $wpdb; | |
| 695 | - | |
| 696 | - // User mashed a Save Changes button | |
| 697 | - if (isset($post['save']) or isset($post['submit'])) : | |
| 698 | - if ($this->for_feed_settings()) : | |
| 699 | - $alter = array (); | |
| 700 | - | |
| 701 | - // custom feed settings first | |
| 702 | - foreach ($post['notes'] as $mn) : | |
| 703 | - $mn['key0'] = trim($mn['key0']); | |
| 704 | - $mn['key1'] = trim($mn['key1']); | |
| 705 | - if (preg_match("\007^((" | |
| 706 | - .implode(')|(',$this->special_settings) | |
| 707 | - ."))$\007i", | |
| 708 | - $mn['key1'])) : | |
| 709 | - $mn['key1'] = 'user/'.$mn['key1']; | |
| 841 | + } /* FeedWordPressFeedsPage::display_alt_feed_box() */ | |
| 842 | + | |
| 843 | + function save_settings ($post) { | |
| 844 | + if ($this->for_feed_settings()) : | |
| 845 | + if (isset($post['link_rss_params_key'])) : | |
| 846 | + $qp = array(); | |
| 847 | + foreach ($post['link_rss_params_key'] as $index => $key) : | |
| 848 | + if (strlen($key) > 0) : | |
| 849 | + if (isset($post['link_rss_params_value'][$index]) | |
| 850 | + and strlen($post['link_rss_params_value'][$index])) : | |
| 851 | + $value = $post['link_rss_params_value'][$index]; | |
| 852 | + $qp[] = array($key, $value); | |
| 853 | + endif; | |
| 710 | 854 | endif; |
| 711 | - | |
| 712 | - if (strlen($mn['key0']) > 0) : | |
| 713 | - unset($this->link->settings[$mn['key0']]); // out with the old | |
| 714 | - endif; | |
| 715 | - | |
| 716 | - if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) : | |
| 717 | - $this->link->settings[$mn['key1']] = $mn['value']; // in with the new | |
| 718 | - endif; | |
| 719 | 855 | endforeach; |
| 720 | - | |
| 721 | - // now stuff through the web form | |
| 722 | - // hardcoded feed info | |
| 723 | - | |
| 724 | - foreach (array('name', 'description', 'url') as $what) : | |
| 725 | - // We have a checkbox for "No," so if it's unchecked, mark as "Yes." | |
| 726 | - $this->link->settings["hardcode {$what}"] = (isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'); | |
| 727 | - if (FeedWordPress::affirmative($this->link->settings, "hardcode {$what}")) : | |
| 728 | - $alter[] = "link_{$what} = '".$wpdb->escape($post['link'.$what])."'"; | |
| 729 | - endif; | |
| 730 | - endforeach; | |
| 731 | - | |
| 732 | - // Update scheduling | |
| 733 | - if (isset($post['update_schedule'])) : | |
| 734 | - $this->link->settings['update/hold'] = $post['update_schedule']; | |
| 856 | + $this->update_setting('query parameters', serialize($qp)); | |
| 857 | + endif; | |
| 858 | + | |
| 859 | + // custom feed settings first | |
| 860 | + foreach ($post['notes'] as $mn) : | |
| 861 | + $mn['key0'] = (isset($mn['key0']) ? trim($mn['key0']) : NULL); | |
| 862 | + $mn['key1'] = trim($mn['key1']); | |
| 863 | + if (preg_match("\007^((" | |
| 864 | + .implode(')|(',$this->special_settings) | |
| 865 | + ."))$\007i", | |
| 866 | + $mn['key1'])) : | |
| 867 | + $mn['key1'] = 'user/'.$mn['key1']; | |
| 735 | 868 | endif; |
| 736 | 869 | |
| 737 | - if (isset($post['use_default_update_window']) and strtolower($post['use_default_update_window'])=='yes') : | |
| 738 | - unset($this->link->settings['update/window']); | |
| 739 | - elseif (isset($post['update_window'])): | |
| 740 | - if ((int) $post['update_window'] > 0) : | |
| 741 | - $this->link->settings['update/window'] = (int) $post['update_window']; | |
| 742 | - endif; | |
| 870 | + if (strlen($mn['key0']) > 0) : | |
| 871 | + unset($this->link->settings[$mn['key0']]); // out with the old | |
| 743 | 872 | endif; |
| 744 | 873 | |
| 745 | - $alter[] = "link_notes = '".$wpdb->escape($this->link->settings_to_notes())."'"; | |
| 874 | + if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) : | |
| 875 | + $this->link->settings[$mn['key1']] = $mn['value']; // in with the new | |
| 876 | + endif; | |
| 877 | + endforeach; | |
| 878 | + | |
| 879 | + // now stuff through the web form | |
| 880 | + // hardcoded feed info | |
| 881 | + | |
| 882 | + foreach (array('name', 'description', 'url') as $what) : | |
| 883 | + // We have a checkbox for "No," so if it's unchecked, mark as "Yes." | |
| 884 | + $this->link->settings["hardcode {$what}"] = (isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'); | |
| 885 | + if (FeedWordPress::affirmative($this->link->settings, "hardcode {$what}")) : | |
| 886 | + $this->link->link->{'link_'.$what} = $post['link'.$what]; | |
| 887 | + endif; | |
| 888 | + endforeach; | |
| 889 | + | |
| 890 | + // Update scheduling | |
| 891 | + if (isset($post['update_schedule'])) : | |
| 892 | + $this->link->settings['update/hold'] = $post['update_schedule']; | |
| 893 | + endif; | |
| 746 | 894 | |
| 747 | - $alter_set = implode(", ", $alter); | |
| 748 | - | |
| 749 | - // issue update query | |
| 750 | - $result = $wpdb->query(" | |
| 751 | - UPDATE $wpdb->links | |
| 752 | - SET $alter_set | |
| 753 | - WHERE link_id='{$this->link->id}' | |
| 754 | - "); | |
| 755 | - $this->updated = true; | |
| 756 | - | |
| 757 | - // reload link information from DB | |
| 758 | - if (function_exists('clean_bookmark_cache')) : | |
| 759 | - clean_bookmark_cache($this->link->id); | |
| 895 | + if (isset($post['use_default_update_window']) and strtolower($post['use_default_update_window'])=='yes') : | |
| 896 | + unset($this->link->settings['update/window']); | |
| 897 | + elseif (isset($post['update_window'])): | |
| 898 | + if ((int) $post['update_window'] > 0) : | |
| 899 | + $this->link->settings['update/window'] = (int) $post['update_window']; | |
| 760 | 900 | endif; |
| 761 | - $this->link = new SyndicatedLink($this->link->id); | |
| 901 | + endif; | |
| 902 | + | |
| 903 | + else : | |
| 904 | + // Global | |
| 905 | + update_option('feedwordpress_cat_id', $post['syndication_category']); | |
| 906 | + | |
| 907 | + if (!isset($post['automatic_updates']) or !in_array($post['automatic_updates'], array('init', 'shutdown'))) : | |
| 908 | + $automatic_updates = false; | |
| 762 | 909 | else : |
| 763 | - // Global | |
| 764 | - update_option('feedwordpress_cat_id', $post['syndication_category']); | |
| 765 | - | |
| 766 | - if (!isset($post['automatic_updates']) or !in_array($post['automatic_updates'], array('init', 'shutdown'))) : | |
| 767 | - $automatic_updates = false; | |
| 768 | - else : | |
| 769 | - $automatic_updates = $post['automatic_updates']; | |
| 770 | - endif; | |
| 771 | - update_option('feedwordpress_automatic_updates', $automatic_updates); | |
| 910 | + $automatic_updates = $post['automatic_updates']; | |
| 911 | + endif; | |
| 912 | + update_option('feedwordpress_automatic_updates', $automatic_updates); | |
| 772 | 913 | |
| 773 | - if (isset($post['update_window'])): | |
| 774 | - if ((int) $post['update_window'] > 0) : | |
| 775 | - update_option('feedwordpress_update_window', (int) $post['update_window']); | |
| 776 | - endif; | |
| 914 | + if (isset($post['update_window'])): | |
| 915 | + if ((int) $post['update_window'] > 0) : | |
| 916 | + update_option('feedwordpress_update_window', (int) $post['update_window']); | |
| 777 | 917 | endif; |
| 918 | + endif; | |
| 778 | 919 | |
| 779 | - update_option('feedwordpress_update_time_limit', ($post['update_time_limit']=='yes')?(int) $post['time_limit_seconds']:0); | |
| 920 | + update_option('feedwordpress_update_time_limit', ($post['update_time_limit']=='yes')?(int) $post['time_limit_seconds']:0); | |
| 780 | 921 | |
| 781 | - foreach (array('name', 'description', 'url') as $what) : | |
| 782 | - // We have a checkbox for "No," so if it's unchecked, mark as "Yes." | |
| 783 | - $hardcode = (isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'); | |
| 784 | - update_option("feedwordpress_hardcode_{$what}", $hardcode); | |
| 785 | - endforeach; | |
| 786 | - | |
| 787 | - $this->updated = true; | |
| 922 | + foreach (array('name', 'description', 'url') as $what) : | |
| 923 | + // We have a checkbox for "No," so if it's unchecked, mark as "Yes." | |
| 924 | + $hardcode = (isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'); | |
| 925 | + update_option("feedwordpress_hardcode_{$what}", $hardcode); | |
| 926 | + endforeach; | |
| 927 | + | |
| 928 | + endif; | |
| 929 | + | |
| 930 | + if (isset($post['fetch_timeout'])) : | |
| 931 | + if (isset($post['fetch_timeout_default']) and $post['fetch_timeout_default']=='yes') : | |
| 932 | + $timeout = NULL; | |
| 933 | + else : | |
| 934 | + $timeout = $post['fetch_timeout']; | |
| 788 | 935 | endif; |
| 789 | 936 | |
| 790 | - // Probably a "Go" button for the drop-down | |
| 791 | - else : | |
| 792 | - $this->updated = false; | |
| 937 | + if (is_int($timeout)) : | |
| 938 | + $timeout = intval($timeout); | |
| 939 | + endif; | |
| 940 | + $this->update_setting('fetch timeout', $timeout); | |
| 793 | 941 | endif; |
| 794 | - } /* WordPressFeedsPage::accept_POST() */ | |
| 942 | + | |
| 943 | + $this->updatedPosts->accept_POST($post); | |
| 944 | + parent::save_settings($post); | |
| 945 | + } /* FeedWordPressFeedsPage::save_settings() */ | |
| 795 | 946 | |
| 796 | 947 | } /* class FeedWordPressFeedsPage */ |
| 797 | 948 | |
| 798 | 949 | $feedsPage = new FeedWordPressFeedsPage; |