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 -483 2010.01272014.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,157 +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_29)) : // WordPress 2.9+
393 - print $desc;
394 - $tax_name = 'post_tag';
395 - $helps = __('Separate tags with commas.');
396 - $box['title'] = __('Tags');
799 + if (is_null($params['textarea_name'])) :
800 + $params['textarea_name'] = "tax_input[$tax_name]";
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');
397 819 ?>
398 - <div class="tagsdiv" id="<?php echo $tax_name; ?>">
399 - <div class="jaxtag">
400 - <div class="nojs-tags hide-if-js">
401 - <p><?php _e('Add or remove tags'); ?></p>
402 - <textarea name="<?php echo "tax_input[$tax_name]"; ?>" class="the-tags" id="tax-input[<?php echo $tax_name; ?>]"><?php echo esc_attr(implode(",", $tags)); ?></textarea></div>
403 -
404 - <div class="ajaxtag hide-if-no-js">
405 - <label class="screen-reader-text" for="new-tag-<?php echo $tax_name; ?>"><?php echo $box['title']; ?></label>
406 - <div class="taghint"><?php _e('Add new tag'); ?></div>
407 - <input type="text" id="new-tag-<?php echo $tax_name; ?>" name="newtag[<?php echo $tax_name; ?>]" class="newtag form-input-tip" size="16" autocomplete="off" value="" />
408 - <input type="button" class="button tagadd" value="<?php esc_attr_e('Add'); ?>" tabindex="3" />
409 - </div></div>
410 - <p class="howto"><?php echo $helps; ?></p>
411 - <div class="tagchecklist"></div>
412 - </div>
413 - <p class="hide-if-no-js"><a href="#titlediv" class="tagcloud-link" id="link-<?php echo $tax_name; ?>"><?php printf( __('Choose from the most used tags in %s'), $box['title'] ); ?></a></p>
414 -<?php
415 - elseif (fwp_test_wp_version(FWP_SCHEMA_28)) : // WordPress 2.8+
416 -?>
417 - <?php print $desc; ?>
418 - <div class="tagsdiv" id="post_tag">
419 - <div class="jaxtag">
420 - <div class="nojs-tags hide-if-js">
421 - <p><?php _e('Add or remove tags'); ?></p>
422 - <textarea name="tax_input[post_tag]" class="the-tags" id="tax-input[post_tag]"><?php echo implode(",", $tags); ?></textarea>
423 - </div>
424 -
425 - <span class="ajaxtag hide-if-no-js">
426 - <label class="screen-reader-text" for="new-tag-post_tag"><?php _e('Tags'); ?></label>
427 - <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'); ?>" />
428 - <input type="button" class="button tagadd" value="<?php esc_attr_e('Add'); ?>" />
429 - </span>
430 - </div>
431 - <p class="howto"><?php echo __('Separate tags with commas.'); ?></p>
432 - <div class="tagchecklist"></div>
433 - </div>
434 - <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>
435 - </div>
436 - </div>
437 -<?php
438 - else :
439 -?>
440 - <?php print $desc; ?>
441 - <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>
442 - <div id="tagchecklist"></div>
443 - </div>
444 - </div>
445 -<?php
446 - endif;
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 +
447 843 }
448 844
449 -function fwp_category_box ($checked, $object, $tags = array()) {
845 +function fwp_category_box ($checked, $object, $tags = array(), $params = array()) {
450 846 global $wp_db_version;
451 847
452 - 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 +
453 867 ?>
454 -<div id="category-adder" class="wp-hidden-children">
455 - <h4><a id="category-add-toggle" href="#category-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
456 - <p id="category-add" class="wp-hidden-child">
457 - <input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php _e( 'New category name' ); ?>" tabindex="3" />
458 - <?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'newcat_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category'), 'tab_index' => 3 ) ); ?>
459 - <input type="button" id="category-add-sumbit" class="add:categorychecklist:category-add button" value="<?php _e( 'Add' ); ?>" tabindex="3" />
460 - <?php wp_nonce_field( 'add-category', '_ajax_nonce', false ); ?>
461 - <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>
462 915 </p>
463 916 </div>
464 917
465 -<ul id="category-tabs">
466 - <?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... */ ?>
467 - <li class="ui-tabs-selected tabs"><a href="#categories-all" tabindex="3"><?php _e( 'All posts' ); ?></a>
468 - <p style="font-size:smaller;font-style:bold;margin:0">Give <?php print $object; ?> these categories</p>
469 -</li>
470 -</ul>
471 -
472 -<?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... */ ?>
473 -<div id="categories-all" class="ui-tabs-panel tabs-panel">
474 - <ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
475 - <?php fwp_category_checklist(NULL, false, $checked) ?>
476 - </ul>
477 918 </div>
478 919 <?php
479 - elseif (fwp_test_wp_version(FWP_SCHEMA_20)) : // WordPress 2.x
480 -?>
481 - <div id="moremeta" style="position: relative; right: auto">
482 - <div id="grabit" class="dbx-group">
483 - <fieldset id="categorydiv" class="dbx-box">
484 - <h3 class="dbx-handle"><?php _e('Categories') ?></h3>
485 - <div class="dbx-content">
486 - <p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
487 - <p id="jaxcat"></p>
488 - <div id="categorychecklist"><?php fwp_category_checklist(NULL, false, $checked); ?></div>
489 - </div>
490 - </fieldset>
491 - </div>
492 - </div>
493 -<?php
494 - else : // WordPress 1.5
495 -?>
496 - <fieldset style="width: 60%;">
497 - <legend><?php _e('Categories') ?></legend>
498 - <p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
499 - <div style="height: 10em; overflow: scroll;"><?php fwp_category_checklist(NULL, false, $checked); ?></div>
500 - </fieldset>
501 -<?php
502 - endif;
503 920 }
504 921
505 922 function update_feeds_mention ($feed) {
506 923 echo "<li>Updating <cite>".$feed['link/name']."</cite> from &lt;<a href=\""
@@ -507,9 +924,18 @@
507 924 .$feed['link/uri']."\">".$feed['link/uri']."</a>&gt; ...";
508 925 flush();
509 926 }
510 927 function update_feeds_finish ($feed, $added, $dt) {
511 - 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();
512 938 }
513 939
514 940 function fwp_author_list () {
515 941 global $wpdb;
@@ -514,20 +940,13 @@
514 940 function fwp_author_list () {
515 941 global $wpdb;
516 942 $ret = array();
517 943
518 - // display_name introduced in WP 2.0
519 - if (fwp_test_wp_version(FWP_SCHEMA_20)) :
520 - $name_column = 'display_name';
521 - else :
522 - $name_column = 'user_nickname';
523 - endif;
524 -
525 - $users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY {$name_column}");
944 + $users = get_users();
526 945 if (is_array($users)) :
527 946 foreach ($users as $user) :
528 947 $id = (int) $user->ID;
529 - $ret[$id] = $user->{$name_column};
948 + $ret[$id] = $user->display_name;
530 949 if (strlen(trim($ret[$id])) == 0) :
531 950 $ret[$id] = $user->user_login;
532 951 endif;
533 952 endforeach;
@@ -535,64 +954,64 @@
535 954 return $ret;
536 955 }
537 956
538 957 class FeedWordPressSettingsUI {
539 - function instead_of_posts_box ($link_id = null) {
540 - if (!is_null($link_id)) :
541 - $from_this_feed = 'from this feed';
542 - $by_default = '';
543 - $id_param = "&amp;link_id=".$link_id;
544 - else :
545 - $from_this_feed = 'from syndicated feeds';
546 - $by_default = " by default";
547 - $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 + );
548 967 endif;
549 -?>
550 -<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>
551 -settings page to set up how new posts <?php print $from_this_feed; ?> will be published<?php $by_default; ?>, whether they will accept
552 -comments and pings, any custom fields that should be set on each post, etc.</p>
553 -<?php
554 - } /* FeedWordPressSettingsUI::instead_of_posts_box () */
555 -
556 - function instead_of_authors_box ($link_id = null) {
557 - if (!is_null($link_id)) :
558 - $from_this_feed = 'from this feed';
559 - $by_default = '';
560 - $id_param = "&amp;link_id=".$link_id;
561 - else :
562 - $from_this_feed = 'from syndicated feeds';
563 - $by_default = " by default";
564 - $id_param = "";
565 - endif;
968 + return $admin_page;
969 + }
566 970
567 -?>
568 -<p>Use the <a
569 -href="admin.php?page=<?php print $GLOBALS['fwp_path']
570 -?>/authors-page.php<?php print $id_param; ?>"><?php _e('Authors');
571 -?></a> settings page to set up how new posts
572 -<?php print $from_this_feed; ?> will be assigned to
573 -authors.</p>
574 -<?php
575 - } /* FeedWordPressSettingsUI::instead_of_authors_box () */
576 -
577 - function instead_of_categories_box ($link_id = null) {
578 - if (!is_null($link_id)) :
579 - $from_this_feed = 'from this feed';
580 - $by_default = '';
581 - $id_param = "&amp;link_id=".$link_id;
582 - else :
583 - $from_this_feed = 'from syndicated feeds';
584 - $by_default = " by default";
585 - $id_param = "";
586 - endif;
587 -
588 -?>
589 -<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>
590 -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>
591 -<?php
592 - } /* FeedWordPressSettingsUI::instead_of_categories_box () */
971 + static function admin_scripts () {
972 + global $fwp_path;
593 973
594 - /*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 () {
595 1014 if (function_exists('wp_nonce_field')) :
596 1015 echo "<form style='display: none' method='get' action=''>\n<p>\n";
597 1016 wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
598 1017 wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
@@ -599,43 +1018,33 @@
599 1018 echo "</p>\n</form>\n";
600 1019 endif;
601 1020 } /* FeedWordPressSettingsUI::ajax_nonce_fields () */
602 1021
603 - /*static*/ function fix_toggles_js ($context) {
1022 + static function fix_toggles_js ($context) {
604 1023 ?>
605 1024 <script type="text/javascript">
606 1025 jQuery(document).ready( function($) {
607 - <?php if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_29)) : ?>
608 - if ( $('#post_tag').length ) {
609 - tagBox.init();
610 - }
611 - <?php endif; ?>
612 - <?php if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_25, FWP_SCHEMA_27)) : ?>
613 - // In case someone got here first...
614 - 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');
615 1032
616 - add_postbox_toggles('<?php print $context; ?>');
617 - <?php elseif (FeedWordPressCompatibility::test_version(FWP_SCHEMA_27)) : ?>
618 - // In case someone got here first...
619 - $('.postbox h3, .postbox .handlediv').unbind('click');
620 - $('.postbox h3 a').unbind('click');
621 - $('.hide-postbox-tog').unbind('click');
622 - $('.columns-prefs input[type="radio"]').unbind('click');
623 - $('.meta-box-sortables').sortable('destroy');
624 -
625 - postboxes.add_postbox_toggles('<?php print $context; ?>');
626 - <?php endif; ?>
1033 + postboxes.add_postbox_toggles('<?php print $context; ?>');
627 1034 } );
628 1035 </script>
629 1036 <?php
630 1037 } /* FeedWordPressSettingsUI::fix_toggles_js () */
631 -
632 - function magic_input_tip_js ($id) {
633 - 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;
634 1043 ?>
635 1044 <script type="text/javascript">
636 1045 jQuery(document).ready( function () {
637 - var inputBox = jQuery("#<?php print $id; ?>");
1046 + var inputBox = jQuery("<?php print $id; ?>");
638 1047 var boxEl = inputBox.get(0);
639 1048 if (boxEl.value==boxEl.defaultValue) { inputBox.addClass('form-input-tip'); }
640 1049 inputBox.focus(function() {
641 1050 if ( this.value == this.defaultValue )
@@ -643,13 +1052,12 @@
643 1052 });
644 1053 inputBox.blur(function() {
645 1054 if ( this.value == '' )
646 1055 jQuery(this).val( this.defaultValue ).addClass( 'form-input-tip' );
647 - });
1056 + });
648 1057 } );
649 1058 </script>
650 1059 <?php
651 - endif;
652 1060 } /* FeedWordPressSettingsUI::magic_input_tip_js () */
653 1061 } /* class FeedWordPressSettingsUI */
654 1062
655 1063 function fwp_insert_new_user ($newuser_name) {
@@ -658,23 +1066,18 @@
658 1066 $ret = null;
659 1067 if (strlen($newuser_name) > 0) :
660 1068 $userdata = array();
661 1069 $userdata['ID'] = NULL;
662 -
663 - $userdata['user_login'] = sanitize_user($newuser_name);
664 - $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
665 -
666 - $userdata['user_nicename'] = sanitize_title($newuser_name);
667 - $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
668 -
669 - $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
670 1074
1075 + $blahUrl = get_bloginfo('url'); $url = parse_url($blahUrl);
1076 + $userdata['user_email'] = substr(md5(uniqid(microtime())), 0, 6).'@'.$url['host'];
1077 +
671 1078 $newuser_id = wp_insert_user($userdata);
672 - if (is_numeric($newuser_id)) :
673 - $ret = $newuser_id;
674 - else :
675 - // TODO: Add some error detection and reporting
676 - endif;
1079 + $ret = $newuser_id; // Either a numeric ID or a WP_Error object
677 1080 else :
678 1081 // TODO: Add some error reporting
679 1082 endif;
680 1083 return $ret;
@@ -679,132 +1082,197 @@
679 1082 endif;
680 1083 return $ret;
681 1084 } /* fwp_insert_new_user () */
682 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 + */
683 1093 function fwp_add_meta_box ($id, $title, $callback, $page, $context = 'advanced', $priority = 'default', $callback_args = null) {
684 - if (function_exists('add_meta_box')) :
685 - return add_meta_box($id, $title, $callback, $page, $context, $priority, $callback_args);
686 - else :
687 - /* Re-used as per terms of the GPL from add_meta_box() in WordPress 2.8.1 wp-admin/includes/template.php. */
688 - global $wp_meta_boxes;
689 -
690 - if ( !isset($wp_meta_boxes) )
691 - $wp_meta_boxes = array();
692 - if ( !isset($wp_meta_boxes[$page]) )
693 - $wp_meta_boxes[$page] = array();
694 - if ( !isset($wp_meta_boxes[$page][$context]) )
695 - $wp_meta_boxes[$page][$context] = array();
696 -
697 - foreach ( array_keys($wp_meta_boxes[$page]) as $a_context ) {
698 - foreach ( array('high', 'core', 'default', 'low') as $a_priority ) {
699 - if ( !isset($wp_meta_boxes[$page][$a_context][$a_priority][$id]) )
700 - continue;
701 -
702 - // If a core box was previously added or removed by a plugin, don't add.
703 - if ( 'core' == $priority ) {
704 - // If core box previously deleted, don't add
705 - if ( false === $wp_meta_boxes[$page][$a_context][$a_priority][$id] )
706 - return;
707 - // If box was added with default priority, give it core priority to maintain sort order
708 - if ( 'default' == $a_priority ) {
709 - $wp_meta_boxes[$page][$a_context]['core'][$id] = $wp_meta_boxes[$page][$a_context]['default'][$id];
710 - unset($wp_meta_boxes[$page][$a_context]['default'][$id]);
711 - }
712 - return;
713 - }
714 - // If no priority given and id already present, use existing priority
715 - if ( empty($priority) ) {
716 - $priority = $a_priority;
717 - // 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.
718 - } elseif ( 'sorted' == $priority ) {
719 - $title = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['title'];
720 - $callback = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['callback'];
721 - $callback_args = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['args'];
722 - }
723 - // An id can be in only one priority and one context
724 - if ( $priority != $a_priority || $context != $a_context )
725 - unset($wp_meta_boxes[$page][$a_context][$a_priority][$id]);
726 - }
727 - }
728 -
729 - if ( empty($priority) )
730 - $priority = 'low';
731 -
732 - if ( !isset($wp_meta_boxes[$page][$context][$priority]) )
733 - $wp_meta_boxes[$page][$context][$priority] = array();
734 -
735 - $wp_meta_boxes[$page][$context][$priority][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $callback_args);
736 - endif;
1094 + return add_meta_box($id, $title, $callback, $page, $context, $priority, $callback_args);
737 1095 } /* function fwp_add_meta_box () */
738 1096
739 1097 function fwp_do_meta_boxes($page, $context, $object) {
740 - if (function_exists('do_meta_boxes')) :
741 - $ret = do_meta_boxes($page, $context, $object);
742 -
743 - // 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
744 1101 ?>
745 1102 <div style="display: none">
746 1103 <div id="tags-input"></div> <!-- avoid JS error from WP 2.5 bug -->
747 1104 </div>
748 1105 <?php
749 - return $ret;
750 - else :
751 - /* Derived as per terms of the GPL from do_meta_boxes() in WordPress 2.8.1 wp-admin/includes/template.php. */
752 - global $wp_meta_boxes;
753 - static $already_sorted = false;
754 -
755 - //do_action('do_meta_boxes', $page, $context, $object);
756 -
757 - echo "<div id='$context-sortables' class='meta-box-sortables'>\n";
758 -
759 - $i = 0;
760 - do {
761 - if ( !isset($wp_meta_boxes) || !isset($wp_meta_boxes[$page]) || !isset($wp_meta_boxes[$page][$context]) )
762 - break;
763 -
764 - foreach ( array('high', 'sorted', 'core', 'default', 'low') as $priority ) {
765 - if ( isset($wp_meta_boxes[$page][$context][$priority]) ) {
766 - foreach ( (array) $wp_meta_boxes[$page][$context][$priority] as $box ) {
767 - if ( false == $box || ! $box['title'] )
768 - continue;
769 - $i++;
770 - fwp_option_box_opener($box['title'], $box['id'], 'postbox' /*. postbox_classes($box['id'], $page)*/);
771 - call_user_func($box['callback'], $object, $box);
772 - fwp_option_box_closer();
773 -
774 - if (is_object($object) and method_exists($object, 'interstitial')) :
775 - $object->interstitial();
776 - else :
777 - // Submit button for WP 1.5, early 2.x style
778 - fwp_settings_form_periodic_submit();
779 - endif;
780 - }
781 - }
782 - }
783 - } while(0);
784 -
785 - echo "</div>";
786 -
787 - return $i;
788 - endif;
1106 + return $ret;
789 1107 } /* function fwp_do_meta_boxes() */
790 1108
791 1109 function fwp_remove_meta_box($id, $page, $context) {
792 - if (function_exists('remove_meta_box')) :
793 - return remove_meta_box($id, $page, $context);
794 - else :
795 - /* Re-used as per terms of the GPL from remove_meta_box() in WordPress 2.8.1 wp-admin/includes/template.php */
796 - global $wp_meta_boxes;
797 -
798 - if ( !isset($wp_meta_boxes) )
799 - $wp_meta_boxes = array();
800 - if ( !isset($wp_meta_boxes[$page]) )
801 - $wp_meta_boxes[$page] = array();
802 - if ( !isset($wp_meta_boxes[$page][$context]) )
803 - $wp_meta_boxes[$page][$context] = array();
804 -
805 - foreach ( array('high', 'core', 'default', 'low') as $priority )
806 - $wp_meta_boxes[$page][$context][$priority][$id] = false;
807 - endif;
1110 + return remove_meta_box($id, $page, $context);
808 1111 } /* function fwp_remove_meta_box() */
809 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 () */
810 1278