PluginProbe
FeedWordPress / 2014.0805
FeedWordPress v2014.0805
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 | admin-ui.php +951 -455 2009.11122014.0805 View file →
@@ -1,11 +1,14 @@
1 1 <?php
2 2 class FeedWordPressAdminPage {
3 3 var $context;
4 4 var $updated = false;
5 + var $mesg = NULL;
6 +
5 7 var $link = NULL;
6 8 var $dispatch = NULL;
7 9 var $filename = NULL;
10 + var $pagenames = array();
8 11
9 12 /**
10 13 * Construct the admin page object.
11 14 *
@@ -20,11 +23,136 @@
20 23 $this->context .= 'forfeed';
21 24 endif;
22 25 } /* FeedWordPressAdminPage constructor */
23 26
27 + function pageslug () {
28 + $slug = preg_replace('/FeedWordPress(.*)Page/', '$1', get_class($this));
29 + return strtolower($slug);
30 + }
31 +
32 + function pagename ($context = NULL) {
33 + if (is_null($context)) :
34 + $context = 'default';
35 + endif;
36 +
37 + if (isset($this->pagenames[$context])) :
38 + $name = $this->pagenames[$context];
39 + elseif (isset($tis->pagenames['default'])) :
40 + $name = $this->pagenames['default'];
41 + else :
42 + $name = $this->pageslug();
43 + endif;
44 + return __($name);
45 + } /* FeedWordPressAdminPage::pagename () */
46 +
47 + function accept_POST ($post) {
48 + if ($this->for_feed_settings() and $this->update_requested_in($post)) :
49 + $this->update_feed();
50 + elseif ($this->save_requested_in($post)) : // User mashed Save Changes
51 + $this->save_settings($post);
52 + endif;
53 + do_action($this->dispatch.'_post', $post, $this);
54 + }
55 +
56 + function update_feed () {
57 + global $feedwordpress;
58 +
59 + add_action('feedwordpress_check_feed', 'update_feeds_mention');
60 + add_action('feedwordpress_check_feed_complete', 'update_feeds_finish', 10, 3);
61 +
62 + print '<div class="updated">';
63 + print "<ul>";
64 + $uri = $this->link->uri();
65 + $displayUrl = $uri;
66 +
67 + // check for effects of an effective-url filter
68 + $effectiveUrl = $link->uri(array('fetch' => true));
69 + if ($uri != $effectiveUrl) : $displayUrl .= ' | ' . $effectiveUrl; endif;
70 +
71 + $delta = $feedwordpress->update($uri);
72 + print "</ul>";
73 +
74 + if (!is_null($delta)) :
75 + echo "<p><strong>Update complete.</strong>".fwp_update_set_results_message($delta)."</p>";
76 + echo "\n"; flush();
77 + else :
78 + $effectiveUrl = esc_html($effectiveUrl);
79 + echo "<p><strong>Error:</strong> There was a problem updating <a href=\"$effectiveUrl\">$displayUrl</a></p>\n";
80 + endif;
81 + print "</div>\n";
82 + remove_action('feedwordpress_check_feed', 'update_feeds_mention');
83 + remove_action('feedwordpress_check_feed_complete', 'update_feeds_finish', 10, 3);
84 + }
85 +
86 + function save_settings ($post) {
87 + do_action($this->dispatch.'_save', $post, $this);
88 +
89 + if ($this->for_feed_settings()) :
90 + // Save settings
91 + $this->link->save_settings(/*reload=*/ true);
92 + $this->updated = true;
93 +
94 + // Reset, reload
95 + $link_id = $this->link->id;
96 + unset($this->link);
97 + $this->link = new SyndicatedLink($link_id);
98 + else :
99 + $this->updated = true;
100 + endif;
101 + } /* FeedWordPressAdminPage::save_settings () */
102 +
24 103 function for_feed_settings () { return (is_object($this->link) and method_exists($this->link, 'found') and $this->link->found()); }
25 104 function for_default_settings () { return !$this->for_feed_settings(); }
26 105
106 + function setting ($names, $fallback_value = NULL, $params = array()) {
107 + if (!is_array($params)) :
108 + $params = array('default' => $params);
109 + endif;
110 + $params = shortcode_atts(array(
111 + 'default' => 'default',
112 + 'fallback' => true,
113 + ), $params);
114 +
115 + if (is_string($names)) :
116 + $feed_name = $names;
117 + $global_name = 'feedwordpress_'.preg_replace('![\s/]+!', '_', $names);
118 + else :
119 + $feed_name = $names['feed'];
120 + $global_name = 'feedwordpress_'.$names['global'];
121 + endif;
122 +
123 + if ($this->for_feed_settings()) : // Check feed-specific setting first; fall back to global
124 + if (!$params['fallback']) : $global_name = NULL; endif;
125 + $ret = $this->link->setting($feed_name, $global_name, $fallback_value, $params['default']);
126 + else : // Check global setting
127 + $ret = get_option($global_name, $fallback_value);
128 + endif;
129 + return $ret;
130 + }
131 +
132 + function update_setting ($names, $value, $default = 'default') {
133 + if (is_string($names)) :
134 + $feed_name = $names;
135 + $global_name = 'feedwordpress_'.preg_replace('![\s/]+!', '_', $names);
136 + else :
137 + $feed_name = $names['feed'];
138 + $global_name = 'feedwordpress_'.$names['global'];
139 + endif;
140 +
141 + if ($this->for_feed_settings()) : // Update feed-specific setting
142 + $this->link->update_setting($feed_name, $value, $default);
143 + else : // Update global setting
144 + update_option($global_name, $value);
145 + endif;
146 + } /* FeedWordPressAdminPage::update_setting () */
147 +
148 + function save_requested_in ($post) {
149 + return (isset($post['save']) or isset($post['submit']));
150 + }
151 + function update_requested_in ($post) {
152 + return (isset($post['update']) and (strlen($post['update']) > 0));
153 + }
154 +
27 155 /*static*/ function submitted_link_id () {
28 156 global $fwp_post;
29 157
30 158 // Presume global unless we get a specific link ID
@@ -37,14 +165,14 @@
37 165 'feedfinder',
38 166 );
39 167 foreach ($submit_buttons as $field) :
40 168 if (isset($fwp_post[$field])) :
41 - $link_id = $_REQUEST['save_link_id'];
169 + $link_id = MyPHP::request('save_link_id');
42 170 endif;
43 171 endforeach;
44 -
172 +
45 173 if (is_null($link_id) and isset($_REQUEST['link_id'])) :
46 - $link_id = $_REQUEST['link_id'];
174 + $link_id = MyPHP::request('link_id');
47 175 endif;
48 176
49 177 return $link_id;
50 178 } /* FeedWordPressAdminPage::submitted_link_id() */
@@ -51,9 +179,9 @@
51 179
52 180 /*static*/ function submitted_link () {
53 181 $link_id = FeedWordPressAdminPage::submitted_link_id();
54 182 if (is_numeric($link_id) and $link_id) :
55 - $link =& new SyndicatedLink($link_id);
183 + $link = new SyndicatedLink($link_id);
56 184 else :
57 185 $link = NULL;
58 186 endif;
59 187 return $link;
@@ -61,9 +189,9 @@
61 189
62 190 function stamp_link_id ($field = null) {
63 191 if (is_null($field)) : $field = 'save_link_id'; endif;
64 192 ?>
65 - <input type="hidden" name="<?php print wp_specialchars($field, 'both'); ?>" value="<?php print ($this->for_feed_settings() ? $this->link->id : '*'); ?>" />
193 + <input type="hidden" name="<?php print esc_attr($field); ?>" value="<?php print ($this->for_feed_settings() ? $this->link->id : '*'); ?>" />
66 194 <?php
67 195 } /* FeedWordPressAdminPage::stamp_link_id () */
68 196
69 197 function these_posts_phrase () {
@@ -86,9 +214,9 @@
86 214 */
87 215 function meta_box_context () {
88 216 return $this->context;
89 217 } /* FeedWordPressAdminPage::meta_box_context () */
90 -
218 +
91 219 /**
92 220 * Outputs JavaScript to fix AJAX toggles settings.
93 221 *
94 222 * @uses FeedWordPressAdminPage::meta_box_context()
@@ -98,121 +226,174 @@
98 226 } /* FeedWordPressAdminPage::fix_toggles() */
99 227
100 228 function ajax_interface_js () {
101 229 ?>
102 -<script type="text/javascript">
103 230 function contextual_appearance (item, appear, disappear, value, visibleStyle, checkbox) {
104 231 if (typeof(visibleStyle)=='undefined') visibleStyle = 'block';
105 232
106 233 var rollup=document.getElementById(item);
107 - var newuser=document.getElementById(appear);
108 - var sitewide=document.getElementById(disappear);
109 234 if (rollup) {
110 235 if ((checkbox && rollup.checked) || (!checkbox && value==rollup.value)) {
111 - if (newuser) newuser.style.display=visibleStyle;
112 - if (sitewide) sitewide.style.display='none';
236 + jQuery('#'+disappear).hide();
237 + jQuery('#'+appear).show(600);
113 238 } else {
114 - if (newuser) newuser.style.display='none';
115 - if (sitewide) sitewide.style.display=visibleStyle;
239 + jQuery('#'+appear).hide();
240 + jQuery('#'+disappear).show(600);
116 241 }
117 242 }
118 243 }
119 -</script>
120 -
121 244 <?php
122 245 } /* FeedWordPressAdminPage::ajax_interface_js () */
123 246
247 + function admin_page_href ($page, $params = array(), $link = NULL) {
248 + global $fwp_path;
249 +
250 + // Merge in the page's filename
251 + $params = array_merge($params, array('page' => $fwp_path.'/'.$page));
252 +
253 + // If there is a link ID provided, then merge that in too.
254 + if (!is_null($link)) :
255 + $link_id = NULL;
256 + if (is_object($link)) :
257 + if (method_exists($link, 'found')) :
258 + // Is this a SyndicatedLink object?
259 + if ($link->found()) :
260 + $link_id = $link->link->link_id;
261 + endif;
262 + else :
263 + // Is this a wp_links table record?
264 + $link_id = $link->link_id;
265 + endif;
266 + else :
267 + // Is this just a numeric ID?
268 + $link_id = $link;
269 + endif;
270 +
271 + if (!is_null($link_id)) :
272 + $params = array_merge($params, array('link_id' => $link_id));
273 + endif;
274 + endif;
275 +
276 + return MyPHP::url(admin_url('admin.php'), $params);
277 + } /* FeedWordPressAdminPage::admin_page_href () */
278 +
279 + function display_feed_settings_page_links ($params = array()) {
280 + global $fwp_path;
281 +
282 + $params = wp_parse_args($params, array(
283 + 'before' => '',
284 + 'between' => ' | ',
285 + 'after' => '',
286 + 'long' => false,
287 + 'subscription' => $this->link,
288 + ));
289 + $sub = $params['subscription'];
290 +
291 + $links = array(
292 + "Feed" => array('page' => 'feeds-page.php', 'long' => 'Feeds & Updates'),
293 + "Posts" => array('page' => 'posts-page.php', 'long' => 'Posts & Links'),
294 + "Authors" => array('page' => 'authors-page.php', 'long' => 'Authors'),
295 + 'Categories' => array('page' => 'categories-page.php', 'long' => 'Categories & Tags'),
296 + );
297 +
298 + $link_id = NULL;
299 + if (is_object($sub)) :
300 + if (method_exists($sub, 'found')) :
301 + if ($sub->found()) :
302 + $link_id = $sub->link->link_id;
303 + endif;
304 + else :
305 + $link_id = $sub->link_id;
306 + endif;
307 + endif;
308 +
309 + print $params['before']; $first = true;
310 + foreach ($links as $label => $link) :
311 + if (!$first) : print $params['between']; endif;
312 +
313 + if (isset($link['url'])) : MyPHP::url($link['url'], array("link_id" => $link_id));
314 + else : $url = $this->admin_page_href($link['page'], array(), $sub);
315 + endif;
316 + $url = esc_html($url);
317 +
318 + if ($link['page']==basename($this->filename)) :
319 + print "<strong>";
320 + else :
321 + print "<a href=\"${url}\">";
322 + endif;
323 +
324 + if ($params['long']) : print esc_html(__($link['long']));
325 + else : print esc_html(__($label));
326 + endif;
327 +
328 + if ($link['page']==basename($this->filename)) :
329 + print "</strong>";
330 + else :
331 + print "</a>";
332 + endif;
333 +
334 + $first = false;
335 + endforeach;
336 + print $params['after'];
337 + } /* FeedWordPressAdminPage::display_feed_settings_page_links */
338 +
124 339 function display_feed_select_dropdown() {
125 340 $links = FeedWordPress::syndicated_links();
126 - if (fwp_test_wp_version(FWP_SCHEMA_27)) :
127 - ?>
128 - <style type="text/css">
129 - #post-search {
130 - float: right;
131 - margin:11px 12px 0;
132 - min-width: 130px;
133 - position:relative;
134 - }
135 - .fwpfs {
136 - color: #dddddd;
137 - background:#797979 url(<?php bloginfo('home') ?>/wp-admin/images/fav.png) repeat-x scroll left center;
138 - border-color:#777777 #777777 #666666 !important; -moz-border-radius-bottomleft:12px;
139 - -moz-border-radius-bottomright:12px;
140 - -moz-border-radius-topleft:12px;
141 - -moz-border-radius-topright:12px;
142 - border-style:solid;
143 - border-width:1px;
144 - line-height:15px;
145 - padding:3px 30px 4px 12px;
146 - }
147 - .fwpfs.slide-down {
148 - border-bottom-color: #626262;
149 - -moz-border-radius-bottomleft:0;
150 - -moz-border-radius-bottomright:0;
151 - -moz-border-radius-topleft:12px;
152 - -moz-border-radius-topright:12px;
153 - background-image:url(<?php bloginfo('home') ?>/wp-admin/images/fav-top.png);
154 - background-position:0 top;
155 - background-repeat:repeat-x;
156 - border-bottom-style:solid;
157 - border-bottom-width:1px;
158 - }
159 - </style>
160 -
161 - <script type="text/javascript">
162 - jQuery(document).ready(function($){
163 - $('.fwpfs').toggle(
164 - function(){$('.fwpfs').removeClass('slideUp').addClass('slideDown'); setTimeout(function(){if ( $('.fwpfs').hasClass('slideDown') ) { $('.fwpfs').addClass('slide-down'); }}, 10) },
165 - function(){$('.fwpfs').removeClass('slideDown').addClass('slideUp'); setTimeout(function(){if ( $('.fwpfs').hasClass('slideUp') ) { $('.fwpfs').removeClass('slide-down'); }}, 10) }
166 - );
167 - $('.fwpfs').bind(
168 - 'change',
169 - function () { this.form.submit(); }
170 - );
171 - $('#post-search .button').css( 'display', 'none' );
172 - });
173 - </script>
174 - <?php
175 - endif;
176 -
341 +
177 342 ?>
178 - <p id="post-search">
179 - <select name="link_id" class="fwpfs" style="max-width: 20.0em;">
343 + <div id="fwpfs-container"><ul class="subsubsub">
344 + <li><select name="link_id" class="fwpfs" style="max-width: 20.0em;">
180 345 <option value="*"<?php if ($this->for_default_settings()) : ?> selected="selected"<?php endif; ?>>- defaults for all feeds -</option>
181 346 <?php if ($links) : foreach ($links as $ddlink) : ?>
182 - <option value="<?php print (int) $ddlink->link_id; ?>"<?php if (!is_null($this->link) and ($this->link->id==$ddlink->link_id)) : ?> selected="selected"<?php endif; ?>><?php print wp_specialchars($ddlink->link_name, 1); ?></option>
347 + <option value="<?php print (int) $ddlink->link_id; ?>"<?php if (!is_null($this->link) and ($this->link->id==$ddlink->link_id)) : ?> selected="selected"<?php endif; ?>><?php print esc_html($ddlink->link_name); ?></option>
183 348 <?php endforeach; endif; ?>
184 349 </select>
185 - <input class="button" type="submit" name="go" value="<?php _e('Go') ?> &raquo;" />
186 - </p>
350 + <input id="fwpfs-button" class="button" type="submit" name="go" value="<?php _e('Go') ?> &raquo;" /></li>
351 +
187 352 <?php
353 + $this->display_feed_settings_page_links(array(
354 + 'before' => '<li>',
355 + 'between' => "</li>\n<li>",
356 + 'after' => '</li>',
357 + 'subscription' => $this->link,
358 + ));
359 +
360 + if ($this->for_feed_settings()) :
361 + ?>
362 + <li><input class="button" type="submit" name="update" value="Update Now" /></li>
363 + <?php
364 + endif;
365 + ?>
366 + </ul>
367 + </div>
368 + <?php
188 369 } /* FeedWordPressAdminPage::display_feed_select_dropdown() */
189 370
190 371 function display_sheet_header ($pagename = 'Syndication', $all = false) {
191 - if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_27)) :
192 - ?>
193 - <div class="icon32"><img src="<?php print wp_specialchars(WP_PLUGIN_URL.'/'.$GLOBALS['fwp_path'].'/feedwordpress.png', 1); ?>" alt="" /></div>
194 - <?php
195 - endif;
372 + global $fwp_path;
196 373 ?>
197 -
198 - <h2><?php print wp_specialchars(__($pagename.($all ? '' : ' Settings')), 1); ?><?php if ($this->for_feed_settings()) : ?>: <?php echo wp_specialchars($this->link->link->link_name, 1); ?><?php endif; ?></h2>
374 + <div class="icon32"><img src="<?php print esc_html(WP_PLUGIN_URL.'/'.$fwp_path.'/feedwordpress.png'); ?>" alt="" /></div>
375 + <h2><?php print esc_html(__($pagename.($all ? '' : ' Settings'))); ?><?php if ($this->for_feed_settings()) : ?>: <?php echo esc_html($this->link->name(/*from feed=*/ false)); ?><?php endif; ?></h2>
199 376 <?php
200 377 }
201 378
202 379 function display_update_notice_if_updated ($pagename = 'Syndication', $mesg = NULL) {
380 + if (!is_null($mesg)) :
381 + $this->mesg = $mesg;
382 + endif;
383 +
203 384 if ($this->updated) :
204 385 if ($this->updated === true) :
205 - $mesg = $pagename . ' settings updated.';
386 + $this->mesg = $pagename . ' settings updated.';
206 387 else :
207 - $mesg = $this->updated;
388 + $this->mesg = $this->updated;
208 389 endif;
209 390 endif;
210 -
211 - if (!is_null($mesg)) :
391 +
392 + if (!is_null($this->mesg)) :
212 393 ?>
213 394 <div class="updated">
214 - <p><?php print wp_specialchars($mesg, 1); ?></p>
395 + <p><?php print esc_html($this->mesg); ?></p>
215 396 </div>
216 397 <?php
217 398 endif;
218 399 } /* FeedWordPressAdminPage::display_update_notice_if_updated() */
@@ -220,9 +401,9 @@
220 401 function display_settings_scope_message () {
221 402 if ($this->for_feed_settings()) :
222 403 ?>
223 404 <p>These settings only affect posts syndicated from
224 - <strong><?php echo wp_specialchars($this->link->link->link_name, 1); ?></strong>.</p>
405 + <strong><?php echo esc_html($this->link->link->link_name); ?></strong>.</p>
225 406 <?php
226 407 else :
227 408 ?>
228 409 <p>These settings affect posts syndicated from any feed unless they are overridden
@@ -229,25 +410,104 @@
229 410 by settings for that specific feed.</p>
230 411 <?php
231 412 endif;
232 413 } /* FeedWordPressAdminPage::display_settings_scope_message () */
233 -
414 +
234 415 /*static*/ function has_link () { return true; }
235 416
417 + function form_action ($filename = NULL) {
418 + global $fwp_path;
419 +
420 + if (is_null($filename)) :
421 + $filename = basename($this->filename);
422 + endif;
423 + return $this->admin_page_href($filename);
424 + } /* FeedWordPressAdminPage::form_action () */
425 +
426 + function update_message () {
427 + return $this->mesg;
428 + }
429 +
430 + function display () {
431 + global $fwp_post;
432 +
433 + if (FeedWordPress::needs_upgrade()) :
434 + fwp_upgrade_page();
435 + return;
436 + endif;
437 +
438 + FeedWordPressCompatibility::validate_http_request(/*action=*/ $this->dispatch, /*capability=*/ 'manage_links');
439 +
440 + ////////////////////////////////////////////////
441 + // Process POST request, if any ////////////////
442 + ////////////////////////////////////////////////
443 + if (strtoupper($_SERVER['REQUEST_METHOD'])=='POST') :
444 + $this->accept_POST($fwp_post);
445 + else :
446 + $this->updated = false;
447 + endif;
448 +
449 + ////////////////////////////////////////////////
450 + // Prepare settings page ///////////////////////
451 + ////////////////////////////////////////////////
452 +
453 + $this->display_update_notice_if_updated(
454 + $this->pagename('settings-update'),
455 + $this->update_message()
456 + );
457 +
458 + $this->open_sheet($this->pagename('open-sheet'));
459 + ?>
460 + <div id="post-body">
461 + <?php
462 + foreach ($this->boxes_by_methods as $method => $row) :
463 + if (is_array($row)) :
464 + $id = $row['id'];
465 + $title = $row['title'];
466 + else :
467 + $id = 'feedwordpress_'.$method;
468 + $title = $row;
469 + endif;
470 +
471 + add_meta_box(
472 + /*id=*/ $id,
473 + /*title=*/ $title,
474 + /*callback=*/ array($this, $method),
475 + /*page=*/ $this->meta_box_context(),
476 + /*context=*/ $this->meta_box_context()
477 + );
478 + endforeach;
479 + do_action($this->dispatch.'_meta_boxes', $this);
480 + ?>
481 + <div class="metabox-holder">
482 + <?php
483 + fwp_do_meta_boxes($this->meta_box_context(), $this->meta_box_context(), $this);
484 + ?>
485 + </div> <!-- class="metabox-holder" -->
486 + </div> <!-- id="post-body" -->
487 + <?php $this->close_sheet(); ?>
488 + <?php
489 + }
490 +
236 491 function open_sheet ($header) {
237 492 // Set up prepatory AJAX stuff
493 + ?>
494 + <script type="text/javascript">
495 + <?php
238 496 $this->ajax_interface_js();
239 - if (function_exists('add_meta_box')) :
240 - add_action(
241 - FeedWordPressCompatibility::bottom_script_hook($this->filename),
242 - /*callback=*/ array($this, 'fix_toggles'),
243 - /*priority=*/ 10000
244 - );
245 - FeedWordPressSettingsUI::ajax_nonce_fields();
246 - endif;
497 + ?>
498 + </script>
247 499
500 + <?php
501 + add_action(
502 + FeedWordPressCompatibility::bottom_script_hook($this->filename),
503 + /*callback=*/ array($this, 'fix_toggles'),
504 + /*priority=*/ 10000
505 + );
506 + FeedWordPressSettingsUI::ajax_nonce_fields();
507 +
248 508 ?>
249 - <div class="wrap" style="position:relative">
509 + <div class="wrap feedwordpress-admin" id="feedwordpress-admin-<?php print $this->pageslug(); ?>">
250 510 <?php
251 511 if (!is_null($header)) :
252 512 $this->display_sheet_header($header);
253 513 endif;
@@ -253,9 +513,9 @@
253 513 endif;
254 514
255 515 if (!is_null($this->dispatch)) :
256 516 ?>
257 - <form action="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/<?php echo basename($this->filename); ?>" method="post">
517 + <form action="<?php print $this->form_action(); ?>" method="post">
258 518 <div><?php
259 519 FeedWordPressCompatibility::stamp_nonce($this->dispatch);
260 520 $this->stamp_link_id();
261 521 ?></div>
@@ -262,84 +522,233 @@
262 522 <?php
263 523 endif;
264 524
265 525 if ($this->has_link()) :
266 - $this->display_feed_select_dropdown();
267 526 $this->display_settings_scope_message();
268 527 endif;
269 528
270 - if (function_exists('do_meta_boxes')) :
271 - ?>
272 - <div id="poststuff">
273 - <?php
274 - else :
275 - ?>
276 - </div> <!-- class="wrap" -->
277 - <?php
529 + ?><div class="tablenav"><?php
530 + if (!is_null($this->dispatch)) :
531 + ?><div class="alignright"><?php
532 + $this->save_button();
533 + ?></div><?php
278 534 endif;
279 535
280 - if (!is_null($this->dispatch)) :
281 - fwp_settings_form_single_submit();
536 + if ($this->has_link()) :
537 + $this->display_feed_select_dropdown();
282 538 endif;
539 + ?>
540 + </div>
541 +
542 + <div id="poststuff">
543 + <?php
283 544 } /* FeedWordPressAdminPage::open_sheet () */
284 -
545 +
285 546 function close_sheet () {
286 - // WordPress 2.5+
287 - if (function_exists('do_meta_boxes')) :
547 + ?>
548 +
549 + </div> <!-- id="poststuff" -->
550 + <?php
551 + if (!is_null($this->dispatch)) :
552 + $this->save_button();
553 + print "</form>\n";
554 + endif;
555 + ?>
556 + </div> <!-- class="wrap" -->
557 +
558 + <?php
559 + } /* FeedWordPressAdminPage::close_sheet () */
560 +
561 + function setting_radio_control ($localName, $globalName, $options, $params = array()) {
562 + global $fwp_path;
563 +
564 + if (isset($params['filename'])) : $filename = $params['filename'];
565 + else : $filename = basename($this->filename);
566 + endif;
567 +
568 + if (isset($params['site-wide-url'])) : $href = $params['site-wide-url'];
569 + else : $href = $this->admin_page_href($filename);
570 + endif;
571 +
572 + if (isset($params['setting-default'])) : $settingDefault = $params['setting-default'];
573 + else : $settingDefault = NULL;
574 + endif;
575 +
576 + if (isset($params['global-setting-default'])) : $globalSettingDefault = $params['global-setting-default'];
577 + else : $globalSettingDefault = $settingDefault;
578 + endif;
579 +
580 + $globalSetting = get_option('feedwordpress_'.$globalName, $globalSettingDefault);
581 + if ($this->for_feed_settings()) :
582 + $setting = $this->link->setting($localName, NULL, $settingDefault);
583 + else :
584 + $setting = $globalSetting;
585 + endif;
586 +
587 + if (isset($params['offer-site-wide'])) : $offerSiteWide = $params['offer-site-wide'];
588 + else : $offerSiteWide = $this->for_feed_settings();
589 + endif;
590 +
591 + // This allows us to provide an alternative set of human-readable
592 + // labels for each potential value. For use in Currently: line.
593 + if (isset($params['labels'])) : $labels = $params['labels'];
594 + elseif (is_callable($options)) : $labels = NULL;
595 + else : $labels = $options;
596 + endif;
597 +
598 + if (isset($params['input-name'])) : $inputName = $params['input-name'];
599 + else : $inputName = $globalName;
600 + endif;
601 +
602 + if (isset($params['default-input-id'])) : $defaultInputId = $params['default-input-id'];
603 + else : $defaultInputId = NULL;
604 + endif;
605 +
606 + if (isset($params['default-input-id-no'])) : $defaultInputIdNo = $params['default-input-id-no'];
607 + elseif (!is_null($defaultInputId)) : $defaultInputIdNo = $defaultInputId.'-no';
608 + else : $defaultInputIdNo = NULL;
609 + endif;
610 +
611 + // This allows us to either include the site-default setting as
612 + // one of the options within the radio box, or else as a simple
613 + // yes/no toggle that controls whether or not to check another
614 + // set of inputs.
615 + if (isset($params['default-input-name'])) : $defaultInputName = $params['default-input-name'];
616 + else : $defaultInputName = $inputName;
617 + endif;
618 +
619 + if ($defaultInputName != $inputName) :
620 + $defaultInputValue = 'yes';
621 + else :
622 + $defaultInputValue = (
623 + isset($params['default-input-value'])
624 + ? $params['default-input-value']
625 + : 'site-default'
626 + );
627 + endif;
628 +
629 + $settingDefaulted = (is_null($setting) or ($settingDefault === $setting));
630 +
631 + if (!is_callable($options)) :
632 + $checked = array();
633 + if ($settingDefaulted) :
634 + $checked[$defaultInputValue] = ' checked="checked"';
635 + endif;
636 +
637 + foreach ($options as $value => $label) :
638 + if ($setting == $value) :
639 + $checked[$value] = ' checked="checked"';
640 + else :
641 + $checked[$value] = '';
642 + endif;
643 + endforeach;
644 + endif;
645 +
646 + $defaulted = array();
647 + if ($defaultInputName != $inputName) :
648 + $defaulted['yes'] = ($settingDefaulted ? ' checked="checked"' : '');
649 + $defaulted['no'] = ($settingDefaulted ? '' : ' checked="checked"');
650 + else :
651 + $defaulted['yes'] = (isset($checked[$defaultInputValue]) ? $checked[$defaultInputValue] : '');
652 + endif;
653 +
654 + if (isset($params['defaulted'])) :
655 + $defaulted['yes'] = ($params['defaulted'] ? ' checked="checked"' : '');
656 + $defaulted['no'] = ($params['defaulted'] ? '' : ' checked="checked"');
657 + endif;
658 +
659 + if ($offerSiteWide) :
288 660 ?>
289 - </div> <!-- id="poststuff" -->
290 - <?php if (!is_null($this->dispatch)) : ?>
291 - <?php fwp_settings_form_single_submit_closer(); ?>
292 - </form>
293 - <?php endif; ?>
294 - </div> <!-- class="wrap" -->
661 + <table class="twofer">
662 + <tbody>
663 + <tr><td class="equals first inactive">
664 + <ul class="options">
665 + <li><label><input type="radio"
666 + name="<?php print $defaultInputName; ?>"
667 + value="<?php print $defaultInputValue; ?>"
668 + <?php if (!is_null($defaultInputId)) : ?>id="<?php print $defaultInputId; ?>" <?php endif; ?>
669 + <?php print $defaulted['yes']; ?> />
670 + Use the site-wide setting</label>
671 + <span class="current-setting">Currently:
672 + <strong><?php if (is_callable($labels)) :
673 + print call_user_func($labels, $globalSetting, $defaulted, $params);
674 + elseif (is_null($labels)) :
675 + print $globalSetting;
676 + else :
677 + print $labels[$globalSetting];
678 + endif; ?></strong> (<a href="<?php print $href; ?>">change</a>)</span></li>
679 + </ul></td>
680 +
681 + <td class="equals second inactive">
682 + <?php if ($defaultInputName != $inputName) : ?>
683 + <ul class="options">
684 + <li><label><input type="radio"
685 + name="<?php print $defaultInputName; ?>"
686 + value="no"
687 + <?php if (!is_null($defaultInputIdNo)) : ?>id="<?php print $defaultInputIdNo; ?>" <?php endif; ?>
688 + <?php print $defaulted['no']; ?> />
689 + <?php _e('Do something different with this feed.'); ?></label>
690 + <?php endif;
691 + endif;
692 +
693 + // Let's spit out the controls here.
694 + if (is_callable($options)) :
695 + // Method call to print out options list
696 + call_user_func($options, $setting, $defaulted, $params);
697 + else :
698 + ?>
699 + <ul class="options">
700 + <?php foreach ($options as $value => $label) : ?>
701 + <li><label><input type="radio" name="<?php print $inputName; ?>"
702 + value="<?php print $value; ?>"
703 + <?php print $checked[$value]; ?> />
704 + <?php print $label; ?></label></li>
705 + <?php endforeach; ?>
706 + </ul> <!-- class="options" -->
295 707 <?php
296 708 endif;
297 - }
298 -} /* class FeedWordPressAdminPage */
299 709
300 -function fwp_settings_form_single_submit ($caption = NULL) {
301 - if (fwp_test_wp_version(FWP_SCHEMA_25, FWP_SCHEMA_27)) :
302 - if (is_null($caption)) : $caption = __('Save'); endif;
303 -?>
304 -<div class="submitbox" id="submitlink">
305 -<div id="previewview"></div>
306 -<div class="inside"></div>
710 + if ($offerSiteWide) :
711 + if ($defaultInputName != $inputName) :
712 + // Close the <li> and <ul class="options"> we opened above
713 + ?>
714 + </li>
715 + </ul> <!-- class="options" -->
716 + <?php
717 + endif;
307 718
308 -<p class="submit">
309 -<input type="submit" name="save" value="<?php print $caption; ?>" />
310 -</p>
311 -</div>
312 -<?php
313 - endif;
314 -}
719 + // Close off the twofer table that we opened up above.
720 + ?>
721 + </td></tr>
722 + </tbody>
723 + </table>
724 + <?php
725 + endif;
726 + } /* FeedWordPressAdminPage::setting_radio_control () */
315 727
316 -function fwp_settings_form_periodic_submit ($caption = NULL) {
317 - if (!fwp_test_wp_version(FWP_SCHEMA_25)) :
318 - if (is_null($caption)) : $caption = __('Save Changes &raquo;'); endif;
319 -?>
320 -<p class="submit">
321 -<input type="submit" name="save" value="<?php print $caption; ?>" />
322 -</p>
323 -<?php
324 - endif;
325 -}
326 -
327 -function fwp_settings_form_single_submit_closer ($caption = NULL) {
328 - if (fwp_test_wp_version(FWP_SCHEMA_27)) :
728 + function save_button ($caption = NULL) {
329 729 if (is_null($caption)) : $caption = __('Save Changes'); endif;
330 -?>
730 + ?>
331 731 <p class="submit">
332 732 <input class="button-primary" type="submit" name="save" value="<?php print $caption; ?>" />
333 733 </p>
334 -<?php
734 + <?php
735 + }
736 +} /* class FeedWordPressAdminPage */
737 +
738 +function fwp_update_set_results_message ($delta, $joiner = ';') {
739 + $mesg = array();
740 + if (isset($delta['new'])) : $mesg[] = ' '.$delta['new'].' new posts were syndicated'; endif;
741 + if (isset($delta['updated']) and ($delta['updated'] != 0)) : $mesg[] = ' '.$delta['updated'].' existing posts were updated'; endif;
742 + if (isset($delta['stored']) and ($delta['stored'] != 0)) : $mesg[] = ' '.$delta['stored'].' alternate versions of existing posts were stored for reference'; endif;
743 +
744 + if (!is_null($joiner)) :
745 + $mesg = implode($joiner, $mesg);
335 746 endif;
336 -}
747 + return $mesg;
748 +} /* function fwp_update_set_results_message () */
337 749
338 750 function fwp_authors_single_submit ($link = NULL) {
339 - global $wp_db_version;
340 -
341 - if (fwp_test_wp_version(FWP_SCHEMA_25)) :
342 751 ?>
343 752 <div class="submitbox" id="submitlink">
344 753 <div id="previewview">
345 754 </div>
@@ -350,134 +759,165 @@
350 759 <input type="submit" name="save" value="<?php _e('Save') ?>" />
351 760 </p>
352 761 </div>
353 762 <?php
354 - endif;
355 763 }
356 764
357 765 function fwp_option_box_opener ($legend, $id, $class = "stuffbox") {
358 - // WordPress 2.5+
359 - if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_25)) :
360 766 ?>
361 767 <div id="<?php print $id; ?>" class="<?php print $class; ?>">
362 768 <h3><?php print htmlspecialchars($legend); ?></h3>
363 769 <div class="inside">
364 770 <?php
365 - else :
366 -?>
367 - <div class="wrap">
368 - <h2><?php print htmlspecialchars($legend); ?></h2>
369 -<?php
370 - endif;
371 771 }
372 772
373 773 function fwp_option_box_closer () {
374 - global $wp_db_version;
375 - if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
376 774 ?>
377 775 </div> <!-- class="inside" -->
378 776 </div> <!-- class="stuffbox" -->
379 777 <?php
380 - else :
381 -?>
382 - </div> <!-- class="wrap" -->
383 -<?php
384 - endif;
385 778 }
386 779
387 -function fwp_tags_box ($tags, $object) {
780 +function fwp_tags_box ($tags, $object, $params = array()) {
781 + $params = wp_parse_args($params, array( // Default values
782 + 'taxonomy' => 'post_tag',
783 + 'textarea_name' => NULL,
784 + 'textarea_id' => NULL,
785 + 'input_id' => NULL,
786 + 'input_name' => NULL,
787 + 'id' => NULL,
788 + 'box_title' => __('Post Tags'),
789 + ));
790 +
388 791 if (!is_array($tags)) : $tags = array(); endif;
389 -
792 +
793 + $tax_name = $params['taxonomy'];
794 + $taxonomy = get_taxonomy($params['taxonomy']);
795 + $disabled = (!current_user_can($taxonomy->cap->assign_terms) ? 'disabled="disabled"' : '');
796 +
390 797 $desc = "<p style=\"font-size:smaller;font-style:bold;margin:0\">Tag $object as...</p>";
391 798
392 - if (fwp_test_wp_version(FWP_SCHEMA_28)) : // WordPress 2.8+
393 -?>
394 - <?php print $desc; ?>
395 - <div class="tagsdiv" id="post_tag">
396 - <div class="jaxtag">
397 - <div class="nojs-tags hide-if-js">
398 - <p><?php _e('Add or remove tags'); ?></p>
399 - <textarea name="tax_input[post_tag]" class="the-tags" id="tax-input[post_tag]"><?php echo implode(",", $tags); ?></textarea>
400 - </div>
401 -
402 - <span class="ajaxtag hide-if-no-js">
403 - <label class="screen-reader-text" for="new-tag-post_tag"><?php _e('Tags'); ?></label>
404 - <input type="text" id="new-tag-post_tag" name="newtag[post_tag]" class="newtag form-input-tip" size="16" autocomplete="off" value="<?php esc_attr_e('Add new tag'); ?>" />
405 - <input type="button" class="button tagadd" value="<?php esc_attr_e('Add'); ?>" />
406 - </span>
407 - </div>
408 - <p class="howto"><?php echo __('Separate tags with commas.'); ?></p>
409 - <div class="tagchecklist"></div>
410 - </div>
411 - <p class="tagcloud-link hide-if-no-js"><a href="#titlediv" class="tagcloud-link" id="link-post_tag"><?php printf( __('Choose from the most used tags in %s'), 'Post Tags'); ?></a></p>
412 - </div>
413 - </div>
414 -<?php
415 - else :
416 -?>
417 - <?php print $desc; ?>
418 - <p id="jaxtag"><input type="text" name="tags_input" class="tags-input" id="tags-input" size="40" tabindex="3" value="<?php echo implode(",", $tags); ?>" /></p>
419 - <div id="tagchecklist"></div>
420 - </div>
421 - </div>
422 -<?php
799 + if (is_null($params['textarea_name'])) :
800 + $params['textarea_name'] = "tax_input[$tax_name]";
423 801 endif;
802 + if (is_null($params['textarea_id'])) :
803 + $params['textarea_id'] = "tax-input-${tax_name}";
804 + endif;
805 + if (is_null($params['input_id'])) :
806 + $params['input_id'] = "new-tag-${tax_name}";
807 + endif;
808 + if (is_null($params['input_name'])) :
809 + $params['input_name'] = "newtag[$tax_name]";
810 + endif;
811 +
812 + if (is_null($params['id'])) :
813 + $params['id'] = $tax_name;
814 + endif;
815 +
816 + print $desc;
817 + $helps = __('Separate tags with commas.');
818 + $box['title'] = __('Tags');
819 + ?>
820 +<div class="tagsdiv" id="<?php echo $params['id']; ?>">
821 + <div class="jaxtag">
822 + <div class="nojs-tags hide-if-js">
823 + <p><?php echo $taxonomy->labels->add_or_remove_items; ?></p>
824 + <textarea name="<?php echo $params['textarea_name']; ?>" class="the-tags" id="<?php echo $params['textarea_id']; ?>"><?php echo esc_attr(implode(",", $tags)); ?></textarea></div>
825 +
826 + <?php if ( current_user_can($taxonomy->cap->assign_terms) ) :?>
827 + <div class="ajaxtag hide-if-no-js">
828 + <label class="screen-reader-text" for="<?php echo $params['input_id']; ?>"><?php echo $params['box_title']; ?></label>
829 + <div class="taghint"><?php echo $taxonomy->labels->add_new_item; ?></div>
830 + <p><input type="text" id="<?php print $params['input_id']; ?>" name="<?php print $params['input_name']; ?>" class="newtag form-input-tip" size="16" autocomplete="off" value="" />
831 + <input type="button" class="button tagadd" value="<?php esc_attr_e('Add'); ?>" tabindex="3" /></p>
832 + </div>
833 + <p class="howto"><?php echo esc_attr( $taxonomy->labels->separate_items_with_commas ); ?></p>
834 + <?php endif; ?>
835 + </div>
836 +
837 + <div class="tagchecklist"></div>
838 +</div>
839 +<?php if ( current_user_can($taxonomy->cap->assign_terms) ) : ?>
840 +<p class="hide-if-no-js"><a href="#titlediv" class="tagcloud-link" id="link-<?php echo $tax_name; ?>"><?php echo $taxonomy->labels->choose_from_most_used; ?></a></p>
841 +<?php endif;
842 +
424 843 }
425 844
426 -function fwp_category_box ($checked, $object, $tags = array()) {
845 +function fwp_category_box ($checked, $object, $tags = array(), $params = array()) {
427 846 global $wp_db_version;
428 847
429 - if (fwp_test_wp_version(FWP_SCHEMA_25)) : // WordPress 2.5.x
848 + if (is_string($params)) :
849 + $prefix = $params;
850 + $taxonomy = 'category';
851 + elseif (is_array($params)) :
852 + $prefix = (isset($params['prefix']) ? $params['prefix'] : '');
853 + $taxonomy = (isset($params['taxonomy']) ? $params['taxonomy'] : 'category');
854 + endif;
855 + $tax = get_taxonomy($taxonomy);
856 +
857 + if (strlen($prefix) > 0) :
858 + $idPrefix = $prefix.'-';
859 + $idSuffix = "-".$prefix;
860 + $namePrefix = $prefix . '_';
861 + else :
862 + $idPrefix = 'feedwordpress-';
863 + $idSuffix = "-feedwordpress";
864 + $namePrefix = 'feedwordpress_';
865 + endif;
866 +
430 867 ?>
431 -<div id="category-adder" class="wp-hidden-children">
432 - <h4><a id="category-add-toggle" href="#category-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
433 - <p id="category-add" class="wp-hidden-child">
434 - <input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php _e( 'New category name' ); ?>" tabindex="3" />
435 - <?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'newcat_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category'), 'tab_index' => 3 ) ); ?>
436 - <input type="button" id="category-add-sumbit" class="add:categorychecklist:category-add button" value="<?php _e( 'Add' ); ?>" tabindex="3" />
437 - <?php wp_nonce_field( 'add-category', '_ajax_nonce', false ); ?>
438 - <span id="category-ajax-response"></span>
868 +<div id="<?php print $idPrefix; ?>taxonomy-<?php print $taxonomy; ?>" class="feedwordpress-category-div">
869 + <ul id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-tabs" class="category-tabs">
870 + <li class="ui-tabs-selected tabs"><a href="#<?php print $idPrefix; ?><?php print $taxonomy; ?>-all" tabindex="3"><?php _e( 'All posts' ); ?></a>
871 + <p style="font-size:smaller;font-style:bold;margin:0">Give <?php print $object; ?> these <?php print $tax->labels->name; ?></p>
872 + </li>
873 + </ul>
874 +
875 +<div id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-all" class="tabs-panel">
876 + <input type="hidden" value="0" name="tax_input[<?php print $taxonomy; ?>][]" />
877 + <ul id="<?php print $idPrefix; ?><?php print $taxonomy; ?>checklist" class="list:<?php print $taxonomy; ?> categorychecklist form-no-clear">
878 + <?php fwp_category_checklist(NULL, false, $checked, $params) ?>
879 + </ul>
880 +</div>
881 +
882 +<div id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-adder" class="<?php print $taxonomy; ?>-adder wp-hidden-children">
883 + <h4><a id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-add-toggle" class="category-add-toggle" href="#<?php print $idPrefix; ?><?php print $taxonomy; ?>-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
884 + <p id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-add" class="category-add wp-hidden-child">
885 + <?php
886 + $newcat = 'new'.$taxonomy;
887 +
888 + ?>
889 + <label class="screen-reader-text" for="<?php print $idPrefix; ?>new<?php print $taxonomy; ?>"><?php _e('Add New Category'); ?></label>
890 + <input
891 + id="<?php print $idPrefix; ?>new<?php print $taxonomy; ?>"
892 + class="new<?php print $taxonomy; ?> form-required form-input-tip"
893 + aria-required="true"
894 + tabindex="3"
895 + type="text" name="<?php print $newcat; ?>"
896 + value="<?php _e( 'New category name' ); ?>"
897 + />
898 + <label class="screen-reader-text" for="<?php print $idPrefix; ?>new<?php print $taxonomy; ?>-parent"><?php _e('Parent Category:'); ?></label>
899 + <?php wp_dropdown_categories( array(
900 + 'taxonomy' => $taxonomy,
901 + 'hide_empty' => 0,
902 + 'id' => $idPrefix.'new'.$taxonomy.'-parent',
903 + 'class' => 'new'.$taxonomy.'-parent',
904 + 'name' => $newcat.'_parent',
905 + 'orderby' => 'name',
906 + 'hierarchical' => 1,
907 + 'show_option_none' => __('Parent category'),
908 + 'tab_index' => 3,
909 + ) ); ?>
910 + <input type="button" id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-add-sumbit" class="add:<?php print $idPrefix; ?><?php print $taxonomy; ?>checklist:<?php print $idPrefix.$taxonomy; ?>-add add-categorychecklist-category-add button category-add-submit" value="<?php _e( 'Add' ); ?>" tabindex="3" />
911 + <?php /* wp_nonce_field currently doesn't let us set an id different from name, but we need a non-unique name and a unique id */ ?>
912 + <input type="hidden" id="_ajax_nonce<?php print esc_html($idSuffix); ?>" name="_ajax_nonce" value="<?php print wp_create_nonce('add-'.$taxonomy); ?>" />
913 + <input type="hidden" id="_ajax_nonce-add-<?php print $taxonomy; ?><?php print esc_html($idSuffix); ?>" name="_ajax_nonce-add-<?php print $taxonomy; ?>" value="<?php print wp_create_nonce('add-'.$taxonomy); ?>" />
914 + <span id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-ajax-response" class="<?php print $taxonomy; ?>-ajax-response"></span>
439 915 </p>
440 916 </div>
441 917
442 -<ul id="category-tabs">
443 - <?php /* ui-tabs-selected in WP 2.7 CSS = tabs in WP 2.8 CSS. Thank you, o brilliant wordsmiths of the WordPress 2.8 stylesheet... */ ?>
444 - <li class="ui-tabs-selected tabs"><a href="#categories-all" tabindex="3"><?php _e( 'All posts' ); ?></a>
445 - <p style="font-size:smaller;font-style:bold;margin:0">Give <?php print $object; ?> these categories</p>
446 -</li>
447 -</ul>
448 -
449 -<?php /* ui-tabs-panel in WP 2.7 CSS = tabs-panel in WP 2.8 CSS. Thank you, o brilliant wordsmiths of the WordPress 2.8 stylesheet... */ ?>
450 -<div id="categories-all" class="ui-tabs-panel tabs-panel">
451 - <ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
452 - <?php fwp_category_checklist(NULL, false, $checked) ?>
453 - </ul>
454 918 </div>
455 919 <?php
456 - elseif (fwp_test_wp_version(FWP_SCHEMA_20)) : // WordPress 2.x
457 -?>
458 - <div id="moremeta" style="position: relative; right: auto">
459 - <div id="grabit" class="dbx-group">
460 - <fieldset id="categorydiv" class="dbx-box">
461 - <h3 class="dbx-handle"><?php _e('Categories') ?></h3>
462 - <div class="dbx-content">
463 - <p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
464 - <p id="jaxcat"></p>
465 - <div id="categorychecklist"><?php fwp_category_checklist(NULL, false, $checked); ?></div>
466 - </div>
467 - </fieldset>
468 - </div>
469 - </div>
470 -<?php
471 - else : // WordPress 1.5
472 -?>
473 - <fieldset style="width: 60%;">
474 - <legend><?php _e('Categories') ?></legend>
475 - <p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
476 - <div style="height: 10em; overflow: scroll;"><?php fwp_category_checklist(NULL, false, $checked); ?></div>
477 - </fieldset>
478 -<?php
479 - endif;
480 920 }
481 921
482 922 function update_feeds_mention ($feed) {
483 923 echo "<li>Updating <cite>".$feed['link/name']."</cite> from &lt;<a href=\""
@@ -484,9 +924,18 @@
484 924 .$feed['link/uri']."\">".$feed['link/uri']."</a>&gt; ...";
485 925 flush();
486 926 }
487 927 function update_feeds_finish ($feed, $added, $dt) {
488 - echo " completed in $dt second".(($dt==1)?'':'s')."</li>\n";
928 + if (is_wp_error($added)) :
929 + $mesgs = $added->get_error_messages();
930 + foreach ($mesgs as $mesg) :
931 + echo "<br/><strong>Feed error:</strong> <code>$mesg</code>";
932 + endforeach;
933 + echo "</li>\n";
934 + else :
935 + echo " completed in $dt second".(($dt==1)?'':'s')."</li>\n";
936 + endif;
937 + flush();
489 938 }
490 939
491 940 function fwp_author_list () {
492 941 global $wpdb;
@@ -491,20 +940,13 @@
491 940 function fwp_author_list () {
492 941 global $wpdb;
493 942 $ret = array();
494 943
495 - // display_name introduced in WP 2.0
496 - if (fwp_test_wp_version(FWP_SCHEMA_20)) :
497 - $name_column = 'display_name';
498 - else :
499 - $name_column = 'user_nickname';
500 - endif;
501 -
502 - $users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY {$name_column}");
944 + $users = get_users();
503 945 if (is_array($users)) :
504 946 foreach ($users as $user) :
505 947 $id = (int) $user->ID;
506 - $ret[$id] = $user->{$name_column};
948 + $ret[$id] = $user->display_name;
507 949 if (strlen(trim($ret[$id])) == 0) :
508 950 $ret[$id] = $user->user_login;
509 951 endif;
510 952 endforeach;
@@ -512,64 +954,64 @@
512 954 return $ret;
513 955 }
514 956
515 957 class FeedWordPressSettingsUI {
516 - function instead_of_posts_box ($link_id = null) {
517 - if (!is_null($link_id)) :
518 - $from_this_feed = 'from this feed';
519 - $by_default = '';
520 - $id_param = "&amp;link_id=".$link_id;
521 - else :
522 - $from_this_feed = 'from syndicated feeds';
523 - $by_default = " by default";
524 - $id_param = "";
958 + static function is_admin () {
959 + global $fwp_path;
960 +
961 + $admin_page = false; // Innocent until proven guilty
962 + if (isset($_REQUEST['page'])) :
963 + $admin_page = (
964 + is_admin()
965 + and preg_match("|^{$fwp_path}/|", $_REQUEST['page'])
966 + );
525 967 endif;
526 -?>
527 -<p>Use the <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/posts-page.php<?php print $id_param; ?>"><?php _e('Posts & Links'); ?></a>
528 -settings page to set up how new posts <?php print $from_this_feed; ?> will be published<?php $by_default; ?>, whether they will accept
529 -comments and pings, any custom fields that should be set on each post, etc.</p>
530 -<?php
531 - } /* FeedWordPressSettingsUI::instead_of_posts_box () */
532 -
533 - function instead_of_authors_box ($link_id = null) {
534 - if (!is_null($link_id)) :
535 - $from_this_feed = 'from this feed';
536 - $by_default = '';
537 - $id_param = "&amp;link_id=".$link_id;
538 - else :
539 - $from_this_feed = 'from syndicated feeds';
540 - $by_default = " by default";
541 - $id_param = "";
542 - endif;
968 + return $admin_page;
969 + }
543 970
544 -?>
545 -<p>Use the <a
546 -href="admin.php?page=<?php print $GLOBALS['fwp_path']
547 -?>/authors-page.php<?php print $id_param; ?>"><?php _e('Authors');
548 -?></a> settings page to set up how new posts
549 -<?php print $from_this_feed; ?> will be assigned to
550 -authors.</p>
551 -<?php
552 - } /* FeedWordPressSettingsUI::instead_of_authors_box () */
553 -
554 - function instead_of_categories_box ($link_id = null) {
555 - if (!is_null($link_id)) :
556 - $from_this_feed = 'from this feed';
557 - $by_default = '';
558 - $id_param = "&amp;link_id=".$link_id;
559 - else :
560 - $from_this_feed = 'from syndicated feeds';
561 - $by_default = " by default";
562 - $id_param = "";
563 - endif;
564 -
565 -?>
566 -<p>Use the <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/categories-page.php<?php print $id_param; ?>"><?php _e('Categories'.FEEDWORDPRESS_AND_TAGS); ?></a>
567 -settings page to set up how new posts <?php print $from_this_feed; ?> are assigned categories <?php if (FeedWordPressCompatibility::post_tags()) : ?>or tags<?php endif; ?><?php print $by_default; ?>.</p>
568 -<?php
569 - } /* FeedWordPressSettingsUI::instead_of_categories_box () */
971 + static function admin_scripts () {
972 + global $fwp_path;
570 973
571 - /*static*/ function ajax_nonce_fields () {
974 + wp_enqueue_script('post'); // for magic tag and category boxes
975 + wp_enqueue_script('admin-forms'); // for checkbox selection
976 +
977 + wp_register_script('feedwordpress-elements', WP_PLUGIN_URL.'/'.$fwp_path.'/feedwordpress-elements.js');
978 + wp_enqueue_script('feedwordpress-elements');
979 + }
980 +
981 + static function admin_styles () {
982 + ?>
983 + <style type="text/css">
984 + #feedwordpress-admin-feeds .link-rss-params-remove .x, .feedwordpress-admin .remove-it .x {
985 + background: url(<?php print admin_url('images/xit.gif') ?>) no-repeat scroll 0 0 transparent;
986 + }
987 +
988 + #feedwordpress-admin-feeds .link-rss-params-remove:hover .x, .feedwordpress-admin .remove-it:hover .x {
989 + background: url(<?php print admin_url('images/xit.gif') ?>) no-repeat scroll -10px 0 transparent;
990 + }
991 +
992 + .fwpfs {
993 + background-image: url(<?php print admin_url('images/fav.png'); ?>);
994 + background-repeat: repeat-x;
995 + background-position: left center;
996 + background-attachment: scroll;
997 + }
998 + .fwpfs.slide-down {
999 + background-image:url(<?php print admin_url('images/fav-top.png'); ?>);
1000 + background-position:0 top;
1001 + background-repeat:repeat-x;
1002 + }
1003 +
1004 + .update-results {
1005 + max-width: 100%;
1006 + overflow: auto;
1007 + }
1008 +
1009 + </style>
1010 + <?php
1011 + } /* FeedWordPressSettingsUI::admin_styles () */
1012 +
1013 + static function ajax_nonce_fields () {
572 1014 if (function_exists('wp_nonce_field')) :
573 1015 echo "<form style='display: none' method='get' action=''>\n<p>\n";
574 1016 wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
575 1017 wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
@@ -576,38 +1018,33 @@
576 1018 echo "</p>\n</form>\n";
577 1019 endif;
578 1020 } /* FeedWordPressSettingsUI::ajax_nonce_fields () */
579 1021
580 - /*static*/ function fix_toggles_js ($context) {
1022 + static function fix_toggles_js ($context) {
581 1023 ?>
582 1024 <script type="text/javascript">
583 1025 jQuery(document).ready( function($) {
584 - <?php if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_25, FWP_SCHEMA_27)) : ?>
585 - // In case someone got here first...
586 - jQuery('.postbox h3').unbind('click');
1026 + // In case someone got here first...
1027 + $('.postbox h3, .postbox .handlediv').unbind('click');
1028 + $('.postbox h3 a').unbind('click');
1029 + $('.hide-postbox-tog').unbind('click');
1030 + $('.columns-prefs input[type="radio"]').unbind('click');
1031 + $('.meta-box-sortables').sortable('destroy');
587 1032
588 - add_postbox_toggles('<?php print $context; ?>');
589 - <?php elseif (FeedWordPressCompatibility::test_version(FWP_SCHEMA_27)) : ?>
590 - // In case someone got here first...
591 - $('.postbox h3, .postbox .handlediv').unbind('click');
592 - $('.postbox h3 a').unbind('click');
593 - $('.hide-postbox-tog').unbind('click');
594 - $('.columns-prefs input[type="radio"]').unbind('click');
595 - $('.meta-box-sortables').sortable('destroy');
596 -
597 - postboxes.add_postbox_toggles('<?php print $context; ?>');
598 - <?php endif; ?>
1033 + postboxes.add_postbox_toggles('<?php print $context; ?>');
599 1034 } );
600 1035 </script>
601 1036 <?php
602 1037 } /* FeedWordPressSettingsUI::fix_toggles_js () */
603 -
604 - function magic_input_tip_js ($id) {
605 - if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_25)) :
1038 +
1039 + static function magic_input_tip_js ($id) {
1040 + if (!preg_match('/^[.#]/', $id)) :
1041 + $id = '#'.$id;
1042 + endif;
606 1043 ?>
607 1044 <script type="text/javascript">
608 1045 jQuery(document).ready( function () {
609 - var inputBox = jQuery("#<?php print $id; ?>");
1046 + var inputBox = jQuery("<?php print $id; ?>");
610 1047 var boxEl = inputBox.get(0);
611 1048 if (boxEl.value==boxEl.defaultValue) { inputBox.addClass('form-input-tip'); }
612 1049 inputBox.focus(function() {
613 1050 if ( this.value == this.defaultValue )
@@ -615,13 +1052,12 @@
615 1052 });
616 1053 inputBox.blur(function() {
617 1054 if ( this.value == '' )
618 1055 jQuery(this).val( this.defaultValue ).addClass( 'form-input-tip' );
619 - });
1056 + });
620 1057 } );
621 1058 </script>
622 1059 <?php
623 - endif;
624 1060 } /* FeedWordPressSettingsUI::magic_input_tip_js () */
625 1061 } /* class FeedWordPressSettingsUI */
626 1062
627 1063 function fwp_insert_new_user ($newuser_name) {
@@ -630,23 +1066,18 @@
630 1066 $ret = null;
631 1067 if (strlen($newuser_name) > 0) :
632 1068 $userdata = array();
633 1069 $userdata['ID'] = NULL;
634 -
635 - $userdata['user_login'] = sanitize_user($newuser_name);
636 - $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
637 -
638 - $userdata['user_nicename'] = sanitize_title($newuser_name);
639 - $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
640 -
641 - $userdata['display_name'] = $wpdb->escape($newuser_name);
1070 + $userdata['user_login'] = apply_filters('pre_user_login', sanitize_user($newuser_name));
1071 + $userdata['user_nicename'] = apply_filters('pre_user_nicename', sanitize_title($newuser_name));
1072 + $userdata['display_name'] = $newuser_name;
1073 + $userdata['user_pass'] = substr(md5(uniqid(microtime())), 0, 6); // just something random to lock it up
642 1074
1075 + $blahUrl = get_bloginfo('url'); $url = parse_url($blahUrl);
1076 + $userdata['user_email'] = substr(md5(uniqid(microtime())), 0, 6).'@'.$url['host'];
1077 +
643 1078 $newuser_id = wp_insert_user($userdata);
644 - if (is_numeric($newuser_id)) :
645 - $ret = $newuser_id;
646 - else :
647 - // TODO: Add some error detection and reporting
648 - endif;
1079 + $ret = $newuser_id; // Either a numeric ID or a WP_Error object
649 1080 else :
650 1081 // TODO: Add some error reporting
651 1082 endif;
652 1083 return $ret;
@@ -651,132 +1082,197 @@
651 1082 endif;
652 1083 return $ret;
653 1084 } /* fwp_insert_new_user () */
654 1085
1086 +/**
1087 + * fwp_add_meta_box
1088 + *
1089 + * This function is no longer necessary, since no versions of WordPress that FWP
1090 + * still supports lack add_meta_box(). But I've left it in place for the time
1091 + * being for add-on modules that may have used it in setting up their UI.
1092 + */
655 1093 function fwp_add_meta_box ($id, $title, $callback, $page, $context = 'advanced', $priority = 'default', $callback_args = null) {
656 - if (function_exists('add_meta_box')) :
657 - return add_meta_box($id, $title, $callback, $page, $context, $priority, $callback_args);
658 - else :
659 - /* Re-used as per terms of the GPL from add_meta_box() in WordPress 2.8.1 wp-admin/includes/template.php. */
660 - global $wp_meta_boxes;
661 -
662 - if ( !isset($wp_meta_boxes) )
663 - $wp_meta_boxes = array();
664 - if ( !isset($wp_meta_boxes[$page]) )
665 - $wp_meta_boxes[$page] = array();
666 - if ( !isset($wp_meta_boxes[$page][$context]) )
667 - $wp_meta_boxes[$page][$context] = array();
668 -
669 - foreach ( array_keys($wp_meta_boxes[$page]) as $a_context ) {
670 - foreach ( array('high', 'core', 'default', 'low') as $a_priority ) {
671 - if ( !isset($wp_meta_boxes[$page][$a_context][$a_priority][$id]) )
672 - continue;
673 -
674 - // If a core box was previously added or removed by a plugin, don't add.
675 - if ( 'core' == $priority ) {
676 - // If core box previously deleted, don't add
677 - if ( false === $wp_meta_boxes[$page][$a_context][$a_priority][$id] )
678 - return;
679 - // If box was added with default priority, give it core priority to maintain sort order
680 - if ( 'default' == $a_priority ) {
681 - $wp_meta_boxes[$page][$a_context]['core'][$id] = $wp_meta_boxes[$page][$a_context]['default'][$id];
682 - unset($wp_meta_boxes[$page][$a_context]['default'][$id]);
683 - }
684 - return;
685 - }
686 - // If no priority given and id already present, use existing priority
687 - if ( empty($priority) ) {
688 - $priority = $a_priority;
689 - // else if we're adding to the sorted priortiy, we don't know the title or callback. Glab them from the previously added context/priority.
690 - } elseif ( 'sorted' == $priority ) {
691 - $title = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['title'];
692 - $callback = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['callback'];
693 - $callback_args = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['args'];
694 - }
695 - // An id can be in only one priority and one context
696 - if ( $priority != $a_priority || $context != $a_context )
697 - unset($wp_meta_boxes[$page][$a_context][$a_priority][$id]);
698 - }
699 - }
700 -
701 - if ( empty($priority) )
702 - $priority = 'low';
703 -
704 - if ( !isset($wp_meta_boxes[$page][$context][$priority]) )
705 - $wp_meta_boxes[$page][$context][$priority] = array();
706 -
707 - $wp_meta_boxes[$page][$context][$priority][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $callback_args);
708 - endif;
1094 + return add_meta_box($id, $title, $callback, $page, $context, $priority, $callback_args);
709 1095 } /* function fwp_add_meta_box () */
710 1096
711 1097 function fwp_do_meta_boxes($page, $context, $object) {
712 - if (function_exists('do_meta_boxes')) :
713 - $ret = do_meta_boxes($page, $context, $object);
714 -
715 - // Avoid JavaScript error from WordPress 2.5 bug
1098 + $ret = do_meta_boxes($page, $context, $object);
1099 +
1100 + // Avoid JavaScript error from WordPress 2.5 bug
716 1101 ?>
717 1102 <div style="display: none">
718 1103 <div id="tags-input"></div> <!-- avoid JS error from WP 2.5 bug -->
719 1104 </div>
720 1105 <?php
721 - return $ret;
722 - else :
723 - /* Derived as per terms of the GPL from do_meta_boxes() in WordPress 2.8.1 wp-admin/includes/template.php. */
724 - global $wp_meta_boxes;
725 - static $already_sorted = false;
726 -
727 - //do_action('do_meta_boxes', $page, $context, $object);
728 -
729 - echo "<div id='$context-sortables' class='meta-box-sortables'>\n";
730 -
731 - $i = 0;
732 - do {
733 - if ( !isset($wp_meta_boxes) || !isset($wp_meta_boxes[$page]) || !isset($wp_meta_boxes[$page][$context]) )
734 - break;
735 -
736 - foreach ( array('high', 'sorted', 'core', 'default', 'low') as $priority ) {
737 - if ( isset($wp_meta_boxes[$page][$context][$priority]) ) {
738 - foreach ( (array) $wp_meta_boxes[$page][$context][$priority] as $box ) {
739 - if ( false == $box || ! $box['title'] )
740 - continue;
741 - $i++;
742 - fwp_option_box_opener($box['title'], $box['id'], 'postbox' /*. postbox_classes($box['id'], $page)*/);
743 - call_user_func($box['callback'], $object, $box);
744 - fwp_option_box_closer();
745 -
746 - if (is_object($object) and method_exists($object, 'interstitial')) :
747 - $object->interstitial();
748 - else :
749 - // Submit button for WP 1.5, early 2.x style
750 - fwp_settings_form_periodic_submit();
751 - endif;
752 - }
753 - }
754 - }
755 - } while(0);
756 -
757 - echo "</div>";
758 -
759 - return $i;
760 - endif;
1106 + return $ret;
761 1107 } /* function fwp_do_meta_boxes() */
762 1108
763 1109 function fwp_remove_meta_box($id, $page, $context) {
764 - if (function_exists('remove_meta_box')) :
765 - return remove_meta_box($id, $page, $context);
766 - else :
767 - /* Re-used as per terms of the GPL from remove_meta_box() in WordPress 2.8.1 wp-admin/includes/template.php */
768 - global $wp_meta_boxes;
769 -
770 - if ( !isset($wp_meta_boxes) )
771 - $wp_meta_boxes = array();
772 - if ( !isset($wp_meta_boxes[$page]) )
773 - $wp_meta_boxes[$page] = array();
774 - if ( !isset($wp_meta_boxes[$page][$context]) )
775 - $wp_meta_boxes[$page][$context] = array();
776 -
777 - foreach ( array('high', 'core', 'default', 'low') as $priority )
778 - $wp_meta_boxes[$page][$context][$priority][$id] = false;
779 - endif;
1110 + return remove_meta_box($id, $page, $context);
780 1111 } /* function fwp_remove_meta_box() */
781 1112
1113 +function fwp_syndication_manage_page_links_table_rows ($links, $page, $visible = 'Y') {
1114 +
1115 + $subscribed = ('Y' == strtoupper($visible));
1116 + if ($subscribed or (count($links) > 0)) :
1117 + ?>
1118 + <table class="widefat<?php if (!$subscribed) : ?> unsubscribed<?php endif; ?>">
1119 + <thead>
1120 + <tr>
1121 + <th class="check-column" scope="col"><input type="checkbox" /></th>
1122 + <th scope="col"><?php _e('Name'); ?></th>
1123 + <th scope="col"><?php _e('Feed'); ?></th>
1124 + <th scope="col"><?php _e('Updated'); ?></th>
1125 + </tr>
1126 + </thead>
1127 +
1128 + <tbody>
1129 +<?php
1130 + $alt_row = true;
1131 + if (count($links) > 0):
1132 + foreach ($links as $link):
1133 + $trClass = array();
1134 +
1135 + // Prep: Get last updated timestamp
1136 + $sLink = new SyndicatedLink($link->link_id);
1137 + if (!is_null($sLink->setting('update/last'))) :
1138 + $lastUpdated = 'Last checked '. fwp_time_elapsed($sLink->setting('update/last'));
1139 + else :
1140 + $lastUpdated = __('None yet');
1141 + endif;
1142 +
1143 + // Prep: get last error timestamp, if any
1144 + $fileSizeLines = array();
1145 + if (is_null($sLink->setting('update/error'))) :
1146 + $errorsSince = '';
1147 + if (!is_null($sLink->setting('link/item count'))) :
1148 + $N = $sLink->setting('link/item count');
1149 + $fileSizeLines[] = sprintf((($N==1) ? __('%d item') : __('%d items')), $N);
1150 + endif;
1151 +
1152 + if (!is_null($sLink->setting('link/filesize'))) :
1153 + $fileSizeLines[] = size_format($sLink->setting('link/filesize')). ' total';
1154 + endif;
1155 + else :
1156 + $trClass[] = 'feed-error';
1157 +
1158 + $theError = unserialize($sLink->setting('update/error'));
1159 +
1160 + $errorsSince = "<div class=\"returning-errors\">"
1161 + ."<p><strong>Returning errors</strong> since "
1162 + .fwp_time_elapsed($theError['since'])
1163 + ."</p>"
1164 + ."<p>Most recent ("
1165 + .fwp_time_elapsed($theError['ts'])
1166 + ."):<br/><code>"
1167 + .implode("</code><br/><code>", $theError['object']->get_error_messages())
1168 + ."</code></p>"
1169 + ."</div>\n";
1170 + endif;
1171 +
1172 + $nextUpdate = "<div style='max-width: 30.0em; font-size: 0.9em;'><div style='font-style:italic;'>";
1173 +
1174 + $ttl = $sLink->setting('update/ttl');
1175 + if (is_numeric($ttl)) :
1176 + $next = $sLink->setting('update/last') + $sLink->setting('update/fudge') + ((int) $ttl * 60);
1177 + if ('automatically'==$sLink->setting('update/timed')) :
1178 + if ($next < time()) :
1179 + $nextUpdate .= 'Ready and waiting to be updated since ';
1180 + else :
1181 + $nextUpdate .= 'Scheduled for next update ';
1182 + endif;
1183 + $nextUpdate .= fwp_time_elapsed($next);
1184 + if (FEEDWORDPRESS_DEBUG) : $nextUpdate .= " [".(($next-time())/60)." minutes]"; endif;
1185 + else :
1186 + $lastUpdated .= " &middot; Next ";
1187 + if ($next < time()) :
1188 + $lastUpdated .= 'ASAP';
1189 + elseif ($next - time() < 60) :
1190 + $lastUpdated .= fwp_time_elapsed($next);
1191 + elseif ($next - time() < 60*60*24) :
1192 + $lastUpdated .= gmdate('g:ia', $next + (get_option('gmt_offset') * 3600));
1193 + else :
1194 + $lastUpdated .= gmdate('F j', $next + (get_option('gmt_offset') * 3600));
1195 + endif;
1196 +
1197 + $nextUpdate .= "Scheduled to be checked for updates every ".$ttl." minute".(($ttl!=1)?"s":"")."</div><div style='size:0.9em; margin-top: 0.5em'> This update schedule was requested by the feed provider";
1198 + if ($sLink->setting('update/xml')) :
1199 + $nextUpdate .= " using a standard <code style=\"font-size: inherit; padding: 0; background: transparent\">&lt;".$sLink->setting('update/xml')."&gt;</code> element";
1200 + endif;
1201 + $nextUpdate .= ".";
1202 + endif;
1203 + else:
1204 + $nextUpdate .= "Scheduled for update as soon as possible";
1205 + endif;
1206 + $nextUpdate .= "</div></div>";
1207 +
1208 + $fileSize = '';
1209 + if (count($fileSizeLines) > 0) :
1210 + $fileSize = '<div>'.implode(" / ", $fileSizeLines)."</div>";
1211 + endif;
1212 +
1213 + unset($sLink);
1214 +
1215 + $alt_row = !$alt_row;
1216 +
1217 + if ($alt_row) :
1218 + $trClass[] = 'alternate';
1219 + endif;
1220 + ?>
1221 + <tr<?php echo ((count($trClass) > 0) ? ' class="'.implode(" ", $trClass).'"':''); ?>>
1222 + <th class="check-column" scope="row"><input type="checkbox" name="link_ids[]" value="<?php echo $link->link_id; ?>" /></th>
1223 + <?php
1224 + $caption = (
1225 + (strlen($link->link_rss) > 0)
1226 + ? __('Switch Feed')
1227 + : $caption=__('Find Feed')
1228 + );
1229 + ?>
1230 + <td>
1231 + <strong><a href="<?php print $page->admin_page_href('feeds-page.php', array(), $link); ?>"><?php print esc_html($link->link_name); ?></a></strong>
1232 + <div class="row-actions"><?php if ($subscribed) :
1233 + $page->display_feed_settings_page_links(array(
1234 + 'before' => '<div><strong>Settings &gt;</strong> ',
1235 + 'after' => '</div>',
1236 + 'subscription' => $link,
1237 + ));
1238 + endif; ?>
1239 +
1240 + <div><strong>Actions &gt;</strong>
1241 + <?php if ($subscribed) : ?>
1242 + <a href="<?php print $page->admin_page_href('syndication.php', array('action' => 'feedfinder'), $link); ?>"><?php echo $caption; ?></a>
1243 + <?php else : ?>
1244 + <a href="<?php print $page->admin_page_href('syndication.php', array('action' => FWP_RESUB_CHECKED), $link); ?>"><?php _e('Re-subscribe'); ?></a>
1245 + <?php endif; ?>
1246 + | <a href="<?php print $page->admin_page_href('syndication.php', array('action' => 'Unsubscribe'), $link); ?>"><?php _e(($subscribed ? 'Unsubscribe' : 'Delete permanently')); ?></a>
1247 + | <a href="<?php print esc_html($link->link_url); ?>"><?php _e('View')?></a></div>
1248 + </div>
1249 + </td>
1250 + <?php if (strlen($link->link_rss) > 0): ?>
1251 + <td><a href="<?php echo esc_html($link->link_rss); ?>"><?php echo esc_html(feedwordpress_display_url($link->link_rss, 32)); ?></a></td>
1252 + <?php else: ?>
1253 + <td class="feed-missing"><p><strong>no feed assigned</strong></p></td>
1254 + <?php endif; ?>
1255 +
1256 + <td><div style="float: right; padding-left: 10px">
1257 + <input type="submit" class="button" name="update_uri[<?php print esc_html($link->link_rss); ?>]" value="<?php _e('Update Now'); ?>" />
1258 + </div>
1259 + <?php print $lastUpdated; ?>
1260 + <?php print $fileSize; ?>
1261 + <?php print $errorsSince; ?>
1262 + <?php print $nextUpdate; ?>
1263 + </td>
1264 + </tr>
1265 + <?php
1266 + endforeach;
1267 + else :
1268 +?>
1269 +<tr><td colspan="4"><p>There are no websites currently listed for syndication.</p></td></tr>
1270 +<?php
1271 + endif;
1272 +?>
1273 +</tbody>
1274 +</table>
1275 + <?php
1276 + endif;
1277 +} /* function fwp_syndication_manage_page_links_table_rows () */
782 1278