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 }