PluginProbe
FeedWordPress / 2011.1018
FeedWordPress v2011.1018
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 2011.1018, at admin-ui.php

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