function acui_import_users($file, $form_data, $attach_id = 0, $is_cron = false)
{
    ?>
	<div class="wrap">
		<h2>Importing users</h2>	
		<?php 
    set_time_limit(0);
    add_filter('send_password_change_email', '__return_false');
    global $wpdb;
    global $wp_users_fields;
    global $wp_min_fields;
    if (is_plugin_active('wp-access-areas/wp-access-areas.php')) {
        $wpaa_labels = WPAA_AccessArea::get_available_userlabels();
    }
    $buddypress_fields = array();
    if (is_plugin_active('buddypress/bp-loader.php')) {
        $profile_groups = BP_XProfile_Group::get(array('fetch_fields' => true));
        if (!empty($profile_groups)) {
            foreach ($profile_groups as $profile_group) {
                if (!empty($profile_group->fields)) {
                    foreach ($profile_group->fields as $field) {
                        $buddypress_fields[] = $field->name;
                    }
                }
            }
        }
    }
    $users_registered = array();
    $headers = array();
    $headers_filtered = array();
    $role = $form_data["role"];
    $empty_cell_action = $form_data["empty_cell_action"];
    if (empty($form_data["activate_users_wp_members"])) {
        $activate_users_wp_members = "no_activate";
    } else {
        $activate_users_wp_members = $form_data["activate_users_wp_members"];
    }
    if (empty($form_data["allow_multiple_accounts"])) {
        $allow_multiple_accounts = "not_allowed";
    } else {
        $allow_multiple_accounts = $form_data["allow_multiple_accounts"];
    }
    echo "<h3>Ready to registers</h3>";
    echo "<p>First row represents the form of sheet</p>";
    $row = 0;
    $positions = array();
    ini_set('auto_detect_line_endings', TRUE);
    $delimiter = acui_detect_delimiter($file);
    $manager = new SplFileObject($file);
    while ($data = $manager->fgetcsv($delimiter)) {
        if (empty($data[0])) {
            continue;
        }
        if (count($data) == 1) {
            $data = $data[0];
        }
        foreach ($data as $key => $value) {
            $data[$key] = trim($value);
        }
        for ($i = 0; $i < count($data); $i++) {
            $data[$i] = acui_string_conversion($data[$i]);
        }
        if ($row == 0) {
            // check min columns username - email
            if (count($data) < 2) {
                echo "<div id='message' class='error'>File must contain at least 2 columns: username and email</div>";
                break;
            }
            $i = 0;
            $password_position = false;
            foreach ($wp_users_fields as $wp_users_field) {
                $positions[$wp_users_field] = false;
            }
            foreach ($data as $element) {
                $headers[] = $element;
                if (in_array(strtolower($element), $wp_users_fields)) {
                    $positions[strtolower($element)] = $i;
                }
                if (!in_array(strtolower($element), $wp_users_fields) && !in_array($element, $wp_min_fields) && !in_array($element, $buddypress_fields)) {
                    $headers_filtered[] = $element;
                }
                $i++;
            }
            $columns = count($data);
            update_option("acui_columns", $headers_filtered);
            ?>
					<h3>Inserting and updating data</h3>
					<table>
						<tr><th>Row</th><?php 
            foreach ($headers as $element) {
                echo "<th>" . $element . "</th>";
            }
            ?>
</tr>
					<?php 
            $row++;
        } else {
            if (count($data) != $columns) {
                // if number of columns is not the same that columns in header
                echo '<script>alert("Row number: ' . $row . ' has no the same columns than header, we are going to skip");</script>';
                continue;
            }
            $username = $data[0];
            $email = $data[1];
            $user_id = 0;
            $problematic_row = false;
            $password_position = $positions["password"];
            $password = "";
            $created = true;
            if ($password_position === false) {
                $password = wp_generate_password();
            } else {
                $password = $data[$password_position];
            }
            if (username_exists($username)) {
                // if user exists, we take his ID by login, we will update his mail if it has changed
                $user_object = get_user_by("login", $username);
                $user_id = $user_object->ID;
                if (!empty($password)) {
                    wp_set_password($password, $user_id);
                }
                $updateEmailArgs = array('ID' => $user_id, 'user_email' => $email);
                wp_update_user($updateEmailArgs);
                $created = false;
            } elseif (email_exists($email) && $allow_multiple_accounts == "not_allowed") {
                // if the email is registered, we take the user from this and we don't allow repeated emails
                $user_object = get_user_by("email", $email);
                $user_id = $user_object->ID;
                $data[0] = "User already exists as: " . $user_object->user_login . "<br/>(in this CSV file is called: " . $username . ")";
                $problematic_row = true;
                if (!empty($password)) {
                    wp_set_password($password, $user_id);
                }
                $created = false;
            } elseif (email_exists($email) && $allow_multiple_accounts == "allowed") {
                // if the email is registered and repeated emails are allowed
                if (empty($password)) {
                    // if user not exist and password is empty but the column is set, it will be generated
                    $password = wp_generate_password();
                }
                $hacked_email = acui_hack_email($email);
                $user_id = wp_create_user($username, $password, $hacked_email);
                acui_hack_restore_remapped_email_address($user_id, $email);
            } else {
                if (empty($password)) {
                    // if user not exist and password is empty but the column is set, it will be generated
                    $password = wp_generate_password();
                }
                $user_id = wp_create_user($username, $password, $email);
            }
            if (is_wp_error($user_id)) {
                // in case the user is generating errors after this checks
                $error_string = $user_id->get_error_message();
                echo '<script>alert("Problems with user: '******', we are going to skip. \\r\\nError: ' . $error_string . '");</script>';
                continue;
            }
            $users_registered[] = $user_id;
            $user_object = new WP_User($user_id);
            if (!(in_array("administrator", acui_get_roles($user_id), FALSE) || is_multisite() && is_super_admin($user_id))) {
                $default_roles = $user_object->roles;
                foreach ($default_roles as $default_role) {
                    $user_object->remove_role($default_role);
                }
                if (is_array($role)) {
                    foreach ($role as $single_role) {
                        $user_object->add_role($single_role);
                    }
                } else {
                    $user_object->add_role($role);
                }
            }
            // WP Members activation
            if ($activate_users_wp_members == "activate") {
                update_user_meta($user_id, "active", true);
            }
            if ($columns > 2) {
                for ($i = 2; $i < $columns; $i++) {
                    if (!empty($data)) {
                        if (strtolower($headers[$i]) == "password") {
                            // passwords -> continue
                            continue;
                        } else {
                            if (in_array($headers[$i], $wp_users_fields)) {
                                // wp_user data
                                if (empty($data[$i]) && $empty_cell_action == "leave") {
                                    continue;
                                } else {
                                    wp_update_user(array('ID' => $user_id, $headers[$i] => $data[$i]));
                                }
                            } elseif (strtolower($headers[$i]) == "wp-access-areas" && is_plugin_active('wp-access-areas/wp-access-areas.php')) {
                                // wp-access-areas
                                $active_labels = array_map('trim', explode("#", $data[$i]));
                                foreach ($wpaa_labels as $wpa_label) {
                                    if (in_array($wpa_label->cap_title, $active_labels)) {
                                        acui_set_cap_for_user($wpa_label->capability, $user_object, true);
                                    } else {
                                        acui_set_cap_for_user($wpa_label->capability, $user_object, false);
                                    }
                                }
                            } elseif (in_array($headers[$i], $buddypress_fields)) {
                                // buddypress
                                xprofile_set_field_data($headers[$i], $user_id, $data[$i]);
                            } else {
                                // wp_usermeta data
                                if (empty($data[$i])) {
                                    if ($empty_cell_action == "delete") {
                                        delete_user_meta($user_id, $headers[$i]);
                                    } else {
                                        continue;
                                    }
                                } else {
                                    update_user_meta($user_id, $headers[$i], $data[$i]);
                                }
                            }
                        }
                    }
                }
            }
            $styles = "";
            if ($problematic_row) {
                $styles = "background-color:red; color:white;";
            }
            echo "<tr style='{$styles}' ><td>" . ($row - 1) . "</td>";
            foreach ($data as $element) {
                echo "<td>{$element}</td>";
            }
            echo "</tr>\n";
            flush();
            $mail_for_this_user = false;
            if ($created) {
                $mail_for_this_user = true;
            } else {
                if (!$is_cron && isset($form_data["send_email_updated"]) && $form_data["send_email_updated"]) {
                    $mail_for_this_user = true;
                } else {
                    if ($is_cron && get_option("acui_send_mail_cron")) {
                        $mail_for_this_user = true;
                    }
                }
            }
            // send mail
            if (isset($form_data["sends_email"]) && $form_data["sends_email"] && $mail_for_this_user) {
                $body_mail = get_option("acui_mail_body");
                $subject = get_option("acui_mail_subject");
                $body_mail = str_replace("**loginurl**", "<a href='" . home_url() . "/wp-login.php" . "'>" . home_url() . "/wp-login.php" . "</a>", $body_mail);
                $body_mail = str_replace("**username**", $username, $body_mail);
                if (empty($password) && !$created) {
                    $password = "******";
                }
                $body_mail = str_replace("**password**", $password, $body_mail);
                $body_mail = str_replace("**email**", $email, $body_mail);
                foreach ($wp_users_fields as $wp_users_field) {
                    if ($positions[$wp_users_field] != false && $wp_users_field != "password") {
                        $body_mail = str_replace("**" . $wp_users_field . "**", $data[$positions[$wp_users_field]], $body_mail);
                    }
                }
                for ($i = 0; $i < count($headers); $i++) {
                    $body_mail = str_replace("**" . $headers[$i] . "**", $data[$i], $body_mail);
                }
                add_filter('wp_mail_content_type', 'set_html_content_type');
                if (get_option("acui_settings") == "plugin") {
                    add_action('phpmailer_init', 'acui_mailer_init');
                    add_filter('wp_mail_from', 'acui_mail_from');
                    add_filter('wp_mail_from_name', 'acui_mail_from_name');
                    wp_mail($email, $subject, $body_mail);
                    remove_filter('wp_mail_from', 'acui_mail_from');
                    remove_filter('wp_mail_from_name', 'acui_mail_from_name');
                    remove_action('phpmailer_init', 'acui_mailer_init');
                } else {
                    wp_mail($email, $subject, $body_mail);
                }
                remove_filter('wp_mail_content_type', 'set_html_content_type');
            }
        }
        $row++;
    }
    if ($attach_id != 0) {
        wp_delete_attachment($attach_id);
    }
    // delete all users that have not been imported
    if ($is_cron && get_option("acui_cron_delete_users")) {
        $all_users = get_users(array('fields' => array('ID')));
        foreach ($all_users as $user) {
            if (!in_array($user->ID, $users_registered)) {
                wp_delete_user($user->ID);
            }
        }
    }
    ?>
			</table>
			<br/>
			<p>Process finished you can go <a href="<?php 
    echo get_admin_url() . '/users.php';
    ?>
">here to see results</a></p>
			<?php 
    ini_set('auto_detect_line_endings', FALSE);
    add_filter('send_password_change_email', '__return_true');
    ?>
	</div>
<?php 
}
function acui_import_users($file, $role)
{
    ?>
	<div class="wrap">
<!--
//XTEC ************ MODIFICAT - Added language supporting
//2015.03.30 @nacho
 -->
 <h2><?php 
    _e('Importing users', 'import-users-from-csv-with-meta');
    ?>
</h2>
 <!--
//************ ORIGINAL
/*
		<h2>Importing users</h2>
*/
*/
//************ FI
-->
		<?php 
    set_time_limit(0);
    global $wpdb;
    $headers = array();
    global $wp_users_fields;
    global $wp_min_fields;
    //XTEC ************ ELIMINAT - Removed to simplify user experience
    //2015.03.18 @sarjona
    /*
    			echo "<h3>Ready to registers</h3>";
    			echo "<p>First row represents the form of sheet</p>";
    */
    //************ FI
    $row = 0;
    ini_set('auto_detect_line_endings', TRUE);
    $delimiter = acui_detect_delimiter($file);
    $manager = new SplFileObject($file);
    //XTEC ************ AFEGIT - If username exists, do nothing
    //2015.03.17 @sarjona
    $errors = '';
    //************ FI
    while ($data = $manager->fgetcsv($delimiter)) {
        if (empty($data[0])) {
            continue;
        }
        if (count($data) == 1) {
            $data = $data[0];
        }
        foreach ($data as $key => $value) {
            $data[$key] = trim($value);
        }
        for ($i = 0; $i < count($data); $i++) {
            $data[$i] = acui_string_conversion($data[$i]);
        }
        if ($row == 0) {
            // check min columns username - password - email
            if (count($data) < 3) {
                echo "<div id='message' class='error'>File must contain at least 3 columns: username, password and email</div>";
                break;
            }
            foreach ($data as $element) {
                $headers[] = $element;
            }
            $columns = count($data);
            $headers_filtered = array_diff($headers, $wp_users_fields);
            $headers_filtered = array_diff($headers_filtered, $wp_min_fields);
            update_option("acui_columns", $headers_filtered);
            ?>
<!--
//XTEC ************ MODIFICAT - Added language supporting
//2015.03.30 @nacho
 -->
 <h3><?php 
            _e('Inserting and updating data', 'import-users-from-csv-with-meta');
            ?>
</h3>
 <!--
//************ ORIGINAL
/*
		<h3>Inserting and updating data</h3>
*/
*/
//************ FI
-->
					<table>
					<!--
//XTEC ************ MODIFICAT - Added language supporting
//2015.03.30 @nacho
 -->
					<tr><th><?php 
            _e('Row', 'import-users-from-csv-with-meta');
            ?>
</th><?php 
            foreach ($headers as $element) {
                echo "<th>" . $element . "</th>";
            }
            ?>
</tr>
 <!--
//************ ORIGINAL
/*
		<tr><th>Row</th><?php 
            //foreach($headers as $element) echo "<th>" . $element . "</th>";
            ?>
</tr>
*/
*/
//************ FI
-->
					<?php 
            $row++;
        } else {
            if (count($data) != $columns) {
                // if number of columns is not the same that columns in header
                echo '<script>alert("Row number: ' . $row . ' has no the same columns than header, we are going to skip");</script>';
                continue;
            }
            $username = $data[0];
            $password = $data[1];
            $email = $data[2];
            $user_id = 0;
            if (username_exists($username)) {
                //XTEC ************ AFEGIT - If username exists, do nothing
                //2015.03.17 @sarjona
                $errors .= sprintf(__('User %s already exists', 'import-users-from-csv-with-meta') . '<br/>', '\'' . $username . '\'');
                continue;
                //************ FI
                $user_object = get_user_by("login", $username);
                $user_id = $user_object->ID;
            } else {
                $user_id = wp_create_user($username, $password, $email);
            }
            if (is_wp_error($user_id)) {
                //XTEC ************ MODIFICAT - Added language supporting and changed to $errors to print them at the end
                //2015.03.17 @sarjona
                $errors .= sprintf(__('Problems with user %s. Skiping importation', 'import-users-from-csv-with-meta') . '<br/>', '\'' . $username . '\'');
                //************ ORIGINAL
                /*
                						echo '<script>alert("Problems with user: '******', we are going to skip");</script>';
                */
                //************ FI
                continue;
            }
            if (!(in_array("administrator", acui_get_roles($user_id), FALSE) || is_multisite() && is_super_admin($user_id))) {
                wp_update_user(array('ID' => $user_id, 'role' => $role));
            }
            if ($columns > 3) {
                for ($i = 3; $i < $columns; $i++) {
                    if (!empty($data)) {
                        if (in_array($headers[$i], $wp_users_fields)) {
                            wp_update_user(array('ID' => $user_id, $headers[$i] => $data[$i]));
                        } else {
                            update_user_meta($user_id, $headers[$i], $data[$i]);
                        }
                    }
                }
            }
            echo "<tr><td>" . ($row - 1) . "</td>";
            foreach ($data as $element) {
                echo "<td>{$element}</td>";
            }
            echo "</tr>\n";
            flush();
        }
        $row++;
    }
    ?>
			</table>
<!--//XTEC ************ AFEGIT - If username exists, do nothing
//2015.03.17 @sarjona -->
			<?php 
    // If there is no imported user, show message
    if ($row == 2) {
        echo '<br/>' . __('No user has been imported correctly', 'import-users-from-csv-with-meta');
    }
    // Show errors
    if (!empty($errors)) {
        ?>
					<h3><?php 
        _e('Not imported users', 'import-users-from-csv-with-meta');
        ?>
</h3>
			<?php 
        echo $errors;
    }
    ?>
<!--//************ FI -->
			<br/>
<!--
//XTEC ************ MODIFICAT - Added language supporting
//2015.03.30 @nacho
 -->
 <p><?php 
    _e('Process finished you can go', 'import-users-from-csv-with-meta');
    ?>
 <a href="<?php 
    echo get_admin_url() . '/users.php';
    ?>
"><?php 
    _e('here to see results', 'import-users-from-csv-with-meta');
    ?>
 </a></p>
 <!--
//************ ORIGINAL
/*
		<p>Process finished you can go <a href="<?php 
    //echo get_admin_url() . '/users.php';
    ?>
">here to see results </a></p>
*/
*/
//************ FI
-->
			<?php 
    //fclose($manager);
    ini_set('auto_detect_line_endings', FALSE);
    ?>
	</div>
<?php 
}