Initial commit
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
namespace FluentCrm\App\Http\Controllers;
|
||||
|
||||
use FluentCrm\App\Models\Subscriber;
|
||||
use FluentCrm\App\Services\Helper;
|
||||
use FluentCrm\App\Services\Sanitize;
|
||||
use FluentCrm\Framework\Support\Arr;
|
||||
use FluentCrm\Framework\Http\Request\Request;
|
||||
|
||||
/**
|
||||
* UsersController - REST API Handler Class
|
||||
*
|
||||
* REST API Handler
|
||||
*
|
||||
* @package FluentCrm\App\Http
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
class UsersController extends Controller
|
||||
{
|
||||
/**
|
||||
* Get all the users.
|
||||
* @param \FluentCrm\Framework\Http\Request\Request $request
|
||||
* @return \WP_REST_Response
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$roles = $request->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
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user