﻿id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc
15001,Duplication and incompatibilities in register_new_user() and wp_insert_user(),coffee2code,,"As a result of [12778], the commit of a patch that was part of #11644 (the MU-merge ticket), `wp_insert_user()` was modified to introduce user verification checks.  The addition of these checks also introduced a number of duplications and incompatibilities between it and `register_new_user()`.  (Bear in mind that `register_new_user()` calls `wp_create_user()` which calls `wp_insert_user()`.)

These issues include:

 * Duplication (both run-time execution and code): both functions perform `username_exists()` and `email_exists()` checks.  Ideally, we should only perform each check once, and from a single piece of code.
 * Whereas both functions perform `username_exists()` and `email_exists()` checks, `register_new_user()` performs more checks (empty_username, invalid_username, empty_email, invalid_email).  If the former 2 are being checked, all 6 criteria should be checked.
 * `wp_insert_user()` can now return a WP_Error object, but `register_new_user()` can't handle it (I reported this in #14290)
 * `register_new_user()` generates a new generic error if `wp_create_user()` (via `wp_insert_user()`) returns an error (assuming proper patch #14290), rather than passing along the more specific error it was told about
If an error is returned by `wp_create_user()`, `register_new_user()` throws a generic 'registerfail' error (`'<strong>ERROR</strong>: Couldn&#8217;t register you... please contact the <a href=""mailto:%s"">webmaster</a> !'`).  However, most likely it received a more informative WP_Error object.
 * `register_new_user()` allows errors to be suppressed via filters, but `wp_insert_user()` does not
`register_new_user()` has the filter 'registration_errors' which allows plugins to suppress any encountered errors.  Having done so, `register_new_users()`'s subsequent call to `wp_create_user()` can generate an error (of the type already suppressed) which is then un-suppressable.  This renders the 'registration_errors' filter useless for the username_exists and email_exists errors (and possibly other in the future).

----

These different issues may warrant separate tickets, but cumulatively I think they point to the need to refactor `register_new_user()` and `wp_insert_user()` to be more efficient and compatible.

This is a rare instance where I don't include an immediate patch for a ticket, but I wanted to get it out there and see if we can try and get these fixed for 3.1.
",defect (bug),new,normal,Future Release,Users,3.0.1,normal,,has-patch needs-testing,
