getSafe('roles', 'sanitize_text_field', []); $limit = $request->limit ?: 5; $fields = $request->fields ?: ['ID', 'display_name', 'user_email']; $userQuery = new \WP_User_Query([ 'role__in' => $roles, 'number' => $limit, 'fields' => $fields, ]); $users = $userQuery->get_results(); $total = $userQuery->get_total(); return $this->send([ 'users' => $users, 'total' => $total ]); } public function import(Request $request) { $inputs = $request->only([ 'map', 'tags', 'lists', 'roles', 'update', 'new_status', 'double_optin_email', 'import_silently' ]); /** * Filter the number of subscribers to process per request while importing users in FluentCRM. * * This filter allows you to modify the number of subscribers that are processed * in a single request when processing subscribers in FluentCRM. * * @param int $limit The number of subscribers to process per request. Default is 100. */ $limit = apply_filters('fluent_crm/process_subscribers_per_request', 100); $page = absint($request->get('page', 1)); $userQuery = new \WP_User_Query([ 'role__in' => Arr::get($inputs, 'roles', []), 'number' => $limit, 'offset' => ($page - 1) * $limit ]); if (Arr::get($inputs, 'import_silently') == 'yes') { if(!defined('FLUENTCRM_DISABLE_TAG_LIST_EVENTS')) { define('FLUENTCRM_DISABLE_TAG_LIST_EVENTS', true); } } $total = $userQuery->get_total(); $users = $userQuery->get_results(); if($users) { $this->processUsers($users, $inputs); } $hasRecords = !!count($users); return $this->sendSuccess([ 'message' => __('Processing', 'fluent-crm'), 'page_total' => ceil($total / $limit), 'record_total' => $total, 'has_more' => $hasRecords, 'current_page' => $page, 'next_page' => $page + 1 ]); } private function processUsers($users, $inputs) { $subscribers = []; foreach ($users as $user) { $subscriber = Helper::getWPMapUserInfo($user); $subscriber['source'] = 'wp_users'; if ($subscriber['email']) { $subscribers[] = Sanitize::contact($subscriber); } } $sendDoubleOptin = Arr::get($inputs, 'double_optin_email') == 'yes'; return Subscriber::import( $subscribers, Arr::get($inputs, 'tags', []), Arr::get($inputs, 'lists', []), Arr::get($inputs, 'update'), Arr::get($inputs, 'new_status'), $sendDoubleOptin ); } public function roles() { if (!function_exists('get_editable_roles')) { require_once(ABSPATH . '/wp-admin/includes/user.php'); } $roles = \get_editable_roles(); return [ 'roles' => $roles ]; } }