source: trunk/www.guidonia.net/wp/wp-content/plugins/feedwordpress/authors-page.php@ 44

Last change on this file since 44 was 44, checked in by luciano, 14 years ago
File size: 18.4 KB
Line 
1<?php
2require_once(dirname(__FILE__) . '/admin-ui.php');
3
4function fwp_authors_page () {
5 global $wpdb, $wp_db_version;
6
7 FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_author_settings', /*capability=*/ 'manage_links');
8
9 if (isset($GLOBALS['fwp_post']['save']) or isset($GLOBALS['fwp_post']['fix_mismatch'])) :
10 $link_id = $_REQUEST['save_link_id'];
11 elseif (isset($_REQUEST['link_id'])) :
12 $link_id = $_REQUEST['link_id'];
13 else :
14 $link_id = NULL;
15 endif;
16
17 if (is_numeric($link_id) and $link_id) :
18 $link =& new SyndicatedLink($link_id);
19 else :
20 $link = NULL;
21 endif;
22
23 $mesg = null;
24
25 if (isset($GLOBALS['fwp_post']['fix_mismatch'])) :
26 if ('newuser'==$GLOBALS['fwp_post']['fix_mismatch_to']) :
27 $newuser_name = trim($GLOBALS['fwp_post']['fix_mismatch_to_newuser']);
28 if (strlen($newuser_name) > 0) :
29 $userdata = array();
30 $userdata['ID'] = NULL;
31
32 $userdata['user_login'] = sanitize_user($newuser_name);
33 $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
34
35 $userdata['user_nicename'] = sanitize_title($newuser_name);
36 $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
37
38 $userdata['display_name'] = $wpdb->escape($newuser_name);
39
40 $newuser_id = wp_insert_user($userdata);
41 if (is_numeric($newuser_id)) :
42 $fix_mismatch_to_id = $newuser_id;
43 else :
44 // TODO: Add some error detection and reporting
45 endif;
46 else :
47 // TODO: Add some error reporting
48 endif;
49 else :
50 $fix_mismatch_to_id = $GLOBALS['fwp_post']['fix_mismatch_to'];
51 endif;
52 $fix_mismatch_from_id = (int) $GLOBALS['fwp_post']['fix_mismatch_from'];
53 if (is_numeric($fix_mismatch_from_id)) :
54 // Make a list of all the items by this author syndicated from this feed...
55 $post_ids = $wpdb->get_col("
56 SELECT {$wpdb->posts}.id
57 FROM {$wpdb->posts}, {$wpdb->postmeta}
58 WHERE ({$wpdb->posts}.id = {$wpdb->postmeta}.post_id)
59 AND {$wpdb->postmeta}.meta_key = 'syndication_feed_id'
60 AND {$wpdb->postmeta}.meta_value = '{$link_id}'
61 AND {$wpdb->posts}.post_author = '{$fix_mismatch_from_id}'
62 ");
63
64 if (count($post_ids) > 0) :
65 // Re-assign them all to the correct author
66 if (is_numeric($fix_mismatch_to_id)) : // re-assign to a particular user
67 $post_set = "(".implode(",", $post_ids).")";
68
69 // Getting the revisions too, if there are any
70 if (fwp_test_wp_version(FWP_SCHEMA_26)) :
71 $parent_in_clause = "OR {$wpdb->posts}.post_parent IN $post_set";
72 else :
73 $parent_in_clause = '';
74 endif;
75
76 $wpdb->query("
77 UPDATE {$wpdb->posts}
78 SET post_author='{$fix_mismatch_to_id}'
79 WHERE ({$wpdb->posts}.id IN $post_set
80 $parent_in_clause)
81 ");
82 $mesg = "Re-assigned ".count($post_ids)." post".((count($post_ids)==1)?'':'s').".";
83
84 // ... and kill them all
85 elseif ($fix_mismatch_to_id=='filter') :
86 foreach ($post_ids as $post_id) :
87 wp_delete_post($post_id);
88 endforeach;
89 $mesg = "Deleted ".count($post_ids)." post".((count($post_ids)==1)?'':'s').".";
90 endif;
91 else :
92 $mesg = "Couldn't find any posts that matched your criteria.";
93 endif;
94 endif;
95 elseif (isset($GLOBALS['fwp_post']['save'])) :
96 if (is_object($link) and $link->found()) :
97 $alter = array ();
98
99 // Unfamiliar author rule
100 if (isset($GLOBALS['fwp_post']["unfamiliar_author"])) :
101 if ('site-default'==$GLOBALS['fwp_post']["unfamiliar_author"]) :
102 unset($link->settings["unfamiliar author"]);
103 elseif ('newuser'==$GLOBALS['fwp_post']["unfamiliar_author"]) :
104 $newuser_name = trim($GLOBALS['fwp_post']["unfamiliar_author_newuser"]);
105 $link->map_name_to_new_user(/*name=*/ NULL, $newuser_name);
106 else :
107 $link->settings["unfamiliar author"] = $GLOBALS['fwp_post']["unfamiliar_author"];
108 endif;
109 endif;
110
111 // Handle author mapping rules
112 if (isset($GLOBALS['fwp_post']['author_rules_name']) and isset($GLOBALS['fwp_post']['author_rules_action'])) :
113 unset($link->settings['map authors']);
114 foreach ($GLOBALS['fwp_post']['author_rules_name'] as $key => $name) :
115 // Normalize for case and whitespace
116 $name = strtolower(trim($name));
117 $author_action = strtolower(trim($GLOBALS['fwp_post']['author_rules_action'][$key]));
118
119 if (strlen($name) > 0) :
120 if ('newuser' == $author_action) :
121 $newuser_name = trim($GLOBALS['fwp_post']['author_rules_newuser'][$key]);
122 $link->map_name_to_new_user($name, $newuser_name);
123 else :
124 $link->settings['map authors']['name'][$name] = $author_action;
125 endif;
126 endif;
127 endforeach;
128 endif;
129
130 if (isset($GLOBALS['fwp_post']['add_author_rule_name']) and isset($GLOBALS['fwp_post']['add_author_rule_action'])) :
131 $name = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_name']));
132 $author_action = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_action']));
133 if (strlen($name) > 0) :
134 if ('newuser' == $author_action) :
135 $newuser_name = trim($GLOBALS['fwp_post']['add_author_rule_newuser']);
136 $link->map_name_to_new_user($name, $newuser_name);
137 else :
138 $link->settings['map authors']['name'][$name] = $author_action;
139 endif;
140 endif;
141 endif;
142
143 $alter[] = "link_notes = '".$wpdb->escape($link->settings_to_notes())."'";
144
145 $alter_set = implode(", ", $alter);
146
147 // issue update query
148 $result = $wpdb->query("
149 UPDATE $wpdb->links
150 SET $alter_set
151 WHERE link_id='$link_id'
152 ");
153 $updated_link = true;
154
155 // reload link information from DB
156 if (function_exists('clean_bookmark_cache')) :
157 clean_bookmark_cache($link_id);
158 endif;
159 $link =& new SyndicatedLink($link_id);
160 else :
161 if ('newuser'==$GLOBALS['fwp_post']['unfamiliar_author']) :
162 $newuser_name = trim($GLOBALS['fwp_post']['unfamiliar_author_newuser']);
163 if (strlen($newuser_name) > 0) :
164 $userdata = array();
165 $userdata['ID'] = NULL;
166
167 $userdata['user_login'] = sanitize_user($newuser_name);
168 $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
169
170 $userdata['user_nicename'] = sanitize_title($newuser_name);
171 $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
172
173 $userdata['display_name'] = $wpdb->escape($newuser_name);
174
175 $newuser_id = wp_insert_user($userdata);
176 if (is_numeric($newuser_id)) :
177 update_option('feedwordpress_unfamiliar_author', $newuser_id);
178 else :
179 // TODO: Add some error detection and reporting
180 endif;
181 else :
182 // TODO: Add some error reporting
183 endif;
184 else :
185 update_option('feedwordpress_unfamiliar_author', $GLOBALS['fwp_post']['unfamiliar_author']);
186 endif;
187
188 if (isset($GLOBALS['fwp_post']['match_author_by_email']) and $GLOBALS['fwp_post']['match_author_by_email']=='yes') :
189 update_option('feedwordpress_do_not_match_author_by_email', 'no');
190 else :
191 update_option('feedwordpress_do_not_match_author_by_email', 'yes');
192 endif;
193
194 if (isset($GLOBALS['fwp_post']['null_emails'])) :
195 update_option('feedwordpress_null_email_set', $GLOBALS['fwp_post']['null_emails']);
196 endif;
197
198 $updated_link = true;
199 endif;
200 else :
201 $updated_link = false;
202 endif;
203
204 $unfamiliar = array ('create' => '','default' => '','filter' => '');
205
206 if (is_object($link) and $link->found()) :
207 if (is_string($link->settings["unfamiliar author"])) :
208 $key = $link->settings["unfamiliar author"];
209 else:
210 $key = 'site-default';
211 endif;
212 else :
213 $key = FeedWordPress::on_unfamiliar('author');
214 endif;
215
216 $unfamiliar[$key] = ' selected="selected"';
217
218 $match_author_by_email = !('yes' == get_option("feedwordpress_do_not_match_author_by_email"));
219 $null_emails = FeedWordPress::null_email_set();
220?>
221<script type="text/javascript">
222 function contextual_appearance (item, appear, disappear, value, visibleStyle, checkbox) {
223 if (typeof(visibleStyle)=='undefined') visibleStyle = 'block';
224
225 var rollup=document.getElementById(item);
226 var newuser=document.getElementById(appear);
227 var sitewide=document.getElementById(disappear);
228 if (rollup) {
229 if ((checkbox && rollup.checked) || (!checkbox && value==rollup.value)) {
230 if (newuser) newuser.style.display=visibleStyle;
231 if (sitewide) sitewide.style.display='none';
232 } else {
233 if (newuser) newuser.style.display='none';
234 if (sitewide) sitewide.style.display=visibleStyle;
235 }
236 }
237 }
238</script>
239
240<?php if ($updated_link) : ?>
241<div class="updated"><p>Syndicated author settings updated.</p></div>
242<?php elseif (!is_null($mesg)) : ?>
243<div class="updated"><p><?php print wp_specialchars($mesg, 1); ?></p></div>
244<?php endif; ?>
245
246<div class="wrap">
247<form style="position: relative" action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
248<div><?php
249 FeedWordPressCompatibility::stamp_nonce('feedwordpress_author_settings');
250
251 if (is_numeric($link_id) and $link_id) :
252?>
253<input type="hidden" name="save_link_id" value="<?php echo $link_id; ?>" />
254<?php
255 else :
256?>
257<input type="hidden" name="save_link_id" value="*" />
258<?php
259 endif;
260?>
261</div>
262
263<?php $links = FeedWordPress::syndicated_links(); ?>
264<?php if (fwp_test_wp_version(FWP_SCHEMA_27)) : ?>
265 <div class="icon32"><img src="<?php print htmlspecialchars(WP_PLUGIN_URL.'/'.$GLOBALS['fwp_path'].'/feedwordpress.png'); ?>" alt="" /></div>
266<?php endif; ?>
267<h2>Syndicated Author Settings<?php if (!is_null($link) and $link->found()) : ?>: <?php echo wp_specialchars($link->link->link_name, 1); ?><?php endif; ?></h2>
268<?php if (fwp_test_wp_version(FWP_SCHEMA_27)) : ?>
269 <style type="text/css">
270 #post-search {
271 float: right;
272 margin:11px 12px 0;
273 min-width: 130px;
274 position:relative;
275 }
276 .fwpfs {
277 color: #dddddd;
278 background:#797979 url(<?php bloginfo('home') ?>/wp-admin/images/fav.png) repeat-x scroll left center;
279 border-color:#777777 #777777 #666666 !important; -moz-border-radius-bottomleft:12px;
280 -moz-border-radius-bottomright:12px;
281 -moz-border-radius-topleft:12px;
282 -moz-border-radius-topright:12px;
283 border-style:solid;
284 border-width:1px;
285 line-height:15px;
286 padding:3px 30px 4px 12px;
287 }
288 .fwpfs.slide-down {
289 border-bottom-color: #626262;
290 -moz-border-radius-bottomleft:0;
291 -moz-border-radius-bottomright:0;
292 -moz-border-radius-topleft:12px;
293 -moz-border-radius-topright:12px;
294 background-image:url(<?php bloginfo('home') ?>/wp-admin/images/fav-top.png);
295 background-position:0 top;
296 background-repeat:repeat-x;
297 border-bottom-style:solid;
298 border-bottom-width:1px;
299 }
300 </style>
301
302 <script type="text/javascript">
303 jQuery(document).ready(function($){
304 $('.fwpfs').toggle(
305 function(){$('.fwpfs').removeClass('slideUp').addClass('slideDown'); setTimeout(function(){if ( $('.fwpfs').hasClass('slideDown') ) { $('.fwpfs').addClass('slide-down'); }}, 10) },
306 function(){$('.fwpfs').removeClass('slideDown').addClass('slideUp'); setTimeout(function(){if ( $('.fwpfs').hasClass('slideUp') ) { $('.fwpfs').removeClass('slide-down'); }}, 10) }
307 );
308 $('.fwpfs').bind(
309 'change',
310 function () { this.form.submit(); }
311 );
312 $('#post-search .button').css( 'display', 'none' );
313 });
314 </script>
315<?php endif; /* else : */?>
316<p id="post-search">
317<select name="link_id" class="fwpfs" style="max-width: 20.0em;">
318 <option value="*"<?php if (is_null($link) or !$link->found()) : ?> selected="selected"<?php endif; ?>>- defaults for all feeds -</option>
319<?php if ($links) : foreach ($links as $ddlink) : ?>
320 <option value="<?php print (int) $ddlink->link_id; ?>"<?php if (!is_null($link) and ($link->link->link_id==$ddlink->link_id)) : ?> selected="selected"<?php endif; ?>><?php print wp_specialchars($ddlink->link_name, 1); ?></option>
321<?php endforeach; endif; ?>
322</select>
323<input class="button" type="submit" name="go" value="<?php _e('Go') ?> &raquo;" />
324</p>
325<?php /* endif; */ ?>
326
327<?php if (!is_null($link) and $link->found()) : ?>
328 <p>These settings only affect posts syndicated from
329 <strong><?php echo wp_specialchars($link->link->link_name, 1); ?></strong>.</p>
330<?php else : ?>
331 <p>These settings affect posts syndicated from any feed unless they are overridden
332 by settings for that specific feed.</p>
333<?php endif; ?>
334
335<?php
336 $authorlist = fwp_author_list();
337?>
338<table class="form-table">
339<tbody>
340<tr>
341 <th>New authors</th>
342 <td><span>Authors who haven't been syndicated before</span>
343 <select style="max-width: 27.0em" id="unfamiliar-author" name="unfamiliar_author" onchange="contextual_appearance('unfamiliar-author', 'unfamiliar-author-newuser', 'unfamiliar-author-default', 'newuser', 'inline');">
344<?php if (is_object($link) and $link->found()) : ?>
345 <option value="site-default"<?php print $unfamiliar['site-default']; ?>>are handled according to the default for all feeds</option>
346<?php endif; ?>
347 <option value="create"<?php $unfamiliar['create']; ?>>will have a new author account created for them</option>
348 <?php foreach ($authorlist as $author_id => $author_name) : ?>
349 <option value="<?php echo $author_id; ?>"<?php print $unfamiliar[$author_id]; ?>>will have their posts attributed to <?php echo $author_name; ?></option>
350 <?php endforeach; ?>
351 <option value="newuser">will have their posts attributed to a new user...</option>
352 <option value="filter"<?php print $unfamiliar['filter'] ?>>get filtered out</option>
353 </select>
354
355 <span id="unfamiliar-author-newuser">named <input type="text" name="unfamiliar_author_newuser" value="" /></span></p>
356 </td>
357</tr>
358
359<?php
360if (is_object($link) and $link->found()) :
361?>
362<tr><th>Syndicated authors</th>
363<td>For attributing posts by specific authors. Blank out a name to delete the rule. Fill in a new name at the bottom to create a new rule.</p>
364<table style="width: 100%">
365<?php
366 if (isset($link->settings['map authors'])) :
367?>
368<?php
369 $i=0;
370 foreach ($link->settings['map authors'] as $author_rules) :
371 foreach ($author_rules as $author_name => $author_action) :
372 $i++;
373?>
374<tr>
375<th style="text-align: left; width: 15.0em">Posts by <input type="text" name="author_rules_name[]" value="<?php echo htmlspecialchars($author_name); ?>" size="11" /></th>
376 <td>
377 <select id="author-rules-<?php echo $i; ?>" name="author_rules_action[]" onchange="contextual_appearance('author-rules-<?php echo $i; ?>', 'author-rules-<?php echo $i; ?>-newuser', 'author-rules-<?php echo $i; ?>-default', 'newuser', 'inline');">
378 <?php foreach ($authorlist as $local_author_id => $local_author_name) : ?>
379 <option value="<?php echo $local_author_id; ?>"<?php if ($local_author_id==$author_action) : echo ' selected="selected"'; endif; ?>>are assigned to <?php echo $local_author_name; ?></option>
380 <?php endforeach; ?>
381 <option value="newuser">will be assigned to a new user...</option>
382 <option value="filter"<?php if ('filter'==$author_action) : echo ' selected="selected"'; endif; ?>>get filtered out</option>
383 </select>
384
385 <span id="author-rules-<?php echo $i; ?>-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></span>
386 </td>
387</tr>
388<?php endforeach;
389 endforeach;
390 endif;
391?>
392
393<tr>
394<th style="text-align: left; width: 15.0em">Posts by <input type="text" name="add_author_rule_name" size="11" /></th>
395 <td>
396 <select id="add-author-rule" name="add_author_rule_action" onchange="contextual_appearance('add-author-rule', 'add-author-rule-newuser', 'add-author-rule-default', 'newuser', 'inline');">
397 <?php foreach ($authorlist as $author_id => $author_name) : ?>
398 <option value="<?php echo $author_id; ?>">are assigned to <?php echo $author_name; ?></option>
399 <?php endforeach; ?>
400 <option value="newuser">will be assigned to a new user...</option>
401 <option value="filter">get filtered out</option>
402 </select>
403
404 <span id="add-author-rule-newuser">named <input type="text" name="add_author_rule_newuser" value="" /></span>
405 </td>
406</tr>
407</table>
408</td>
409</tr>
410<?php endif; ?>
411
412<?php if (!(is_object($link) and $link->found())) : ?>
413<tr>
414<th scope="row">Matching Authors</th>
415<td><ul style="list-style: none; margin: 0; padding: 0;">
416<li><div><label><input id="match-author-by-email" type="checkbox" name="match_author_by_email" value="yes" <?php if ($match_author_by_email) : ?>checked="checked" <?php endif; ?>onchange="contextual_appearance('match-author-by-email', 'unless-null-email', null, 'yes', 'block', /*checkbox=*/ true);" /> Treat syndicated authors with the same e-mail address as the same author.</label></div>
417<div id="unless-null-email">
418<p>Unless the e-mail address is one of the following anonymous e-mail addresses:</p>
419<textarea name="null_emails" rows="3" style="width: 100%">
420<?php print implode("\n", $null_emails); ?>
421</textarea>
422</div></li>
423</ul></td>
424</tr>
425<?php else : ?>
426<th scope="row">Fixing mis-matched authors:</th>
427<td><p style="margin: 0.5em 0px">Take all the posts from this feed attributed to
428<select name="fix_mismatch_from">
429<?php foreach ($authorlist as $author_id => $author_name) : ?>
430 <option value="<?php echo $author_id; ?>"><?php echo $author_name; ?></option>
431<?php endforeach; ?>
432</select>
433and instead
434<select id="fix-mismatch-to" name="fix_mismatch_to" onchange="contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');">
435<?php foreach ($authorlist as $author_id => $author_name) : ?>
436 <option value="<?php echo $author_id; ?>">re-assign them to <?php echo $author_name; ?></option>
437<?php endforeach; ?>
438 <option value="newuser">re-assign them to a new user...</option>
439 <option value="filter">delete them</option>
440</select>
441
442 <span id="fix-mismatch-to-newuser">named <input type="text" name="fix_mismatch_to_newuser" value="" /></span>
443 <input type="submit" class="button" name="fix_mismatch" value="Fix it!" />
444 </td>
445</td>
446<?php endif; ?>
447</tbody>
448</table>
449
450<p class="submit">
451<input class="button-primary" type="submit" name="save" value="Save Changes" />
452</p>
453
454<script type="text/javascript">
455 contextual_appearance('unfamiliar-author', 'unfamiliar-author-newuser', 'unfamiliar-author-default', 'newuser', 'inline');
456<?php if (is_object($link) and $link->found()) : ?>
457<?php for ($j=1; $j<=$i; $j++) : ?>
458 contextual_appearance('author-rules-<?php echo $j; ?>', 'author-rules-<?php echo $j; ?>-newuser', 'author-rules-<?php echo $j; ?>-default', 'newuser', 'inline');
459<?php endfor; ?>
460 contextual_appearance('add-author-rule', 'add-author-rule-newuser', 'add-author-rule-default', 'newuser', 'inline');
461 contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');
462<?php else : ?>
463 contextual_appearance('match-author-by-email', 'unless-null-email', null, 'yes', 'block', /*checkbox=*/ true);
464<?php endif; ?>
465</script>
466</form>
467</div> <!-- class="wrap" -->
468<?php
469} /* function fwp_authors_page () */
470
471 fwp_authors_page();
472
Note: See TracBrowser for help on using the repository browser.