PluginProbe
FeedWordPress / 2015.0514
FeedWordPress v2015.0514
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
feedwordpress / admin-ui.php

admin-ui.php in FeedWordPress 2015.0514, at admin-ui.php

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