diff --git a/import-users-from-csv.php b/import-users-from-csv.php index ed096c5..3af1a13 100644 --- a/import-users-from-csv.php +++ b/import-users-from-csv.php @@ -76,13 +76,15 @@ public function process_csv() { if ( !empty( $_FILES['users_csv']['tmp_name'] ) ) { // Setup settings variables - $filename = $_FILES['users_csv']['tmp_name']; - $password_nag = isset( $_POST['password_nag'] ) ? $_POST['password_nag'] : false; - $users_update = isset( $_POST['users_update'] ) ? $_POST['users_update'] : false; - $new_user_notification = isset( $_POST['new_user_notification'] ) ? $_POST['new_user_notification'] : false; + $filename = $_FILES['users_csv']['tmp_name']; + $password_nag = isset( $_POST['password_nag'] ) ? $_POST['password_nag'] : false; + $password_hashing_disabled = isset( $_POST['password_hashing_disabled'] ) ? $_POST['password_hashing_disabled'] : false; + $users_update = isset( $_POST['users_update'] ) ? $_POST['users_update'] : false; + $new_user_notification = isset( $_POST['new_user_notification'] ) ? $_POST['new_user_notification'] : false; $results = self::import_csv( $filename, array( 'password_nag' => $password_nag, + 'password_hashing_disabled' => $password_hashing_disabled, 'new_user_notification' => $new_user_notification, 'users_update' => $users_update ) ); @@ -184,6 +186,16 @@ public function users_page() { + + +
+ + +
+
@@ -213,7 +225,8 @@ public static function import_csv( $filename, $args ) { $defaults = array( 'password_nag' => false, 'new_user_notification' => false, - 'users_update' => false + 'users_update' => false, + 'password_hashing_disabled' => false, ); extract( wp_parse_args( $args, $defaults ) ); @@ -302,10 +315,13 @@ public static function import_csv( $filename, $args ) { if ( ! $update && empty( $userdata['user_pass'] ) ) $userdata['user_pass'] = wp_generate_password( 12, false ); - if ( $update ) + if ( $update && !$password_hashing_disabled ) $user_id = wp_update_user( $userdata ); - else + elseif ( !$update && !$password_hashing_disabled ) $user_id = wp_insert_user( $userdata ); + else + // Updates or creates a new user, depending on whether ID is set in $userdata or not + $user_id = self::insert_user_disabled_hashing( $userdata ); // Is there an error o_O? if ( is_wp_error( $user_id ) ) { @@ -373,6 +389,250 @@ private static function log_errors( $errors ) { @fclose( $log ); } + + /** + * Insert an user into the database. + * Copied from wp-include/user.php and commented wp_hash_password part + * @since 1.1 + * + **/ + private function insert_user_disabled_hashing( $userdata ) { + global $wpdb; + + if ( is_a( $userdata, 'stdClass' ) ) { + $userdata = get_object_vars( $userdata ); + } elseif ( is_a( $userdata, 'WP_User' ) ) { + $userdata = $userdata->to_array(); + } + // Are we updating or creating? + if ( ! empty( $userdata['ID'] ) ) { + $ID = (int) $userdata['ID']; + $update = true; + $old_user_data = WP_User::get_data_by( 'id', $ID ); + // hashed in wp_update_user(), plaintext if called directly + // $user_pass = $userdata['user_pass']; + } else { + $update = false; + // Hash the password + // $user_pass = wp_hash_password( $userdata['user_pass'] ); + } + $user_pass = $userdata['user_pass']; + + $sanitized_user_login = sanitize_user( $userdata['user_login'], true ); + + /** + * Filter a username after it has been sanitized. + * + * This filter is called before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $sanitized_user_login Username after it has been sanitized. + */ + $pre_user_login = apply_filters( 'pre_user_login', $sanitized_user_login ); + + //Remove any non-printable chars from the login string to see if we have ended up with an empty username + $user_login = trim( $pre_user_login ); + + if ( empty( $user_login ) ) { + return new WP_Error('empty_user_login', __('Cannot create a user with an empty login name.') ); + } + if ( ! $update && username_exists( $user_login ) ) { + return new WP_Error( 'existing_user_login', __( 'Sorry, that username already exists!' ) ); + } + if ( empty( $userdata['user_nicename'] ) ) { + $user_nicename = sanitize_title( $user_login ); + } else { + $user_nicename = $userdata['user_nicename']; + } + + // Store values to save in user meta. + $meta = array(); + + /** + * Filter a user's nicename before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $user_nicename The user's nicename. + */ + $user_nicename = apply_filters( 'pre_user_nicename', $user_nicename ); + + $raw_user_url = empty( $userdata['user_url'] ) ? '' : $userdata['user_url']; + + /** + * Filter a user's URL before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $raw_user_url The user's URL. + */ + $user_url = apply_filters( 'pre_user_url', $raw_user_url ); + + $raw_user_email = empty( $userdata['user_email'] ) ? '' : $userdata['user_email']; + + /** + * Filter a user's email before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $raw_user_email The user's email. + */ + $user_email = apply_filters( 'pre_user_email', $raw_user_email ); + + if ( ! $update && ! defined( 'WP_IMPORTING' ) && email_exists( $user_email ) ) { + return new WP_Error( 'existing_user_email', __( 'Sorry, that email address is already used!' ) ); + } + $nickname = empty( $userdata['nickname'] ) ? $user_login : $userdata['nickname']; + + /** + * Filter a user's nickname before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $nickname The user's nickname. + */ + $meta['nickname'] = apply_filters( 'pre_user_nickname', $nickname ); + + $first_name = empty( $userdata['first_name'] ) ? '' : $userdata['first_name']; + + /** + * Filter a user's first name before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $first_name The user's first name. + */ + $meta['first_name'] = apply_filters( 'pre_user_first_name', $first_name ); + + $last_name = empty( $userdata['last_name'] ) ? '' : $userdata['last_name']; + + /** + * Filter a user's last name before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $last_name The user's last name. + */ + $meta['last_name'] = apply_filters( 'pre_user_last_name', $last_name ); + + if ( empty( $userdata['display_name'] ) ) { + if ( $update ) { + $display_name = $user_login; + } elseif ( $meta['first_name'] && $meta['last_name'] ) { + /* translators: 1: first name, 2: last name */ + $display_name = sprintf( _x( '%1$s %2$s', 'Display name based on first name and last name' ), $meta['first_name'], $meta['last_name'] ); + } elseif ( $meta['first_name'] ) { + $display_name = $meta['first_name']; + } elseif ( $meta['last_name'] ) { + $display_name = $meta['last_name']; + } else { + $display_name = $user_login; + } + } else { + $display_name = $userdata['display_name']; + } + + /** + * Filter a user's display name before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $display_name The user's display name. + */ + $display_name = apply_filters( 'pre_user_display_name', $display_name ); + + $description = empty( $userdata['description'] ) ? '' : $userdata['description']; + + /** + * Filter a user's description before the user is created or updated. + * + * @since 2.0.3 + * + * @param string $description The user's description. + */ + $meta['description'] = apply_filters( 'pre_user_description', $description ); + + $meta['rich_editing'] = empty( $userdata['rich_editing'] ) ? 'true' : $userdata['rich_editing']; + + $meta['comment_shortcuts'] = empty( $userdata['comment_shortcuts'] ) ? 'false' : $userdata['comment_shortcuts']; + + $admin_color = empty( $userdata['admin_color'] ) ? 'fresh' : $userdata['admin_color']; + $meta['admin_color'] = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $admin_color ); + + $meta['use_ssl'] = empty( $userdata['use_ssl'] ) ? 0 : $userdata['use_ssl']; + + $user_registered = empty( $userdata['user_registered'] ) ? gmdate( 'Y-m-d H:i:s' ) : $userdata['user_registered']; + + $meta['show_admin_bar_front'] = empty( $userdata['show_admin_bar_front'] ) ? 'true' : $userdata['show_admin_bar_front']; + + $user_nicename_check = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1" , $user_nicename, $user_login)); + + if ( $user_nicename_check ) { + $suffix = 2; + while ($user_nicename_check) { + $alt_user_nicename = $user_nicename . "-$suffix"; + $user_nicename_check = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1" , $alt_user_nicename, $user_login)); + $suffix++; + } + $user_nicename = $alt_user_nicename; + } + + $compacted = compact( 'user_pass', 'user_email', 'user_url', 'user_nicename', 'display_name', 'user_registered' ); + $data = wp_unslash( $compacted ); + + if ( $update ) { + $wpdb->update( $wpdb->users, $data, compact( 'ID' ) ); + $user_id = (int) $ID; + } else { + $wpdb->insert( $wpdb->users, $data + compact( 'user_login' ) ); + $user_id = (int) $wpdb->insert_id; + } + + $user = new WP_User( $user_id ); + + // Update user meta. + foreach ( $meta as $key => $value ) { + update_user_meta( $user_id, $key, $value ); + } + + foreach ( wp_get_user_contact_methods( $user ) as $key => $value ) { + if ( isset( $userdata[ $key ] ) ) { + update_user_meta( $user_id, $key, $userdata[ $key ] ); + } + } + + if ( isset( $userdata['role'] ) ) { + $user->set_role( $userdata['role'] ); + } elseif ( ! $update ) { + $user->set_role(get_option('default_role')); + } + wp_cache_delete( $user_id, 'users' ); + wp_cache_delete( $user_login, 'userlogins' ); + + if ( $update ) { + /** + * Fires immediately after an existing user is updated. + * + * @since 2.0.0 + * + * @param int $user_id User ID. + * @param object $old_user_data Object containing user's data prior to update. + */ + do_action( 'profile_update', $user_id, $old_user_data ); + } else { + /** + * Fires immediately after a new user is registered. + * + * @since 1.5.0 + * + * @param int $user_id User ID. + */ + do_action( 'user_register', $user_id ); + } + + return $user_id; + } } IS_IU_Import_Users::init(); diff --git a/languages/import-users-from-csv-de_DE.mo b/languages/import-users-from-csv-de_DE.mo new file mode 100644 index 0000000..9b47c1b Binary files /dev/null and b/languages/import-users-from-csv-de_DE.mo differ diff --git a/languages/import-users-from-csv-de_DE.po b/languages/import-users-from-csv-de_DE.po new file mode 100644 index 0000000..b6412b8 --- /dev/null +++ b/languages/import-users-from-csv-de_DE.po @@ -0,0 +1,147 @@ +# Translation of the WordPress plugin Import Users from CSV 0.3 by PubPoet. +# Copyright (C) 2011 PubPoet +# This file is distributed under the same license as the Import Users from CSV package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Import Users from CSV 0.3\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/import-users-from-csv\n" +"POT-Creation-Date: 2011-12-17 16:55+0100\n" +"PO-Revision-Date: 2014-10-30 22:37+0100\n" +"Last-Translator: Eugen Rein \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.6.10\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: de_DE\n" + +#: import-users-from-csv.php:59 +msgid "Import From CSV" +msgstr "Von CSV importieren" + +#: import-users-from-csv.php:212 +msgid "You do not have sufficient permissions to access this page." +msgstr "" +"Sie haben nicht die erforderlichen Berechtigungen, um auf diese Seite " +"zuzugreifen." + +#: import-users-from-csv.php:216 +msgid "Import users from a CSV file" +msgstr "Benutzer aus einer CSV-Datei importieren" + +#: import-users-from-csv.php:223 +#, php-format +msgid "" +"Notice: please make the directory %s writable so that you can see the error " +"log." +msgstr "" +"Achtung: Bitte machen Sie das Verzeichnis %s beschreibbar, damit Sie das " +"Fehlerprotokoll sehen können." + +#: import-users-from-csv.php:229 +#, php-format +msgid ", please check the error log" +msgstr ", bitte überprüfen Sie das Fehlerprotokoll" + +#: import-users-from-csv.php:233 +msgid "Error during file upload." +msgstr "Es ist ein Fehler während des Uploads aufgetreten." + +#: import-users-from-csv.php:236 +msgid "Cannot extract data from uploaded file or no file was uploaded." +msgstr "" +"Es konnten keine Daten aus der hochgeladenen Datei extrahiert werden, oder " +"es wurde keine Datei hochgeladen." + +#: import-users-from-csv.php:239 +#, php-format +msgid "No user was successfully imported%s." +msgstr "Es konnte kein Benutzer erfolgreich importiert werden%s." + +#: import-users-from-csv.php:242 +#, php-format +msgid "Some users were successfully imported but some were not%s." +msgstr "Es konnten nicht alle Benutzer erfolgreich importiert werden%s." + +#: import-users-from-csv.php:245 +msgid "Users import was successful." +msgstr "Der Import von Benutzern wurde erfolgreich ausgeführt." + +#: import-users-from-csv.php:256 +msgid "CSV file" +msgstr "CSV-Datei" + +#: import-users-from-csv.php:260 import-users-from-csv.php:262 +msgid "Notification" +msgstr "Benachrichtigung" + +#: import-users-from-csv.php:270 import-users-from-csv.php:272 +msgid "Password nag" +msgstr "Password aktualisieren" + +#: import-users-from-csv.php:281 +msgid "Import" +msgstr "Importieren" + +#: import-users-from-csv.php:159 +msgid "You may want to see the example of the CSV file." +msgstr "Schauen Sie sich die Vorlage der CSV-Datei an." + +#: import-users-from-csv.php:165 +msgid "Send to new users" +msgstr "Benachrichtigung an neue Benutzer senden" + +#: import-users-from-csv.php:175 +msgid "Show password nag on new users signon" +msgstr "" +"Zeige Dialog zur Passwortaktualisierung mit dem Login eines neuen Nutzers." + +#: import-users-from-csv.php:297 +#, php-format +msgid "BEGIN %s" +msgstr "Beginn %s" + +#: import-users-from-csv.php:302 +#, php-format +msgid "[Line %1$s] %2$s" +msgstr "[Zeile %1$s] %2$s" + +#. Plugin Name of the plugin/theme +msgid "Import Users from CSV" +msgstr "Importiere Benutzer von CSV-Datei" + +#. Plugin URI of the plugin/theme +msgid "http://pubpoet.com/plugins/" +msgstr "http://pubpoet.com/plugins/" + +#. Description of the plugin/theme +msgid "Import Users data and metadata from a csv file." +msgstr "Benutzer- und Metadaten aus einer CSV-Datei importieren." + +#. Author of the plugin/theme +msgid "PubPoet" +msgstr "PubPoet" + +#. Author URI of the plugin/theme +msgid "http://pubpoet.com/" +msgstr "http://pubpoet.com/" + +#: import-users-from-csv.php:190 import-users-from-csv.php:192 +msgid "Password hashing" +msgstr "Passwort-Hashing" + +#: import-users-from-csv.php:195 +msgid "Disable password hashing" +msgstr "Das Hashen der Passwörter deaktivieren" + +#: import-users-from-csv.php:200 import-users-from-csv.php:202 +msgid "Users update" +msgstr "Benutzer aktualisieren" + +#: import-users-from-csv.php:205 +msgid "Update user when a username or email exists" +msgstr "" +"Aktualisiere Benutzer, wenn der Benutzername oder die Email bereits existiert" diff --git a/languages/import-users-from-csv.pot b/languages/import-users-from-csv.pot index fc2c6ea..2d33f48 100644 --- a/languages/import-users-from-csv.pot +++ b/languages/import-users-from-csv.pot @@ -120,3 +120,19 @@ msgstr "" #. Author URI of the plugin/theme msgid "http://pubpoet.com/" msgstr "" + +#: import-users-from-csv.php:190 import-users-from-csv.php:192 +msgid "Password hashing" +msgstr "" + +#: import-users-from-csv.php:195 +msgid "Disable password hashing" +msgstr "" + +#: import-users-from-csv.php:200 import-users-from-csv.php:202 +msgid "Users update" +msgstr "" + +#: import-users-from-csv.php:205 +msgid "Update user when a username or email exists" +msgstr ""