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
feedwordpress / admin-ui.php

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

1,279 lines 40.4 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 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
103 function for_feed_settings () { return (is_object($this->link) and method_exists($this->link, 'found') and $this->link->found()); }
104 function for_default_settings () { return !$this->for_feed_settings(); }
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
155 /*static*/ function submitted_link_id () {
156 global $fwp_post;
157
158 // Presume global unless we get a specific link ID
159 $link_id = NULL;
160
161 $submit_buttons = array(
162 'save',
163 'submit',
164 'fix_mismatch',
165 'feedfinder',
166 );
167 foreach ($submit_buttons as $field) :
168 if (isset($fwp_post[$field])) :
169 $link_id = MyPHP::request('save_link_id');
170 endif;
171 endforeach;
172
173 if (is_null($link_id) and isset($_REQUEST['link_id'])) :
174 $link_id = MyPHP::request('link_id');
175 endif;
176
177 return $link_id;
178 } /* FeedWordPressAdminPage::submitted_link_id() */
179
180 /*static*/ function submitted_link () {
181 $link_id = FeedWordPressAdminPage::submitted_link_id();
182 if (is_numeric($link_id) and $link_id) :
183 $link = new SyndicatedLink($link_id);
184 else :
185 $link = NULL;
186 endif;
187 return $link;
188 } /* FeedWordPressAdminPage::submitted_link () */
189
190 function stamp_link_id ($field = null) {
191 if (is_null($field)) : $field = 'save_link_id'; endif;
192 ?>
193 <input type="hidden" name="<?php print esc_attr($field); ?>" value="<?php print ($this->for_feed_settings() ? $this->link->id : '*'); ?>" />
194 <?php
195 } /* FeedWordPressAdminPage::stamp_link_id () */
196
197 function these_posts_phrase () {
198 if ($this->for_feed_settings()) :
199 $phrase = __('posts from this feed');
200 else :
201 $phrase = __('syndicated posts');
202 endif;
203 return $phrase;
204 } /* FeedWordPressAdminPage::these_posts_phrase() */
205
206 /**
207 * Provides a uniquely identifying name for the interface context for
208 * use with add_meta_box() and do_meta_boxes(),
209 *
210 * @return string the context name
211 *
212 * @see add_meta_box()
213 * @see do_meta_boxes()
214 */
215 function meta_box_context () {
216 return $this->context;
217 } /* FeedWordPressAdminPage::meta_box_context () */
218
219 /**
220 * Outputs JavaScript to fix AJAX toggles settings.
221 *
222 * @uses FeedWordPressAdminPage::meta_box_context()
223 */
224 function fix_toggles () {
225 FeedWordPressSettingsUI::fix_toggles_js($this->meta_box_context());
226 } /* FeedWordPressAdminPage::fix_toggles() */
227
228 function ajax_interface_js () {
229 ?>
230 function contextual_appearance (item, appear, disappear, value, visibleStyle, checkbox) {
231 if (typeof(visibleStyle)=='undefined') visibleStyle = 'block';
232
233 var rollup=document.getElementById(item);
234 if (rollup) {
235 if ((checkbox && rollup.checked) || (!checkbox && value==rollup.value)) {
236 jQuery('#'+disappear).hide();
237 jQuery('#'+appear).show(600);
238 } else {
239 jQuery('#'+appear).hide();
240 jQuery('#'+disappear).show(600);
241 }
242 }
243 }
244 <?php
245 } /* FeedWordPressAdminPage::ajax_interface_js () */
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
339 function display_feed_select_dropdown() {
340 $links = FeedWordPress::syndicated_links();
341
342 ?>
343 <div id="fwpfs-container"><ul class="subsubsub">
344 <li><select name="link_id" class="fwpfs" style="max-width: 20.0em;">
345 <option value="*"<?php if ($this->for_default_settings()) : ?> selected="selected"<?php endif; ?>>- defaults for all feeds -</option>
346 <?php if ($links) : foreach ($links as $ddlink) : ?>
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>
348 <?php endforeach; endif; ?>
349 </select>
350 <input id="fwpfs-button" class="button" type="submit" name="go" value="<?php _e('Go') ?> &raquo;" /></li>
351
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
369 } /* FeedWordPressAdminPage::display_feed_select_dropdown() */
370
371 function display_sheet_header ($pagename = 'Syndication', $all = false) {
372 global $fwp_path;
373 ?>
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>
376 <?php
377 }
378
379 function display_update_notice_if_updated ($pagename = 'Syndication', $mesg = NULL) {
380 if (!is_null($mesg)) :
381 $this->mesg = $mesg;
382 endif;
383
384 if ($this->updated) :
385 if ($this->updated === true) :
386 $this->mesg = $pagename . ' settings updated.';
387 else :
388 $this->mesg = $this->updated;
389 endif;
390 endif;
391
392 if (!is_null($this->mesg)) :
393 ?>
394 <div class="updated">
395 <p><?php print esc_html($this->mesg); ?></p>
396 </div>
397 <?php
398 endif;
399 } /* FeedWordPressAdminPage::display_update_notice_if_updated() */
400
401 function display_settings_scope_message () {
402 if ($this->for_feed_settings()) :
403 ?>
404 <p>These settings only affect posts syndicated from
405 <strong><?php echo esc_html($this->link->link->link_name); ?></strong>.</p>
406 <?php
407 else :
408 ?>
409 <p>These settings affect posts syndicated from any feed unless they are overridden
410 by settings for that specific feed.</p>
411 <?php
412 endif;
413 } /* FeedWordPressAdminPage::display_settings_scope_message () */
414
415 /*static*/ function has_link () { return true; }
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
491 function open_sheet ($header) {
492 // Set up prepatory AJAX stuff
493 ?>
494 <script type="text/javascript">
495 <?php
496 $this->ajax_interface_js();
497 ?>
498 </script>
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
508 ?>
509 <div class="wrap feedwordpress-admin" id="feedwordpress-admin-<?php print $this->pageslug(); ?>">
510 <?php
511 if (!is_null($header)) :
512 $this->display_sheet_header($header);
513 endif;
514
515 if (!is_null($this->dispatch)) :
516 ?>
517 <form action="<?php print $this->form_action(); ?>" method="post">
518 <div><?php
519 FeedWordPressCompatibility::stamp_nonce($this->dispatch);
520 $this->stamp_link_id();
521 ?></div>
522 <?php
523 endif;
524
525 if ($this->has_link()) :
526 $this->display_settings_scope_message();
527 endif;
528
529 ?><div class="tablenav"><?php
530 if (!is_null($this->dispatch)) :
531 ?><div class="alignright"><?php
532 $this->save_button();
533 ?></div><?php
534 endif;
535
536 if ($this->has_link()) :
537 $this->display_feed_select_dropdown();
538 endif;
539 ?>
540 </div>
541
542 <div id="poststuff">
543 <?php
544 } /* FeedWordPressAdminPage::open_sheet () */
545
546 function close_sheet () {
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) :
660 ?>
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" -->
707 <?php
708 endif;
709
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;
718
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 () */
727
728 function save_button ($caption = NULL) {
729 if (is_null($caption)) : $caption = __('Save Changes'); endif;
730 ?>
731 <p class="submit">
732 <input class="button-primary" type="submit" name="save" value="<?php print $caption; ?>" />
733 </p>
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);
746 endif;
747 return $mesg;
748 } /* function fwp_update_set_results_message () */
749
750 function fwp_authors_single_submit ($link = NULL) {
751 ?>
752 <div class="submitbox" id="submitlink">
753 <div id="previewview">
754 </div>
755 <div class="inside">
756 </div>
757
758 <p class="submit">
759 <input type="submit" name="save" value="<?php _e('Save') ?>" />
760 </p>
761 </div>
762 <?php
763 }
764
765 function fwp_option_box_opener ($legend, $id, $class = "stuffbox") {
766 ?>
767 <div id="<?php print $id; ?>" class="<?php print $class; ?>">
768 <h3><?php print htmlspecialchars($legend); ?></h3>
769 <div class="inside">
770 <?php
771 }
772
773 function fwp_option_box_closer () {
774 ?>
775 </div> <!-- class="inside" -->
776 </div> <!-- class="stuffbox" -->
777 <?php
778 }
779
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
791 if (!is_array($tags)) : $tags = array(); endif;
792
793 $tax_name = $params['taxonomy'];
794 $taxonomy = get_taxonomy($params['taxonomy']);
795 $disabled = (!current_user_can($taxonomy->cap->assign_terms) ? 'disabled="disabled"' : '');
796
797 $desc = "<p style=\"font-size:smaller;font-style:bold;margin:0\">Tag $object as...</p>";
798
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');
819 ?>
820 <div class="tagsdiv" id="<?php echo $params['id']; ?>">
821 <div class="jaxtag">
822 <div class="nojs-tags hide-if-js">
823 <p><?php echo $taxonomy->labels->add_or_remove_items; ?></p>
824 <textarea name="<?php echo $params['textarea_name']; ?>" class="the-tags" id="<?php echo $params['textarea_id']; ?>"><?php echo esc_attr(implode(",", $tags)); ?></textarea></div>
825
826 <?php if ( current_user_can($taxonomy->cap->assign_terms) ) :?>
827 <div class="ajaxtag hide-if-no-js">
828 <label class="screen-reader-text" for="<?php echo $params['input_id']; ?>"><?php echo $params['box_title']; ?></label>
829 <div class="taghint"><?php echo $taxonomy->labels->add_new_item; ?></div>
830 <p><input type="text" id="<?php print $params['input_id']; ?>" name="<?php print $params['input_name']; ?>" class="newtag form-input-tip" size="16" autocomplete="off" value="" />
831 <input type="button" class="button tagadd" value="<?php esc_attr_e('Add'); ?>" tabindex="3" /></p>
832 </div>
833 <p class="howto"><?php echo esc_attr( $taxonomy->labels->separate_items_with_commas ); ?></p>
834 <?php endif; ?>
835 </div>
836
837 <div class="tagchecklist"></div>
838 </div>
839 <?php if ( current_user_can($taxonomy->cap->assign_terms) ) : ?>
840 <p class="hide-if-no-js"><a href="#titlediv" class="tagcloud-link" id="link-<?php echo $tax_name; ?>"><?php echo $taxonomy->labels->choose_from_most_used; ?></a></p>
841 <?php endif;
842
843 }
844
845 function fwp_category_box ($checked, $object, $tags = array(), $params = array()) {
846 global $wp_db_version;
847
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
867 ?>
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>
915 </p>
916 </div>
917
918 </div>
919 <?php
920 }
921
922 function update_feeds_mention ($feed) {
923 echo "<li>Updating <cite>".$feed['link/name']."</cite> from &lt;<a href=\""
924 .$feed['link/uri']."\">".$feed['link/uri']."</a>&gt; ...";
925 flush();
926 }
927 function update_feeds_finish ($feed, $added, $dt) {
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();
938 }
939
940 function fwp_author_list () {
941 global $wpdb;
942 $ret = array();
943
944 $users = get_users();
945 if (is_array($users)) :
946 foreach ($users as $user) :
947 $id = (int) $user->ID;
948 $ret[$id] = $user->display_name;
949 if (strlen(trim($ret[$id])) == 0) :
950 $ret[$id] = $user->user_login;
951 endif;
952 endforeach;
953 endif;
954 return $ret;
955 }
956
957 class FeedWordPressSettingsUI {
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 );
967 endif;
968 return $admin_page;
969 }
970
971 static function admin_scripts () {
972 global $fwp_path;
973
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 () {
1014 if (function_exists('wp_nonce_field')) :
1015 echo "<form style='display: none' method='get' action=''>\n<p>\n";
1016 wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
1017 wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
1018 echo "</p>\n</form>\n";
1019 endif;
1020 } /* FeedWordPressSettingsUI::ajax_nonce_fields () */
1021
1022 static function fix_toggles_js ($context) {
1023 ?>
1024 <script type="text/javascript">
1025 jQuery(document).ready( function($) {
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');
1032
1033 postboxes.add_postbox_toggles('<?php print $context; ?>');
1034 } );
1035 </script>
1036 <?php
1037 } /* FeedWordPressSettingsUI::fix_toggles_js () */
1038
1039 static function magic_input_tip_js ($id) {
1040 if (!preg_match('/^[.#]/', $id)) :
1041 $id = '#'.$id;
1042 endif;
1043 ?>
1044 <script type="text/javascript">
1045 jQuery(document).ready( function () {
1046 var inputBox = jQuery("<?php print $id; ?>");
1047 var boxEl = inputBox.get(0);
1048 if (boxEl.value==boxEl.defaultValue) { inputBox.addClass('form-input-tip'); }
1049 inputBox.focus(function() {
1050 if ( this.value == this.defaultValue )
1051 jQuery(this).val( '' ).removeClass( 'form-input-tip' );
1052 });
1053 inputBox.blur(function() {
1054 if ( this.value == '' )
1055 jQuery(this).val( this.defaultValue ).addClass( 'form-input-tip' );
1056 });
1057 } );
1058 </script>
1059 <?php
1060 } /* FeedWordPressSettingsUI::magic_input_tip_js () */
1061 } /* class FeedWordPressSettingsUI */
1062
1063 function fwp_insert_new_user ($newuser_name) {
1064 global $wpdb;
1065
1066 $ret = null;
1067 if (strlen($newuser_name) > 0) :
1068 $userdata = array();
1069 $userdata['ID'] = NULL;
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
1074
1075 $blahUrl = get_bloginfo('url'); $url = parse_url($blahUrl);
1076 $userdata['user_email'] = substr(md5(uniqid(microtime())), 0, 6).'@'.$url['host'];
1077
1078 $newuser_id = wp_insert_user($userdata);
1079 $ret = $newuser_id; // Either a numeric ID or a WP_Error object
1080 else :
1081 // TODO: Add some error reporting
1082 endif;
1083 return $ret;
1084 } /* fwp_insert_new_user () */
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 */
1093 function fwp_add_meta_box ($id, $title, $callback, $page, $context = 'advanced', $priority = 'default', $callback_args = null) {
1094 return add_meta_box($id, $title, $callback, $page, $context, $priority, $callback_args);
1095 } /* function fwp_add_meta_box () */
1096
1097 function fwp_do_meta_boxes($page, $context, $object) {
1098 $ret = do_meta_boxes($page, $context, $object);
1099
1100 // Avoid JavaScript error from WordPress 2.5 bug
1101 ?>
1102 <div style="display: none">
1103 <div id="tags-input"></div> <!-- avoid JS error from WP 2.5 bug -->
1104 </div>
1105 <?php
1106 return $ret;
1107 } /* function fwp_do_meta_boxes() */
1108
1109 function fwp_remove_meta_box($id, $page, $context) {
1110 return remove_meta_box($id, $page, $context);
1111 } /* function fwp_remove_meta_box() */
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 () */
1278
1279