PluginProbe
FeedWordPress / 2011.0211.2
FeedWordPress v2011.0211.2
trunk 0.8 0.9 0.91 0.95 0.96 0.97 0.98 0.981 0.99 0.991 0.992 0.993 2008.1030 2008.1101 2008.1105 2008.1214 2009.0612 2009.0613 2009.0618 2009.0707 2009.1111 2009.1112 2010.0127 2010.0528 All 65 releases
← All changes | admin-ui.php +1091 -171 2009.06122011.0211.2 View file →
@@ -1,46 +1,715 @@
1 1 <?php
2 -function fwp_linkedit_single_submit ($status = NULL) {
3 - if (fwp_test_wp_version(FWP_SCHEMA_25, FWP_SCHEMA_27)) :
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 () {
4 226 ?>
5 -<div class="submitbox" id="submitlink">
6 -<div id="previewview"></div>
7 -<div class="inside"></div>
227 + function contextual_appearance (item, appear, disappear, value, visibleStyle, checkbox) {
228 + if (typeof(visibleStyle)=='undefined') visibleStyle = 'block';
8 229
9 -<p class="submit">
10 -<input type="submit" name="submit" value="<?php _e('Save') ?>" />
11 -</p>
12 -</div>
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 + }
13 241 <?php
14 - endif;
15 -}
242 + } /* FeedWordPressAdminPage::ajax_interface_js () */
16 243
17 -function fwp_linkedit_periodic_submit ($caption = NULL) {
18 - if (!fwp_test_wp_version(FWP_SCHEMA_25)) :
19 - if (is_null($caption)) : $caption = __('Save Changes &raquo;'); endif;
20 -?>
21 -<p class="submit">
22 -<input type="submit" name="submit" value="<?php print $caption; ?>" />
23 -</p>
24 -<?php
25 - endif;
26 -}
244 + function display_feed_settings_page_links ($params = array()) {
245 + global $fwp_path;
27 246
28 -function fwp_linkedit_single_submit_closer ($caption = NULL) {
29 - if (fwp_test_wp_version(FWP_SCHEMA_27)) :
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) {
30 702 if (is_null($caption)) : $caption = __('Save Changes'); endif;
31 -?>
703 + ?>
32 704 <p class="submit">
33 -<input class="button-primary" type="submit" name="submit" value="<?php print $caption; ?>" />
705 +<input class="button-primary" type="submit" name="save" value="<?php print $caption; ?>" />
34 706 </p>
35 -<?php
36 - endif;
37 -}
707 + <?php
708 + }
709 +} /* class FeedWordPressAdminPage */
38 710
39 711 function fwp_authors_single_submit ($link = NULL) {
40 - global $wp_db_version;
41 -
42 - if (fwp_test_wp_version(FWP_SCHEMA_25)) :
43 712 ?>
44 713 <div class="submitbox" id="submitlink">
45 714 <div id="previewview">
46 715 </div>
@@ -51,24 +720,16 @@
51 720 <input type="submit" name="save" value="<?php _e('Save') ?>" />
52 721 </p>
53 722 </div>
54 723 <?php
55 - endif;
56 724 }
57 725
58 726 function fwp_option_box_opener ($legend, $id, $class = "stuffbox") {
59 - global $wp_db_version;
60 - if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
61 727 ?>
62 728 <div id="<?php print $id; ?>" class="<?php print $class; ?>">
63 729 <h3><?php print htmlspecialchars($legend); ?></h3>
64 730 <div class="inside">
65 731 <?php
66 - else :
67 -?>
68 -<fieldset class="options"><legend><?php print htmlspecialchars($legend); ?></legend>
69 -<?php
70 - endif;
71 732 }
72 733
73 734 function fwp_option_box_closer () {
74 735 global $wp_db_version;
@@ -78,79 +739,128 @@
78 739 </div> <!-- class="stuffbox" -->
79 740 <?php
80 741 else :
81 742 ?>
82 -</fieldset>
743 + </div> <!-- class="wrap" -->
83 744 <?php
84 745 endif;
85 746 }
86 747
87 -function fwp_tags_box ($tags) {
748 +function fwp_tags_box ($tags, $object, $params = array()) {
88 749 if (!is_array($tags)) : $tags = array(); endif;
89 -?>
90 -<div id="tagsdiv" class="postbox">
91 - <h3><?php _e('Tags') ?></h3>
92 - <p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
93 - <div class="inside">
94 - <p id="jaxtag"><input type="text" name="tags_input" class="tags-input" id="tags-input" size="40" tabindex="3" value="<?php echo implode(",", $tags); ?>" /></p>
95 - <div id="tagchecklist"></div>
96 - </div>
97 -</div>
98 -<?php
750 + $tax_name = (isset($params['taxonomy']) ? $params['taxonomy'] : 'post_tag');
751 + $desc = "<p style=\"font-size:smaller;font-style:bold;margin:0\">Tag $object as...</p>";
752 +
753 + if (isset($params['textarea_name'])) :
754 + $textAreaName = $params['textarea_name'];
755 + else :
756 + $textAreaName = "tax_input[$tax_name]";
757 + endif;
758 + print $desc;
759 + $helps = __('Separate tags with commas.');
760 + $box['title'] = __('Tags');
761 + ?>
762 + <div class="tagsdiv" id="<?php echo $tax_name; ?>">
763 + <div class="jaxtag">
764 + <div class="nojs-tags hide-if-js">
765 + <p><?php _e('Add or remove tags'); ?></p>
766 + <textarea name="<?php echo esc_html($textAreaName); ?>" class="the-tags" id="tax-input[<?php echo $tax_name; ?>]"><?php echo esc_attr(implode(",", $tags)); ?></textarea></div>
767 +
768 + <div class="ajaxtag hide-if-no-js">
769 + <label class="screen-reader-text" for="new-tag-<?php echo $tax_name; ?>"><?php echo $box['title']; ?></label>
770 + <div class="taghint"><?php _e('Add new tag'); ?></div>
771 + <p>
772 + <input type="text" id="new-tag-<?php echo $tax_name; ?>" name="newtag[<?php echo $tax_name; ?>]" class="newtag form-input-tip" size="16" autocomplete="off" value="" />
773 + <input type="button" class="button tagadd" value="<?php esc_attr_e('Add'); ?>" tabindex="3" />
774 + </p>
775 + </div></div>
776 + <p class="howto"><?php echo $helps; ?></p>
777 + <div class="tagchecklist"></div>
778 + </div>
779 + <p class="hide-if-no-js"><a href="#titlediv" class="tagcloud-link" id="link-<?php echo $tax_name; ?>"><?php printf( __('Choose from the most used tags in %s'), $box['title'] ); ?></a></p>
780 + <?php
99 781 }
100 782
101 -function fwp_category_box ($checked, $object, $tags = array()) {
783 +function fwp_category_box ($checked, $object, $tags = array(), $params = array()) {
102 784 global $wp_db_version;
103 785
104 - if (fwp_test_wp_version(FWP_SCHEMA_25)) : // WordPress 2.5.x
786 + if (is_string($params)) :
787 + $prefix = $params;
788 + $taxonomy = 'category';
789 + elseif (is_array($params)) :
790 + $prefix = (isset($params['prefix']) ? $params['prefix'] : '');
791 + $taxonomy = (isset($params['taxonomy']) ? $params['taxonomy'] : 'category');
792 + endif;
793 + $tax = get_taxonomy($taxonomy);
794 +
795 + if (strlen($prefix) > 0) :
796 + $idPrefix = $prefix.'-';
797 + $idSuffix = "-".$prefix;
798 + $namePrefix = $prefix . '_';
799 + else :
800 + $idPrefix = 'feedwordpress-';
801 + $idSuffix = "-feedwordpress";
802 + $namePrefix = 'feedwordpress_';
803 + endif;
804 +
105 805 ?>
106 -<div id="category-adder" class="wp-hidden-children">
107 - <h4><a id="category-add-toggle" href="#category-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
108 - <p id="category-add" class="wp-hidden-child">
109 - <input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php _e( 'New category name' ); ?>" tabindex="3" />
110 - <?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'newcat_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category'), 'tab_index' => 3 ) ); ?>
111 - <input type="button" id="category-add-sumbit" class="add:categorychecklist:category-add button" value="<?php _e( 'Add' ); ?>" tabindex="3" />
112 - <?php wp_nonce_field( 'add-category', '_ajax_nonce', false ); ?>
113 - <span id="category-ajax-response"></span>
806 +<div id="<?php print $idPrefix; ?>taxonomy-<?php print $taxonomy; ?>" class="feedwordpress-category-div">
807 + <ul id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-tabs" class="category-tabs">
808 + <li class="ui-tabs-selected tabs"><a href="#<?php print $idPrefix; ?><?php print $taxonomy; ?>-all" tabindex="3"><?php _e( 'All posts' ); ?></a>
809 + <p style="font-size:smaller;font-style:bold;margin:0">Give <?php print $object; ?> these <?php print $tax->labels->name; ?></p>
810 + </li>
811 + </ul>
812 +
813 +<div id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-all" class="tabs-panel">
814 + <input type="hidden" value="0" name="tax_input[<?php print $taxonomy; ?>][]" />
815 + <ul id="<?php print $idPrefix; ?><?php print $taxonomy; ?>checklist" class="list:<?php print $taxonomy; ?> categorychecklist form-no-clear">
816 + <?php fwp_category_checklist(NULL, false, $checked, $params) ?>
817 + </ul>
818 +</div>
819 +
820 +<div id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-adder" class="<?php print $taxonomy; ?>-adder wp-hidden-children">
821 + <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>
822 + <p id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-add" class="category-add wp-hidden-child">
823 + <?php
824 + $newcat = 'new'.$taxonomy;
825 +
826 + // Well, thank God they added "egory" before WP 3.0 came out.
827 + if ('newcategory'==$newcat
828 + and !FeedWordPressCompatibility::test_version(FWP_SCHEMA_30)) :
829 + $newcat = 'newcat';
830 + endif;
831 + ?>
832 + <label class="screen-reader-text" for="<?php print $idPrefix; ?>new<?php print $taxonomy; ?>"><?php _e('Add New Category'); ?></label>
833 + <input
834 + id="<?php print $idPrefix; ?>new<?php print $taxonomy; ?>"
835 + class="new<?php print $taxonomy; ?> form-required form-input-tip"
836 + aria-required="true"
837 + tabindex="3"
838 + type="text" name="<?php print $newcat; ?>"
839 + value="<?php _e( 'New category name' ); ?>"
840 + />
841 + <label class="screen-reader-text" for="<?php print $idPrefix; ?>new<?php print $taxonomy; ?>-parent"><?php _e('Parent Category:'); ?></label>
842 + <?php wp_dropdown_categories( array(
843 + 'taxonomy' => $taxonomy,
844 + 'hide_empty' => 0,
845 + 'id' => $idPrefix.'new'.$taxonomy.'-parent',
846 + 'class' => 'new'.$taxonomy.'-parent',
847 + 'name' => $newcat.'_parent',
848 + 'orderby' => 'name',
849 + 'hierarchical' => 1,
850 + 'show_option_none' => __('Parent category'),
851 + 'tab_index' => 3,
852 + ) ); ?>
853 + <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" />
854 + <?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 */ ?>
855 + <input type="hidden" id="_ajax_nonce<?php print esc_html($idSuffix); ?>" name="_ajax_nonce" value="<?php print wp_create_nonce('add-'.$taxonomy); ?>" />
856 + <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); ?>" />
857 + <span id="<?php print $idPrefix; ?><?php print $taxonomy; ?>-ajax-response" class="<?php print $taxonomy; ?>-ajax-response"></span>
114 858 </p>
115 859 </div>
116 860
117 -<ul id="category-tabs">
118 - <li class="ui-tabs-selected"><a href="#categories-all" tabindex="3"><?php _e( 'All posts' ); ?></a>
119 - <p style="font-size:smaller;font-style:bold;margin:0">Give <?php print $object; ?> these categories</p>
120 -</li>
121 -</ul>
122 -
123 -<div id="categories-all" class="ui-tabs-panel">
124 - <ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
125 - <?php fwp_category_checklist(NULL, false, $checked) ?>
126 - </ul>
127 861 </div>
128 862 <?php
129 - elseif (fwp_test_wp_version(FWP_SCHEMA_20)) : // WordPress 2.x
130 -?>
131 - <div id="moremeta">
132 - <div id="grabit" class="dbx-group">
133 - <fieldset id="categorydiv" class="dbx-box">
134 - <h3 class="dbx-handle"><?php _e('Categories') ?></h3>
135 - <div class="dbx-content">
136 - <p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
137 - <p id="jaxcat"></p>
138 - <div id="categorychecklist"><?php fwp_category_checklist(NULL, false, $checked); ?></div>
139 - </div>
140 - </fieldset>
141 - </div>
142 - </div>
143 -<?php
144 - else : // WordPress 1.5
145 -?>
146 - <fieldset style="width: 60%;">
147 - <legend><?php _e('Categories') ?></legend>
148 - <p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
149 - <div style="height: 10em; overflow: scroll;"><?php fwp_category_checklist(NULL, false, $checked); ?></div>
150 - </fieldset>
151 -<?php
152 - endif;
153 863 }
154 864
155 865 function update_feeds_mention ($feed) {
156 866 echo "<li>Updating <cite>".$feed['link/name']."</cite> from &lt;<a href=\""
@@ -157,9 +867,18 @@
157 867 .$feed['link/uri']."\">".$feed['link/uri']."</a>&gt; ...";
158 868 flush();
159 869 }
160 870 function update_feeds_finish ($feed, $added, $dt) {
161 - echo " completed in $dt second".(($dt==1)?'':'s')."</li>\n";
871 + if (is_wp_error($added)) :
872 + $mesgs = $added->get_error_messages();
873 + foreach ($mesgs as $mesg) :
874 + echo "<br/><strong>Feed error:</strong> <code>$mesg</code>";
875 + endforeach;
876 + echo "</li>\n";
877 + else :
878 + echo " completed in $dt second".(($dt==1)?'':'s')."</li>\n";
879 + endif;
880 + flush();
162 881 }
163 882
164 883 function fwp_author_list () {
165 884 global $wpdb;
@@ -164,20 +883,13 @@
164 883 function fwp_author_list () {
165 884 global $wpdb;
166 885 $ret = array();
167 886
168 - // display_name introduced in WP 2.0
169 - if (fwp_test_wp_version(FWP_SCHEMA_20)) :
170 - $name_column = 'display_name';
171 - else :
172 - $name_column = 'user_nickname';
173 - endif;
174 -
175 - $users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY {$name_column}");
887 + $users = get_users_of_blog();
176 888 if (is_array($users)) :
177 889 foreach ($users as $user) :
178 890 $id = (int) $user->ID;
179 - $ret[$id] = $user->{$name_column};
891 + $ret[$id] = $user->display_name;
180 892 if (strlen(trim($ret[$id])) == 0) :
181 893 $ret[$id] = $user->user_login;
182 894 endif;
183 895 endforeach;
@@ -185,69 +897,108 @@
185 897 return $ret;
186 898 }
187 899
188 900 class FeedWordPressSettingsUI {
189 - function instead_of_posts_box ($link_id = null) {
190 - fwp_option_box_opener('Syndicated Posts, Comments & Pings', 'syndicatedpostsdiv', 'postbox');
191 - if (!is_null($link_id)) :
192 - $from_this_feed = 'from this feed';
193 - $by_default = '';
194 - $id_param = "&amp;link_id=".$link_id;
195 - else :
196 - $from_this_feed = 'from syndicated feeds';
197 - $by_default = " by default";
198 - $id_param = "";
901 + function is_admin () {
902 + global $fwp_path;
903 +
904 + $admin_page = false; // Innocent until proven guilty
905 + if (isset($_REQUEST['page'])) :
906 + $admin_page = (
907 + is_admin()
908 + and preg_match("|^{$fwp_path}/|", $_REQUEST['page'])
909 + );
199 910 endif;
200 -?>
201 -<p>Use the <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/posts-page.php<?php print $id_param; ?>"><?php _e('Posts'); ?></a>
202 -settings page to set up how new posts <?php print $from_this_feed; ?> will be published<?php $by_default; ?>, whether they will accept
203 -comments and pings, any custom fields that should be set on each post, etc.</p>
204 -<?php
205 - fwp_option_box_closer();
206 - } /* FeedWordPressSettingsUI::instead_of_posts_box () */
911 + return $admin_page;
912 + }
207 913
208 - function instead_of_authors_box ($link_id = null) {
209 - if (!is_null($link_id)) :
210 - $from_this_feed = 'from this feed';
211 - $by_default = '';
212 - $id_param = "&amp;link_id=".$link_id;
213 - else :
214 - $from_this_feed = 'from syndicated feeds';
215 - $by_default = " by default";
216 - $id_param = "";
914 + function admin_scripts () {
915 + global $fwp_path;
916 +
917 + wp_enqueue_script('post'); // for magic tag and category boxes
918 + if (!FeedWordPressCompatibility::test_version(FWP_SCHEMA_29)) : // < 2.9
919 + wp_enqueue_script('thickbox'); // for fold-up boxes
217 920 endif;
921 + wp_enqueue_script('admin-forms'); // for checkbox selection
922 +
923 + wp_register_script('feedwordpress-elements', WP_PLUGIN_URL.'/'.$fwp_path.'/feedwordpress-elements.js');
924 + wp_enqueue_script('feedwordpress-elements');
925 + }
218 926
219 - fwp_option_box_opener('Syndicated Authors', 'authordiv', 'postbox')
220 -?>
221 -<p>Use the <a
222 -href="admin.php?page=<?php print $GLOBALS['fwp_path']
223 -?>/authors-page.php<?php print $id_param; ?>"><?php _e('Authors');
224 -?></a> settings page to set up how new posts
225 -<?php print $from_this_feed; ?> will be assigned to
226 -authors.</p>
227 -<?php
228 - fwp_option_box_closer();
229 - } /* FeedWordPressSettingsUI::instead_of_authors_box () */
927 + function admin_styles () {
928 + ?>
929 + <style type="text/css">
930 + #feedwordpress-admin-feeds .link-rss-params-remove .x, .feedwordpress-admin .remove-it .x {
931 + background: url(<?php print admin_url('images/xit.gif') ?>) no-repeat scroll 0 0 transparent;
932 + }
933 +
934 + #feedwordpress-admin-feeds .link-rss-params-remove:hover .x, .feedwordpress-admin .remove-it:hover .x {
935 + background: url(<?php print admin_url('images/xit.gif') ?>) no-repeat scroll -10px 0 transparent;
936 + }
937 +
938 + .fwpfs {
939 + background-image: url(<?php print admin_url('images/fav.png'); ?>);
940 + background-repeat: repeat-x;
941 + background-position: left center;
942 + background-attachment: scroll;
943 + }
944 + .fwpfs.slide-down {
945 + background-image:url(<?php print admin_url('images/fav-top.png'); ?>);
946 + background-position:0 top;
947 + background-repeat:repeat-x;
948 + }
949 + </style>
950 + <?php
951 + } /* FeedWordPressSettingsUI::admin_styles () */
230 952
231 - function instead_of_categories_box ($link_id = null) {
232 - if (!is_null($link_id)) :
233 - $from_this_feed = 'from this feed';
234 - $by_default = '';
235 - $id_param = "&amp;link_id=".$link_id;
236 - else :
237 - $from_this_feed = 'from syndicated feeds';
238 - $by_default = " by default";
239 - $id_param = "";
953 + /*static*/ function ajax_nonce_fields () {
954 + if (function_exists('wp_nonce_field')) :
955 + echo "<form style='display: none' method='get' action=''>\n<p>\n";
956 + wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
957 + wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
958 + echo "</p>\n</form>\n";
240 959 endif;
241 -
242 - fwp_option_box_opener(__('Categories & Tags'), 'categorydiv', 'postbox');
243 -?>
244 -<p>Use the <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/categories-page.php<?php print $id_param; ?>"><?php _e('Categories & Tags'); ?></a>
245 -settings page to set up how new posts <?php print $from_this_feed; ?> are assigned categories or tags<?php print $by_default; ?>.</p>
246 -<?php
247 - fwp_option_box_closer();
248 - } /* FeedWordPressSettingsUI::instead_of_categories_box () */
960 + } /* FeedWordPressSettingsUI::ajax_nonce_fields () */
249 961
962 + /*static*/ function fix_toggles_js ($context) {
963 + ?>
964 + <script type="text/javascript">
965 + jQuery(document).ready( function($) {
966 + // In case someone got here first...
967 + $('.postbox h3, .postbox .handlediv').unbind('click');
968 + $('.postbox h3 a').unbind('click');
969 + $('.hide-postbox-tog').unbind('click');
970 + $('.columns-prefs input[type="radio"]').unbind('click');
971 + $('.meta-box-sortables').sortable('destroy');
972 +
973 + postboxes.add_postbox_toggles('<?php print $context; ?>');
974 + } );
975 + </script>
976 + <?php
977 + } /* FeedWordPressSettingsUI::fix_toggles_js () */
978 +
979 + function magic_input_tip_js ($id) {
980 + if (!preg_match('/^[.#]/', $id)) :
981 + $id = '#'.$id;
982 + endif;
983 + ?>
984 + <script type="text/javascript">
985 + jQuery(document).ready( function () {
986 + var inputBox = jQuery("<?php print $id; ?>");
987 + var boxEl = inputBox.get(0);
988 + if (boxEl.value==boxEl.defaultValue) { inputBox.addClass('form-input-tip'); }
989 + inputBox.focus(function() {
990 + if ( this.value == this.defaultValue )
991 + jQuery(this).val( '' ).removeClass( 'form-input-tip' );
992 + });
993 + inputBox.blur(function() {
994 + if ( this.value == '' )
995 + jQuery(this).val( this.defaultValue ).addClass( 'form-input-tip' );
996 + });
997 + } );
998 + </script>
999 + <?php
1000 + } /* FeedWordPressSettingsUI::magic_input_tip_js () */
250 1001 } /* class FeedWordPressSettingsUI */
251 1002
252 1003 function fwp_insert_new_user ($newuser_name) {
253 1004 global $wpdb;
@@ -255,25 +1006,194 @@
255 1006 $ret = null;
256 1007 if (strlen($newuser_name) > 0) :
257 1008 $userdata = array();
258 1009 $userdata['ID'] = NULL;
1010 + $userdata['user_login'] = apply_filters('pre_user_login', sanitize_user($newuser_name));
1011 + $userdata['user_nicename'] = apply_filters('pre_user_nicename', sanitize_title($newuser_name));
1012 + $userdata['display_name'] = $newuser_name;
1013 + $userdata['user_pass'] = substr(md5(uniqid(microtime())), 0, 6); // just something random to lock it up
259 1014
260 - $userdata['user_login'] = sanitize_user($newuser_name);
261 - $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
1015 + $blahUrl = get_bloginfo('url'); $url = parse_url($blahUrl);
1016 + $userdata['user_email'] = substr(md5(uniqid(microtime())), 0, 6).'@'.$url['host'];
262 1017
263 - $userdata['user_nicename'] = sanitize_title($newuser_name);
264 - $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
265 -
266 - $userdata['display_name'] = $wpdb->escape($newuser_name);
267 -
268 1018 $newuser_id = wp_insert_user($userdata);
269 - if (is_numeric($newuser_id)) :
270 - $ret = $newuser_id;
271 - else :
272 - // TODO: Add some error detection and reporting
273 - endif;
1019 + $ret = $newuser_id; // Either a numeric ID or a WP_Error object
274 1020 else :
275 1021 // TODO: Add some error reporting
276 1022 endif;
277 1023 return $ret;
278 1024 } /* fwp_insert_new_user () */
1025 +
1026 +/**
1027 + * fwp_add_meta_box
1028 + *
1029 + * This function is no longer necessary, since no versions of WordPress that FWP
1030 + * still supports lack add_meta_box(). But I've left it in place for the time
1031 + * being for add-on modules that may have used it in setting up their UI.
1032 + */
1033 +function fwp_add_meta_box ($id, $title, $callback, $page, $context = 'advanced', $priority = 'default', $callback_args = null) {
1034 + return add_meta_box($id, $title, $callback, $page, $context, $priority, $callback_args);
1035 +} /* function fwp_add_meta_box () */
1036 +
1037 +function fwp_do_meta_boxes($page, $context, $object) {
1038 + $ret = do_meta_boxes($page, $context, $object);
1039 +
1040 + // Avoid JavaScript error from WordPress 2.5 bug
1041 +?>
1042 + <div style="display: none">
1043 + <div id="tags-input"></div> <!-- avoid JS error from WP 2.5 bug -->
1044 + </div>
1045 +<?php
1046 + return $ret;
1047 +} /* function fwp_do_meta_boxes() */
1048 +
1049 +function fwp_remove_meta_box($id, $page, $context) {
1050 + return remove_meta_box($id, $page, $context);
1051 +} /* function fwp_remove_meta_box() */
1052 +
1053 +function fwp_syndication_manage_page_links_table_rows ($links, $page, $visible = 'Y') {
1054 + global $fwp_path;
1055 +
1056 + $subscribed = ('Y' == strtoupper($visible));
1057 + if ($subscribed or (count($links) > 0)) :
1058 + ?>
1059 + <table class="widefat<?php if (!$subscribed) : ?> unsubscribed<?php endif; ?>">
1060 + <thead>
1061 + <tr>
1062 + <th class="check-column" scope="col"><input type="checkbox" /></th>
1063 + <th scope="col"><?php _e('Name'); ?></th>
1064 + <th scope="col"><?php _e('Feed'); ?></th>
1065 + <th scope="col"><?php _e('Updated'); ?></th>
1066 + </tr>
1067 + </thead>
1068 +
1069 + <tbody>
1070 +<?php
1071 + $alt_row = true;
1072 + if (count($links) > 0):
1073 + foreach ($links as $link):
1074 + $trClass = array();
1075 +
1076 + // Prep: Get last updated timestamp
1077 + $sLink = new SyndicatedLink($link->link_id);
1078 + if (!is_null($sLink->setting('update/last'))) :
1079 + $lastUpdated = fwp_time_elapsed($sLink->setting('update/last'));
1080 + else :
1081 + $lastUpdated = __('None yet');
1082 + endif;
1083 +
1084 + // Prep: get last error timestamp, if any
1085 + if (is_null($sLink->setting('update/error'))) :
1086 + $errorsSince = '';
1087 + else :
1088 + $trClass[] = 'feed-error';
1089 +
1090 + $theError = unserialize($sLink->setting('update/error'));
1091 +
1092 + $errorsSince = "<div class=\"returning-errors\">"
1093 + ."<p><strong>Returning errors</strong> since "
1094 + .fwp_time_elapsed($theError['since'])
1095 + ."</p>"
1096 + ."<p>Most recent ("
1097 + .fwp_time_elapsed($theError['ts'])
1098 + ."):<br/><code>"
1099 + .implode("</code><br/><code>", $theError['object']->get_error_messages())
1100 + ."</code></p>"
1101 + ."</div>\n";
1102 + endif;
1103 +
1104 + $nextUpdate = "<div style='font-style:italic;size:0.9em'>Ready for next update ";
1105 + if (isset($sLink->settings['update/ttl']) and is_numeric($sLink->settings['update/ttl'])) :
1106 + if (isset($sLink->settings['update/timed']) and $sLink->settings['update/timed']=='automatically') :
1107 + $next = $sLink->settings['update/last'] + ((int) $sLink->settings['update/ttl'] * 60);
1108 + $nextUpdate .= fwp_time_elapsed($next);
1109 + if (FEEDWORDPRESS_DEBUG) : $nextUpdate .= " [".(($next-time())/60)." minutes]"; endif;
1110 + else :
1111 + $nextUpdate .= "every ".$sLink->settings['update/ttl']." minute".(($sLink->settings['update/ttl']!=1)?"s":"");
1112 + endif;
1113 + else:
1114 + $nextUpdate .= "as soon as possible";
1115 + endif;
1116 + $nextUpdate .= "</div>";
1117 +
1118 + unset($sLink);
1119 +
1120 + $alt_row = !$alt_row;
1121 +
1122 + if ($alt_row) :
1123 + $trClass[] = 'alternate';
1124 + endif;
1125 + ?>
1126 + <tr<?php echo ((count($trClass) > 0) ? ' class="'.implode(" ", $trClass).'"':''); ?>>
1127 + <th class="check-column" scope="row"><input type="checkbox" name="link_ids[]" value="<?php echo $link->link_id; ?>" /></th>
1128 + <?php
1129 + $hrefPrefix = "admin.php?link_id={$link->link_id}&amp;page=${fwp_path}/";
1130 + $caption = (
1131 + (strlen($link->link_rss) > 0)
1132 + ? __('Switch Feed')
1133 + : $caption=__('Find Feed')
1134 + );
1135 + ?>
1136 + <td>
1137 + <strong><a href="<?php print $hrefPrefix; ?>feeds-page.php"><?php print esc_html($link->link_name); ?></a></strong>
1138 + <div class="row-actions"><?php if ($subscribed) :
1139 + $page->display_feed_settings_page_links(array(
1140 + 'before' => '<div><strong>Settings &gt;</strong> ',
1141 + 'after' => '</div>',
1142 + 'subscription' => $link,
1143 + ));
1144 + endif; ?>
1145 +
1146 + <div><strong>Actions &gt;</strong>
1147 + <?php if ($subscribed) : ?>
1148 + <a href="<?php print $hrefPrefix; ?>syndication.php&amp;action=feedfinder"><?php echo $caption; ?></a>
1149 + <?php else : ?>
1150 + <a href="<?php print $hrefPrefix; ?>syndication.php&amp;action=<?php print FWP_RESUB_CHECKED; ?>"><?php _e('Re-subscribe'); ?></a>
1151 + <?php endif; ?>
1152 + | <a href="<?php print $hrefPrefix; ?>syndication.php&amp;action=Unsubscribe"><?php _e(($subscribed ? 'Unsubscribe' : 'Delete permanently')); ?></a>
1153 + | <a href="<?php print esc_html($link->link_url); ?>"><?php _e('View')?></a></div>
1154 + </div>
1155 + </td>
1156 + <?php if (strlen($link->link_rss) > 0): ?>
1157 + <td><a href="<?php echo esc_html($link->link_rss); ?>"><?php echo esc_html(feedwordpress_display_url($link->link_rss, 32)); ?></a></td>
1158 + <?php else: ?>
1159 + <td class="feed-missing"><p><strong>no feed assigned</strong></p></td>
1160 + <?php endif; ?>
1161 +
1162 + <td><div style="float: right; padding-left: 10px">
1163 + <input type="submit" class="button" name="update_uri[<?php print esc_html($link->link_rss); ?>]" value="<?php _e('Update Now'); ?>" />
1164 + </div>
1165 + <?php print $lastUpdated; ?>
1166 + <?php print $errorsSince; ?>
1167 + <?php print $nextUpdate; ?>
1168 + </td>
1169 + </tr>
1170 + <?php
1171 + endforeach;
1172 + else :
1173 +?>
1174 +<tr><td colspan="4"><p>There are no websites currently listed for syndication.</p></td></tr>
1175 +<?php
1176 + endif;
1177 +?>
1178 +</tbody>
1179 +</table>
1180 + <?php
1181 + endif;
1182 +} /* function fwp_syndication_manage_page_links_table_rows () */
1183 +
1184 +function fwp_syndication_manage_page_links_subsubsub ($sources, $showInactive) {
1185 + global $fwp_path;
1186 + $hrefPrefix = "admin.php?page=${fwp_path}/syndication.php";
1187 + ?>
1188 + <ul class="subsubsub">
1189 + <li><a <?php if (!$showInactive) : ?>class="current" <?php endif; ?>href="<?php print $hrefPrefix; ?>&amp;visibility=Y">Subscribed
1190 + <span class="count">(<?php print count($sources['Y']); ?>)</span></a></li>
1191 + <?php if ($showInactive or (count($sources['N']) > 0)) : ?>
1192 + <li><a <?php if ($showInactive) : ?>class="current" <?php endif; ?>href="<?php print $hrefPrefix; ?>&amp;visibility=N">Inactive</a>
1193 + <span class="count">(<?php print count($sources['N']); ?>)</span></a></li>
1194 + <?php endif; ?>
1195 +
1196 + </ul> <!-- class="subsubsub" -->
1197 + <?php
1198 +}
279 1199