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 | authors-page.php +312 -392 2009.06132011.0211.2 View file →
@@ -1,382 +1,97 @@
1 1 <?php
2 2 require_once(dirname(__FILE__) . '/admin-ui.php');
3 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'];
4 +class FeedWordPressAuthorsPage extends FeedWordPressAdminPage {
5 + var $authorlist = NULL;
6 + var $rule_count = 0;
7 +
8 + function FeedWordPressAuthorsPage ($link = -1) {
9 + if (is_numeric($link) and -1 == $link) :
10 + $link = FeedWordPressAdminPage::submitted_link();
51 11 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 12
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 ();
13 + FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpressauthors', $link);
14 + $this->refresh_author_list();
15 + $this->dispatch = 'feedwordpress_author_settings';
16 + $this->filename = __FILE__;
98 17
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;
18 + $this->pagenames = array(
19 + 'default' => 'Authors',
20 + 'settings-update' => 'Syndicated Authors',
21 + 'open-sheet' => 'Syndicated Author',
22 + );
23 + }
24 +
25 + function refresh_author_list () {
26 + $this->authorlist = fwp_author_list();
27 + }
28 +
29 + /*static*/ function syndicated_authors_box ($page, $box = NULL) {
30 + $link = $page->link;
31 + $unfamiliar = array ('create' => '','default' => '','filter' => '');
129 32
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);
33 + if ($page->for_feed_settings()) :
34 + $key = $this->link->setting('unfamiliar author', NULL, 'site-default');
35 + $unfamiliar['site-default'] = '';
160 36 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;
37 + $key = FeedWordPress::on_unfamiliar('author');
199 38 endif;
200 - else :
201 - $updated_link = false;
202 - endif;
39 + $unfamiliar[$key] = ' selected="selected"';
203 40
204 - $unfamiliar = array ('create' => '','default' => '','filter' => '');
41 + $match_author_by_email = !('yes' == get_option("feedwordpress_do_not_match_author_by_email"));
42 + $null_emails = FeedWordPress::null_email_set();
205 43
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; ?>" />
44 + // Hey ho, let's go...
45 + ?>
46 +<table class="form-table">
254 47 <?php
255 - else :
48 +if ($page->for_feed_settings()) :
49 + $map = $this->link->setting('map authors', NULL, array());
256 50 ?>
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>
51 +<tr><th>Matching authors</th>
52 +<td><p>How should FeedWordPress attribute posts from this feed to WordPress
53 +authors?</p>
54 +<ul class="settings">
55 +<li><p><input type="radio" name="author_rules_name[all]" value="*"
56 +<?php if (isset($map['name']['*'])) : $author_action = $map['name']['*']; ?>
57 + checked="checked"
58 +<?php else : $author_action = NULL; ?>
266 59 <?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>
60 + /> All posts syndicated
61 +from this feed <select class="author-rules" id="author-rules-all"
62 +name="author_rules_action[all]" onchange="contextual_appearance('author-rules-all', 'author-rules-all-newuser', 'author-rules-all-default', 'newuser', 'inline');">
63 + <?php foreach ($page->authorlist as $local_author_id => $local_author_name) : ?>
64 + <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>
350 65 <?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>
66 + <option value="newuser">will be assigned to a new user...</option>
67 + <option value="filter"<?php if ('filter'==$author_action) : echo ' selected="selected"'; endif; ?>>get filtered out</option>
353 68 </select>
69 + <span class="author-rules-newuser" id="author-rules-all-newuser">named
70 + <input type="text" name="author_rules_newuser[all]" value="" /></span></p></li>
71 +<li><p><input type="radio" name="author_rules_name[all]" value=""
72 +<?php if (!isset($map['name']['*'])) : ?>
73 + checked="checked"
74 +<?php endif; ?>
75 +/> Attribute posts to authors based on automatic mapping rules. (Blank out a
76 +name to delete the rule. Fill in a new name at the bottom to create a new rule.)</p>
354 77
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 78 <table style="width: 100%">
365 79 <?php
366 - if (isset($link->settings['map authors'])) :
80 + if (isset($this->link->settings['map authors'])) :
367 81 ?>
368 82 <?php
369 - $i=0;
370 - foreach ($link->settings['map authors'] as $author_rules) :
83 + $page->rule_count=0;
84 + foreach ($this->link->settings['map authors'] as $author_rules) :
371 85 foreach ($author_rules as $author_name => $author_action) :
372 - $i++;
86 + if ($author_name != '*') :
87 + $page->rule_count++;
373 88 ?>
374 89 <tr>
375 90 <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 91 <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) : ?>
92 + <select class="author-rules" id="author-rules-<?php echo $page->rule_count; ?>" name="author_rules_action[]" onchange="contextual_appearance('author-rules-<?php echo $page->rule_count; ?>', 'author-rules-<?php echo $page->rule_count; ?>-newuser', 'author-rules-<?php echo $page->rule_count; ?>-default', 'newuser', 'inline');">
93 + <?php foreach ($page->authorlist as $local_author_id => $local_author_name) : ?>
379 94 <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 95 <?php endforeach; ?>
381 96 <option value="newuser">will be assigned to a new user...</option>
382 97 <option value="filter"<?php if ('filter'==$author_action) : echo ' selected="selected"'; endif; ?>>get filtered out</option>
@@ -381,12 +96,14 @@
381 96 <option value="newuser">will be assigned to a new user...</option>
382 97 <option value="filter"<?php if ('filter'==$author_action) : echo ' selected="selected"'; endif; ?>>get filtered out</option>
383 98 </select>
384 99
385 - <span id="author-rules-<?php echo $i; ?>-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></span>
100 + <span class="author-rules-newuser" id="author-rules-<?php echo $page->rule_count; ?>-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></span>
386 101 </td>
387 102 </tr>
388 -<?php endforeach;
103 +<?php
104 + endif;
105 + endforeach;
389 106 endforeach;
390 107 endif;
391 108 ?>
392 109
@@ -393,9 +110,9 @@
393 110 <tr>
394 111 <th style="text-align: left; width: 15.0em">Posts by <input type="text" name="add_author_rule_name" size="11" /></th>
395 112 <td>
396 113 <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) : ?>
114 + <?php foreach ($page->authorlist as $author_id => $author_name) : ?>
398 115 <option value="<?php echo $author_id; ?>">are assigned to <?php echo $author_name; ?></option>
399 116 <?php endforeach; ?>
400 117 <option value="newuser">will be assigned to a new user...</option>
401 118 <option value="filter">get filtered out</option>
@@ -403,14 +120,36 @@
403 120
404 121 <span id="add-author-rule-newuser">named <input type="text" name="add_author_rule_newuser" value="" /></span>
405 122 </td>
406 123 </tr>
407 -</table>
124 +
125 +<tr>
126 +<th style="text-align: left; width: 15.0em">Unmatched authors</th>
127 +<td>
128 +<span>Authors who haven't been syndicated before</span>
129 + <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');">
130 +<?php if ($page->for_feed_settings()) : ?>
131 + <option value="site-default"<?php print $unfamiliar['site-default']; ?>>are handled according to the default for all feeds</option>
132 +<?php endif; ?>
133 + <option value="create"<?php print $unfamiliar['create']; ?>>will have a new author account created for them</option>
134 + <?php foreach ($page->authorlist as $author_id => $author_name) : ?>
135 + <option value="<?php echo $author_id; ?>"<?php print (isset($unfamiliar[$author_id]) ? $unfamiliar[$author_id] : ''); ?>>will have their posts attributed to <?php echo $author_name; ?></option>
136 + <?php endforeach; ?>
137 + <option value="newuser">will have their posts attributed to a user named ...</option>
138 + <option value="filter"<?php print $unfamiliar['filter'] ?>>get filtered out</option>
139 + </select>
140 +
141 + <span id="unfamiliar-author-newuser"><input type="text" name="unfamiliar_author_newuser" value="" /></span></p>
408 142 </td>
409 143 </tr>
144 +</table></li>
145 +</ul>
146 +
147 +</td>
148 +</tr>
410 149 <?php endif; ?>
411 150
412 -<?php if (!(is_object($link) and $link->found())) : ?>
151 +<?php if ($page->for_default_settings()) : ?>
413 152 <tr>
414 153 <th scope="row">Matching Authors</th>
415 154 <td><ul style="list-style: none; margin: 0; padding: 0;">
416 155 <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>
@@ -421,52 +160,233 @@
421 160 </textarea>
422 161 </div></li>
423 162 </ul></td>
424 163 </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 164 <?php endif; ?>
447 165 </tbody>
448 166 </table>
167 + <?php
168 + } /* FeedWordPressAuthorsPage::syndicated_authors_box () */
169 +
170 + /*static*/ function fix_authors_box ($page, $box = NULL) {
171 + ?>
172 + <table class="form-table">
173 + <tbody>
174 + <tr>
175 + <th scope="row">Fixing mis-matched authors:</th>
176 + <td><p style="margin: 0.5em 0px">Take all the posts from this feed attributed to
177 + <select name="fix_mismatch_from">
178 + <?php foreach ($page->authorlist as $author_id => $author_name) : ?>
179 + <option value="<?php echo $author_id; ?>"><?php echo $author_name; ?></option>
180 + <?php endforeach; ?>
181 + </select>
182 + and instead
183 + <select id="fix-mismatch-to" name="fix_mismatch_to" onchange="contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');">
184 + <?php foreach ($page->authorlist as $author_id => $author_name) : ?>
185 + <option value="<?php echo $author_id; ?>">re-assign them to <?php echo $author_name; ?></option>
186 + <?php endforeach; ?>
187 + <option value="newuser">re-assign them to a new user...</option>
188 + <option value="filter">delete them</option>
189 + </select>
449 190
450 -<p class="submit">
451 -<input class="button-primary" type="submit" name="save" value="Save Changes" />
452 -</p>
191 + <span id="fix-mismatch-to-newuser">named <input type="text" name="fix_mismatch_to_newuser" value="" /></span>
192 + <input type="submit" class="button" name="fix_mismatch" value="Fix it!" />
193 + </td>
194 + </tr>
195 + </tbody>
196 + </table>
197 + <?php
198 + } /* FeedWordPressAuthorsPage::fix_authors_box () */
453 199
200 + function display () {
201 + $this->boxes_by_methods = array(
202 + 'syndicated_authors_box' => __('Syndicated Authors'),
203 + 'fix_authors_box' => __('Reassign Authors'),
204 + );
205 + if ($this->for_default_settings()) :
206 + unset($this->boxes_by_methods['fix_authors_box']);
207 + endif;
208 +
209 + parent::display();
210 + ?>
454 211 <script type="text/javascript">
455 212 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; ?>
213 +</script>
214 +
215 +<?php if ($this->for_feed_settings()) : ?>
216 +<script type="text/javascript">
217 + jQuery('.author-rules').each ( function () {
218 + contextual_appearance(this.id, this.id+'-newuser', this.id+'-default', 'newuser', 'inline');
219 + } );
220 +
460 221 contextual_appearance('add-author-rule', 'add-author-rule-newuser', 'add-author-rule-default', 'newuser', 'inline');
461 222 contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');
462 -<?php else : ?>
223 +</script>
224 +<?php else : ?>
225 +<script type="text/javascript">
463 226 contextual_appearance('match-author-by-email', 'unless-null-email', null, 'yes', 'block', /*checkbox=*/ true);
464 -<?php endif; ?>
465 227 </script>
466 -</form>
467 -</div> <!-- class="wrap" -->
468 -<?php
469 -} /* function fwp_authors_page () */
228 +<?php endif;
229 + } /* FeedWordPressAuthorsPage::display () */
470 230
471 - fwp_authors_page();
231 + function accept_POST ($post) {
232 + if (isset($post['fix_mismatch']) and (strlen($post['fix_mismatch']) > 0)) :
233 + $this->fix_mismatch($post);
234 + else :
235 + parent::accept_POST($post);
236 + endif;
237 + }
238 +
239 + function fix_mismatch ($post) {
240 + global $wpdb;
241 +
242 + if ('newuser'==$post['fix_mismatch_to']) :
243 + $newuser_name = trim($post['fix_mismatch_to_newuser']);
244 + $to = fwp_insert_new_user($newuser_name);
245 + else :
246 + $to = $post['fix_mismatch_to'];
247 + endif;
248 +
249 + $from = (int) $post['fix_mismatch_from'];
250 + if (is_numeric($from)) :
251 + // Make a list of all the items by this author
252 + // syndicated from this feed...
253 + $post_ids = $wpdb->get_col("
254 + SELECT {$wpdb->posts}.id
255 + FROM {$wpdb->posts}, {$wpdb->postmeta}
256 + WHERE ({$wpdb->posts}.id = {$wpdb->postmeta}.post_id)
257 + AND {$wpdb->postmeta}.meta_key = 'syndication_feed_id'
258 + AND {$wpdb->postmeta}.meta_value = '{$this->link->id}'
259 + AND {$wpdb->posts}.post_author = '{$from}'
260 + ");
261 +
262 + if (count($post_ids) > 0) :
263 + $N = count($post_ids);
264 + $posts = 'post'.(($N==1) ? '' : 's');
265 +
266 + // Re-assign them all to the correct author
267 + if (is_numeric($to)) : // re-assign to a particular user
268 + $post_set = "(".implode(",", $post_ids).")";
269 +
270 + // Getting the revisions too, if there are any
271 + $parent_in_clause = "OR {$wpdb->posts}.post_parent IN $post_set";
272 +
273 + $wpdb->query("
274 + UPDATE {$wpdb->posts}
275 + SET post_author='{$to}'
276 + WHERE ({$wpdb->posts}.id IN $post_set
277 + $parent_in_clause)
278 + ");
279 + $this->mesg = sprintf(__("Re-assigned %d ${posts}."), $N);
280 +
281 + // ... and kill them all
282 + elseif ('filter'==$to) :
283 + foreach ($post_ids as $post_id) :
284 + wp_delete_post($post_id);
285 + endforeach;
286 +
287 + $this->mesg = sprintf(__("Deleted %d ${posts}."), $N);
288 + endif;
289 + else :
290 + $this->mesg = __("Couldn't find any posts that matched your criteria.");
291 + endif;
292 + endif;
293 + $this->updated = false;
294 + }
295 +
296 + function save_settings ($post) {
297 +
298 + if ($this->for_feed_settings()) :
299 + $alter = array ();
300 +
301 + // Unfamiliar author rule
302 + if (isset($post["unfamiliar_author"])) :
303 + if ('newuser'==$post['unfamiliar_author']) :
304 + $new_name = trim($post["unfamiliar_author_newuser"]);
305 + $this->link->map_name_to_new_user(/*name=*/ NULL, $new_name);
306 + else :
307 + $this->link->update_setting(
308 + "unfamiliar author",
309 + $post['unfamiliar_author'],
310 + 'site-default'
311 + );
312 + endif;
313 + endif;
314 +
315 + // Handle author mapping rules
316 + if (isset($post['author_rules_name'])
317 + and isset($post['author_rules_action'])) :
318 + if (isset($post['author_rules_name']['all'])) :
319 + if (strlen($post['author_rules_name']['all']) > 0) :
320 + $post['author_rules_name'] = array(
321 + 'all' => $post['author_rules_name']['all'],
322 + );
323 +
324 + // Erase all the rest.
325 + endif;
326 + endif;
327 +
328 + unset($this->link->settings['map authors']);
329 + foreach ($post['author_rules_name'] as $key => $name) :
330 + // Normalize for case and whitespace
331 + $name = strtolower(trim($name));
332 + $author_action = strtolower(trim($post['author_rules_action'][$key]));
333 +
334 + if (strlen($name) > 0) :
335 + if ('newuser' == $author_action) :
336 + $new_name = trim($post['author_rules_newuser'][$key]);
337 + $this->link->map_name_to_new_user($name, $new_name);
338 + else :
339 + $this->link->settings['map authors']['name'][$name] = $author_action;
340 + endif;
341 + endif;
342 + endforeach;
343 + endif;
344 +
345 + if (isset($post['add_author_rule_name'])
346 + and isset($post['add_author_rule_action'])) :
347 + $name = strtolower(trim($post['add_author_rule_name']));
348 + $author_action = strtolower(trim($post['add_author_rule_action']));
349 +
350 + if (strlen($name) > 0) :
351 + if ('newuser' == $author_action) :
352 + $new_name = trim($post['add_author_rule_newuser']);
353 + $this->link->map_name_to_new_user($name, $new_name);
354 + else :
355 + $this->link->settings['map authors']['name'][$name] = $author_action;
356 + endif;
357 + endif;
358 + endif;
359 + else :
360 + if ('newuser'==$post['unfamiliar_author']) :
361 + $new_name = trim($post['unfamiliar_author_newuser']);
362 + $new_id = fwp_insert_new_user($new_name);
363 + if (is_numeric($new_id)) :
364 + update_option('feedwordpress_unfamiliar_author', $new_id);
365 + else :
366 + // TODO: Add some error detection and reporting
367 + // Put WP_Error stuff into $this->mesg ?
368 + endif;
369 + else :
370 + update_option('feedwordpress_unfamiliar_author', $post['unfamiliar_author']);
371 + endif;
372 +
373 + update_option('feedwordpress_do_not_match_author_by_email',
374 + (isset($post['match_author_by_email'])
375 + and 'yes'==$post['match_author_by_email'])
376 + ? 'no'
377 + : 'yes'
378 + );
379 +
380 + if (isset($post['null_emails'])) :
381 + update_option('feedwordpress_null_email_set', $post['null_emails']);
382 + endif;
383 + endif;
384 +
385 + parent::save_settings($post);
386 + $this->refresh_author_list();
387 + }
388 +} /* class FeedWordPressAuthorsPage */
389 +
390 + $authorsPage = new FeedWordPressAuthorsPage;
391 + $authorsPage->display();
472 392