PluginProbe
FeedWordPress / 2010.0528
FeedWordPress v2010.0528
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 | syndication.php +320 -964 2008.12142010.0528 View file →
@@ -7,15 +7,201 @@
7 7
8 8 if (fwp_test_wp_version(0, FWP_SCHEMA_25)) :
9 9 define('FWP_UPDATE_CHECKED', 'Update Checked Links');
10 10 define('FWP_UNSUB_CHECKED', 'Unsubscribe from Checked Links');
11 - define('FWP_SYNDICATE_NEW', 'Syndicate »');
11 + define('FWP_SYNDICATE_NEW', 'Syndicate ...');
12 12 else :
13 13 define('FWP_UPDATE_CHECKED', 'Update Checked');
14 14 define('FWP_UNSUB_CHECKED', 'Unsubscribe');
15 - define('FWP_SYNDICATE_NEW', 'Syndicate »');
15 + define('FWP_SYNDICATE_NEW', 'Syndicate ...');
16 16 endif;
17 17
18 +class FeedWordPressSyndicationPage extends FeedWordPressAdminPage {
19 + function FeedWordPressSyndicationPage () {
20 + FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpresssyndication', /*link=*/ NULL);
21 +
22 + // No over-arching form element
23 + $this->dispatch = NULL;
24 + $this->filename = __FILE__;
25 + } /* FeedWordPressSyndicationPage constructor */
26 +
27 + function has_link () { return false; }
28 +
29 + function display () {
30 + global $wpdb;
31 +
32 + if (FeedWordPress::needs_upgrade()) :
33 + fwp_upgrade_page();
34 + return;
35 + endif;
36 +
37 + ?>
38 + <?php $cont = true;
39 + if (isset($_REQUEST['action'])):
40 + if ($_REQUEST['action'] == 'feedfinder' or $_REQUEST['action']==FWP_SYNDICATE_NEW) : $cont = fwp_feedfinder_page();
41 + elseif ($_REQUEST['action'] == 'switchfeed') : $cont = fwp_switchfeed_page();
42 + elseif ($_REQUEST['action'] == FWP_UNSUB_CHECKED or $_REQUEST['action'] == 'Unsubscribe') : $cont = fwp_multidelete_page();
43 + endif;
44 + endif;
45 +
46 + if ($cont):
47 + ?>
48 + <style type="text/css">
49 + .heads-up {
50 + background-color: #d0d0d0;
51 + color: black;
52 + padding: 1.0em;
53 + margin: 0.5em 4.0em !important;
54 + }
55 + .update-form.with-donation {
56 + margin-right: 50%;
57 + min-height: 255px;
58 + }
59 + .donation-form, .donation-thanks {
60 + background-color: #ffffcc;
61 + text-align: left;
62 + padding: 0.5em 0.5em;
63 + border-left: thin dashed #777777;
64 + font-size: 70%;
65 + position: absolute;
66 + top: 0; bottom: 0; right: 0; left: auto;
67 + width: 50%;
68 + }
69 + .donation-thanks {
70 + background-color: #ccffcc;
71 + }
72 + .donation-thanks .signature {
73 + text-align: right;
74 + font-style: italic;
75 + }
76 + .donation-form h4, .donation-thanks h4 {
77 + font-size: 10px;
78 + text-align: center;
79 + border-bottom: 1px solid #777777;
80 + margin: 0px;
81 + }
82 + .donation-form .donate {
83 + text-align: center;
84 + }
85 + .donation-form .sod-off {
86 + padding-top: 0.5em;
87 + margin-top: 0.5em;
88 + border-top: thin solid #777777;
89 + }
90 + </style>
91 + <?php
92 + $links = FeedWordPress::syndicated_links();
93 + $this->open_sheet('Syndicated Sites');
94 + ?>
95 + <div id="post-body">
96 + <?php
97 + if ($links) :
98 + fwp_add_meta_box(
99 + /*id=*/ 'feedwordpress_update_box',
100 + /*title=*/ __('Update feeds now'),
101 + /*callback=*/ 'fwp_syndication_manage_page_update_box',
102 + /*page=*/ $this->meta_box_context(),
103 + /*context =*/ $this->meta_box_context()
104 + );
105 + endif;
106 + fwp_add_meta_box(
107 + /*id=*/ 'feedwordpress_feeds_box',
108 + /*title=*/ __('Syndicated sources'),
109 + /*callback=*/ 'fwp_syndication_manage_page_links_box',
110 + /*page=*/ $this->meta_box_context(),
111 + /*context =*/ $this->meta_box_context()
112 + );
113 + if (FeedWordPressCompatibility::test_version(0, FWP_SCHEMA_25)) :
114 + fwp_add_meta_box(
115 + /*id=*/ 'feedwordpress_add_feed_box',
116 + /*title=*/ 'Add a new syndicated source',
117 + /*callback=*/ 'fwp_syndication_manage_page_add_feed_box',
118 + /*page=*/ $this->meta_box_context(),
119 + /*context=*/ $this->meta_box_context()
120 + );
121 + endif;
122 +
123 + do_action('feedwordpress_admin_page_syndication_meta_boxes', $this);
124 + ?>
125 + <div class="metabox-holder">
126 + <?php
127 + fwp_do_meta_boxes($this->meta_box_context(), $this->meta_box_context(), $this);
128 + ?>
129 + </div> <!-- class="metabox-holder" -->
130 + </div> <!-- id="post-body" -->
131 +
132 + <?php $this->close_sheet(/*dispatch=*/ NULL); ?>
133 +
134 + <div style="display: none">
135 + <div id="tags-input"></div> <!-- avoid JS error from WP 2.5 bug -->
136 + </div>
137 + <?php
138 + endif;
139 + } /* FeedWordPressSyndicationPage::display () */
140 +
141 + function bleg_thanks ($page, $box = NULL) {
142 + ?>
143 + <div class="donation-thanks">
144 + <h4>Thank you!</h4>
145 + <p><strong>Thank you</strong> for your contribution to <a href="http://feedwordpress.radgeek.com/">FeedWordPress</a> development.
146 + Your generous gifts make ongoing support and development for
147 + FeedWordPress possible.</p>
148 + <p>If you have any questions about FeedWordPress, or if there
149 + is anything I can do to help make FeedWordPress more useful for
150 + you, please <a href="http://feedwordpress.radgeek.com/contact">contact me</a>
151 + and let me know what you're thinking about.</p>
152 + <p class="signature">&#8212;<a href="http://radgeek.com/">Charles Johnson</a>, Developer, <a href="http://feedwordpress.radgeek.com/">FeedWordPress</a>.</p>
153 + </div>
154 + <?php
155 + } /* FeedWordPressSyndicationPage::bleg_thanks () */
156 +
157 + function bleg_box ($page, $box = NULL) {
158 + ?>
159 +<div class="donation-form">
160 +<h4>Keep FeedWordPress improving</h4>
161 +<form action="https://www.paypal.com/cgi-bin/webscr" accept-charset="UTF-8" method="post"><div>
162 +<p><a href="http://feedwordpress.radgeek.com/">FeedWordPress</a> makes syndication
163 +simple and empowers you to stream content from all over the web into your
164 +WordPress hub. That's got to be worth a few lattes. If you're finding FWP useful,
165 +<a href="http://feedwordpress.radgeek.com/donation/">a modest gift</a>
166 +is the best way to support steady progress on development, enhancements,
167 +support, and documentation.</p>
168 +<div class="donate">
169 +<input type="hidden" name="business" value="commerce@radgeek.com" />
170 +<input type="hidden" name="cmd" value="_xclick" />
171 +<input type="hidden" name="item_name" value="FeedWordPress donation" />
172 +<input type="hidden" name="no_shipping" value="1" />
173 +<input type="hidden" name="return" value="<?php bloginfo('url'); ?>/wp-admin/admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php print basename(__FILE__); ?>&amp;paid=yes" />
174 +<input type="hidden" name="currency_code" value="USD" />
175 +<input type="hidden" name="notify_url" value="http://feedwordpress.radgeek.com/ipn/donation" />
176 +<input type="hidden" name="custom" value="1" />
177 +<input type="image" name="submit" src="https://www.paypal.com/en_GB/i/btn/btn_donate_SM.gif" alt="Donate through PayPal" />
178 +</div>
179 +</div></form>
180 +
181 +<p>You can make a gift online (or
182 +<a href="http://feedwordpress.radgeek.com/donation">set up an automatic
183 +regular donation</a>) using an existing PayPal account or any major credit card.</p>
184 +
185 +<div class="sod-off">
186 +<form style="text-align: center" action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php print basename(__FILE__); ?>" method="POST"><div>
187 +<input class="button-primary" type="submit" name="maybe_later" value="Maybe Later" />
188 +<input class="button-secondary" type="submit" name="go_away" value="Dismiss" />
189 +</div></form>
190 +</div>
191 +</div> <!-- class="donation-form" -->
192 + <?php
193 + } /* FeedWordPressSyndicationPage::bleg_box () */
194 +
195 + /**
196 + * Override the default display of a save-settings button and replace
197 + * it with nothing.
198 + */
199 + function interstitial () {
200 + /* NOOP */
201 + } /* FeedWordPressSyndicationPage::interstitial() */
202 +} /* class FeedWordPressSyndicationPage */
203 +
18 204 function fwp_dashboard_update_if_requested () {
19 205 global $wpdb;
20 206
21 207 if (isset($_POST['update']) or isset($_POST['action']) or isset($_POST['update_uri'])) :
@@ -42,9 +228,9 @@
42 228 endif;
43 229
44 230 shuffle($update_set); // randomize order for load balancing purposes...
45 231 if ($fwp_update_invoke != 'get' and count($update_set) > 0) : // Only do things with side-effects for HTTP POST or command line
46 - $feedwordpress =& new FeedWordPress;
232 + $feedwordpress = new FeedWordPress;
47 233 add_action('feedwordpress_check_feed', 'update_feeds_mention');
48 234 add_action('feedwordpress_check_feed_complete', 'update_feeds_finish', 10, 3);
49 235
50 236 $crash_dt = (int) get_option('feedwordpress_update_time_limit');
@@ -89,145 +275,80 @@
89 275 echo "<p>Update complete.".implode(' and', $mesg)."</p>";
90 276 echo "\n"; flush();
91 277 endif;
92 278 echo "</div> <!-- class=\"updated\" -->\n";
93 - elseif (fwp_test_wp_version(FWP_SCHEMA_25)) :
94 -?>
95 - <p class="youare">Check currently scheduled feeds for new and updated posts.</p>
96 -<?php
97 279 endif;
98 280 }
99 281
100 -function fwp_syndication_manage_page () {
101 - global $wpdb;
282 +function fwp_syndication_manage_page_add_feed_box ($object = NULL, $box = NULL) {
283 + ?>
284 + <form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php print basename(__FILE__); ?>" method="post">
285 + <div>
286 + <?php FeedWordPressCompatibility::stamp_nonce('feedwordpress_feeds'); ?>
287 + <label for="add-uri">Website or feed:</label>
288 + <input type="text" name="lookup" id="add-uri" value="URI" size="64" />
289 + <input type="hidden" name="action" value="feedfinder" />
290 + </div>
291 + <div class="submit"><input type="submit" value="<?php print FWP_SYNDICATE_NEW; ?>" /></div>
292 + </form>
293 + <?php
294 +}
102 295
103 - if (FeedWordPress::needs_upgrade()) :
104 - fwp_upgrade_page();
105 - return;
296 +define('FEEDWORDPRESS_BLEG_MAYBE_LATER_OFFSET', (60 /*sec/min*/ * 60 /*min/hour*/ * 24 /*hour/day*/ * 31 /*days*/));
297 +define('FEEDWORDPRESS_BLEG_ALREADY_PAID_OFFSET', (60 /*sec/min*/ * 60 /*min/hour*/ * 24 /*hour/day*/ * 183 /*days*/));
298 +function fwp_syndication_manage_page_update_box ($object = NULL, $box = NULL) {
299 + $bleg_box_hidden = null;
300 + if (isset($_POST['maybe_later'])) :
301 + $bleg_box_hidden = time() + FEEDWORDPRESS_BLEG_MAYBE_LATER_OFFSET;
302 + elseif (isset($_REQUEST['paid']) and $_REQUEST['paid']) :
303 + $bleg_box_hidden = time() + FEEDWORDPRESS_BLEG_ALREADY_PAID_OFFSET;
304 + elseif (isset($_POST['go_away'])) :
305 + $bleg_box_hidden = 'permanent';
106 306 endif;
107 307
108 -?>
109 -<?php $cont = true;
110 -if (isset($_REQUEST['action'])):
111 - if ($_REQUEST['action'] == 'feedfinder' or $_REQUEST['action'] == FWP_SYNDICATE_NEW) : $cont = fwp_feedfinder_page();
112 - elseif ($_REQUEST['action'] == 'switchfeed') : $cont = fwp_switchfeed_page();
113 - elseif ($_REQUEST['action'] == 'linkedit') : $cont = fwp_linkedit_page();
114 - elseif ($_REQUEST['action'] == FWP_UNSUB_CHECKED or $_REQUEST['action'] == 'Unsubscribe') : $cont = fwp_multidelete_page();
308 + if (!is_null($bleg_box_hidden)) :
309 + update_option('feedwordpress_bleg_box_hidden', $bleg_box_hidden);
310 + else :
311 + $bleg_box_hidden = get_option('feedwordpress_bleg_box_hidden');
115 312 endif;
116 -endif;
117 -
118 -if ($cont):
119 313 ?>
120 -<?php
121 - $links = FeedWordPress::syndicated_links();
122 -?>
123 - <div class="wrap">
124 -<?php if (fwp_test_wp_version(FWP_SCHEMA_27)) : ?>
125 - <div class="icon32"><img src="<?php print htmlspecialchars(WP_PLUGIN_URL.'/'.$GLOBALS['fwp_path'].'/feedwordpress.png'); ?>" alt="" /></div>
126 - <h2>Syndicated Sites</h2>
127 -<?php endif;
128 - if (fwp_test_wp_version(0, FWP_SCHEMA_25)) :
129 - fwp_dashboard_update_if_requested();
314 + <?php
315 + $bleg_box_ready = (!$bleg_box_hidden or (is_numeric($bleg_box_hidden) and $bleg_box_hidden < time()));
316 + if (isset($_REQUEST['paid']) and $_REQUEST['paid']) :
317 + $object->bleg_thanks($subject, $box);
318 + elseif ($bleg_box_ready) :
319 + $object->bleg_box($object, $box);
130 320 endif;
321 + ?>
131 322
132 - if (fwp_test_wp_version(FWP_SCHEMA_27)) :
133 -?>
134 - <script type="text/javascript">
135 - jQuery(document).ready( function($) {
136 - // In case someone got here first.
137 - $('.postbox h3, .postbox .handlediv').unbind('click');
138 - $('.hide-postbox-tog').unbind('click');
139 - $('.meta-box-sortables').sortable('destroy');
323 + <form
324 + action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php print basename(__FILE__); ?>"
325 + method="POST"
326 + class="update-form<?php if ($bleg_box_ready) : ?> with-donation<?php endif; ?>"
327 + >
328 + <div><?php FeedWordPressCompatibility::stamp_nonce('feedwordpress_feeds'); ?></div>
329 + <p>Check currently scheduled feeds for new and updated posts.</p>
140 330
141 - postboxes.add_postbox_toggles('feedwordpress_syndication');
142 - } );
143 - </script>
144 -<?php
145 - echo "<form style='display: none' method='get' action=''>\n<p>\n";
146 - wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
147 - wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
148 - echo "</p>\n</form>\n";
149 -
150 - if ($links) :
151 - add_meta_box('feedwordpress_update_box', __('Update feeds now'), 'fwp_syndication_manage_page_update_box', /*page=*/ 'feedwordpress_syndication', /*context =*/ 'normal');
152 - endif;
153 - add_meta_box('feedwordpress_feeds_box', __('Syndicated sources'), 'fwp_syndication_manage_page_links_box', /*page=*/ 'feedwordpress_syndication', /*context =*/ 'normal');
154 -?>
155 - <div class="metabox-holder">
156 - <div id="feedwordpress-sortables" class="meta-box-sortables ui-sortable">
157 -<?php
158 - do_meta_boxes('feedwordpress_syndication', 'normal', NULL);
159 - else :
160 - if ($links): // only display Update panel if there are some links to update....
161 - fwp_syndication_manage_page_update_box();
162 - endif;
163 - fwp_syndication_manage_page_links_box();
164 -?>
165 - </div> <!-- class="wrap" -->
331 + <?php
332 + fwp_dashboard_update_if_requested();
166 333
167 - <?php if (fwp_test_wp_version(0, FWP_SCHEMA_25)) : ?>
168 - <div class="wrap">
169 - <form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
170 - <h2>Add a new syndicated site:</h2>
171 - <div>
172 - <label for="add-uri">Website or newsfeed:</label>
173 - <input type="text" name="lookup" id="add-uri" value="URI" size="64" />
174 - <input type="hidden" name="action" value="feedfinder" />
175 - </div>
176 - <div class="submit"><input type="submit" value="Syndicate &raquo;" /></div>
177 - </form>
178 - </div> <!-- class="wrap" -->
179 - <?php endif; ?>
180 -
181 - <div style="display: none">
182 - <div id="tags-input"></div> <!-- avoid JS error from WP 2.5 bug -->
183 - </div>
184 -<?php
334 + if (!get_option('feedwordpress_automatic_updates')) :
335 + ?>
336 + <p class="heads-up"><strong>Note:</strong> Automatic updates are currently turned
337 + <strong>off</strong>. New posts from your feeds will not be syndicated
338 + until you manually check for them here. You can turn on automatic
339 + updates under <a href="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/feeds-page.php">Feed &amp; Update Settings<a></a>.</p>
340 + <?php
185 341 endif;
186 -endif;
187 -} /* function fwp_syndication_manage_page () */
342 + ?>
188 343
189 -function fwp_syndication_manage_page_update_box ($object = NULL, $box = NULL) {
190 - $updateFeedsNow = __('Update feeds now');
191 -?>
192 - <form action="" method="POST">
193 - <?php if (fwp_test_wp_version(FWP_SCHEMA_25, FWP_SCHEMA_27)) : ?>
194 - <div id="rightnow">
195 - <h3 class="reallynow"><span><?php print $updateFeedsNow; ?></span>
196 - <input type="hidden" name="update_uri" value="*" /><input style="float: right; border: none;" class="rbutton" type="submit" name="update" value="Update" />
197 - <br class="clear"/></h3>
198 - <?php elseif (fwp_test_wp_version(0, FWP_SCHEMA_25)) : ?>
199 - <h2><?php print $updateFeedsNow; ?></h2>
200 - <?php endif; ?>
201 -
202 -<?php
203 - if (fwp_test_wp_version(FWP_SCHEMA_25)) :
204 - fwp_dashboard_update_if_requested();
205 - else :
206 -?>
207 -<p>Check currently scheduled feeds for new and updated posts.</p>
208 -<?php endif; ?>
209 -
210 -<?php if (!get_option('feedwordpress_automatic_updates')) : ?>
211 - <p class="youhave"><strong>Note:</strong> Automatic updates are currently turned
212 - <strong>off</strong>. New posts from your feeds will not be syndicated
213 - until you manually check for them here. You can turn on automatic
214 - updates under <a href="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/syndication-options.php">Syndication
215 - Options</a>.</p>
216 -<?php endif; ?>
217 -
218 - <?php if (!fwp_test_wp_version(FWP_SCHEMA_25, FWP_SCHEMA_27)) : ?>
219 344 <div class="submit"><input type="hidden" name="update_uri" value="*" /><input class="button-primary" type="submit" name="update" value="Update" /></div>
220 - <?php endif; ?>
221 345
222 346 <?php if (fwp_test_wp_version(FWP_SCHEMA_27)) : ?>
223 347 <br style="clear: both" />
224 - <?php elseif (fwp_test_wp_version(FWP_SCHEMA_25, FWP_SCHEMA_27)) : ?>
348 + <?php /* elseif (fwp_test_wp_version(FWP_SCHEMA_25, FWP_SCHEMA_27)) :
225 349 </div> <!-- id="rightnow" -->
226 - </div> <!-- class="wrap" -->
227 - <?php elseif (fwp_test_wp_version(0, FWP_SCHEMA_25)) : ?>
228 - </div> <!-- class="wrap" -->
229 - <?php endif; ?>
350 + <?php */ endif; ?>
230 351 </form>
231 352 <?php
232 353 } /* function fwp_syndication_manage_page_update_box () */
233 354
@@ -233,14 +354,11 @@
233 354
234 355 function fwp_syndication_manage_page_links_box ($object = NULL, $box = NULL) {
235 356 $links = FeedWordPress::syndicated_links();
236 357 ?>
237 - <?php if (!fwp_test_wp_version(FWP_SCHEMA_27)) : ?>
238 - <div class="wrap">
239 - <h2>Syndicated Sites</h2>
240 - <?php endif; ?>
358 + <form id="syndicated-links" action="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/<?php echo basename(__FILE__); ?>" method="post">
359 + <div><?php FeedWordPressCompatibility::stamp_nonce('feedwordpress_feeds'); ?></div>
241 360
242 - <form id="syndicated-links" action="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/<?php echo basename(__FILE__); ?>" method="post">
243 361 <?php $alt_row = true; ?>
244 362
245 363 <?php if (fwp_test_wp_version(FWP_SCHEMA_25)) : ?>
246 364 <div class="tablenav">
@@ -246,25 +364,10 @@
246 364 <div class="tablenav">
247 365 <div class="alignright">
248 366 <label for="add-uri">Add new source:</label>
249 367 <input type="text" name="lookup" id="add-uri" value="Website or feed URI" />
250 -<script type="text/javascript">
251 -jQuery(document).ready( function () {
252 - var addUri = jQuery("#add-uri");
253 - var box = addUri.get(0);
254 - if (box.value==box.defaultValue) { addUri.addClass('form-input-tip'); }
255 - addUri.focus(function() {
256 - if ( this.value == this.defaultValue )
257 - jQuery(this).val( '' ).removeClass( 'form-input-tip' );
258 - });
259 - addUri.blur(function() {
260 - if ( this.value == '' )
261 - jQuery(this).val( this.defaultValue ).addClass( 'form-input-tip' );
262 - });
368 + <?php FeedWordPressSettingsUI::magic_input_tip_js('add-uri'); ?>
263 369
264 -} );
265 -</script>
266 -
267 370 <input type="hidden" name="action" value="feedfinder" />
268 371 <input type="submit" class="button-secondary" name="action" value="<?php print FWP_SYNDICATE_NEW; ?>" /></div>
269 372
270 373 <?php if (count($links) > 0) : ?>
@@ -305,28 +408,22 @@
305 408 $caption=__('Find Feed');
306 409 endif;
307 410 ?>
308 411 <td>
309 -<strong><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&amp;link_id=<?php echo $link->link_id; ?>&amp;action=linkedit"><?php echo wp_specialchars($link->link_name, 'both'); ?></a></strong>
310 -<div class="row-actions"><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&amp;link_id=<?php echo $link->link_id; ?>&amp;action=linkedit"><?php _e('Edit'); ?></a>
311 -| <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&amp;link_id=<?php echo $link->link_id; ?>&amp;action=feedfinder"><?php echo $caption; ?></a>
412 +<strong><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/feeds-page.php&amp;link_id=<?php echo $link->link_id; ?>"><?php echo esc_html($link->link_name); ?></a></strong>
413 +<div class="row-actions"><div><strong>Settings &gt;</strong>
414 +<a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/feeds-page.php&amp;link_id=<?php echo $link->link_id; ?>"><?php _e('Feed'); ?></a>
415 +| <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/posts-page.php&amp;link_id=<?php echo $link->link_id; ?>"><?php _e('Posts'); ?></a>
416 +| <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/authors-page.php&amp;link_id=<?php echo $link->link_id; ?>"><?php _e('Authors'); ?></a>
417 +| <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/categories-page.php&amp;link_id=<?php echo $link->link_id; ?>"><?php print htmlspecialchars(__('Categories'.FEEDWORDPRESS_AND_TAGS)); ?></a></div>
418 +<div><strong>Actions &gt;</strong>
419 +<a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&amp;link_id=<?php echo $link->link_id; ?>&amp;action=feedfinder"><?php echo $caption; ?></a>
312 420 | <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&amp;link_id=<?php echo $link->link_id; ?>&amp;action=Unsubscribe"><?php _e('Unsubscribe'); ?></a>
313 -| <a href="<?php echo wp_specialchars($link->link_url, 'both'); ?>"><?php _e('View')?></a>
421 +| <a href="<?php echo esc_html($link->link_url); ?>"><?php _e('View')?></a></div>
314 422 </div>
315 423 </td>
316 -<?php
317 - if (strlen($link->link_rss) > 0):
318 - $uri_bits = parse_url($link->link_rss);
319 - $uri_bits['host'] = preg_replace('/^www\./i', '', $uri_bits['host']);
320 - $display_uri =
321 - (isset($uri_bits['user'])?$uri_bits['user'].'@':'')
322 - .(isset($uri_bits['host'])?$uri_bits['host']:'')
323 - .(isset($uri_bits['port'])?':'.$uri_bits['port']:'')
324 - .(isset($uri_bits['path'])?$uri_bits['path']:'')
325 - .(isset($uri_bits['query'])?'?'.$uri_bits['query']:'');
326 - if (strlen($display_uri) > 32) : $display_uri = substr($display_uri, 0, 32).'&#8230;'; endif;
327 -?>
328 - <td><a href="<?php echo wp_specialchars($link->link_rss, 'both'); ?>"><?php echo wp_specialchars($display_uri, 'both'); ?></a></td>
424 + <?php if (strlen($link->link_rss) > 0): ?>
425 + <td><a href="<?php echo esc_html($link->link_rss); ?>"><?php echo esc_html(feedwordpress_display_url($link->link_rss, 32)); ?></a></td>
329 426 <?php else: ?>
330 427 <td style="background-color:#FFFFD0"><p><strong>no
331 428 feed assigned</strong></p></td>
332 429 <?php endif; ?>
@@ -331,9 +428,9 @@
331 428 feed assigned</strong></p></td>
332 429 <?php endif; ?>
333 430
334 431 <td><?php
335 - $sLink =& new SyndicatedLink($link->link_id);
432 + $sLink = new SyndicatedLink($link->link_id);
336 433 if (isset($sLink->settings['update/last'])) :
337 434 print fwp_time_elapsed($sLink->settings['update/last']);
338 435 else :
339 436 _e('None yet');
@@ -343,8 +440,9 @@
343 440 if (isset($sLink->settings['update/ttl']) and is_numeric($sLink->settings['update/ttl'])) :
344 441 if (isset($sLink->settings['update/timed']) and $sLink->settings['update/timed']=='automatically') :
345 442 $next = $sLink->settings['update/last'] + ((int) $sLink->settings['update/ttl'] * 60);
346 443 print fwp_time_elapsed($next);
444 + if (FEEDWORDPRESS_DEBUG) : print " [".(($next-time())/60)." minutes]"; endif;
347 445 else :
348 446 echo "every ".$sLink->settings['update/ttl']." minute".(($sLink->settings['update/ttl']!=1)?"s":"");
349 447 endif;
350 448 else:
@@ -349,8 +447,9 @@
349 447 endif;
350 448 else:
351 449 echo "as soon as possible";
352 450 endif;
451 + unset($sLink);
353 452 print "</div>";
354 453 ?>
355 454 </td>
356 455 </tr>
@@ -375,828 +474,83 @@
375 474 <?php
376 475 } /* function fwp_syndication_manage_page_links_box() */
377 476
378 477 function fwp_feedfinder_page () {
379 - global $wpdb;
478 + global $post_source;
479 +
480 + $post_source = 'feedwordpress_feeds';
481 +
482 + // With action=feedfinder, this goes directly to the feedfinder page
483 + include_once(dirname(__FILE__) . '/feeds-page.php');
484 + return false;
485 +} /* function fwp_feedfinder_page () */
380 486
381 - $lookup = (isset($_REQUEST['lookup'])?$_REQUEST['lookup']:NULL);
382 -
383 - if (isset($_REQUEST['link_id']) and ($_REQUEST['link_id']!=0)):
384 - $link_id = $_REQUEST['link_id'];
385 - if (!is_numeric($link_id)) : FeedWordPress::critical_bug('fwp_feedfinder_page::link_id', $link_id, __LINE__); endif;
386 -
387 - $link = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id='".$wpdb->escape($link_id)."'");
388 - if (is_object($link)):
389 - if (is_null($lookup)) $lookup = $link->link_url;
390 - $name = wp_specialchars($link->link_name, 'both');
391 - else:
392 - die (__("Cheatin' uh ?"));
393 - endif;
394 - else:
395 - $name = "<code>".htmlspecialchars($lookup)."</code>";
396 - $link_id = 0;
397 - endif;
398 -?>
399 - <div class="wrap">
400 - <h2>Feed Finder: <?php echo $name; ?></h2>
401 -<?php
402 - $f =& new FeedFinder($lookup);
403 - $feeds = $f->find();
404 - if (count($feeds) > 0):
405 - foreach ($feeds as $key => $f):
406 - $rss = fetch_rss($f);
407 - if ($rss):
408 - $feed_title = isset($rss->channel['title'])?$rss->channel['title']:$rss->channel['link'];
409 - $feed_link = isset($rss->channel['link'])?$rss->channel['link']:'';
410 - else :
411 - // Give us some sucky defaults
412 - $uri_bits = parse_url($lookup);
413 - $uri_bits['host'] = preg_replace('/^www\./i', '', $uri_bits['host']);
414 - $display_uri =
415 - (isset($uri_bits['user'])?$uri_bits['user'].'@':'')
416 - .(isset($uri_bits['host'])?$uri_bits['host']:'')
417 - .(isset($uri_bits['port'])?':'.$uri_bits['port']:'')
418 - .(isset($uri_bits['path'])?$uri_bits['path']:'')
419 - .(isset($uri_bits['query'])?'?'.$uri_bits['query']:'');
420 - if (strlen($display_uri) > 32) : $display_uri = substr($display_uri, 0, 32).'&#8230;'; endif;
421 -
422 - $feed_title = $display_uri;
423 - $feed_link = $lookup;
424 - endif;
425 -?>
426 - <form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
427 - <fieldset style="clear: both">
428 - <legend><?php echo $rss->feed_type; ?> <?php echo $rss->feed_version; ?> feed</legend>
429 -
430 - <?php if ($link_id===0): ?>
431 - <input type="hidden" name="feed_title" value="<?php echo wp_specialchars($feed_title, 'both'); ?>" />
432 - <input type="hidden" name="feed_link" value="<?php echo wp_specialchars($feed_link, 'both'); ?>" />
433 - <?php endif; ?>
434 -
435 - <input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
436 - <input type="hidden" name="feed" value="<?php echo wp_specialchars($f, 'both'); ?>" />
437 - <input type="hidden" name="action" value="switchfeed" />
438 -
439 - <div>
440 - <div style="float:right; background-color:#D0D0D0; color: black; width:45%; font-size:70%; border-left: 1px dotted #A0A0A0; padding-left: 0.5em; margin-left: 1.0em">
441 -<?php if (count($rss->items) > 0): ?>
442 - <?php $item = $rss->items[0]; ?>
443 - <h3>Sample Item</h3>
444 - <ul>
445 - <li><strong>Title:</strong> <a href="<?php echo $item['link']; ?>"><?php echo $item['title']; ?></a></li>
446 - <li><strong>Date:</strong> <?php echo isset($item['date_timestamp']) ? date('d-M-y g:i:s a', $item['date_timestamp']) : 'unknown'; ?></li>
447 - </ul>
448 - <div class="entry">
449 - <?php echo (isset($item['content']['encoded'])?$item['content']['encoded']:$item['description']); ?>
450 - </div>
451 -<?php else: ?>
452 - <h3>No Items</h3>
453 - <p>FeedWordPress found no posts on this feed.</p>
454 -<?php endif; ?>
455 - </div>
456 -
457 - <div>
458 - <h3>Feed Information</h3>
459 - <ul>
460 - <li><strong>Website:</strong> <a href="<?php echo $feed_link; ?>"><?php echo is_null($feed_title)?'<em>Unknown</em>':$feed_title; ?></a></li>
461 - <li><strong>Feed URI:</strong> <a href="<?php echo wp_specialchars($f, 'both'); ?>"><?php echo wp_specialchars($f, 'both'); ?></a> (<a title="Check feed &lt;<?php echo wp_specialchars($f, 'both'); ?>&gt; for validity" href="http://feedvalidator.org/check.cgi?url=<?php echo urlencode($f); ?>">validate</a>)</li>
462 - <li><strong>Encoding:</strong> <?php echo isset($rss->encoding)?wp_specialchars($rss->encoding, 'both'):"<em>Unknown</em>"; ?></li>
463 - <li><strong>Description:</strong> <?php echo isset($rss->channel['description'])?wp_specialchars($rss->channel['description'], 'both'):"<em>Unknown</em>"; ?></li>
464 - </ul>
465 - <div class="submit"><input type="submit" name="Use" value="&laquo; Use this feed" /></div>
466 - <div class="submit"><input type="submit" name="Cancel" value="&laquo; Cancel" /></div>
467 - </div>
468 - </div>
469 - </fieldset>
470 - </form>
471 -<?php
472 - endforeach;
473 - else:
474 - print "<p><strong>".__('Error').":</strong> ".__("I couldn't find any feeds at").' <code><a href="'.htmlspecialchars($lookup).'">'.htmlspecialchars($lookup).'</a></code>';
475 - if (!is_null($f->error())) :
476 - print " [".__('HTTP request error').": ".htmlspecialchars(trim($f->error()))."]";
477 - endif;
478 - print ". ".__('Try another URL')."</p>";
479 - endif;
480 -?>
481 - </div>
482 -
483 - <form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
484 - <div class="wrap">
485 - <h2>Use another feed</h2>
486 - <div><label>Feed:</label>
487 - <input type="text" name="lookup" value="URI" />
488 - <input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
489 - <input type="hidden" name="action" value="feedfinder" /></div>
490 - <div class="submit"><input type="submit" value="Use this feed &raquo;" /></div>
491 - </div>
492 - </form>
493 -<?php
494 - return false; // Don't continue
495 -}
496 -
497 487 function fwp_switchfeed_page () {
498 488 global $wpdb, $wp_db_version;
489 + global $fwp_post;
499 490
500 - check_admin_referer();
501 - if (!isset($_REQUEST['Cancel'])):
502 - if (!current_user_can('manage_links')):
503 - die (__("Cheatin' uh ?"));
504 - elseif (isset($_REQUEST['link_id']) and ($_REQUEST['link_id']==0)):
505 - $link_id = FeedWordPress::syndicate_link($_REQUEST['feed_title'], $_REQUEST['feed_link'], $_REQUEST['feed']);
506 - if ($link_id): ?>
507 -<div class="updated"><p><a href="<?php echo $_REQUEST['feed_link']; ?>"><?php echo wp_specialchars($_REQUEST['feed_title'], 'both'); ?></a>
508 -has been added as a contributing site, using the newsfeed at &lt;<a href="<?php echo $_REQUEST['feed']; ?>"><?php echo wp_specialchars($_REQUEST['feed'], 'both'); ?></a>&gt;.</p></div>
491 + // If this is a POST, validate source and user credentials
492 + FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_switchfeed', /*capability=*/ 'manage_links');
493 +
494 + $changed = false;
495 + if (!isset($fwp_post['Cancel'])):
496 + if (isset($fwp_post['save_link_id']) and ($fwp_post['save_link_id']=='*')) :
497 + $changed = true;
498 + $link_id = FeedWordPress::syndicate_link($fwp_post['feed_title'], $fwp_post['feed_link'], $fwp_post['feed']);
499 + if ($link_id):
500 + $existingLink = new SyndicatedLink($link_id);
501 + ?>
502 +<div class="updated"><p><a href="<?php print $fwp_post['feed_link']; ?>"><?php print esc_html($fwp_post['feed_title']); ?></a>
503 +has been added as a contributing site, using the feed at
504 +&lt;<a href="<?php print $fwp_post['feed']; ?>"><?php print esc_html($fwp_post['feed']); ?></a>&gt;.
505 +| <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/feeds-page.php&amp;link_id=<?php print $link_id; ?>">Configure settings</a>.</p></div>
509 506 <?php else: ?>
510 -<div class="updated"><p>There was a problem adding the newsfeed. [SQL: <?php echo wp_specialchars(mysql_error(), 'both'); ?>]</p></div>
507 +<div class="updated"><p>There was a problem adding the feed. [SQL: <?php echo esc_html(mysql_error()); ?>]</p></div>
511 508 <?php endif;
512 - elseif (isset($_REQUEST['link_id'])):
513 - // Update link_rss
514 - $result = $wpdb->query("
515 - UPDATE $wpdb->links
516 - SET
517 - link_rss = '".$wpdb->escape($_REQUEST['feed'])."'
518 - WHERE link_id = '".$wpdb->escape($_REQUEST['link_id'])."'
519 - ");
520 -
521 - if ($result):
522 - $result = $wpdb->get_row("
523 - SELECT link_name, link_url FROM $wpdb->links
524 - WHERE link_id = '".$wpdb->escape($_REQUEST['link_id'])."'
525 - ");
526 - ?>
527 -<div class="updated"><p>Feed for <a href="<?php echo $result->link_url; ?>"><?php echo wp_specialchars($result->link_name, 'both'); ?></a>
528 -updated to &lt;<a href="<?php echo $_REQUEST['feed']; ?>"><?php echo wp_specialchars($_REQUEST['feed'], 'both'); ?></a>&gt;.</p></div>
529 - <?php else: ?>
530 -<div class="updated"><p>Nothing was changed.</p></div>
531 - <?php endif;
532 - endif;
533 - endif;
534 - return true; // Continue
535 -}
509 + elseif (isset($fwp_post['save_link_id'])):
510 + $existingLink = new SyndicatedLink($fwp_post['save_link_id']);
511 + $changed = $existingLink->set_uri($fwp_post['feed']);
536 512
537 -function fwp_linkedit_page () {
538 - global $wpdb, $wp_db_version;
539 -
540 - check_admin_referer(); // Make sure we arrived here from the Dashboard
541 -
542 - $special_settings = array ( /* Regular expression syntax is OK here */
543 - 'cats',
544 - 'cat_split',
545 - 'hardcode name',
546 - 'hardcode url',
547 - 'hardcode description',
548 - 'hardcode categories', /* Deprecated */
549 - 'post status',
550 - 'comment status',
551 - 'ping status',
552 - 'unfamiliar author',
553 - 'unfamliar categories', /* Deprecated */
554 - 'unfamiliar category',
555 - 'map authors',
556 - 'tags',
557 - 'update/.*',
558 - 'feed/.*',
559 - 'link/.*',
560 - );
561 -
562 - if (!current_user_can('manage_links')) :
563 - die (__("Cheatin' uh ?"));
564 - elseif (isset($_REQUEST['feedfinder'])) :
565 - return fwp_feedfinder_page(); // re-route to Feed Finder page
566 - else :
567 - $link_id = (int) $_REQUEST['link_id'];
568 - $link =& new SyndicatedLink($link_id);
569 -
570 - if ($link->found()) :
571 - if (isset($GLOBALS['fwp_post']['save'])) :
572 - $alter = array ();
573 -
574 - // custom feed settings first
575 - foreach ($GLOBALS['fwp_post']['notes'] as $mn) :
576 - $mn['key0'] = trim($mn['key0']);
577 - $mn['key1'] = trim($mn['key1']);
578 - if (preg_match("\007^(("
579 - .implode(')|(',$special_settings)
580 - ."))$\007i",
581 - $mn['key1'])) :
582 - $mn['key1'] = 'user/'.$mn['key1'];
583 - endif;
584 -
585 - if (strlen($mn['key0']) > 0) :
586 - unset($link->settings[$mn['key0']]); // out with the old
587 - endif;
588 -
589 - if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) :
590 - $link->settings[$mn['key1']] = $mn['value']; // in with the new
591 - endif;
592 - endforeach;
593 -
594 - // now stuff through the web form
595 - // hardcoded feed info
596 - if (isset($GLOBALS['fwp_post']['hardcode_name'])) :
597 - $link->settings['hardcode name'] = $GLOBALS['fwp_post']['hardcode_name'];
598 - if (FeedWordPress::affirmative($link->settings, 'hardcode name')) :
599 - $alter[] = "link_name = '".$wpdb->escape($GLOBALS['fwp_post']['name'])."'";
600 - endif;
601 - endif;
602 - if (isset($GLOBALS['fwp_post']['hardcode_description'])) :
603 - $link->settings['hardcode description'] = $GLOBALS['fwp_post']['hardcode_description'];
604 - if (FeedWordPress::affirmative($link->settings, 'hardcode description')) :
605 - $alter[] = "link_description = '".$wpdb->escape($GLOBALS['fwp_post']['description'])."'";
606 - endif;
607 - endif;
608 - if (isset($GLOBALS['fwp_post']['hardcode_url'])) :
609 - $link->settings['hardcode url'] = $GLOBALS['fwp_post']['hardcode_url'];
610 - if (FeedWordPress::affirmative($link->settings, 'hardcode url')) :
611 - $alter[] = "link_url = '".$wpdb->escape($GLOBALS['fwp_post']['linkurl'])."'";
612 - endif;
613 - endif;
614 -
615 - // Update scheduling
616 - if (isset($GLOBALS['fwp_post']['update_schedule'])) :
617 - $link->settings['update/hold'] = $GLOBALS['fwp_post']['update_schedule'];
618 - endif;
619 -
620 - // Categories
621 - if (isset($GLOBALS['fwp_post']['post_category'])) :
622 - $link->settings['cats'] = array();
623 - foreach ($GLOBALS['fwp_post']['post_category'] as $cat_id) :
624 - $link->settings['cats'][] = '{#'.$cat_id.'}';
625 - endforeach;
626 - else :
627 - unset($link->settings['cats']);
628 - endif;
629 -
630 - // Tags
631 - if (isset($GLOBALS['fwp_post']['tags_input'])) :
632 - $link->settings['tags'] = array();
633 - foreach (explode(',', $GLOBALS['fwp_post']['tags_input']) as $tag) :
634 - $link->settings['tags'][] = trim($tag);
635 - endforeach;
636 - endif;
637 -
638 - // Post status, comment status, ping status
639 - foreach (array('post', 'comment', 'ping') as $what) :
640 - $sfield = "feed_{$what}_status";
641 - if (isset($GLOBALS['fwp_post'][$sfield])) :
642 - if ($GLOBALS['fwp_post'][$sfield]=='site-default') :
643 - unset($link->settings["{$what} status"]);
644 - else :
645 - $link->settings["{$what} status"] = $GLOBALS['fwp_post'][$sfield];
646 - endif;
647 - endif;
648 - endforeach;
649 -
650 - // Unfamiliar author, unfamiliar categories
651 - foreach (array("author", "category") as $what) :
652 - $sfield = "unfamiliar_{$what}";
653 - if (isset($GLOBALS['fwp_post'][$sfield])) :
654 - if ('site-default'==$GLOBALS['fwp_post'][$sfield]) :
655 - unset($link->settings["unfamiliar {$what}"]);
656 - elseif ('newuser'==$GLOBALS['fwp_post'][$sfield]) :
657 - $newuser_name = trim($GLOBALS['fwp_post']["{$sfield}_newuser"]);
658 - if (strlen($newuser_name) > 0) :
659 - $userdata = array();
660 - $userdata['ID'] = NULL;
661 -
662 - $userdata['user_login'] = sanitize_user($newuser_name);
663 - $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
664 -
665 - $userdata['user_nicename'] = sanitize_title($newuser_name);
666 - $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
667 -
668 - $userdata['display_name'] = $wpdb->escape($newuser_name);
669 -
670 - $newuser_id = wp_insert_user($userdata);
671 - if (is_numeric($newuser_id)) :
672 - $link->settings["unfamiliar {$what}"] = $newuser_id;
673 - else :
674 - // TODO: Add some error detection and reporting
675 - endif;
676 - else :
677 - // TODO: Add some error reporting
678 - endif;
679 - else :
680 - $link->settings["unfamiliar {$what}"] = $GLOBALS['fwp_post'][$sfield];
681 - endif;
682 - endif;
683 - endforeach;
684 -
685 - // Handle author mapping rules
686 - if (isset($GLOBALS['fwp_post']['author_rules_name']) and isset($GLOBALS['fwp_post']['author_rules_action'])) :
687 - unset($link->settings['map authors']);
688 - foreach ($GLOBALS['fwp_post']['author_rules_name'] as $key => $name) :
689 - // Normalize for case and whitespace
690 - $name = strtolower(trim($name));
691 - $author_action = strtolower(trim($GLOBALS['fwp_post']['author_rules_action'][$key]));
692 -
693 - if (strlen($name) > 0) :
694 - if ('newuser' == $author_action) :
695 - $newuser_name = trim($GLOBALS['fwp_post']['author_rules_newuser'][$key]);
696 - if (strlen($newuser_name) > 0) :
697 - $userdata = array();
698 - $userdata['ID'] = NULL;
699 -
700 - $userdata['user_login'] = sanitize_user($newuser_name);
701 - $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
702 -
703 - $userdata['user_nicename'] = sanitize_title($newuser_name);
704 - $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
705 -
706 - $userdata['display_name'] = $wpdb->escape($newuser_name);
707 -
708 - $newuser_id = wp_insert_user($userdata);
709 - if (is_numeric($newuser_id)) :
710 - $link->settings['map authors']['name'][$name] = $newuser_id;
711 - else :
712 - // TODO: Add some error detection and reporting
713 - endif;
714 - else :
715 - // TODO: Add some error reporting
716 - endif;
717 - else :
718 - $link->settings['map authors']['name'][$name] = $author_action;
719 - endif;
720 - endif;
721 - endforeach;
722 - endif;
723 -
724 - if (isset($GLOBALS['fwp_post']['add_author_rule_name']) and isset($GLOBALS['fwp_post']['add_author_rule_action'])) :
725 - $name = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_name']));
726 - $author_action = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_action']));
727 - if (strlen($name) > 0) :
728 - if ('newuser' == $author_action) :
729 - $newuser_name = trim($GLOBALS['fwp_post']['add_author_rule_newuser']);
730 - if (strlen($newuser_name) > 0) :
731 - $userdata = array();
732 - $userdata['ID'] = NULL;
733 -
734 - $userdata['user_login'] = sanitize_user($newuser_name);
735 - $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
736 -
737 - $userdata['user_nicename'] = sanitize_title($newuser_name);
738 - $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
739 -
740 - $userdata['display_name'] = $wpdb->escape($newuser_name);
741 -
742 - $newuser_id = wp_insert_user($userdata);
743 - if (is_numeric($newuser_id)) :
744 - $link->settings['map authors']['name'][$name] = $newuser_id;
745 - else :
746 - // TODO: Add some error detection and reporting
747 - endif;
748 - else :
749 - // TODO: Add some error reporting
750 - endif;
751 - else :
752 - $link->settings['map authors']['name'][$name] = $author_action;
753 - endif;
754 - endif;
755 - endif;
756 -
757 - if (isset($GLOBALS['fwp_post']['cat_split'])) :
758 - if (strlen(trim($GLOBALS['fwp_post']['cat_split'])) > 0) :
759 - $link->settings['cat_split'] = trim($GLOBALS['fwp_post']['cat_split']);
760 - else :
761 - unset($link->settings['cat_split']);
762 - endif;
763 - endif;
764 -
765 - $alter[] = "link_notes = '".$wpdb->escape($link->settings_to_notes())."'";
766 -
767 - $alter_set = implode(", ", $alter);
768 -
769 - // issue update query
770 - $result = $wpdb->query("
771 - UPDATE $wpdb->links
772 - SET $alter_set
773 - WHERE link_id='$link_id'
774 - ");
775 - $updated_link = true;
776 -
777 - // reload link information from DB
778 - if (function_exists('clean_bookmark_cache')) :
779 - clean_bookmark_cache($link_id);
780 - endif;
781 - $link =& new SyndicatedLink($link_id);
782 - else :
783 - $updated_link = false;
513 + if ($changed):
514 + $home = $existingLink->homepage(/*from feed=*/ false);
515 + $name = $existingLink->name(/*from feed=*/ false);
516 + ?>
517 +<div class="updated"><p>Feed for <a href="<?php echo esc_html($home); ?>"><?php echo esc_html($name); ?></a>
518 +updated to &lt;<a href="<?php echo esc_html($fwp_post['feed']); ?>"><?php echo esc_html($fwp_post['feed']); ?></a>&gt;.</p></div>
519 + <?php
784 520 endif;
785 -
786 - $db_link = $link->link;
787 - $link_url = wp_specialchars($db_link->link_url, 1);
788 - $link_name = wp_specialchars($db_link->link_name, 1);
789 - $link_description = wp_specialchars($db_link->link_description, 'both');
790 - $link_rss_uri = wp_specialchars($db_link->link_rss, 'both');
791 -
792 - $post_status_global = get_option('feedwordpress_syndicated_post_status');
793 - $comment_status_global = get_option('feedwordpress_syndicated_comment_status');
794 - $ping_status_global = get_option('feedwordpress_syndicated_ping_status');
795 -
796 - $status['post'] = array('publish' => '', 'private' => '', 'draft' => '', 'site-default' => '');
797 - if (SyndicatedPost::use_api('post_status_pending')) :
798 - $status['post']['pending'] = '';
799 - endif;
800 -
801 - $status['comment'] = array('open' => '', 'closed' => '', 'site-default' => '');
802 - $status['ping'] = array('open' => '', 'closed' => '', 'site-default' => '');
803 -
804 - foreach (array('post', 'comment', 'ping') as $what) :
805 - if (isset($link->settings["{$what} status"])) :
806 - $status[$what][$link->settings["{$what} status"]] = ' checked="checked"';
807 - else :
808 - $status[$what]['site-default'] = ' checked="checked"';
809 - endif;
810 - endforeach;
811 -
812 - $unfamiliar['author'] = array ('create' => '','default' => '','filter' => '');
813 - $unfamiliar['category'] = array ('create'=>'','tag' => '','default'=>'','filter'=>'');
814 -
815 - foreach (array('author', 'category') as $what) :
816 - if (is_string($link->settings["unfamiliar {$what}"]) and
817 - array_key_exists($link->settings["unfamiliar {$what}"], $unfamiliar[$what])) :
818 - $key = $link->settings["unfamiliar {$what}"];
819 - else:
820 - $key = 'site-default';
821 - endif;
822 - $unfamiliar[$what][$key] = ' checked="checked"';
823 - endforeach;
824 -
825 - if (is_array($link->settings['cats'])) : $cats = $link->settings['cats'];
826 - else : $cats = array();
827 - endif;
828 -
829 - $dogs = SyndicatedPost::category_ids($cats, /*unfamiliar=*/ NULL);
830 - else :
831 - die( __('Link not found.') );
832 521 endif;
522 + endif;
833 523
834 - ?>
835 -<script type="text/javascript">
836 - function flip_hardcode (item) {
837 - ed=document.getElementById('basics-'+item+'-edit');
838 - view=document.getElementById('basics-'+item+'-view');
839 -
840 - o = document.getElementById('basics-hardcode-'+item);
841 - if (o.value=='yes') { ed.style.display='inline'; view.style.display='none'; }
842 - else { ed.style.display='none'; view.style.display='inline'; }
843 - }
844 - function flip_newuser (item) {
845 - rollup=document.getElementById(item);
846 - newuser=document.getElementById(item+'-newuser');
847 - sitewide=document.getElementById(item+'-default');
848 - if (rollup) {
849 - if ('newuser'==rollup.value) {
850 - if (newuser) newuser.style.display='block';
851 - if (sitewide) sitewide.style.display='none';
852 - } else if ('site-default'==rollup.value) {
853 - if (newuser) newuser.style.display='none';
854 - if (sitewide) sitewide.style.display='block';
855 - } else {
856 - if (newuser) newuser.style.display='none';
857 - if (sitewide) sitewide.style.display='none';
858 - }
859 - }
860 - }
861 -</script>
862 -
863 -<?php if ($updated_link) : ?>
864 -<div class="updated"><p>Syndicated feed settings updated.</p></div>
865 -<?php endif; ?>
866 -
867 -<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
868 -<div class="wrap">
869 -<input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
870 -<input type="hidden" name="action" value="linkedit" />
871 -<input type="hidden" name="save" value="link" />
872 -
873 -<h2>Edit a syndicated feed:</h2>
874 -<div id="poststuff">
875 -<?php fwp_linkedit_single_submit($status); ?>
876 -
877 -<div id="post-body">
878 -<?php fwp_option_box_opener('Feed Information', 'feedinformationdiv'); ?>
879 - <table class="editform" width="100%" cellspacing="2" cellpadding="5">
880 - <tr>
881 - <th scope="row" width="20%"><?php _e('Feed URI:') ?></th>
882 - <td width="60%"><a href="<?php echo wp_specialchars($link_rss_uri, 'both'); ?>"><?php echo $link_rss_uri; ?></a>
883 - (<a href="<?php echo FEEDVALIDATOR_URI; ?>?url=<?php echo urlencode($link_rss_uri); ?>"
884 - title="Check feed &lt;<?php echo wp_specialchars($link_rss_uri, 'both'); ?>&gt; for validity">validate</a>)
885 - </td>
886 - <td width="20%"><input type="submit" name="feedfinder" value="switch &rarr;" style="font-size:smaller" /></td>
887 - </tr>
888 - <tr>
889 - <th scope="row" width="20%"><?php _e('Link Name:') ?></th>
890 - <td width="60%"><input type="text" id="basics-name-edit" name="name"
891 - value="<?php echo $link_name; ?>" style="width: 95%" />
892 - <span id="basics-name-view"><strong><?php echo $link_name; ?></strong></span>
893 - </td>
894 - <td>
895 - <select id="basics-hardcode-name" onchange="flip_hardcode('name')" name="hardcode_name">
896 - <option value="no" <?php echo $link->hardcode('name')?'':'selected="selected"'; ?>>update automatically</option>
897 - <option value="yes" <?php echo $link->hardcode('name')?'selected="selected"':''; ?>>edit manually</option>
898 - </select>
899 - </td>
900 - </tr>
901 - <tr>
902 - <th scope="row" width="20%"><?php _e('Short description:') ?></th>
903 - <td width="60%">
904 - <input id="basics-description-edit" type="text" name="description" value="<?php echo $link_description; ?>" style="width: 95%" />
905 - <span id="basics-description-view"><strong><?php echo $link_description; ?></strong></span>
906 - </td>
907 - <td>
908 - <select id="basics-hardcode-description" onchange="flip_hardcode('description')"
909 - name="hardcode_description">
910 - <option value="no" <?php echo $link->hardcode('description')?'':'selected="selected"'; ?>>update automatically</option>
911 - <option value="yes" <?php echo $link->hardcode('description')?'selected="selected"':''; ?>>edit manually</option>
912 - </select></td>
913 - </tr>
914 - <tr>
915 - <th width="20%" scope="row"><?php _e('Homepage:') ?></th>
916 - <td width="60%">
917 - <input id="basics-url-edit" type="text" name="linkurl" value="<?php echo $link_url; ?>" style="width: 95%;" />
918 - <a id="basics-url-view" href="<?php echo $link_url; ?>"><?php echo $link_url; ?></a></td>
919 - <td>
920 - <select id="basics-hardcode-url" onchange="flip_hardcode('url')" name="hardcode_url">
921 - <option value="no"<?php echo $link->hardcode('url')?'':' selected="selected"'; ?>>update automatically</option>
922 - <option value="yes"<?php echo $link->hardcode('url')?' selected="selected"':''; ?>>edit manually</option>
923 - </select></td></tr>
524 + if (isset($existingLink)) :
525 + do_action('feedwordpress_admin_switchfeed', $fwp_post['feed'], $existingLink);
526 + endif;
924 527
925 - <tr>
926 - <th width="20%"><?php _e('Last update') ?>:</th>
927 - <td colspan="2"><?php
928 - if (isset($link->settings['update/last'])) :
929 - echo fwp_time_elapsed($link->settings['update/last'])." ";
930 - else :
931 - echo " none yet";
932 - endif;
933 - ?></td></tr>
934 - <tr><th width="20%">Next update:</th>
935 - <td colspan="2"><?php
936 - $holdem = (isset($link->settings['update/hold']) ? $link->settings['update/hold'] : 'scheduled');
937 - ?>
938 - <select name="update_schedule">
939 - <option value="scheduled"<?php echo ($holdem=='scheduled')?' selected="selected"':''; ?>>update on schedule <?php
940 - echo " (";
941 - if (isset($link->settings['update/ttl']) and is_numeric($link->settings['update/ttl'])) :
942 - if (isset($link->settings['update/timed']) and $link->settings['update/timed']=='automatically') :
943 - echo 'next: ';
944 - $next = $link->settings['update/last'] + ((int) $link->settings['update/ttl'] * 60);
945 - if (strftime('%x', time()) != strftime('%x', $next)) :
946 - echo strftime('%x', $next)." ";
947 - endif;
948 - echo strftime('%X', $link->settings['update/last']+((int) $link->settings['update/ttl']*60));
949 - else :
950 - echo "every ".$link->settings['update/ttl']." minute".(($link->settings['update/ttl']!=1)?"s":"");
951 - endif;
952 - else:
953 - echo "next scheduled update";
954 - endif;
955 - echo ")";
956 - ?></option>
957 - <option value="next"<?php echo ($holdem=='next')?' selected="selected"':''; ?>>update ASAP</option>
958 - <option value="ping"<?php echo ($holdem=='ping')?' selected="selected"':''; ?>>update only when pinged</option>
959 - </select></tr>
960 - </table>
961 -<?php fwp_option_box_closer(); ?>
962 -
963 -<script type="text/javascript">
964 -flip_hardcode('name');
965 -flip_hardcode('description');
966 -flip_hardcode('url');
967 -</script>
968 -
969 -<?php fwp_linkedit_periodic_submit(); ?>
970 -
971 -<?php
972 -if (!(isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25)) :
973 - fwp_option_box_opener('Syndicated Posts', 'syndicatedpostsdiv', 'postbox');
974 -?>
975 -<table class="editform" width="75%" cellspacing="2" cellpadding="5">
976 -<tr><th width="27%" scope="row" style="vertical-align:top">Publication:</th>
977 -<td width="73%" style="vertical-align:top"><ul style="margin:0; list-style:none">
978 -<li><label><input type="radio" name="feed_post_status" value="site-default"
979 -<?php echo $status['post']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
980 -(currently: <strong><?php echo ($post_status_global ? $post_status_global : 'publish'); ?></strong>)</label></li>
981 -<li><label><input type="radio" name="feed_post_status" value="publish"
982 -<?php echo $status['post']['publish']; ?> /> Publish posts from this feed immediately</label></li>
983 -
984 -<?php if (SyndicatedPost::use_api('post_status_pending')) : ?>
985 -<li><label><input type="radio" name="feed_post_status" value="pending"
986 -<?php echo $status['post']['pending']; ?>/> Hold posts from this feed for review; mark as Pending</label></li>
987 -<?php endif; ?>
988 -
989 -<li><label><input type="radio" name="feed_post_status" value="draft"
990 -<?php echo $status['post']['draft']; ?> /> Save posts from this feed as drafts</label></li>
991 -<li><label><input type="radio" name="feed_post_status" value="private"
992 -<?php echo $status['post']['private']; ?> /> Save posts from this feed as private posts</label></li>
993 -</ul></td>
994 -</tr>
995 -</table>
996 -<?php
997 - fwp_option_box_closer();
998 - fwp_linkedit_periodic_submit();
999 -endif;
1000 -
1001 - fwp_option_box_opener(__('Categories'), 'categorydiv', 'postbox');
1002 - fwp_category_box($dogs, 'all syndicated posts from this feed');
1003 -?>
1004 -<table>
1005 -<tr>
1006 -<th width="20%" scope="row" style="vertical-align:top">Unfamiliar categories:</th>
1007 -<td width="80%"><p>When one of the categories on a syndicated post is a category that FeedWordPress has not encountered before ...</p>
1008 -
1009 -<ul style="margin: 0; list-style:none">
1010 -<li><label><input type="radio" name="unfamiliar_category" value="site-default"<?php echo $unfamiliar['category']['site-default']; ?> /> use the site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
1011 -(currently <strong><?php echo FeedWordPress::on_unfamiliar('category'); ?></strong>)</label></li>
1012 -<li><label><input type="radio" name="unfamiliar_category" value="create"<?php echo $unfamiliar['category']['create']; ?> /> create a new category</label></li>
1013 -<?php if (fwp_test_wp_version(FWP_SCHEMA_23)) : ?>
1014 -<li><label><input type="radio" name="unfamiliar_category" value="tag"<?php echo $unfamiliar['category']['tag']; ?>/> create a new tag</label></li>
1015 -<?php endif; ?>
1016 -<li><label><input type="radio" name="unfamiliar_category" value="default"<?php echo $unfamiliar['category']['default']; ?> /> don't create new categories<?php if (fwp_test_wp_version(FWP_SCHEMA_23)) : ?> or tags<?php endif; ?></label></li>
1017 -<li><label><input type="radio" name="unfamiliar_category" value="filter"<?php echo $unfamiliar['category']['filter']; ?> /> don't create new categories<?php if (fwp_test_wp_version(FWP_SCHEMA_23)) : ?> or tags<?php endif; ?> and don't syndicate posts unless they match at least one familiar category</label></li>
1018 -</ul></td>
1019 -</tr>
1020 -
1021 -<tr>
1022 -<th width="20%" scope="row" style="vertical-align:top">Multiple categories:</th>
1023 -<td width="80%">
1024 -<input type="text" size="20" id="cat_split" name="cat_split" value="<?php if (isset($link->settings['cat_split'])) : echo htmlspecialchars($link->settings['cat_split']); endif; ?>" /><br/>
1025 -Enter a <a href="http://us.php.net/manual/en/reference.pcre.pattern.syntax.php">Perl-compatible regular expression</a> here if the feed provides multiple
1026 -categories in a single category element. The regular expression should match
1027 -the characters used to separate one category from the next. If the feed uses
1028 -spaces (like <a href="http://del.icio.us/">del.icio.us</a>), use the pattern "\s".
1029 -If the feed does not provide multiple categories in a single element, leave this
1030 -blank.</td>
1031 -</tr>
1032 -</table>
1033 -<?php
1034 - fwp_option_box_closer();
1035 - fwp_linkedit_periodic_submit();
1036 -
1037 -if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
1038 - fwp_tags_box($link->settings['tags']);
1039 - fwp_linkedit_periodic_submit();
1040 -endif; ?>
1041 -
1042 -<?php fwp_option_box_opener('Syndicated Authors', 'authordiv', 'postbox'); ?>
1043 -<?php $authorlist = fwp_author_list(); ?>
1044 -<table>
1045 -<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">For posts by authors that haven't been syndicated before:</th></tr>
1046 -<tr>
1047 - <th style="text-align: left">Posts by new authors</th>
1048 - <td>
1049 - <select id="unfamiliar-author" name="unfamiliar_author" onchange="flip_newuser('unfamiliar-author');">
1050 - <option value="site-default"<?php if (!isset($link->settings['unfamiliar author'])) : ?>selected="selected"<?php endif; ?>>are handled using site-wide settings</option>
1051 - <option value="create"<?php if ('create'==$link->settings['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>create a new author account</option>
1052 - <?php foreach ($authorlist as $author_id => $author_name) : ?>
1053 - <option value="<?php echo $author_id; ?>"<?php if ($author_id==$link->settings['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>are assigned to <?php echo $author_name; ?></option>
1054 - <?php endforeach; ?>
1055 - <option value="newuser">will be assigned to a new user...</option>
1056 - <option value="filter"<?php if ('filter'==$link->settings['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>get filtered out</option>
1057 - </select>
1058 - </td>
1059 - <td>
1060 - <div id="unfamiliar-author-default">Site-wide settings can be set in <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a></div>
1061 - <div id="unfamiliar-author-newuser">named <input type="text" name="unfamiliar_author_newuser" value="" /></div>
1062 - </td>
1063 -</tr>
1064 -
1065 -<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">For posts by specific authors. Blank out a name to delete the rule.</th></tr>
1066 -
1067 -<?php if (isset($link->settings['map authors'])) : $i=0; foreach ($link->settings['map authors'] as $author_rules) : foreach ($author_rules as $author_name => $author_action) : $i++; ?>
1068 -<tr>
1069 - <th style="text-align: left">Posts by <input type="text" name="author_rules_name[]" value="<?php echo htmlspecialchars($author_name); ?>" /></th>
1070 - <td>
1071 - <select id="author-rules-<?php echo $i; ?>" name="author_rules_action[]" onchange="flip_newuser('author-rules-<?php echo $i; ?>');">
1072 - <?php foreach ($authorlist as $local_author_id => $local_author_name) : ?>
1073 - <option value="<?php echo $local_author_id; ?>"<?php if ($local_author_id==$author_action) : echo ' selected="selected"'; endif; ?>>are assigned to <?php echo $local_author_name; ?></option>
1074 - <?php endforeach; ?>
1075 - <option value="newuser">will be assigned to a new user...</option>
1076 - <option value="filter"<?php if ('filter'==$author_action) : echo ' selected="selected"'; endif; ?>>get filtered out</option>
1077 - </select>
1078 - </td>
1079 - <td><div id="author-rules-<?php echo $i; ?>-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></div></td>
1080 -</tr>
1081 -<?php endforeach; endforeach; endif; ?>
1082 -
1083 -<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">Fill in to set up a new rule:</th></tr>
1084 -
1085 -<tr>
1086 - <th style="text-align: left">Posts by <input type="text" name="add_author_rule_name" /></th>
1087 - <td>
1088 - <select id="add-author-rule" name="add_author_rule_action" onchange="flip_newuser('add-author-rule');">
1089 - <?php foreach ($authorlist as $author_id => $author_name) : ?>
1090 - <option value="<?php echo $author_id; ?>">are assigned to <?php echo $author_name; ?></option>
1091 - <?php endforeach; ?>
1092 - <option value="newuser">will be assigned to a new user...</option>
1093 - <option value="filter">get filtered out</option>
1094 - </select>
1095 - </td>
1096 - <td><div id="add-author-rule-newuser">named <input type="text" name="add_author_rule_newuser" value="" /></div></td>
1097 -</tr>
1098 -
1099 -</table>
1100 -<?php fwp_option_box_closer(); ?>
1101 -
1102 -<script>
1103 - flip_newuser('unfamiliar-author');
1104 -<?php for ($j=1; $j<=$i; $j++) : ?>
1105 - flip_newuser('author-rules-<?php echo $j; ?>');
1106 -<?php endfor; ?>
1107 - flip_newuser('add-author-rule');
1108 -</script>
1109 -
1110 -<?php
1111 - fwp_linkedit_periodic_submit();
1112 - fwp_option_box_opener('Comments & Pings', 'commentstatusdiv', 'postbox');
1113 -?>
1114 -<table class="editform" width="75%" cellspacing="2" cellpadding="5">
1115 -<tr><th width="27%" scope="row" style="vertical-align:top"><?php print __('Comments'); ?>:</th>
1116 -<td width="73%"><ul style="margin:0; list-style:none">
1117 -<li><label><input type="radio" name="feed_comment_status" value="site-default"
1118 -<?php echo $status['comment']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
1119 -(currently: <strong><?php echo ($comment_status_global ? $comment_status_global : 'closed'); ?>)</strong></label></li>
1120 -<li><label><input type="radio" name="feed_comment_status" value="open"
1121 -<?php echo $status['comment']['open']; ?> /> Allow comments on syndicated posts from this feed</label></li>
1122 -<li><label><input type="radio" name="feed_comment_status" value="closed"
1123 -<?php echo $status['comment']['closed']; ?> /> Don't allow comments on syndicated posts from this feed</label></li>
1124 -</ul></td></tr>
1125 -
1126 -<tr><th width="27%" scope="row" style="vertical-align:top"><?php print __('Pings'); ?>:</th>
1127 -<td width="73%"><ul style="margin:0; list-style:none">
1128 -<li><label><input type="radio" name="feed_ping_status" value="site-default"
1129 -<?php echo $status['ping']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
1130 -(currently: <strong><?php echo ($ping_status_global ? $ping_status_global : 'closed'); ?>)</strong></label></li>
1131 -<li><label><input type="radio" name="feed_ping_status" value="open"
1132 -<?php echo $status['ping']['open']; ?> /> Accept pings on syndicated posts from this feed</label></li>
1133 -<li><label><input type="radio" name="feed_ping_status" value="closed"
1134 -<?php echo $status['ping']['closed']; ?> /> Don't accept pings on syndicated posts from this feed</label></li>
1135 -</ul></td></tr>
1136 -
1137 -</table>
1138 -<?php fwp_option_box_closer(); ?>
1139 -<?php fwp_linkedit_periodic_submit(); ?>
1140 -
1141 -<?php fwp_option_box_opener('Custom Settings (for use in templates)', 'postcustom', 'postbox'); ?>
1142 -<div id="postcustomstuff">
1143 -<table id="meta-list" cellpadding="3">
1144 - <tr>
1145 - <th>Key</th>
1146 - <th>Value</th>
1147 - <th>Action</th>
1148 - </tr>
1149 -
1150 -<?php
1151 - $i = 0;
1152 - foreach ($link->settings as $key => $value) :
1153 - if (!preg_match("\007^((".implode(')|(', $special_settings)."))$\007i", $key)) :
1154 -?>
1155 - <tr style="vertical-align:top">
1156 - <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo wp_specialchars($key, 'both'); ?>" />
1157 - <input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo wp_specialchars($key, 'both'); ?>" /></th>
1158 - <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>
1159 - <td width="10%"><select name="notes[<?php echo $i; ?>][action]">
1160 - <option value="update">save changes</option>
1161 - <option value="delete">delete this setting</option>
1162 - </select></td>
1163 - </tr>
1164 -<?php
1165 - $i++;
1166 - endif;
1167 - endforeach;
1168 -?>
1169 - <tr>
1170 - <th scope="row"><input type="text" size="10" name="notes[<?php echo $i; ?>][key1]" value="" /></th>
1171 - <td><textarea name="notes[<?php echo $i; ?>][value]" rows="2" cols="40"></textarea></td>
1172 - <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
1173 - </tr>
1174 -</table>
1175 -<?php fwp_option_box_closer(); ?>
1176 -
1177 -<?php fwp_linkedit_periodic_submit(); ?>
1178 -<?php fwp_linkedit_single_submit_closer(); ?>
1179 -</div> <!-- id="post-body" -->
1180 -</div> <!-- id="poststuff" -->
1181 -</div>
1182 - <?php
528 + if (!$changed) :
529 + ?>
530 +<div class="updated"><p>Nothing was changed.</p></div>
531 + <?php
1183 532 endif;
1184 - return false; // Don't continue
533 + return true; // Continue
1185 534 }
1186 535
1187 536 function fwp_multidelete_page () {
1188 537 global $wpdb;
1189 538
1190 - check_admin_referer(); // Make sure the referers are kosher
539 + // If this is a POST, validate source and user credentials
540 + FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_feeds', /*capability=*/ 'manage_links');
1191 541
1192 542 $link_ids = (isset($_REQUEST['link_ids']) ? $_REQUEST['link_ids'] : array());
1193 543 if (isset($_REQUEST['link_id'])) : array_push($link_ids, $_REQUEST['link_id']); endif;
1194 544
1195 - if (!current_user_can('manage_links')):
1196 - die (__("Cheatin' uh ?"));
1197 - elseif (isset($GLOBALS['fwp_post']['confirm']) and $GLOBALS['fwp_post']['confirm']=='Delete'):
1198 - foreach ($GLOBALS['fwp_post']['link_action'] as $link_id => $what) :
545 + if (isset($GLOBALS['fwp_post']['confirm']) and $GLOBALS['fwp_post']['confirm']=='Delete'):
546 + if (isset($GLOBALS['fwp_post']['link_action']) and is_array($GLOBALS['fwp_post']['link_action'])) :
547 + $actions = $GLOBALS['fwp_post']['link_action'];
548 + else :
549 + $actions = array();
550 + endif;
551 +
552 + foreach ($actions as $link_id => $what) :
1199 553 $do_it[$what][] = $link_id;
1200 554 endforeach;
1201 555
1202 556 $alter = array();
@@ -1276,17 +630,18 @@
1276 630 ");
1277 631 ?>
1278 632 <form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
1279 633 <div class="wrap">
634 +<?php FeedWordPressCompatibility::stamp_nonce('feedwordpress_feeds'); ?>
1280 635 <input type="hidden" name="action" value="Unsubscribe" />
1281 636 <input type="hidden" name="confirm" value="Delete" />
1282 637
1283 638 <h2>Unsubscribe from Syndicated Links:</h2>
1284 639 <?php foreach ($targets as $link) :
1285 - $link_url = wp_specialchars($link->link_url, 1);
1286 - $link_name = wp_specialchars($link->link_name, 1);
1287 - $link_description = wp_specialchars($link->link_description, 'both');
1288 - $link_rss = wp_specialchars($link->link_rss, 'both');
640 + $link_url = esc_html($link->link_url);
641 + $link_name = esc_html($link->link_name);
642 + $link_description = esc_html($link->link_description);
643 + $link_rss = esc_html($link->link_rss);
1289 644 ?>
1290 645 <fieldset>
1291 646 <legend><?php echo $link_name; ?></legend>
1292 647 <table class="editform" width="100%" cellspacing="2" cellpadding="5">
@@ -1330,6 +685,7 @@
1330 685 return false; // Don't continue on to Syndicated Sites listing
1331 686 endif;
1332 687 }
1333 688
1334 - fwp_syndication_manage_page();
689 + $syndicationPage = new FeedWordPressSyndicationPage;
690 + $syndicationPage->display();
1335 691