WordPress.org

Plugin Directory

Changeset 503665


Ignore:
Timestamp:
02/11/12 15:02:20 (2 years ago)
Author:
sorich87
Message:

RFC 4180 compliant CSV support, improved memory usage, IS_IU_CSV_DELIMITER constant, avoid double serialization of serialized fields

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

Legend:

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

    r496958 r503665  
    22/** 
    33 * @package Import_Users_from_CSV 
    4  * @version 0.3.2 
     4 * @version 0.4 
    55 */ 
    66/* 
     
    88Plugin URI: http://pubpoet.com/plugins/ 
    99Description: Import Users data and metadata from a csv file. 
    10 Version: 0.3.2 
     10Version: 0.4 
    1111Author: PubPoet 
    1212Author URI: http://pubpoet.com/ 
     
    3232load_plugin_textdomain( 'import-users-from-csv', false, basename( dirname( __FILE__ ) ) . '/languages' ); 
    3333 
     34if ( ! defined( 'IS_IU_CSV_DELIMITER' ) ) 
     35    define ( 'IS_IU_CSV_DELIMITER', ',' ); 
     36 
    3437/** 
    3538 * Main plugin class 
     
    7275 
    7376            if ( isset( $_FILES['users_csv']['tmp_name'] ) ) { 
    74                 ini_set( 'auto_detect_line_endings', true ); 
    75  
    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  
    84                 if ( ! $rows ) 
    85                     wp_redirect( add_query_arg( 'import', 'data', wp_get_referer() ) ); 
    86  
    8777                // Setup settings variables 
    8878                $password_nag          = isset( $_POST['password_nag'] ) ? $_POST['password_nag'] : false; 
    8979                $new_user_notification = isset( $_POST['new_user_notification'] ) ? $_POST['new_user_notification'] : false; 
    9080                $errors = $user_ids    = array(); 
    91  
    92                 // Separate headers from the other rows 
    93                 $headers               = $rows[0]; 
    94                 $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 ); 
    9881 
    9982                // User data fields list used to differentiate with user meta 
     
    10891                ); 
    10992 
    110                 // Let's process the data 
    111                 foreach ( $rows as $rkey => $columns ) { 
    112                     if ( ! $columns ) 
     93                include( plugin_dir_path( __FILE__ ) . 'class-readcsv.php' ); 
     94 
     95                // Loop through the file lines 
     96                $file_handle = fopen( $_FILES['users_csv']['tmp_name'], 'r' ); 
     97                $csv_reader = new ReadCSV( $file_handle, IS_IU_CSV_DELIMITER, "\xEF\xBB\xBF" ); // Skip any UTF-8 byte order mark. 
     98 
     99                $first = true; 
     100                while ( ( $line = $csv_reader->get_row() ) !== NULL ) { 
     101 
     102                    // If the first line is empty, return and error 
     103                    // If another line is empty, just skip it 
     104                    if ( empty( $line ) ) { 
     105                        if ( $first ) { 
     106                            wp_redirect( add_query_arg( 'import', 'data', wp_get_referer() ) ); 
     107                            exit; 
     108                        } else { 
     109                            continue; 
     110                        } 
     111                    } 
     112 
     113                    // If we are on the first line, the columns are the headers 
     114                    if ( $first ) { 
     115                        $headers = $line; 
     116                        $first = false; 
    113117                        continue; 
     118                    } 
    114119 
    115120                    // Separate user data from meta 
    116121                    $userdata = $usermeta = array(); 
    117                     foreach ( $columns as $ckey => $column ) { 
     122                    foreach ( $line as $ckey => $column ) { 
    118123                        $column_name = $headers[$ckey]; 
    119124                        $column = trim( $column ); 
     
    133138                    $usermeta = apply_filters( 'is_iu_import_usermeta', $usermeta, $userdata ); 
    134139 
    135                     // If no user meta, bailout! 
     140                    // If no user data, bailout! 
    136141                    if ( empty( $userdata ) ) 
    137142                        continue; 
     
    167172                        if ( $usermeta ) { 
    168173                            foreach ( $usermeta as $metakey => $metavalue ) { 
     174                                $metavalue = maybe_unserialize( $metavalue ); 
    169175                                update_user_meta( $user_id, $metakey, $metavalue ); 
    170176                            } 
     
    180186                        } 
    181187 
     188                        // Some plugins may need to do things after one user has been imported. Who know? 
     189                        do_action( 'is_iu_post_user_import', $user_id ); 
     190 
    182191                        $user_ids[] = $user_id; 
    183192                    } 
    184193 
    185                     // Some plugins may need to do things after one user has been imported. Who know? 
    186                     do_action( 'is_iu_post_user_import', $user_id ); 
    187194                } 
     195                fclose( $file_handle ); 
    188196 
    189197                // One more thing to do after all imports? 
  • import-users-from-csv/trunk/readme.txt

    r496958 r503665  
    44Requires at least: 3.1 
    55Tested up to: 3.4 
    6 Stable tag: 0.3.2 
     6Stable tag: 0.4 
    77 
    88Import users from a CSV file into WordPress 
     
    1515 
    1616You can also choose to send a notification to the new users and to display password nag on user login. 
     17 
     18[Check out my other free plugins.](http://profiles.wordpress.org/users/sorich87/) 
    1719 
    1820= Features = 
     
    8082== Changelog == 
    8183 
     84= 0.4 = 
     85* Switched to RFC 4180 compliant library for CSV parsing 
     86* Introduced IS_IU_CSV_DELIMITER constant to allow changing the CSV delimiter 
     87* Improved memory usage by reading the CSV file line by line 
     88* Fixed bug where any serialized CSV column content is serialized again 
     89on import 
     90 
    8291= 0.3.2 = 
    8392* Fixed php notice when importing 
Note: See TracChangeset for help on using the changeset viewer.