add('empty_username', __('Error: Please enter a username.', 'fluent-community'));
} elseif (!validate_username($user_login)) {
$errors->add('invalid_username', __('Error: This username is invalid because it uses illegal characters. Please enter a valid username.', 'fluent-community'));
$sanitized_user_login = '';
} elseif (username_exists($sanitized_user_login)) {
$errors->add('username_exists', __('Error: This username is already registered. Please choose another one.', 'fluent-community'));
} else {
/** This filter is documented in wp-includes/user.php */
$illegal_user_logins = (array)apply_filters('illegal_user_logins', array());
if (in_array(strtolower($sanitized_user_login), array_map('strtolower', $illegal_user_logins), true)) {
$errors->add('invalid_username', __('Error: Sorry, that username is not allowed.', 'fluent-community'));
}
}
// Check the email address.
if ('' === $user_email) {
$errors->add('empty_email', __('Error: Please type your email address.', 'fluent-community'));
} elseif (!is_email($user_email)) {
$errors->add('invalid_email', __('Error: The email address is not correct.', 'fluent-community'));
$user_email = '';
} elseif (email_exists($user_email)) {
$errors->add(
'email_exists',
__('Error: This email address is already registered. Please login or try resetting your password.', 'fluent-community')
);
}
do_action('register_post', $sanitized_user_login, $user_email, $errors);
$errors = apply_filters('registration_errors', $errors, $sanitized_user_login, $user_email);
if ($errors->has_errors()) {
return $errors;
}
if (!$user_pass) {
$user_pass = wp_generate_password(8, false);
}
$data = [
'user_login' => wp_slash($sanitized_user_login),
'user_email' => wp_slash($user_email),
'user_pass' => $user_pass
];
if (!empty($extraData['first_name'])) {
$data['first_name'] = sanitize_text_field($extraData['first_name']);
}
if (!empty($extraData['last_name'])) {
$data['last_name'] = sanitize_text_field($extraData['last_name']);
}
if (!empty($extraData['full_name']) && empty($extraData['first_name']) && empty($extraData['last_name'])) {
$extraData['full_name'] = sanitize_text_field($extraData['full_name']);
// extract the names
$fullNameArray = explode(' ', $extraData['full_name']);
$data['first_name'] = array_shift($fullNameArray);
if ($fullNameArray) {
$data['last_name'] = implode(' ', $fullNameArray);
} else {
$data['last_name'] = '';
}
}
if (!empty($extraData['description'])) {
$data['description'] = sanitize_textarea_field($extraData['description']);
}
if (!empty($extraData['user_url']) && filter_var($extraData['user_url'], FILTER_VALIDATE_URL)) {
$data['user_url'] = sanitize_url($extraData['user_url']);
}
if (!empty($extraData['role'])) {
$data['role'] = $extraData['role'];
}
$user_id = wp_insert_user($data);
if (!$user_id || is_wp_error($user_id)) {
$errors->add('registerfail', __('Error: Could not register you. Please contact the site admin!', 'fluent-community')
);
return $errors;
}
if (!empty($_COOKIE['wp_lang'])) {
$wp_lang = sanitize_text_field($_COOKIE['wp_lang']);
if (in_array($wp_lang, get_available_languages(), true)) {
update_user_meta($user_id, 'locale', $wp_lang); // Set user locale if defined on registration.
}
}
do_action('register_new_user', $user_id);
return $user_id;
}
public static function makeLogin($user)
{
wp_clear_auth_cookie();
wp_set_current_user($user->ID, $user->user_login);
wp_set_auth_cookie($user->ID, true, is_ssl());
$user = get_user_by('ID', $user->ID);
if ($user) {
do_action('wp_login', $user->user_login, $user);
}
return $user;
}
public static function invite($inviatationData)
{
// Validate the data
if (empty($inviatationData['email']) || !is_email($inviatationData['email'])) {
return new \WP_Error('email_required', __('Email is required', 'fluent-community'));
}
if (empty($inviatationData['user_id'])) {
return new \WP_Error('user_id_required', __('User ID is required', 'fluent-community'));
}
$spaceId = (int)Arr::get($inviatationData, 'space_id');
$inviteeUser = get_user_by('email', $inviatationData['email']);
if ($inviteeUser) {
if (empty($spaceId)) {
return new \WP_Error('user_exist', __('User already exists.', 'fluent-community'));
}
if ($spaceId) {
// Let's check if the user is already a member of the space
$spaceUser = SpaceUserPivot::where('user_id', $inviteeUser->ID)
->where('space_id', $spaceId)
->first();
if ($spaceUser) {
return new \WP_Error('user_exist', __('User already exists in the space.', 'fluent-community'));
}
}
}
// Check if the user already invited the same email
$exist = Invitation::where('message', $inviatationData['email'])
->when($spaceId, function ($query) use ($spaceId) {
return $query->where('post_id', $spaceId);
})
->where('user_id', $inviatationData['user_id'])
->first();
if ($exist) {
return new \WP_Error('invitation_exist', __('You have already invited this user', 'fluent-community'));
}
$formattedData = array_filter([
'message' => $inviatationData['email'],
'user_id' => $inviatationData['user_id'],
'status' => 'pending',
'post_id' => $spaceId,
'message_rendered' => md5($inviatationData['email'] . '_' . time() . '_' . wp_generate_uuid4(10) . '_' . $inviatationData['user_id']),
'meta' => [
'invitee_name' => sanitize_text_field(Arr::get($inviatationData, 'invitee_name'))
]
]);
$inviation = Invitation::create($formattedData);
do_action('fluent_community/invitation_created', $inviation);
return $inviation;
}
public static function sendInvitationEmail(Invitation $invitation)
{
$xProfile = $invitation->xprofile;
if (!$xProfile) {
return new \WP_Error('xprofile_not_found', __('XProfile not found', 'fluent-community'));
}
$portalSettings = Helper::generalSettings();
$subject = \sprintf(
__('%1$s has invited you to join the %2$s', 'fluent-community'),
$xProfile->display_name,
Arr::get($portalSettings, 'site_title')
);
if ($invitation->post_id) {
$space = $invitation->space;
if ($space) {
$subject = \sprintf(
__('%1$s has invited you to join the %2$s on %3$s', 'fluent-community'),
$xProfile->display_name,
$space->title,
Arr::get($portalSettings, 'site_title')
);
}
}
$emailBody = self::getInviationEmailHtml($invitation);
$invitation->reactions_count += 1;
$invitation->save();
$mailer = new Mailer($invitation->message, $subject, $emailBody);
return $mailer->send();
}
private static function getInviationEmailHtml(Invitation $invitation)
{
$portalSettings = Helper::generalSettings();
$siteTitle = Arr::get($portalSettings, 'site_title');
if ($invitation->space) {
$siteTitle = \sprintf(__('%1$s on %2$s', 'fluent-community'), $invitation->space->title, $siteTitle);
}
return (string)App::make('view')->make('email.Default._invitation', [
'by_name' => $invitation->xprofile->display_name,
'by_email' => $invitation->user->user_email,
'site_title' => $siteTitle,
'access_url' => $invitation->getAccessUrl(),
'invitee_name' => Arr::get($invitation->meta, 'invitee_name', 'there')
]);
}
}