WordPress.org

Plugin Directory

Changeset 477249


Ignore:
Timestamp:
12/18/11 21:16:29 (2 years ago)
Author:
sorich87
Message:

Version 0.3 changes

Location:
import-users-from-csv/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • import-users-from-csv/trunk/import-users-from-csv.php

    r391150 r477249  
    22/** 
    33 * @package Import_Users_from_CSV 
    4  * @version 0.2.2 
     4 * @version 0.3 
    55 */ 
    66/* 
    77Plugin Name: Import Users from CSV 
    88Plugin URI: http://pubpoet.com/plugins/ 
    9 Description: Import Users data and metadata from csv file. 
    10 Version: 0.2.2 
     9Description: Import Users data and metadata from a csv file. 
     10Version: 0.3 
    1111Author: PubPoet 
    1212Author URI: http://pubpoet.com/ 
    1313License: GPL2 
     14Text Domain: import-users-from-csv 
    1415*/ 
    15 /*  Copyright 2011  Ulrich Sossou  (email : sorich87@gmail.com) 
     16/*  Copyright 2011  Ulrich Sossou  (https://github.com/sorich87) 
    1617 
    1718    This program is free software; you can redistribute it and/or modify 
     
    2930*/ 
    3031 
    31 /** 
    32  * Support for PHP 5.2 
    33  * 
    34  * @since 0.1 
    35  **/ 
    36 if ( ! function_exists( 'str_getcsv' ) ) { 
    37     function str_getcsv( $input, $delimiter=',', $enclosure='"', $escape=null, $eol=null ) { 
    38         $temp = fopen( "php://memory", "rw" ); 
    39         fwrite( $temp, $input ); 
    40         fseek( $temp, 0 ); 
    41         $r = array(); 
    42         while ( ( $data = fgetcsv( $temp, 4096, $delimiter, $enclosure ) ) !== false ) { 
    43             $r[] = $data; 
    44         } 
    45         fclose( $temp ); 
    46         if ( 1 === count( $r ) ) 
    47             $r = $r[0]; 
    48         return $r; 
    49     } 
    50 } 
     32load_plugin_textdomain( 'import-users-from-csv', false, basename( dirname( __FILE__ ) ) . '/languages' ); 
    5133 
    5234/** 
     
    6547        add_action( 'admin_menu', array( $this, 'add_admin_pages' ) ); 
    6648        add_action( 'init', array( $this, 'process_csv' ) ); 
     49 
     50        $upload_dir = wp_upload_dir(); 
     51        $this->log_dir_path = trailingslashit( $upload_dir['basedir'] ); 
     52        $this->log_dir_url  = trailingslashit( $upload_dir['baseurl'] ); 
    6753    } 
    6854 
     
    7359     **/ 
    7460    public function add_admin_pages() { 
    75         add_users_page( __( 'Import From CSV' ), __( 'Import From CSV' ), 'create_users', 'import-users-from-csv', array( $this, 'users_page' ) ); 
     61        add_users_page( __( 'Import From CSV' , 'import-users-from-csv'), __( 'Import From CSV' , 'import-users-from-csv'), 'create_users', 'import-users-from-csv', array( $this, 'users_page' ) ); 
    7662    } 
    7763 
     
    8874                ini_set( 'auto_detect_line_endings', true ); 
    8975 
    90                 $rows = file( $_FILES['users_csv']['tmp_name'] ); 
     76                // Read the files rows into an array 
     77                $file_handle = fopen( $_FILES['users_csv']['tmp_name'], "r" ); 
     78                $rows = array(); 
     79                while ( ! feof( $file_handle ) ) { 
     80                    $rows[] = fgetcsv( $file_handle, 1024 ); 
     81                } 
     82                fclose( $file_handle ); 
     83 
    9184                if ( ! $rows ) 
    9285                    wp_redirect( add_query_arg( 'import', 'data', wp_get_referer() ) ); 
    9386 
    94                 $password_nag          = isset( $_POST['password_nag'] ) ? $_POST['password_nag'] : false; 
     87                // Setup settings variables 
     88                $password_nag          = isset( $_POST['password_nag'] ) ? $_POST['password_nag'] : false; 
    9589                $new_user_notification = isset( $_POST['new_user_notification'] ) ? $_POST['new_user_notification'] : false; 
    9690                $errors = $user_ids    = array(); 
    97                 $headers               = str_getcsv( $rows[0] ); 
     91 
     92                // Separate headers from the other rows 
     93                $headers               = $rows[0]; 
    9894                $rows                  = array_slice( $rows, 1 ); 
     95 
     96                // Maybe another plugin needs to do something before import? 
     97                do_action( 'is_iu_pre_users_import', $headers, $rows ); 
     98 
     99                // User data fields list used to differentiate with user meta 
    99100                $userdata_fields       = array( 
    100101                    'ID', 'user_login', 'user_pass', 
     
    107108                ); 
    108109 
    109                 do_action( 'is_iu_pre_users_import', $headers, $rows ); 
    110  
    111                 foreach ( $rows as $rkey => $row ) { 
    112                     $columns = str_getcsv( $row ); 
     110                // Let's process the data 
     111                foreach ( $rows as $rkey => $columns ) { 
     112                    // Separate user data from meta 
    113113                    $userdata = $usermeta = array(); 
    114  
    115114                    foreach ( $columns as $ckey => $column ) { 
    116115                        $column_name = $headers[$ckey]; 
     
    124123                    } 
    125124 
     125                    // A plugin may need to filter the data and meta 
    126126                    $userdata = apply_filters( 'is_iu_import_userdata', $userdata, $usermeta ); 
    127127                    $usermeta = apply_filters( 'is_iu_import_usermeta', $usermeta, $userdata ); 
    128128 
     129                    // If no user meta, bailout! 
    129130                    if ( empty( $userdata ) ) 
    130131                        continue; 
    131132 
     133                    // Something to be done before importing one user? 
    132134                    do_action( 'is_iu_pre_user_import', $userdata, $usermeta ); 
    133135 
    134                     $update = ! empty( $userdata['ID'] ); 
    135  
    136                     if ( empty( $userdata['user_pass'] ) ) 
     136                    // Are we updating an old user or creating a new one? 
     137                    $update = false; 
     138                    $user_id = 0; 
     139                    if ( ! empty( $userdata['ID'] ) ) { 
     140                        $update = true; 
     141                        $user_id = $userdata['ID']; 
     142                    } 
     143 
     144                    // If creating a new user and no password was set, let auto-generate one! 
     145                    if ( ! $update && empty( $userdata['user_pass'] ) ) 
    137146                        $userdata['user_pass'] = wp_generate_password( 12, false ); 
    138147 
     148                    // Insert or update... at last! If only user ID was provided, we don't need to do anything at all. :) 
     149                    if ( array( 'ID' => $user_id ) == $userdata ) 
     150                        $user_id = get_userdata( $user_id )->ID; // To check if the user id exists 
    139151                    if ( $update ) 
    140152                        $user_id = wp_update_user( $userdata ); 
     
    142154                        $user_id = wp_insert_user( $userdata ); 
    143155 
     156                    // Is there an error o_O? 
    144157                    if ( is_wp_error( $user_id ) ) { 
    145158                        $errors[$rkey] = $user_id; 
    146159                    } else { 
     160                        // If no error, let's update the user meta too! 
    147161                        if ( $usermeta ) { 
    148162                            foreach ( $usermeta as $metakey => $metavalue ) { 
     
    151165                        } 
    152166 
     167                        // If we created a new user, maybe set password nag and send new user notification? 
    153168                        if ( ! $update ) { 
    154169                            if ( $password_nag ) 
     
    162177                    } 
    163178 
     179                    // Some plugins may need to do things after one user has been imported. Who know? 
    164180                    do_action( 'is_iu_post_user_import', $user_id ); 
    165181                } 
    166182 
     183                // One more thing to do after all imports? 
    167184                do_action( 'is_iu_post_users_import', $user_ids, $errors ); 
    168185 
     186                // Let's log the errors 
    169187                $this->log_errors( $errors ); 
    170188 
     189                // No users imported? 
    171190                if ( $errors && ! $user_ids ) { 
    172191                    wp_redirect( add_query_arg( 'import', 'fail', wp_get_referer() ) ); 
     192                // Some users imported? 
    173193                } elseif ( $errors ) { 
    174194                    wp_redirect( add_query_arg( 'import', 'errors', wp_get_referer() ) ); 
     195                // All users imported? :D 
    175196                } else { 
    176197                    wp_redirect( add_query_arg( 'import', 'success', wp_get_referer() ) ); 
     
    191212    public function users_page() { 
    192213        if ( ! current_user_can( 'create_users' ) ) 
    193             wp_die( __( 'You do not have sufficient permissions to access this page.' ) ); 
     214            wp_die( __( 'You do not have sufficient permissions to access this page.' , 'import-users-from-csv') ); 
    194215?> 
    195216 
    196217<div class="wrap"> 
    197     <h2><?php _e( 'Import users from a CSV file' ); ?></h2> 
     218    <h2><?php _e( 'Import users from a CSV file' , 'import-users-from-csv'); ?></h2> 
    198219    <?php 
    199     $error_log_file = plugin_dir_url( __FILE__ ) . 'errors.log'; 
     220    $error_log_file = $this->log_dir_path . 'is_iu_errors.log'; 
     221    $error_log_url  = $this->log_dir_url . 'is_iu_errors.log'; 
    200222 
    201223    if ( ! file_exists( $error_log_file ) ) { 
    202224        if ( ! @fopen( $error_log_file, 'x' ) ) 
    203             echo '<div class="updated"><p><strong>Notice: please make the plugin directory writable so that you can see the error log.</strong></p></div>'; 
     225            echo '<div class="updated"><p><strong>' . sprintf( __( 'Notice: please make the directory %s writable so that you can see the error log.' , 'import-users-from-csv'), $this->log_dir_path ) . '</strong></p></div>'; 
    204226    } 
    205227 
     
    207229        $error_log_msg = ''; 
    208230        if ( file_exists( $error_log_file ) ) 
    209             $error_log_msg = ", please <a href='$error_log'>check error log</a>"; 
     231            $error_log_msg = sprintf( __( ', please <a href="%s">check the error log</a>' , 'import-users-from-csv'), $error_log_url ); 
    210232 
    211233        switch ( $_GET['import'] ) { 
    212234            case 'file': 
    213                 echo '<div class="error"><p><strong>Error during file upload.</strong></p></div>'; 
     235                echo '<div class="error"><p><strong>' . __( 'Error during file upload.' , 'import-users-from-csv') . '</strong></p></div>'; 
    214236                break; 
    215237            case 'data': 
    216                 echo '<div class="error"><p><strong>Cannot extract data from uploaded file or no file was uploaded.</strong></p></div>'; 
     238                echo '<div class="error"><p><strong>' . __( 'Cannot extract data from uploaded file or no file was uploaded.' , 'import-users-from-csv') . '</strong></p></div>'; 
    217239                break; 
    218240            case 'fail': 
    219                 echo "<div class='error'><p><strong>No user was successfully imported$error_log_msg.</strong></p></div>"; 
     241                echo '<div class="error"><p><strong>' . sprintf( __( 'No user was successfully imported%s.' , 'import-users-from-csv'), $error_log_msg ) . '</strong></p></div>'; 
    220242                break; 
    221243            case 'errors': 
    222                 echo "<div class='error'><p><strong>Some users were successfully imported but some were not$error_log_msg.</strong></p></div>"; 
     244                echo '<div class="error"><p><strong>' . sprintf( __( 'Some users were successfully imported but some were not%s.' , 'import-users-from-csv'), $error_log_msg ) . '</strong></p></div>'; 
    223245                break; 
    224246            case 'success': 
    225                 echo '<div class="updated"><p><strong>Users import was successful.</strong></p></div>'; 
     247                echo '<div class="updated"><p><strong>' . __( 'Users import was successful.' , 'import-users-from-csv') . '</strong></p></div>'; 
    226248                break; 
    227249            default: 
     
    234256        <table class="form-table"> 
    235257            <tr valign="top"> 
    236                 <th scope="row"><label for"users_csv"><?php _e( 'CSV file' ); ?></label></th> 
     258                <th scope="row"><label for"users_csv"><?php _e( 'CSV file' , 'import-users-from-csv'); ?></label></th> 
    237259                <td><input type="file" id="users_csv" name="users_csv" value="" class="all-options" /></td> 
    238260            </tr> 
    239261            <tr valign="top"> 
    240                 <th scope="row"><?php _e( 'Notification' ); ?></th> 
     262                <th scope="row"><?php _e( 'Notification' , 'import-users-from-csv'); ?></th> 
    241263                <td><fieldset> 
    242                     <legend class="screen-reader-text"><span><?php _e( 'Notification' ); ?></span></legend> 
     264                    <legend class="screen-reader-text"><span><?php _e( 'Notification' , 'import-users-from-csv'); ?></span></legend> 
    243265                    <label for="new_user_notification"> 
    244266                        <input id="new_user_notification" name="new_user_notification" type="checkbox" value="1" /> 
     
    248270            </tr> 
    249271            <tr valign="top"> 
    250                 <th scope="row"><?php _e( 'Password nag' ); ?></th> 
     272                <th scope="row"><?php _e( 'Password nag' , 'import-users-from-csv'); ?></th> 
    251273                <td><fieldset> 
    252                     <legend class="screen-reader-text"><span><?php _e( 'Password nag' ); ?></span></legend> 
     274                    <legend class="screen-reader-text"><span><?php _e( 'Password nag' , 'import-users-from-csv'); ?></span></legend> 
    253275                    <label for="password_nag"> 
    254276                        <input id="password_nag" name="password_nag" type="checkbox" value="1" /> 
     
    259281        </table> 
    260282        <p class="submit"> 
    261             <input type="submit" class="button-primary" value="<?php _e( 'Import' ); ?>" /> 
     283            <input type="submit" class="button-primary" value="<?php _e( 'Import' , 'import-users-from-csv'); ?>" /> 
    262284        </p> 
    263285    </form> 
     
    274296            return; 
    275297 
    276         $log = @fopen( plugin_dir_path( __FILE__ ) . 'errors.log', 'a' ); 
    277         @fwrite( $log, 'BEGIN ' . date( 'YmdHis', time() ) . "\n" ); 
     298        $log = @fopen( $this->log_dir_path . 'is_iu_errors.log', 'a' ); 
     299        @fwrite( $log, sprintf( __( 'BEGIN %s' , 'import-users-from-csv'), date( 'Y-m-d H:i:s', time() ) ) . "\n" ); 
    278300 
    279301        foreach ( $errors as $key => $error ) { 
    280302            $line = $key + 1; 
    281303            $message = $error->get_error_message(); 
    282             @fwrite( $log, "[Line $line] $message\n" ); 
     304            @fwrite( $log, sprintf( __( '[Line %1$s] %2$s' , 'import-users-from-csv'), $line, $message ) . "\n" ); 
    283305        } 
    284306 
  • import-users-from-csv/trunk/readme.txt

    r391150 r477249  
    1 === Plugin Name === 
     1=== Import Users from CSV === 
    22Contributors: sorich87 
    33Tags: user, users, csv, batch, import, importer, admin 
    44Requires at least: 3.1 
    5 Tested up to: 3.2 
    6 Stable tag: 0.2.2 
     5Tested up to: 3.3 
     6Stable tag: 0.3 
    77 
    88Import users from a CSV file into WordPress 
     
    2626 
    2727For feature request and bug reports, [please use the forums](http://wordpress.org/tags/import-users-from-csv?forum_id=10#postform). 
     28Code contributions are welcome [on Github](https://github.com/sorich87/Import-Users-from-CSV). 
    2829 
    2930= Tutorials = 
     
    7980== Changelog == 
    8081 
     82= 0.3 = 
     83* Fixed bug where password field was overwritten for existing users 
     84* Use fgetcsv instead of str_getcsv 
     85* Don't run insert or update user function when only user ID was 
     86provided (performance improvement) 
     87* Internationalization 
     88* Added display name to example csv file 
     89 
    8190= 0.2.2 = 
    8291* Added role to example file 
     
    100109== Upgrade Notice == 
    101110 
     111= 0.3 = 
     112Bug fix, performance improvement and internationalization. 
     113 
    102114= 0.2.2 = 
    103115Fix bug with users import when no user meta is set. 
Note: See TracChangeset for help on using the changeset viewer.