PluginProbe
FeedWordPress / 2009.0612
FeedWordPress v2009.0612
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 / authors-page.php

authors-page.php in FeedWordPress 2009.0612, at authors-page.php

473 lines 18.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 require_once(dirname(__FILE__) . '/admin-ui.php');
3
4 function 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
360 if (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>
433 and 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
473