feat: add configurable role for Mahak-created users
Build plugin release / release (push) Successful in 5s
Build plugin release / release (push) Successful in 5s
This commit is contained in:
@@ -64,7 +64,20 @@ class AuthenticateController extends InvocableController
|
||||
$username .= '_'.wp_generate_password(4, false);
|
||||
}
|
||||
|
||||
$user_id = wp_create_user($username, $random_password, $email);
|
||||
$configured_role = sanitize_key((string) get_configured_option('new-user-role', 'wordpress_default'));
|
||||
|
||||
if ($configured_role === 'wordpress_default') {
|
||||
$configured_role = sanitize_key((string) get_option('default_role', 'subscriber'));
|
||||
}
|
||||
|
||||
$role = get_role($configured_role) === null ? 'subscriber' : $configured_role;
|
||||
$user_id = wp_insert_user([
|
||||
'user_login' => $username,
|
||||
'user_pass' => $random_password,
|
||||
'user_email' => $email,
|
||||
'display_name' => $name,
|
||||
'role' => $role,
|
||||
]);
|
||||
|
||||
if (is_wp_error($user_id)) {
|
||||
throw new RuntimeException(
|
||||
@@ -72,16 +85,8 @@ class AuthenticateController extends InvocableController
|
||||
);
|
||||
}
|
||||
|
||||
$updated_user_id = wp_update_user([
|
||||
'ID' => $user_id,
|
||||
'display_name' => $name,
|
||||
]);
|
||||
|
||||
if (is_wp_error($updated_user_id)) {
|
||||
throw new RuntimeException(
|
||||
'WordPress could not update the user: '.$updated_user_id->get_error_message()
|
||||
);
|
||||
}
|
||||
// Enforce the configured role after user_register callbacks from other plugins have completed.
|
||||
(new \WP_User($user_id))->set_role($role);
|
||||
|
||||
return $user_id;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,9 @@ class SettingsPageFormController extends InvocableController
|
||||
return (int) filter_var($value, FILTER_VALIDATE_BOOLEAN);
|
||||
};
|
||||
$args['default'] = 0;
|
||||
} elseif ($configured === 'new-user-role') {
|
||||
$args['sanitize_callback'] = fn ($value): string => $this->sanitize_new_user_role($value);
|
||||
$args['default'] = 'wordpress_default';
|
||||
}
|
||||
|
||||
register_setting(config('mahak.settings-group'), $options_key, $args);
|
||||
@@ -58,6 +61,14 @@ class SettingsPageFormController extends InvocableController
|
||||
config('mahak.section-id')
|
||||
);
|
||||
|
||||
add_settings_field(
|
||||
config('mahak.options.new-user-role'),
|
||||
config('mahak.translations.new-user-role'),
|
||||
fn () => $this->new_user_role(),
|
||||
config('mahak.settings-page'),
|
||||
config('mahak.section-id')
|
||||
);
|
||||
|
||||
add_settings_field(
|
||||
config('mahak.options.debug-mode'),
|
||||
config('mahak.translations.debug-mode'),
|
||||
@@ -130,4 +141,54 @@ class SettingsPageFormController extends InvocableController
|
||||
echo "<label><input type='checkbox' name='".esc_attr($name)."' value='1' ".checked($enabled, true, false).' /> ';
|
||||
echo esc_html(config('mahak.translations.debug-mode-description')).'</label>';
|
||||
}
|
||||
|
||||
public function new_user_role(): void
|
||||
{
|
||||
$name = config('mahak.options.new-user-role');
|
||||
$value = sanitize_key((string) get_option($name, 'wordpress_default'));
|
||||
$roles = wp_roles()->get_names();
|
||||
|
||||
if ($value !== 'wordpress_default' && !isset($roles[$value])) {
|
||||
$value = 'wordpress_default';
|
||||
}
|
||||
|
||||
echo "<select name='".esc_attr($name)."'>";
|
||||
$defaultRole = sanitize_key((string) get_option('default_role', 'subscriber'));
|
||||
$defaultRoleLabel = $roles[$defaultRole] ?? $defaultRole;
|
||||
$translatedDefaultRole = function_exists('translate_user_role')
|
||||
? translate_user_role($defaultRoleLabel)
|
||||
: $defaultRoleLabel;
|
||||
echo "<option value='wordpress_default' ".selected($value, 'wordpress_default', false).'>';
|
||||
echo esc_html(config('mahak.translations.wordpress-default-role').' — '.$translatedDefaultRole).'</option>';
|
||||
|
||||
foreach ($roles as $role => $label) {
|
||||
$translatedLabel = function_exists('translate_user_role') ? translate_user_role($label) : $label;
|
||||
echo "<option value='".esc_attr($role)."' ".selected($value, $role, false).'>';
|
||||
echo esc_html($translatedLabel).'</option>';
|
||||
}
|
||||
|
||||
echo '</select>';
|
||||
echo '<p class="description">'.esc_html(config('mahak.translations.new-user-role-description')).'</p>';
|
||||
}
|
||||
|
||||
public function sanitize_new_user_role($value): string
|
||||
{
|
||||
$role = sanitize_key((string) $value);
|
||||
|
||||
if ($role === 'wordpress_default') {
|
||||
return $role;
|
||||
}
|
||||
|
||||
if (get_role($role) !== null) {
|
||||
return $role;
|
||||
}
|
||||
|
||||
add_settings_error(
|
||||
config('mahak.options.new-user-role'),
|
||||
'mahak_invalid_new_user_role',
|
||||
'نقش انتخابشده معتبر نیست. نقش پیشفرض وردپرس استفاده شد.'
|
||||
);
|
||||
|
||||
return 'wordpress_default';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ return [
|
||||
'user-identifier' => 'mahak_user_identifier',
|
||||
'login-route' => 'mahak_login_route',
|
||||
'after-login-route' => 'mahak_after_login_route',
|
||||
'new-user-role' => 'mahak_new_user_role',
|
||||
'debug-mode' => 'mahak_debug_mode',
|
||||
],
|
||||
|
||||
@@ -38,6 +39,9 @@ return [
|
||||
'user-identifier' => 'فیلد شناسایی کاربر',
|
||||
'login-route' => 'مسیر لاگین ماهک',
|
||||
'after-login-route' => 'مسیر بعد از لاگین',
|
||||
'new-user-role' => 'نقش کاربر جدید',
|
||||
'wordpress-default-role' => 'پیشفرض وردپرس',
|
||||
'new-user-role-description' => 'در حالت پیشفرض وردپرس، نقش عمومی کاربران جدید استفاده میشود. نقش انتخابی دیگر فقط به کاربران ساختهشده توسط این افزونه اختصاص مییابد.',
|
||||
'debug-mode' => 'حالت اشکالزدایی',
|
||||
'debug-mode-description' => 'در صورت بروز خطا، جزئیات کامل فنی در صفحه نمایش داده شود. این گزینه را فقط هنگام عیبیابی فعال کنید.',
|
||||
|
||||
|
||||
Reference in New Issue
Block a user