PluginProbe
FeedWordPress / trunk
FeedWordPress vtrunk
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 +320 -277 2010.0127trunk View file →
@@ -1,53 +1,85 @@
1 1 <?php
2 -require_once(dirname(__FILE__) . '/admin-ui.php');
2 +require_once dirname(__FILE__) . '/admin-ui.php';
3 3
4 4 class FeedWordPressAuthorsPage extends FeedWordPressAdminPage {
5 5 var $authorlist = NULL;
6 6 var $rule_count = 0;
7 -
8 - function FeedWordPressAuthorsPage ($link) {
9 - FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpressauthors', $link);
10 - $this->authorlist = fwp_author_list();
7 +
8 + /**
9 + * Class constructor
10 + *
11 + * @param int $link ID of the feed in the Links.
12 + */
13 + public function __construct( $link = -1 ) {
14 + if ( is_numeric( $link ) and -1 == $link ) :
15 + $link = $this->submitted_link();
16 + endif;
17 +
18 + parent::__construct( 'feedwordpressauthors', $link );
19 + $this->refresh_author_list();
11 20 $this->dispatch = 'feedwordpress_author_settings';
12 21 $this->filename = __FILE__;
13 - }
14 -
15 - /*static*/ function syndicated_authors_box ($page, $box = NULL) {
16 - $link = $page->link;
17 - $unfamiliar = array ('create' => '','default' => '','filter' => '');
18 22
19 - if ($page->for_feed_settings()) :
20 - if (is_string($link->settings["unfamiliar author"])) :
21 - $key = $link->settings["unfamiliar author"];
22 - else:
23 - $key = 'site-default';
24 - endif;
23 + $this->pagenames = array(
24 + 'default' => 'Authors',
25 + 'settings-update' => 'Syndicated Authors',
26 + 'open-sheet' => 'Syndicated Author',
27 + );
28 + } /* construct() */
29 +
30 + /**
31 + * Refreshes the author list and optionally sort it with the natural
32 + * alphanumeric sort algorithm.
33 + */
34 + function refresh_author_list() {
35 + $this->authorlist = fwp_author_list();
36 +
37 + // Case-insensitive "natural" alphanumeric sort. Preserves key/value associations.
38 + if ( function_exists( 'natcasesort' ) ) :
39 + natcasesort( $this->authorlist );
40 + endif;
41 + } /* FeedWordPressAuthorsPage::refresh_author_list) */
42 +
43 + /**
44 + * Displays the page box for the syndicated authors.
45 + *
46 + * @param FeedWordPressAuthorsPage $page FWP dashboard page.
47 + * @param string|null $box Page box (unused).
48 + */
49 + /*static*/ function syndicated_authors_box( $page, $box = NULL ) {
50 + /** @var SyndicatedLink|null An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings. */
51 + $link = $page->link; // unused? (gwyneth 20230920)
52 + $unfamiliar = array( 'create' => '','default' => '','filter' => '' );
53 +
54 + if ( $page->for_feed_settings() ) :
55 + $key = $this->link->setting( 'unfamiliar author', NULL, 'site-default' );
56 + $unfamiliar['site-default'] = '';
25 57 else :
26 58 $key = FeedWordPress::on_unfamiliar('author');
27 59 endif;
28 - $unfamiliar[$key] = ' selected="selected"';
60 + $unfamiliar[$key] = true;
29 61
30 - $match_author_by_email = !('yes' == get_option("feedwordpress_do_not_match_author_by_email"));
62 + $match_author_by_email = ! ( 'yes' == get_option( "feedwordpress_do_not_match_author_by_email" ) );
31 63 $null_emails = FeedWordPress::null_email_set();
32 64
33 65 // Hey ho, let's go...
34 66 ?>
35 67 <table class="form-table">
36 -<tbody>
37 -<tr>
38 - <th>New authors</th>
39 - <td><span>Authors who haven't been syndicated before</span>
68 +<?php
69 +if ( $page->for_default_settings() ) :
70 +?>
71 +<tr><th>Unmatched authors</th>
72 +<td><span>Authors who haven&rsquo;t been syndicated before</span>
40 73 <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');">
41 -<?php if ($page->for_feed_settings()) : ?>
42 - <option value="site-default"<?php print $unfamiliar['site-default']; ?>>are handled according to the default for all feeds</option>
43 -<?php endif; ?>
44 - <option value="create"<?php $unfamiliar['create']; ?>>will have a new author account created for them</option>
45 - <?php foreach ($page->authorlist as $author_id => $author_name) : ?>
46 - <option value="<?php echo $author_id; ?>"<?php print $unfamiliar[$author_id]; ?>>will have their posts attributed to <?php echo $author_name; ?></option>
74 + <option value="create"<?php fwp_selected_flag($unfamiliar, 'create'); ?>>will have a new author account created for them</option>
75 + <?php foreach ($page->authorlist as $author_id => $author_name) :
76 + if ( !isset($unfamiliar[$author_id])) : $unfamiliar[$author_id] = false; endif;
77 + ?>
78 + <option value="<?php echo esc_attr($author_id); ?>"<?php fwp_selected_flag($unfamiliar, $author_id); ?>>will have their posts attributed to <?php echo esc_html($author_name); ?></option>
47 79 <?php endforeach; ?>
48 80 <option value="newuser">will have their posts attributed to a new user...</option>
49 - <option value="filter"<?php print $unfamiliar['filter'] ?>>get filtered out</option>
81 + <option value="filter"<?php fwp_selected_flag($unfamiliar, 'filter'); ?>>get filtered out</option>
50 82 </select>
51 83
52 84 <span id="unfamiliar-author-newuser">named <input type="text" name="unfamiliar_author_newuser" value="" /></span></p>
53 85 </td>
@@ -53,37 +85,71 @@
53 85 </td>
54 86 </tr>
55 87
56 88 <?php
89 +endif;
90 +
57 91 if ($page->for_feed_settings()) :
92 + $map = $this->link->setting('map authors', NULL, array());
58 93 ?>
59 -<tr><th>Syndicated authors</th>
60 -<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>
94 +<tr><th>Matching authors</th>
95 +<td><p>How should FeedWordPress attribute posts from this feed to WordPress
96 +authors?</p>
97 +<ul class="settings">
98 +<li><p><input type="radio" name="author_rules_name[all]" value="*"
99 +<?php if (isset($map['name']['*'])) : $author_action = $map['name']['*']; ?>
100 + checked="checked"
101 +<?php
102 + else :
103 + $author_action = NULL;
104 + endif; ?>
105 + /> All posts syndicated
106 +from this feed <select class="author-rules" id="author-rules-all"
107 +name="author_rules_action[all]" onchange="contextual_appearance('author-rules-all', 'author-rules-all-newuser', 'author-rules-all-default', 'newuser', 'inline');">
108 + <?php foreach ($page->authorlist as $local_author_id => $local_author_name) : ?>
109 + <option value="<?php echo esc_attr($local_author_id); ?>"<?php fwp_selected_flag($local_author_id==$author_action); ?>>are assigned to <?php echo esc_html($local_author_name); ?></option>
110 + <?php endforeach; ?>
111 + <option value="newuser">will be assigned to a new user...</option>
112 + <option value="filter"<?php fwp_selected_flag('filter'==$author_action); ?>>get filtered out</option>
113 + </select>
114 + <span class="author-rules-newuser" id="author-rules-all-newuser">named
115 + <input type="text" name="author_rules_newuser[all]" value="" /></span></p></li>
116 +<li><p><input type="radio" name="author_rules_name[all]" value=""
117 +<?php if ( !isset($map['name']['*'])) : ?>
118 + checked="checked"
119 +<?php endif; ?>
120 +/> Attribute posts to authors based on automatic mapping rules. (Blank out a
121 +name to delete the rule. Fill in a new name at the bottom to create a new rule.)</p>
122 +
61 123 <table style="width: 100%">
62 124 <?php
63 - if (isset($link->settings['map authors'])) :
125 + if (isset($this->link->settings['map authors'])) :
64 126 ?>
65 127 <?php
66 128 $page->rule_count=0;
67 - foreach ($link->settings['map authors'] as $author_rules) :
129 + foreach ($this->link->settings['map authors'] as $author_rules) :
68 130 foreach ($author_rules as $author_name => $author_action) :
69 - $page->rule_count++;
131 + if ($author_name != '*') :
132 + $page->rule_count++;
133 + $authorRulesId = sanitize_html_class(sprintf("author-rules-%d", $page->rule_count));
70 134 ?>
71 135 <tr>
72 -<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>
136 +<th style="text-align: left; width: 15.0em">Posts by <input type="text" name="author_rules_name[]" value="<?php echo esc_attr($author_name); ?>" size="11" /></th>
73 137 <td>
74 - <select 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');">
138 + <select class="author-rules" id="<?php echo esc_attr($authorRulesId); ?>" name="author_rules_action[]" onchange="contextual_appearance('<?php echo esc_attr($authorRulesId); ?>', '<?php echo esc_attr($authorRulesId); ?>-newuser', '<?php echo esc_attr($authorRulesId); ?>-default', 'newuser', 'inline');">
75 139 <?php foreach ($page->authorlist as $local_author_id => $local_author_name) : ?>
76 - <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>
140 + <option value="<?php echo esc_attr($local_author_id); ?>"<?php fwp_selected_flag($local_author_id==$author_action); ?>>are assigned to <?php echo esc_attr($local_author_name); ?></option>
77 141 <?php endforeach; ?>
78 142 <option value="newuser">will be assigned to a new user...</option>
79 - <option value="filter"<?php if ('filter'==$author_action) : echo ' selected="selected"'; endif; ?>>get filtered out</option>
143 + <option value="filter"<?php fwp_selected_flag('filter'==$author_action); ?>>get filtered out</option>
80 144 </select>
81 -
82 - <span id="author-rules-<?php echo $page->rule_count; ?>-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></span>
145 +
146 + <span class="author-rules-newuser" id="<?php echo esc_attr($authorRulesId); ?>-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></span>
83 147 </td>
84 148 </tr>
85 -<?php endforeach;
149 +<?php
150 + endif;
151 + endforeach;
86 152 endforeach;
87 153 endif;
88 154 ?>
89 155
@@ -91,31 +157,53 @@
91 157 <th style="text-align: left; width: 15.0em">Posts by <input type="text" name="add_author_rule_name" size="11" /></th>
92 158 <td>
93 159 <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');">
94 160 <?php foreach ($page->authorlist as $author_id => $author_name) : ?>
95 - <option value="<?php echo $author_id; ?>">are assigned to <?php echo $author_name; ?></option>
161 + <option value="<?php echo esc_attr($author_id); ?>">are assigned to <?php echo esc_html($author_name); ?></option>
96 162 <?php endforeach; ?>
97 163 <option value="newuser">will be assigned to a new user...</option>
98 164 <option value="filter">get filtered out</option>
99 165 </select>
100 -
166 +
101 167 <span id="add-author-rule-newuser">named <input type="text" name="add_author_rule_newuser" value="" /></span>
102 168 </td>
103 169 </tr>
104 -</table>
170 +
171 +<tr>
172 +<th style="text-align: left; width: 15.0em">Unmatched authors</th>
173 +<td>
174 +<span>Authors who haven't been syndicated before</span>
175 + <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');">
176 +<?php if ($page->for_feed_settings()) : ?>
177 + <option value="site-default"<?php fwp_selected_flag($unfamiliar, 'site-default'); ?>>are handled according to the default for all feeds</option>
178 +<?php endif; ?>
179 + <option value="create"<?php fwp_selected_flag($unfamiliar, 'create'); ?>>will have a new author account created for them</option>
180 + <?php foreach ( $page->authorlist as $author_id => $author_name ) : ?>
181 + <option value="<?php echo esc_attr($author_id); ?>"<?php fwp_selected_flag($unfamiliar, $author_id); ?>>will have their posts attributed to <?php echo esc_html($author_name); ?></option>
182 + <?php endforeach; ?>
183 + <option value="newuser">will have their posts attributed to a user named ...</option>
184 + <option value="filter"<?php fwp_selected_flag($unfamiliar, 'filter'); ?>>get filtered out</option>
185 + </select>
186 +
187 + <span id="unfamiliar-author-newuser"><input type="text" name="unfamiliar_author_newuser" value="" /></span></p>
105 188 </td>
106 189 </tr>
190 +</table></li>
191 +</ul>
192 +
193 +</td>
194 +</tr>
107 195 <?php endif; ?>
108 196
109 -<?php if ($page->for_default_settings()) : ?>
197 +<?php if ( $page->for_default_settings() ) : ?>
110 198 <tr>
111 199 <th scope="row">Matching Authors</th>
112 200 <td><ul style="list-style: none; margin: 0; padding: 0;">
113 -<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>
201 +<li><div><label><input id="match-author-by-email" type="checkbox" name="match_author_by_email" value="yes" <?php fwp_selected_flag($match_author_by_email, null, "checked"); ?> 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>
114 202 <div id="unless-null-email">
115 203 <p>Unless the e-mail address is one of the following anonymous e-mail addresses:</p>
116 204 <textarea name="null_emails" rows="3" style="width: 100%">
117 -<?php print implode("\n", $null_emails); ?>
205 +<?php print esc_html(implode("\n", $null_emails)); ?>
118 206 </textarea>
119 207 </div></li>
120 208 </ul></td>
121 209 </tr>
@@ -122,11 +210,18 @@
122 210 <?php endif; ?>
123 211 </tbody>
124 212 </table>
125 213 <?php
126 - } /* FeedWordPressAuthorsPage::syndicated_authors_box () */
127 -
128 - /*static*/ function fix_authors_box ($page, $box = NULL) {
214 + } /* FeedWordPressAuthorsPage::syndicated_authors_box() */
215 +
216 + /**
217 + * Displays a box for fixing mismatched authors.
218 + *
219 + * @param FeedWordPressAuthorsPage $page FWP dashboard page.
220 + * @param string|null $box Page box (unused).
221 + */
222 + /*static*/ function fix_authors_box( $page, $box = NULL )
223 + {
129 224 ?>
130 225 <table class="form-table">
131 226 <tbody>
132 227 <tr>
@@ -132,16 +227,16 @@
132 227 <tr>
133 228 <th scope="row">Fixing mis-matched authors:</th>
134 229 <td><p style="margin: 0.5em 0px">Take all the posts from this feed attributed to
135 230 <select name="fix_mismatch_from">
136 - <?php foreach ($page->authorlist as $author_id => $author_name) : ?>
137 - <option value="<?php echo $author_id; ?>"><?php echo $author_name; ?></option>
231 + <?php foreach ( $page->authorlist as $author_id => $author_name ) : ?>
232 + <option value="<?php echo esc_attr( $author_id ); ?>"><?php echo esc_html( $author_name ); ?></option>
138 233 <?php endforeach; ?>
139 234 </select>
140 235 and instead
141 236 <select id="fix-mismatch-to" name="fix_mismatch_to" onchange="contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');">
142 237 <?php foreach ($page->authorlist as $author_id => $author_name) : ?>
143 - <option value="<?php echo $author_id; ?>">re-assign them to <?php echo $author_name; ?></option>
238 + <option value="<?php echo esc_attr($author_id); ?>">re-assign them to <?php echo esc_html($author_name); ?></option>
144 239 <?php endforeach; ?>
145 240 <option value="newuser">re-assign them to a new user...</option>
146 241 <option value="filter">delete them</option>
147 242 </select>
@@ -152,284 +247,232 @@
152 247 </tr>
153 248 </tbody>
154 249 </table>
155 250 <?php
156 - } /* FeedWordPressAuthorsPage::fix_authors_box () */
157 -} /* class FeedWordPressAuthorsPage */
251 + } /* FeedWordPressAuthorsPage::fix_authors_box() */
158 252
159 -function fwp_authors_page () {
160 - global $wpdb, $wp_db_version;
253 + function display() {
254 + $this->boxes_by_methods = array(
255 + 'syndicated_authors_box' => __('Syndicated Authors'),
256 + 'fix_authors_box' => __('Reassign Authors'),
257 + );
258 + if ($this->for_default_settings()) :
259 + unset($this->boxes_by_methods['fix_authors_box']);
260 + endif;
161 261
162 - if (FeedWordPress::needs_upgrade()) :
163 - fwp_upgrade_page();
164 - return;
165 - endif;
262 + parent::display();
263 + ?>
264 +<script type="text/javascript">
265 + contextual_appearance('unfamiliar-author', 'unfamiliar-author-newuser', 'unfamiliar-author-default', 'newuser', 'inline');
266 +</script>
166 267
167 - FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_author_settings', /*capability=*/ 'manage_links');
268 +<?php if ($this->for_feed_settings()) : ?>
269 +<script type="text/javascript">
270 + jQuery('.author-rules').each ( function () {
271 + contextual_appearance(this.id, this.id+'-newuser', this.id+'-default', 'newuser', 'inline');
272 + } );
168 273
169 - $link = FeedWordPressAdminPage::submitted_link();
170 - $link_id = $link->id;
171 - $authorsPage = new FeedWordPressAuthorsPage($link);
274 + contextual_appearance('add-author-rule', 'add-author-rule-newuser', 'add-author-rule-default', 'newuser', 'inline');
275 + contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');
276 +</script>
277 +<?php else : ?>
278 +<script type="text/javascript">
279 + contextual_appearance('match-author-by-email', 'unless-null-email', null, 'yes', 'block', /*checkbox=*/ true);
280 +</script>
281 +<?php endif;
282 + } /* FeedWordPressAuthorsPage::display () */
172 283
173 - $mesg = null;
284 + /**
285 + * Checks if a mismatch fix was requested.
286 + *
287 + * @return bool True if a fix was requested and not empty.
288 + */
289 + public function fix_mismatch_requested() {
290 + /** @var string|null */
291 + $fix = FeedWordPress::post( 'fix_mismatch' );
292 + return ( ! is_null( $fix ) && strlen( $fix ) > 0 ); // possibly the same as `( ! empty( $fix ) )`.
293 + } /* FeedWordPressAuthorsPage::fix_mismatch_requested() */
174 294
175 - if (isset($GLOBALS['fwp_post']['fix_mismatch'])) :
176 - if ('newuser'==$GLOBALS['fwp_post']['fix_mismatch_to']) :
177 - $newuser_name = trim($GLOBALS['fwp_post']['fix_mismatch_to_newuser']);
178 - if (strlen($newuser_name) > 0) :
179 - $userdata = array();
180 - $userdata['ID'] = NULL;
181 -
182 - $userdata['user_login'] = sanitize_user($newuser_name);
183 - $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
184 -
185 - $userdata['user_nicename'] = sanitize_title($newuser_name);
186 - $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
187 -
188 - $userdata['display_name'] = $wpdb->escape($newuser_name);
295 + /**
296 + * If a mismatch fix was requested, handles it here;
297 + * else sends it to the parent class for processing.
298 + */
299 + public function accept_POST() {
300 + if ( self::fix_mismatch_requested() ) :
301 + $this->fix_mismatch();
302 + else :
303 + parent::accept_POST();
304 + endif;
305 + } /* FeedWordPressAuthorsPage::accept_POST() */
189 306
190 - $newuser_id = wp_insert_user($userdata);
191 - if (is_numeric($newuser_id)) :
192 - $fix_mismatch_to_id = $newuser_id;
193 - else :
194 - // TODO: Add some error detection and reporting
195 - endif;
196 - else :
197 - // TODO: Add some error reporting
198 - endif;
199 - else :
200 - $fix_mismatch_to_id = $GLOBALS['fwp_post']['fix_mismatch_to'];
307 + /**
308 + * Fixes an author mismatch.
309 + */
310 + function fix_mismatch() {
311 + global $wpdb;
312 +
313 + $to = FeedWordPress::post( 'fix_mismatch_to' );
314 +// if ( 'newuser' === $fix_to ) : // will _always_ be false, since $fix_to is not called from anywhere (gwyneth 20230915)
315 + if ( 'newuser' === $to ) : // probably this is what was intended! (gwyneth 20230920)
316 + $newuser_name = trim( FeedWordPress::post( 'fix_mismatch_to_newuser', '' ) );
317 + $to = fwp_insert_new_user( $newuser_name );
201 318 endif;
202 - $fix_mismatch_from_id = (int) $GLOBALS['fwp_post']['fix_mismatch_from'];
203 - if (is_numeric($fix_mismatch_from_id)) :
204 - // Make a list of all the items by this author syndicated from this feed...
319 +
320 + $from = (int) FeedWordPress::post( 'fix_mismatch_from' );
321 + if ( is_numeric( $from ) ) :
322 +
323 + // Make a list of all the items by this author
324 + // syndicated from this feed...
205 325 $post_ids = $wpdb->get_col("
206 326 SELECT {$wpdb->posts}.id
207 327 FROM {$wpdb->posts}, {$wpdb->postmeta}
208 328 WHERE ({$wpdb->posts}.id = {$wpdb->postmeta}.post_id)
209 329 AND {$wpdb->postmeta}.meta_key = 'syndication_feed_id'
210 - AND {$wpdb->postmeta}.meta_value = '{$link_id}'
211 - AND {$wpdb->posts}.post_author = '{$fix_mismatch_from_id}'
330 + AND {$wpdb->postmeta}.meta_value = '{$this->link->id}'
331 + AND {$wpdb->posts}.post_author = '{$from}'
212 332 ");
213 -
214 - if (count($post_ids) > 0) :
333 +
334 + if ( count( $post_ids ) > 0 ) :
335 + $N = count( $post_ids );
336 +
337 + // $posts = 'post'.(($N==1) ? '' : 's'); // Wordpress has _n() for plurals... (gwyneth 20230920)
338 + $posts = sprintf( _n( '%s post', '%s posts', $N, 'text-domain' ), number_format_i18n( $N ) );
339 +
215 340 // Re-assign them all to the correct author
216 - if (is_numeric($fix_mismatch_to_id)) : // re-assign to a particular user
217 - $post_set = "(".implode(",", $post_ids).")";
218 -
341 + if ( is_numeric( $to ) ) : // re-assign to a particular user
342 + $post_set = "(" . implode( ",", $post_ids ) . ")";
343 +
219 344 // Getting the revisions too, if there are any
220 - if (fwp_test_wp_version(FWP_SCHEMA_26)) :
221 - $parent_in_clause = "OR {$wpdb->posts}.post_parent IN $post_set";
222 - else :
223 - $parent_in_clause = '';
224 - endif;
225 -
345 + $parent_in_clause = "OR {$wpdb->posts}.post_parent IN $post_set";
346 +
226 347 $wpdb->query("
227 - UPDATE {$wpdb->posts}
228 - SET post_author='{$fix_mismatch_to_id}'
229 - WHERE ({$wpdb->posts}.id IN $post_set
230 - $parent_in_clause)
348 + UPDATE {$wpdb->posts}
349 + SET post_author='{$to}'
350 + WHERE ({$wpdb->posts}.id IN $post_set
351 + $parent_in_clause)
231 352 ");
232 - $mesg = "Re-assigned ".count($post_ids)." post".((count($post_ids)==1)?'':'s').".";
353 + // $this->mesg = sprintf(__("Re-assigned %d {$posts}."), $N); // see comment abpve
354 + $this->mesg = __( "Re-assigned " ) . $posts;
233 355
234 356 // ... and kill them all
235 - elseif ($fix_mismatch_to_id=='filter') :
236 - foreach ($post_ids as $post_id) :
237 - wp_delete_post($post_id);
238 - endforeach;
239 - $mesg = "Deleted ".count($post_ids)." post".((count($post_ids)==1)?'':'s').".";
357 + elseif ( 'filter' == $to ) :
358 + foreach ( $post_ids as $post_id ) :
359 + wp_delete_post( $post_id );
360 + endforeach;
361 +
362 + $this->mesg = __( "Deleted " ) . $posts;
240 363 endif;
241 364 else :
242 - $mesg = "Couldn't find any posts that matched your criteria.";
365 + $this->mesg = __("Couldn't find any posts that matched your criteria.");
243 366 endif;
244 367 endif;
245 - elseif (isset($GLOBALS['fwp_post']['save'])) :
246 - if (is_object($link) and $link->found()) :
247 - $alter = array ();
368 + $this->updated = false;
369 + } /* FeedWordPressAuthorsPage::fix_mismatch() */
248 370
371 + /**
372 + * Presumably saves settings...
373 + *
374 + * @return void description
375 + */
376 + function save_settings () {
377 + if ($this->for_feed_settings()) :
378 + // $alter = array(); // what is this array? It's never used. (gwyneth 20230920)
379 +
249 380 // Unfamiliar author rule
250 - if (isset($GLOBALS['fwp_post']["unfamiliar_author"])) :
251 - if ('site-default'==$GLOBALS['fwp_post']["unfamiliar_author"]) :
252 - unset($link->settings["unfamiliar author"]);
253 - elseif ('newuser'==$GLOBALS['fwp_post']["unfamiliar_author"]) :
254 - $newuser_name = trim($GLOBALS['fwp_post']["unfamiliar_author_newuser"]);
255 - $link->map_name_to_new_user(/*name=*/ NULL, $newuser_name);
381 + $unfamiliar_author = FeedWordPress::post( 'unfamiliar_author' );
382 + if ( ! is_null( $unfamiliar_author ) ) :
383 + if ( 'newuser' == $unfamiliar_author ) :
384 + $new_name = trim( FeedWordPress::post( "unfamiliar_author_newuser" ) );
385 + $this->link->map_name_to_new_user(/*name=*/ null, $new_name);
256 386 else :
257 - $link->settings["unfamiliar author"] = $GLOBALS['fwp_post']["unfamiliar_author"];
387 + $this->link->update_setting(
388 + "unfamiliar author",
389 + $unfamiliar_author,
390 + 'site-default'
391 + );
258 392 endif;
259 393 endif;
260 -
394 +
261 395 // Handle author mapping rules
262 - if (isset($GLOBALS['fwp_post']['author_rules_name']) and isset($GLOBALS['fwp_post']['author_rules_action'])) :
263 - unset($link->settings['map authors']);
264 - foreach ($GLOBALS['fwp_post']['author_rules_name'] as $key => $name) :
396 + $author_rules_name = FeedWordPress::post( 'author_rules_name' );
397 + $author_rules_action = FeedWordPress::post('author_rules_action' );
398 + if ( ! ( is_null( $author_rules_name ) || is_null( $author_rules_action ) ) ) :
399 + if ( isset( $author_rules_name['all'] ) ) :
400 + if ( strlen( $author_rules_name['all']) > 0 ) :
401 + $author_rules_name = array(
402 + 'all' => $author_rules_name['all'],
403 + );
404 +
405 + // Erase all the rest.
406 + endif;
407 + endif;
408 +
409 + unset($this->link->settings['map authors']);
410 + foreach ($author_rules_name as $key => $name) :
265 411 // Normalize for case and whitespace
266 - $name = strtolower(trim($name));
267 - $author_action = strtolower(trim($GLOBALS['fwp_post']['author_rules_action'][$key]));
268 -
269 - if (strlen($name) > 0) :
270 - if ('newuser' == $author_action) :
271 - $newuser_name = trim($GLOBALS['fwp_post']['author_rules_newuser'][$key]);
272 - $link->map_name_to_new_user($name, $newuser_name);
412 + $name = strtolower( trim( $name ) );
413 + $author_action = strtolower( trim( $author_rules_action[$key] ) );
414 +
415 + $author_rules_newuser = FeedWordPress::post('author_rules_newuser' );
416 + if ( strlen($name) > 0 ) :
417 + if ( 'newuser' == $author_action ) :
418 + $new_name = trim( $author_rules_newuser[ $key ] );
419 + $this->link->map_name_to_new_user($name, $new_name);
273 420 else :
274 - $link->settings['map authors']['name'][$name] = $author_action;
421 + $this->link->settings['map authors']['name'][$name] = $author_action;
275 422 endif;
276 423 endif;
277 424 endforeach;
278 425 endif;
279 426
280 - if (isset($GLOBALS['fwp_post']['add_author_rule_name']) and isset($GLOBALS['fwp_post']['add_author_rule_action'])) :
281 - $name = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_name']));
282 - $author_action = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_action']));
427 + $name = FeedWordPress::post( 'add_author_rule_name');
428 + $author_action = FeedWordPress::post( 'add_author_rule_action' );
429 + if ( ! ( is_null( $name ) || is_null( $author_action ) ) ) :
430 + $name = strtolower( trim( $name ) );
431 + $author_action = strtolower( trim( $author_action ) );
432 +
283 433 if (strlen($name) > 0) :
284 434 if ('newuser' == $author_action) :
285 - $newuser_name = trim($GLOBALS['fwp_post']['add_author_rule_newuser']);
286 - $link->map_name_to_new_user($name, $newuser_name);
435 + $new_name = trim( FeedWordPress::post( 'add_author_rule_newuser' ));
436 + $this->link->map_name_to_new_user($name, $new_name);
287 437 else :
288 - $link->settings['map authors']['name'][$name] = $author_action;
438 + $this->link->settings['map authors']['name'][$name] = $author_action;
289 439 endif;
290 440 endif;
291 441 endif;
292 442
293 - $alter[] = "link_notes = '".$wpdb->escape($link->settings_to_notes())."'";
294 -
295 - $alter_set = implode(", ", $alter);
296 -
297 - // issue update query
298 - $result = $wpdb->query("
299 - UPDATE $wpdb->links
300 - SET $alter_set
301 - WHERE link_id='$link_id'
302 - ");
303 - $updated_link = true;
304 -
305 - // reload link information from DB
306 - if (function_exists('clean_bookmark_cache')) :
307 - clean_bookmark_cache($link_id);
308 - endif;
309 - $link =& new SyndicatedLink($link_id);
310 443 else :
311 - if ('newuser'==$GLOBALS['fwp_post']['unfamiliar_author']) :
312 - $newuser_name = trim($GLOBALS['fwp_post']['unfamiliar_author_newuser']);
313 - if (strlen($newuser_name) > 0) :
314 - $userdata = array();
315 - $userdata['ID'] = NULL;
316 -
317 - $userdata['user_login'] = sanitize_user($newuser_name);
318 - $userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
319 -
320 - $userdata['user_nicename'] = sanitize_title($newuser_name);
321 - $userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
322 -
323 - $userdata['display_name'] = $wpdb->escape($newuser_name);
324 444
325 - $newuser_id = wp_insert_user($userdata);
326 - if (is_numeric($newuser_id)) :
327 - update_option('feedwordpress_unfamiliar_author', $newuser_id);
328 - else :
329 - // TODO: Add some error detection and reporting
330 - endif;
445 + $unfamiliar_author = FeedWordPress::post( 'unfamiliar_author' );
446 + if ( 'newuser' === $unfamiliar_author ) :
447 + $new_name = FeedWordPress::post( 'unfamiliar_author_newuser' );
448 + $new_id = fwp_insert_new_user( trim( $new_name ) );
449 + if ( is_numeric( $new_id ) ) :
450 + update_option( 'feedwordpress_unfamiliar_author', $new_id );
331 451 else :
332 - // TODO: Add some error reporting
333 - endif;
452 + // TODO: Add some error detection and reporting
453 + // Put WP_Error stuff into $this->mesg ?
454 + endif;
334 455 else :
335 - update_option('feedwordpress_unfamiliar_author', $GLOBALS['fwp_post']['unfamiliar_author']);
456 + update_option( 'feedwordpress_unfamiliar_author', $unfamiliar_author );
336 457 endif;
337 458
338 - if (isset($GLOBALS['fwp_post']['match_author_by_email']) and $GLOBALS['fwp_post']['match_author_by_email']=='yes') :
339 - update_option('feedwordpress_do_not_match_author_by_email', 'no');
340 - else :
341 - update_option('feedwordpress_do_not_match_author_by_email', 'yes');
342 - endif;
459 + $by_email = FeedWordPress::post( 'match_author_by_email' );
460 + update_option(
461 + 'feedwordpress_do_not_match_author_by_email',
462 + ( isset( $by_email ) && 'yes' == $by_email ) ? 'no' : 'yes'
463 + );
343 464
344 - if (isset($GLOBALS['fwp_post']['null_emails'])) :
345 - update_option('feedwordpress_null_email_set', $GLOBALS['fwp_post']['null_emails']);
465 + $null_emails = FeedWordPress::post( 'null_emails', null, 'textarea' );
466 + if ( ! is_null( $null_emails ) ) :
467 + update_option( 'feedwordpress_null_email_set', $null_emails );
346 468 endif;
347 -
348 - $updated_link = true;
349 469 endif;
350 470
351 - do_action('feedwordpress_admin_page_authors_save', $GLOBALS['fwp_post'], $authorsPage);
352 - else :
353 - $updated_link = false;
354 - endif;
355 -
356 - ////////////////////////////////////////////////
357 - // Prepare settings page ///////////////////////
358 - ////////////////////////////////////////////////
471 + parent::save_settings();
472 + $this->refresh_author_list();
473 + } /* FeedWordPressAuthorsPage::save_settings() */
359 474
360 - if ($updated_link) :
361 -?>
362 -<div class="updated"><p>Syndicated author settings updated.</p></div>
363 -<?php elseif (!is_null($mesg)) : ?>
364 -<div class="updated"><p><?php print wp_specialchars($mesg, 1); ?></p></div>
365 -<?php endif;
475 +} /* class FeedWordPressAuthorsPage */
366 476
367 - if (function_exists('add_meta_box')) :
368 - add_action(
369 - FeedWordPressCompatibility::bottom_script_hook(__FILE__),
370 - /*callback=*/ array($authorsPage, 'fix_toggles'),
371 - /*priority=*/ 10000
372 - );
373 - FeedWordPressSettingsUI::ajax_nonce_fields();
374 - endif;
375 -
376 - $authorsPage->open_sheet('Syndicated Author');
377 - ?>
378 - <div id="post-body">
379 - <?php
380 - ////////////////////////////////////////////////
381 - // Display settings boxes //////////////////////
382 - ////////////////////////////////////////////////
383 -
384 - $boxes_by_methods = array(
385 - 'syndicated_authors_box' => __('Syndicated Authors'),
386 - 'fix_authors_box' => __('Reassign Authors'),
387 - );
388 - if ($authorsPage->for_default_settings()) :
389 - unset($boxes_by_methods['fix_authors_box']);
390 - endif;
391 -
392 - foreach ($boxes_by_methods as $method => $row) :
393 - if (is_array($row)) :
394 - $id = $row['id'];
395 - $title = $row['title'];
396 - else :
397 - $id = 'feedwordpress_'.$method;
398 - $title = $row;
399 - endif;
400 -
401 - fwp_add_meta_box(
402 - /*id=*/ $id,
403 - /*title=*/ $title,
404 - /*callback=*/ array('FeedWordPressAuthorsPage', $method),
405 - /*page=*/ $authorsPage->meta_box_context(),
406 - /*context=*/ $authorsPage->meta_box_context()
407 - );
408 - endforeach;
409 - do_action('feedwordpress_admin_page_authors_meta_boxes', $authorsPage);
410 -?>
411 - <div class="metabox-holder">
412 -<?php
413 - fwp_do_meta_boxes($authorsPage->meta_box_context(), $authorsPage->meta_box_context(), $authorsPage);
414 -?>
415 - </div> <!-- class="metabox-holder" -->
416 -</div> <!-- id="post-body" -->
417 -<?php $authorsPage->close_sheet(); ?>
418 -
419 -<script type="text/javascript">
420 - contextual_appearance('unfamiliar-author', 'unfamiliar-author-newuser', 'unfamiliar-author-default', 'newuser', 'inline');
421 -<?php if (is_object($link) and $link->found()) : ?>
422 -<?php for ($j=1; $j<=$authorsPage->rule_count; $j++) : ?>
423 - contextual_appearance('author-rules-<?php echo $j; ?>', 'author-rules-<?php echo $j; ?>-newuser', 'author-rules-<?php echo $j; ?>-default', 'newuser', 'inline');
424 -<?php endfor; ?>
425 - contextual_appearance('add-author-rule', 'add-author-rule-newuser', 'add-author-rule-default', 'newuser', 'inline');
426 - contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');
427 -<?php else : ?>
428 - contextual_appearance('match-author-by-email', 'unless-null-email', null, 'yes', 'block', /*checkbox=*/ true);
429 -<?php endif; ?>
430 -</script>
431 -<?php
432 -} /* function fwp_authors_page () */
433 -
434 - fwp_authors_page();
435 -
477 +$authorsPage = new FeedWordPressAuthorsPage;
478 +$authorsPage->display();