diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module index aef6209..8ab8070 100644 --- a/core/modules/comment/comment.module +++ b/core/modules/comment/comment.module @@ -1704,7 +1704,7 @@ function comment_preview(Comment $comment) { $comment->picture = $account->picture; } elseif (empty($comment->name)) { - $comment->name = variable_get('anonymous', t('Anonymous')); + $comment->name = config('user.settings')->get('anonymous'); } $comment->created = !empty($comment->created) ? $comment->created : REQUEST_TIME; @@ -1839,7 +1839,7 @@ function theme_comment_post_forbidden($variables) { $destination = array('destination' => "node/$node->nid#comment-form"); } - if (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)) { + if (config('user.settings')->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY) { // Users can register themselves. return t('Log in or register to post comments', array('@login' => url('user/login', array('query' => $destination)), '@register' => url('user/register', array('query' => $destination)))); } diff --git a/core/modules/comment/comment.tokens.inc b/core/modules/comment/comment.tokens.inc index f4a401d..318c1b6 100644 --- a/core/modules/comment/comment.tokens.inc +++ b/core/modules/comment/comment.tokens.inc @@ -131,7 +131,7 @@ function comment_tokens($type, $tokens, array $data = array(), array $options = break; case 'name': - $name = ($comment->uid == 0) ? variable_get('anonymous', t('Anonymous')) : $comment->name; + $name = ($comment->uid == 0) ? config('user.settings')->get('anonymous') : $comment->name; $replacements[$original] = $sanitize ? filter_xss($name) : $name; break; diff --git a/core/modules/comment/lib/Drupal/comment/CommentFormController.php b/core/modules/comment/lib/Drupal/comment/CommentFormController.php index 9b3094e..f0f16c2 100644 --- a/core/modules/comment/lib/Drupal/comment/CommentFormController.php +++ b/core/modules/comment/lib/Drupal/comment/CommentFormController.php @@ -85,7 +85,7 @@ class CommentFormController extends EntityFormController { '#default_value' => $author, '#maxlength' => 60, '#size' => 30, - '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))), + '#description' => t('Leave blank for %anonymous.', array('%anonymous' => config('user.settings')->get('anonymous'))), '#autocomplete_path' => 'user/autocomplete', ); } @@ -284,7 +284,7 @@ class CommentFormController extends EntityFormController { // If the comment was posted by an anonymous user and no author name was // required, use "Anonymous" by default. if ($comment->is_anonymous && (!isset($comment->name) || $comment->name === '')) { - $comment->name = variable_get('anonymous', t('Anonymous')); + $comment->name = config('user.settings')->get('anonymous'); } // Validate the comment's subject. If not specified, extract from comment diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentAnonymousTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentAnonymousTest.php index 5181e32..21a2944 100644 --- a/core/modules/comment/lib/Drupal/comment/Tests/CommentAnonymousTest.php +++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentAnonymousTest.php @@ -21,7 +21,7 @@ class CommentAnonymousTest extends CommentTestBase { function setUp() { parent::setUp(); - variable_set('user_register', USER_REGISTER_VISITORS); + config('user.settings')->set('register', USER_REGISTER_VISITORS)->save(); } /** diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentInterfaceTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentInterfaceTest.php index 2c324e2..e122141 100644 --- a/core/modules/comment/lib/Drupal/comment/Tests/CommentInterfaceTest.php +++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentInterfaceTest.php @@ -369,7 +369,7 @@ class CommentInterfaceTest extends CommentTestBase { $this->assertEqual($node->comment_count, 1, t('The value of node comment_count is 1.')); // Prepare for anonymous comment submission (comment approval enabled). - variable_set('user_register', USER_REGISTER_VISITORS); + config('user.settings')->set('register', USER_REGISTER_VISITORS)->save(); $this->drupalLogin($this->admin_user); user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array( 'access comments' => TRUE, @@ -556,7 +556,7 @@ class CommentInterfaceTest extends CommentTestBase { } // Change user settings. - variable_set('user_register', $info['user_register']); + config('user.settings')->set('register', $info['user_register'])->save(); // Change user permissions. $rid = ($this->loggedInUser ? DRUPAL_AUTHENTICATED_RID : DRUPAL_ANONYMOUS_RID); @@ -648,7 +648,7 @@ class CommentInterfaceTest extends CommentTestBase { if (!$this->loggedInUser) { if (user_access('post comments', $this->web_user)) { // The note depends on whether users are actually able to register. - if ($info['user_register']) { + if ($info['user_register'] != USER_REGISTER_ADMINISTRATORS_ONLY) { $this->assertText('Log in or register to post comments'); } else { diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentPreviewTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentPreviewTest.php index e6eef56..10dc207 100644 --- a/core/modules/comment/lib/Drupal/comment/Tests/CommentPreviewTest.php +++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentPreviewTest.php @@ -35,7 +35,7 @@ class CommentPreviewTest extends CommentTestBase { // Login as web user and add a signature and a user picture. $this->drupalLogin($this->web_user); - variable_set('user_signatures', 1); + config('user.settings')->set('signatures', 1)->save(); variable_set('user_pictures', 1); $test_signature = $this->randomName(); $edit['signature[value]'] = '' . $test_signature. ''; diff --git a/core/modules/filter/filter.admin.inc b/core/modules/filter/filter.admin.inc index 40a5eab..e441cb1 100644 --- a/core/modules/filter/filter.admin.inc +++ b/core/modules/filter/filter.admin.inc @@ -154,7 +154,7 @@ function filter_admin_format_form($form, &$form_state, $format) { // If editing an existing text format, pre-select its current permissions. $form['roles']['#default_value'] = array_keys(filter_get_roles_by_format($format)); } - elseif ($admin_role = variable_get('user_admin_role', 0)) { + elseif ($admin_role = config('user.settings')->get('admin_role')) { // If adding a new text format and the site has an administrative role, // pre-select that role so as to grant administrators access to the new // text format permission by default. diff --git a/core/modules/node/lib/Drupal/node/NodeFormController.php b/core/modules/node/lib/Drupal/node/NodeFormController.php index c5763e8..51f4308 100644 --- a/core/modules/node/lib/Drupal/node/NodeFormController.php +++ b/core/modules/node/lib/Drupal/node/NodeFormController.php @@ -54,6 +54,7 @@ class NodeFormController extends EntityFormController { * Overrides Drupal\entity\EntityFormController::form(). */ public function form(array $form, array &$form_state, EntityInterface $node) { + $user_config = config('user.settings'); // Some special stuff when previewing a node. if (isset($form_state['node_preview'])) { $form['#prefix'] = $form_state['node_preview']; @@ -171,7 +172,7 @@ class NodeFormController extends EntityFormController { drupal_get_path('module', 'node') . '/node.js', array( 'type' => 'setting', - 'data' => array('anonymous' => variable_get('anonymous', t('Anonymous'))), + 'data' => array('anonymous' => $user_config->get('anonymous')), ), ), ), @@ -185,7 +186,7 @@ class NodeFormController extends EntityFormController { '#autocomplete_path' => 'user/autocomplete', '#default_value' => !empty($node->name) ? $node->name : '', '#weight' => -1, - '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))), + '#description' => t('Leave blank for %anonymous.', array('%anonymous' => $user_config->get('anonymous'))), ); $form['author']['date'] = array( diff --git a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php index c46676d..422c07a 100644 --- a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php +++ b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php @@ -31,14 +31,14 @@ class OpenIDRegistrationTest extends OpenIDTestBase { function setUp() { parent::setUp(); - variable_set('user_register', USER_REGISTER_VISITORS); + config('user.settings')->set('register', USER_REGISTER_VISITORS)->save(); } /** * Test OpenID auto-registration with e-mail verification enabled. */ function testRegisterUserWithEmailVerification() { - variable_set('user_email_verification', TRUE); + config('user.settings')->set('verify_mail', TRUE)->save(); variable_get('configurable_timezones', 1); variable_set('date_default_timezone', 'Europe/Brussels'); @@ -95,7 +95,7 @@ class OpenIDRegistrationTest extends OpenIDTestBase { * Test OpenID auto-registration with e-mail verification disabled. */ function testRegisterUserWithoutEmailVerification() { - variable_set('user_email_verification', FALSE); + config('user.settings')->set('verify_mail', FALSE)->save(); variable_get('configurable_timezones', 1); variable_set('date_default_timezone', 'Europe/Brussels'); @@ -227,7 +227,7 @@ class OpenIDRegistrationTest extends OpenIDTestBase { * but no SREG. */ function testRegisterUserWithAXButNoSREG() { - variable_set('user_email_verification', FALSE); + config('user.settings')->set('verify_mail', FALSE)->save(); variable_set('date_default_timezone', 'Europe/Brussels'); // Tell openid_test.module to respond with these AX fields. diff --git a/core/modules/openid/openid.module b/core/modules/openid/openid.module index 5098216..51d3f5c 100644 --- a/core/modules/openid/openid.module +++ b/core/modules/openid/openid.module @@ -86,7 +86,7 @@ function openid_help($path, $arg) { function openid_user_insert($account) { if (!empty($account->openid_claimed_id)) { // The user has registered after trying to log in via OpenID. - if (variable_get('user_email_verification', TRUE)) { + if (config('user.settings')->get('verify_mail')) { drupal_set_message(t('Once you have verified your e-mail address, you may log in via OpenID.')); } user_set_authmaps($account, array('authname_openid' => $account->openid_claimed_id)); @@ -216,9 +216,9 @@ function openid_form_user_register_form_alter(&$form, &$form_state) { $form['account']['mail']['#default_value'] = current($ax_mail_values); } - // If user_email_verification is off, hide the password field and just fill + // If email verification is off, hide the password field and just fill // with random password to avoid confusion. - if (!variable_get('user_email_verification', TRUE)) { + if (!config('user.settings')->get('verify_mail')) { $form['account']['pass']['#type'] = 'hidden'; $form['account']['pass']['#value'] = user_password(); } @@ -709,7 +709,7 @@ function openid_authentication($response) { $account = user_external_load($identity); if (isset($account->uid)) { - if (!variable_get('user_email_verification', TRUE) || $account->login) { + if (!config('user.settings')->get('verify_mail') || $account->login) { // Check if user is blocked. $state['values']['name'] = $account->name; user_login_name_validate(array(), $state); @@ -725,7 +725,7 @@ function openid_authentication($response) { // Let other modules act on OpenID login module_invoke_all('openid_response', $response, $account); } - elseif (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)) { + elseif (config('user.settings')->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY) { // Register new user. // Save response for use in openid_form_user_register_form_alter(). diff --git a/core/modules/shortcut/shortcut.api.php b/core/modules/shortcut/shortcut.api.php index 717a7c9..2fcbdc9 100644 --- a/core/modules/shortcut/shortcut.api.php +++ b/core/modules/shortcut/shortcut.api.php @@ -32,7 +32,7 @@ */ function hook_shortcut_default_set($account) { // Use a special set of default shortcuts for administrators only. - if (in_array(variable_get('user_admin_role', 0), $account->roles)) { + if (in_array(config('user.settings')->get('admin_role'), $account->roles)) { return variable_get('mymodule_shortcut_admin_default_set'); } } diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Tests/BrowserTest.php b/core/modules/simpletest/lib/Drupal/simpletest/Tests/BrowserTest.php index 7e2beca..e976a48 100644 --- a/core/modules/simpletest/lib/Drupal/simpletest/Tests/BrowserTest.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/Tests/BrowserTest.php @@ -23,7 +23,7 @@ class BrowserTest extends WebTestBase { function setUp() { parent::setUp(); - variable_set('user_register', USER_REGISTER_VISITORS); + config('user.settings')->set('register', USER_REGISTER_VISITORS)->save(); } /** diff --git a/core/modules/system/lib/Drupal/system/Tests/Form/ArbitraryRebuildTest.php b/core/modules/system/lib/Drupal/system/Tests/Form/ArbitraryRebuildTest.php index 824f829..3e39788 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Form/ArbitraryRebuildTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Form/ArbitraryRebuildTest.php @@ -52,7 +52,7 @@ class ArbitraryRebuildTest extends WebTestBase { ), ); field_create_instance($instance); - variable_set('user_register', USER_REGISTER_VISITORS); + config('user.settings')->set('register', USER_REGISTER_VISITORS)->save(); } /** diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php index 1333429..9554463 100644 --- a/core/modules/system/system.api.php +++ b/core/modules/system/system.api.php @@ -3783,7 +3783,7 @@ function hook_tokens($type, $tokens, array $data = array(), array $options = arr // Default values for the chained tokens handled below. case 'author': - $name = ($node->uid == 0) ? variable_get('anonymous', t('Anonymous')) : $node->name; + $name = ($node->uid == 0) ? config('user.settings')->get('anonymous') : $node->name; $replacements[$original] = $sanitize ? filter_xss($name) : $name; break; diff --git a/core/modules/user/config/user.settings.yml b/core/modules/user/config/user.settings.yml new file mode 100644 index 0000000..528395f --- /dev/null +++ b/core/modules/user/config/user.settings.yml @@ -0,0 +1,14 @@ +admin_role: '' +anonymous: Anonymous +verify_mail: '1' +notify: + cancel_confirm: '1' + password_reset: '1' + status_activated: '1' + status_blocked: '0' + status_cancelled: '0' + register_admin_created: '1' + register_no_approval_required: '1' + register_pending_approval: '1' +register: visitors +signatures: '0' diff --git a/core/modules/user/lib/Drupal/user/AccountFormController.php b/core/modules/user/lib/Drupal/user/AccountFormController.php index 31ca843..2c6f182 100644 --- a/core/modules/user/lib/Drupal/user/AccountFormController.php +++ b/core/modules/user/lib/Drupal/user/AccountFormController.php @@ -20,6 +20,7 @@ abstract class AccountFormController extends EntityFormController { */ public function form(array $form, array &$form_state, EntityInterface $account) { global $user; + $config = config('user.settings'); $language_interface = language(LANGUAGE_TYPE_INTERFACE); $register = empty($account->uid); @@ -101,7 +102,7 @@ abstract class AccountFormController extends EntityFormController { $form['#validate'][] = 'user_validate_current_pass'; } } - elseif (!variable_get('user_email_verification', TRUE) || $admin) { + elseif (!$config->get('verify_mail') || $admin) { $form['account']['pass'] = array( '#type' => 'password_confirm', '#size' => 25, @@ -114,7 +115,7 @@ abstract class AccountFormController extends EntityFormController { $status = isset($account->status) ? $account->status : 1; } else { - $status = $register ? variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) == USER_REGISTER_VISITORS : $account->status; + $status = $register ? $config->get('register') == USER_REGISTER_VISITORS : $account->status; } $form['account']['status'] = array( @@ -159,7 +160,7 @@ abstract class AccountFormController extends EntityFormController { '#type' => 'fieldset', '#title' => t('Signature settings'), '#weight' => 1, - '#access' => (!$register && variable_get('user_signatures', 0)), + '#access' => (!$register && $config->get('signatures')), ); $form['signature_settings']['signature'] = array( diff --git a/core/modules/user/lib/Drupal/user/RegisterFormController.php b/core/modules/user/lib/Drupal/user/RegisterFormController.php index 84134b7..77aa58b 100644 --- a/core/modules/user/lib/Drupal/user/RegisterFormController.php +++ b/core/modules/user/lib/Drupal/user/RegisterFormController.php @@ -74,7 +74,7 @@ class RegisterFormController extends AccountFormController { public function submit(array $form, array &$form_state) { $admin = $form_state['values']['administer_users']; - if (!variable_get('user_email_verification', TRUE) || $admin) { + if (!config('user.settings')->get('verify_mail') || $admin) { $pass = $form_state['values']['pass']; } else { @@ -121,7 +121,7 @@ class RegisterFormController extends AccountFormController { drupal_set_message(t('Created a new user account for %name. No e-mail has been sent.', array('@url' => url($uri['path'], $uri['options']), '%name' => $account->name))); } // No e-mail verification required; log in user immediately. - elseif (!$admin && !variable_get('user_email_verification', TRUE) && $account->status) { + elseif (!$admin && !config('user.settings')->get('verify_mail') && $account->status) { _user_mail_notify('register_no_approval_required', $account); $form_state['uid'] = $account->uid; user_login_submit(array(), $form_state); diff --git a/core/modules/user/lib/Drupal/user/Tests/UserCancelTest.php b/core/modules/user/lib/Drupal/user/Tests/UserCancelTest.php index 68c9e94..0d12cff 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserCancelTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserCancelTest.php @@ -250,7 +250,7 @@ class UserCancelTest extends WebTestBase { $this->drupalGet('user/' . $account->uid . '/edit'); $this->drupalPost(NULL, NULL, t('Cancel account')); $this->assertText(t('Are you sure you want to cancel your account?'), t('Confirmation form to cancel account displayed.')); - $this->assertRaw(t('Your account will be removed and all account information deleted. All of your content will be assigned to the %anonymous-name user.', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')))), t('Informs that all content will be attributed to anonymous account.')); + $this->assertRaw(t('Your account will be removed and all account information deleted. All of your content will be assigned to the %anonymous-name user.', array('%anonymous-name' => config('user.settings')->get('anonymous'))), t('Informs that all content will be attributed to anonymous account.')); // Confirm account cancellation. $timestamp = time(); diff --git a/core/modules/user/lib/Drupal/user/Tests/UserEditedOwnAccountTest.php b/core/modules/user/lib/Drupal/user/Tests/UserEditedOwnAccountTest.php index d7d3bb2..e06298f 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserEditedOwnAccountTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserEditedOwnAccountTest.php @@ -25,7 +25,7 @@ class UserEditedOwnAccountTest extends WebTestBase { function testUserEditedOwnAccount() { // Change account setting 'Who can register accounts?' to Administrators // only. - variable_set('user_register', USER_REGISTER_ADMINISTRATORS_ONLY); + config('user.settings')->set('register', USER_REGISTER_ADMINISTRATORS_ONLY)->save(); // Create a new user account and log in. $account = $this->drupalCreateUser(array('change own username')); diff --git a/core/modules/user/lib/Drupal/user/Tests/UserEntityCallbacksTest.php b/core/modules/user/lib/Drupal/user/Tests/UserEntityCallbacksTest.php index a631620..13eb006 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserEntityCallbacksTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserEntityCallbacksTest.php @@ -44,7 +44,7 @@ class UserEntityCallbacksTest extends WebTestBase { // Setup a random anonymous name to be sure the name is used. $name = $this->randomName(); - variable_set('anonymous', $name); + config('user.settings')->set('anonymous', $name)->save(); $this->assertEqual($this->anonymous->label(), $name, t('The variable anonymous should be used for name of uid 0')); } diff --git a/core/modules/user/lib/Drupal/user/Tests/UserLanguageCreationTest.php b/core/modules/user/lib/Drupal/user/Tests/UserLanguageCreationTest.php index 37ffef7..d611b57 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserLanguageCreationTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserLanguageCreationTest.php @@ -31,8 +31,7 @@ class UserLanguageCreationTest extends WebTestBase { function setUp() { parent::setUp(); - - variable_set('user_register', USER_REGISTER_VISITORS); + config('user.settings')->set('register', USER_REGISTER_VISITORS)->save(); } /** diff --git a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php index fb13f52..d89192f 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php @@ -27,16 +27,17 @@ class UserRegistrationTest extends WebTestBase { } function testRegistrationWithEmailVerification() { + $config = config('user.settings'); // Require e-mail verification. - variable_set('user_email_verification', TRUE); + $config->set('verify_mail', TRUE)->save(); // Set registration to administrator only. - variable_set('user_register', USER_REGISTER_ADMINISTRATORS_ONLY); + $config->set('register', USER_REGISTER_ADMINISTRATORS_ONLY)->save(); $this->drupalGet('user/register'); $this->assertResponse(403, t('Registration page is inaccessible when only administrators can create accounts.')); // Allow registration by site visitors without administrator approval. - variable_set('user_register', USER_REGISTER_VISITORS); + $config->set('register', USER_REGISTER_VISITORS)->save(); $edit = array(); $edit['name'] = $name = $this->randomName(); $edit['mail'] = $mail = $edit['name'] . '@example.com'; @@ -47,7 +48,7 @@ class UserRegistrationTest extends WebTestBase { $this->assertTrue($new_user->status, t('New account is active after registration.')); // Allow registration by site visitors, but require administrator approval. - variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL); + $config->set('register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)->save(); $edit = array(); $edit['name'] = $name = $this->randomName(); $edit['mail'] = $mail = $edit['name'] . '@example.com'; @@ -59,11 +60,14 @@ class UserRegistrationTest extends WebTestBase { } function testRegistrationWithoutEmailVerification() { - // Don't require e-mail verification. - variable_set('user_email_verification', FALSE); + $config = config('user.settings'); + // Don't require e-mail verification and allow registration by site visitors + // without administrator approval. + $config + ->set('verify_mail', FALSE) + ->set('register', USER_REGISTER_VISITORS) + ->save(); - // Allow registration by site visitors without administrator approval. - variable_set('user_register', USER_REGISTER_VISITORS); $edit = array(); $edit['name'] = $name = $this->randomName(); $edit['mail'] = $mail = $edit['name'] . '@example.com'; @@ -85,7 +89,7 @@ class UserRegistrationTest extends WebTestBase { $this->drupalLogout(); // Allow registration by site visitors, but require administrator approval. - variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL); + $config->set('register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)->save(); $edit = array(); $edit['name'] = $name = $this->randomName(); $edit['mail'] = $mail = $edit['name'] . '@example.com'; @@ -119,11 +123,12 @@ class UserRegistrationTest extends WebTestBase { } function testRegistrationEmailDuplicates() { - // Don't require e-mail verification. - variable_set('user_email_verification', FALSE); - - // Allow registration by site visitors without administrator approval. - variable_set('user_register', USER_REGISTER_VISITORS); + // Don't require e-mail verification and allow registration by site visitors + // without administrator approval. + config('user.settings') + ->set('verify_mail', FALSE) + ->set('register', USER_REGISTER_VISITORS) + ->save(); // Set up a user to check for duplicates. $duplicate_user = $this->drupalCreateUser(); @@ -144,11 +149,13 @@ class UserRegistrationTest extends WebTestBase { } function testRegistrationDefaultValues() { - // Allow registration by site visitors without administrator approval. - variable_set('user_register', USER_REGISTER_VISITORS); - - // Don't require e-mail verification. - variable_set('user_email_verification', FALSE); + $config = config('user.settings'); + // Don't require e-mail verification and allow registration by site visitors + // without administrator approval. + $config + ->set('verify_mail', FALSE) + ->set('register', USER_REGISTER_VISITORS) + ->save(); // Set the default timezone to Brussels. variable_set('configurable_timezones', 1); @@ -174,7 +181,7 @@ class UserRegistrationTest extends WebTestBase { $this->assertEqual($new_user->theme, '', t('Correct theme field.')); $this->assertEqual($new_user->signature, '', t('Correct signature field.')); $this->assertTrue(($new_user->created > REQUEST_TIME - 20 ), t('Correct creation time.')); - $this->assertEqual($new_user->status, variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) == USER_REGISTER_VISITORS ? 1 : 0, t('Correct status field.')); + $this->assertEqual($new_user->status, $config->get('register') == USER_REGISTER_VISITORS ? 1 : 0, t('Correct status field.')); $this->assertEqual($new_user->timezone, variable_get('date_default_timezone'), t('Correct time zone field.')); $this->assertEqual($new_user->langcode, language_default()->langcode, t('Correct language field.')); $this->assertEqual($new_user->preferred_langcode, language_default()->langcode, t('Correct preferred language field.')); diff --git a/core/modules/user/lib/Drupal/user/Tests/UserSignatureTest.php b/core/modules/user/lib/Drupal/user/Tests/UserSignatureTest.php index d218b5f..9ed88ca 100644 --- a/core/modules/user/lib/Drupal/user/Tests/UserSignatureTest.php +++ b/core/modules/user/lib/Drupal/user/Tests/UserSignatureTest.php @@ -33,7 +33,7 @@ class UserSignatureTest extends WebTestBase { parent::setUp(); // Enable user signatures. - variable_set('user_signatures', 1); + config('user.settings')->set('signatures', 1)->save(); // Create Basic page node type. $this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page')); diff --git a/core/modules/user/user.admin.inc b/core/modules/user/user.admin.inc index fac9723..2268ae1 100644 --- a/core/modules/user/user.admin.inc +++ b/core/modules/user/user.admin.inc @@ -258,9 +258,10 @@ function user_admin_account_validate($form, &$form_state) { * Form builder; Configure user settings for this site. * * @ingroup forms - * @see system_settings_form() + * @see user_admin_settings_submit() */ -function user_admin_settings() { +function user_admin_settings($form, &$form_state) { + $config = config('user.settings'); // Settings for anonymous users. $form['anonymous_settings'] = array( '#type' => 'fieldset', @@ -269,7 +270,7 @@ function user_admin_settings() { $form['anonymous_settings']['anonymous'] = array( '#type' => 'textfield', '#title' => t('Name'), - '#default_value' => variable_get('anonymous', t('Anonymous')), + '#default_value' => $config->get('anonymous'), '#description' => t('The name used to indicate anonymous users.'), '#required' => TRUE, ); @@ -290,7 +291,7 @@ function user_admin_settings() { $form['admin_role']['user_admin_role'] = array( '#type' => 'select', '#title' => t('Administrator role'), - '#default_value' => variable_get('user_admin_role', 0), + '#default_value' => $config->get('admin_role'), '#options' => $roles, '#description' => t('This role will be automatically assigned new permissions whenever a module is enabled. Changing this setting will not affect existing permissions.'), ); @@ -303,7 +304,7 @@ function user_admin_settings() { $form['registration_cancellation']['user_register'] = array( '#type' => 'radios', '#title' => t('Who can register accounts?'), - '#default_value' => variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL), + '#default_value' => $config->get('register'), '#options' => array( USER_REGISTER_ADMINISTRATORS_ONLY => t('Administrators only'), USER_REGISTER_VISITORS => t('Visitors'), @@ -313,7 +314,7 @@ function user_admin_settings() { $form['registration_cancellation']['user_email_verification'] = array( '#type' => 'checkbox', '#title' => t('Require e-mail verification when a visitor creates an account.'), - '#default_value' => variable_get('user_email_verification', TRUE), + '#default_value' => $config->get('verify_mail'), '#description' => t('New users will be required to validate their e-mail address prior to logging into the site, and will be assigned a system-generated password. With this setting disabled, users will be logged in immediately upon registering, and may select their own passwords during registration.') ); module_load_include('inc', 'user', 'user.pages'); @@ -343,7 +344,7 @@ function user_admin_settings() { $form['personalization']['user_signatures'] = array( '#type' => 'checkbox', '#title' => t('Enable signatures.'), - '#default_value' => variable_get('user_signatures', 0), + '#default_value' => $config->get('signatures'), ); // If picture support is enabled, check whether the picture directory exists. if (variable_get('user_pictures', 0)) { @@ -433,7 +434,7 @@ function user_admin_settings() { '#type' => 'fieldset', '#title' => t('Welcome (new user created by administrator)'), '#collapsible' => TRUE, - '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_ADMINISTRATORS_ONLY), + '#collapsed' => ($config->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY), '#description' => t('Edit the welcome e-mail messages sent to new member accounts created by an administrator.') . ' ' . $email_token_help, '#group' => 'email', ); @@ -454,7 +455,7 @@ function user_admin_settings() { '#type' => 'fieldset', '#title' => t('Welcome (awaiting approval)'), '#collapsible' => TRUE, - '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL), + '#collapsed' => ($config->get('register') != USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL), '#description' => t('Edit the welcome e-mail messages sent to new members upon registering, when administrative approval is required.') . ' ' . $email_token_help, '#group' => 'email', ); @@ -475,7 +476,7 @@ function user_admin_settings() { '#type' => 'fieldset', '#title' => t('Welcome (no approval required)'), '#collapsible' => TRUE, - '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_VISITORS), + '#collapsed' => ($config->get('register') != USER_REGISTER_VISITORS), '#description' => t('Edit the welcome e-mail messages sent to new members upon registering, when no administrator approval is required.') . ' ' . $email_token_help, '#group' => 'email', ); @@ -525,7 +526,7 @@ function user_admin_settings() { $form['email_activated']['user_mail_status_activated_notify'] = array( '#type' => 'checkbox', '#title' => t('Notify user when account is activated.'), - '#default_value' => variable_get('user_mail_status_activated_notify', TRUE), + '#default_value' => $config->get('notify.status_activated'), ); $form['email_activated']['settings'] = array( '#type' => 'container', @@ -560,7 +561,7 @@ function user_admin_settings() { $form['email_blocked']['user_mail_status_blocked_notify'] = array( '#type' => 'checkbox', '#title' => t('Notify user when account is blocked.'), - '#default_value' => variable_get('user_mail_status_blocked_notify', FALSE), + '#default_value' => $config->get('notify.status_blocked'), ); $form['email_blocked']['settings'] = array( '#type' => 'container', @@ -616,7 +617,7 @@ function user_admin_settings() { $form['email_canceled']['user_mail_status_canceled_notify'] = array( '#type' => 'checkbox', '#title' => t('Notify user when account is canceled.'), - '#default_value' => variable_get('user_mail_status_canceled_notify', FALSE), + '#default_value' => $config->get('notify.status_canceled'), ); $form['email_canceled']['settings'] = array( '#type' => 'container', @@ -640,7 +641,23 @@ function user_admin_settings() { '#rows' => 3, ); - return system_settings_form($form); + return system_config_form($form, $form_state); +} + +/** + * Form submission handler for user_admin_settings(). + */ +function user_admin_settings_submit($form, &$form_state) { + config('user.settings') + ->set('anonymous', $form_state['values']['anonymous']) + ->set('admin_role', $form_state['values']['user_admin_role']) + ->set('register', $form_state['values']['user_register']) + ->set('verify_mail', $form_state['values']['user_email_verification']) + ->set('signatures', $form_state['values']['user_signatures']) + ->set('notify.status_activated', $form_state['values']['user_mail_status_activated_notify']) + ->set('notify.status_blocked', $form_state['values']['user_mail_status_blocked_notify']) + ->set('notify.status_canceled', $form_state['values']['user_mail_status_canceled_notify']) + ->save(); } /** diff --git a/core/modules/user/user.install b/core/modules/user/user.install index abb985b..9202145 100644 --- a/core/modules/user/user.install +++ b/core/modules/user/user.install @@ -475,5 +475,36 @@ function user_update_8003() { } /** + * Moves account settings from variable to config. + * + * @ingroup config_upgrade + */ +function user_update_8004() { + update_variables_to_config('user.settings', array( + 'anonymous' => 'anonymous', + 'user_admin_role' => 'admin_role', + 'user_register' => 'register', + 'user_signatures' => 'signatures', + 'user_mail_status_activated_notify' => 'notify.status_activated', + 'user_mail_status_blocked_notify' => 'notify.status_blocked', + 'user_mail_status_cancelled_notify' => 'notify.status_cancelled', + 'user_email_verification' => 'verify_mail', + )); + + // Convert the user.settings:register numeric value to text value. + $map = array( + '0' => 'admin_only', + '1' => 'visitors', + '2' => 'visitors_admin_approval', + ); + $config = config('user.settings'); + $user_register = $config->get('register'); + + if (is_numeric($user_register) && isset($map[$user_register])) { + $config->set('register', $map[$user_register])->save(); + } +} + +/** * @} End of "addtogroup updates-7.x-to-8.x". */ diff --git a/core/modules/user/user.module b/core/modules/user/user.module index 44cb266..730448c 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -23,18 +23,18 @@ const EMAIL_MAX_LENGTH = 254; /** * Only administrators can create user accounts. */ -const USER_REGISTER_ADMINISTRATORS_ONLY = 0; +const USER_REGISTER_ADMINISTRATORS_ONLY = 'admin_only'; /** * Visitors can create their own accounts. */ -const USER_REGISTER_VISITORS = 1; +const USER_REGISTER_VISITORS = 'visitors'; /** * Visitors can create accounts, but they don't become active without * administrative approval. */ -const USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL = 2; +const USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL = 'visitors_admin_approval'; /** * Implement hook_help(). @@ -576,7 +576,7 @@ function user_permission() { ), 'cancel account' => array( 'title' => t('Cancel own user account'), - 'description' => t('Note: content may be kept, unpublished, deleted or transferred to the %anonymous-name user depending on the configured user settings.', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')), '@user-settings-url' => url('admin/config/people/accounts'))), + 'description' => t('Note: content may be kept, unpublished, deleted or transferred to the %anonymous-name user depending on the configured user settings.', array('%anonymous-name' => config('user.settings')->get('anonymous'), '@user-settings-url' => url('admin/config/people/accounts'))), ), 'select account cancellation method' => array( 'title' => t('Select method for cancelling own account'), @@ -754,7 +754,7 @@ function user_login_block($form) { '#value' => t('Log in'), ); $items = array(); - if (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)) { + if (config('user.settings')->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY) { $items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.')))); } $items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.')))); @@ -917,7 +917,7 @@ function user_preprocess_block(&$variables) { * printed to the page. */ function user_format_name($account) { - $name = !empty($account->name) ? $account->name : variable_get('anonymous', t('Anonymous')); + $name = !empty($account->name) ? $account->name : config('user.settings')->get('anonymous'); drupal_alter('user_format_name', $name, $account); return $name; } @@ -1120,7 +1120,7 @@ function user_register() { } function user_register_access() { - return user_is_anonymous() && variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL); + return user_is_anonymous() && (config('user.settings')->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY); } /** @@ -2789,7 +2789,7 @@ function user_multiple_cancel_confirm($form, &$form_state) { '#type' => 'checkbox', '#title' => t('Notify user when account is canceled.'), '#default_value' => FALSE, - '#access' => variable_get('user_mail_status_canceled_notify', FALSE), + '#access' => config('user.settings')->get('notify.status_canceled'), '#description' => t('When enabled, the user will receive an e-mail notification after the account has been cancelled.'), ); @@ -2918,7 +2918,7 @@ function user_build_filter_query(SelectInterface $query) { * Implements hook_comment_view(). */ function user_comment_view($comment) { - if (variable_get('user_signatures', 0) && !empty($comment->signature)) { + if (config('user.settings')->get('signatures') && !empty($comment->signature)) { // @todo This alters and replaces the original object value, so a // hypothetical process of loading, viewing, and saving will hijack the // stored data. Consider renaming to $comment->signature_safe or similar @@ -3008,9 +3008,8 @@ function user_preferred_language($account, $default = NULL) { */ function _user_mail_notify($op, $account, $language = NULL) { // By default, we always notify except for canceled and blocked. - $default_notify = ($op != 'status_canceled' && $op != 'status_blocked'); - $notify = variable_get('user_mail_' . $op . '_notify', $default_notify); - if ($notify) { + $notify = config('user.settings')->get('notify.' . $op); + if ($notify || ($op != 'status_canceled' && $op != 'status_blocked')) { $params['account'] = $account; $language = $language ? $language : user_preferred_language($account); $mail = drupal_mail('user', $op, $account->mail, $language, $params); @@ -3203,7 +3202,7 @@ function user_form_field_ui_field_edit_form_submit($form, &$form_state) { */ function user_modules_installed($modules) { // Assign all available permissions to the administrator role. - $rid = variable_get('user_admin_role', 0); + $rid = config('user.settings')->get('admin_role'); if ($rid) { $permissions = array(); foreach ($modules as $module) { diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc index e1f7088..d26ca6d 100644 --- a/core/modules/user/user.pages.inc +++ b/core/modules/user/user.pages.inc @@ -251,7 +251,7 @@ function user_cancel_confirm_form($form, &$form_state, $account) { '#description' => t('When enabled, the user must confirm the account cancellation via e-mail.'), ); // Also allow to send account canceled notification mail, if enabled. - $default_notify = variable_get('user_mail_status_canceled_notify', FALSE); + $default_notify = config('user.settings')->get('notify.status_canceled'); $form['user_cancel_notify'] = array( '#type' => 'checkbox', '#title' => t('Notify user when account is canceled.'), @@ -340,6 +340,7 @@ function user_cancel_confirm_form_submit($form, &$form_state) { * @see user_multiple_cancel_confirm() */ function user_cancel_methods() { + $anonymous_name = config('user.settings')->get('anonymous'); $methods = array( 'user_cancel_block' => array( 'title' => t('Disable the account and keep its content.'), @@ -350,8 +351,8 @@ function user_cancel_methods() { 'description' => t('Your account will be blocked and you will no longer be able to log in. All of your content will be hidden from everyone but administrators.'), ), 'user_cancel_reassign' => array( - 'title' => t('Delete the account and make its content belong to the %anonymous-name user.', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')))), - 'description' => t('Your account will be removed and all account information deleted. All of your content will be assigned to the %anonymous-name user.', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')))), + 'title' => t('Delete the account and make its content belong to the %anonymous-name user.', array('%anonymous-name' => $anonymous_name)), + 'description' => t('Your account will be removed and all account information deleted. All of your content will be assigned to the %anonymous-name user.', array('%anonymous-name' => $anonymous_name)), ), 'user_cancel_delete' => array( 'title' => t('Delete the account and its content.'), @@ -393,7 +394,7 @@ function user_cancel_confirm($account, $timestamp = 0, $hashed_pass = '') { // Validate expiration and hashed password/login. if ($timestamp <= $current && $current - $timestamp < $timeout && $account->uid && $timestamp >= $account->login && $hashed_pass == user_pass_rehash($account->pass, $timestamp, $account->login)) { $edit = array( - 'user_cancel_notify' => isset($account->data['user_cancel_notify']) ? $account->data['user_cancel_notify'] : variable_get('user_mail_status_canceled_notify', FALSE), + 'user_cancel_notify' => isset($account->data['user_cancel_notify']) ? $account->data['user_cancel_notify'] : config('user.settings')->get('notify.status_canceled'), ); user_cancel($edit, $account->uid, $account->data['user_cancel_method']); // Since user_cancel() is not invoked via Form API, batch processing needs diff --git a/core/profiles/minimal/minimal.install b/core/profiles/minimal/minimal.install index 2c4cee1..224e54d 100644 --- a/core/profiles/minimal/minimal.install +++ b/core/profiles/minimal/minimal.install @@ -82,7 +82,7 @@ function minimal_install() { config('system.site')->set('page.front', 'node')->save(); // Allow visitor account creation, but with administrative approval. - variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL); + config('user.settings')->set('register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)->save(); // Enable default permissions for system roles. user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access content')); diff --git a/core/profiles/standard/standard.install b/core/profiles/standard/standard.install index 27faf10..32221b3 100644 --- a/core/profiles/standard/standard.install +++ b/core/profiles/standard/standard.install @@ -250,7 +250,8 @@ function standard_install() { variable_set('user_picture_style', 'thumbnail'); // Allow visitor account creation with administrative approval. - variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL); + $user_settings = config('user.settings'); + $user_settings->set('register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)->save(); // Create a default vocabulary named "Tags", enabled for the 'article' content type. $description = st('Use tags to group articles on similar topics into categories.'); @@ -385,7 +386,7 @@ function standard_install() { user_role_save($admin_role); user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission'))); // Set this as the administrator role. - variable_set('user_admin_role', $admin_role->rid); + $user_settings->set('admin_role', $admin_role->rid)->save(); // Assign user 1 the "administrator" role. db_insert('users_roles') diff --git a/core/profiles/testing/testing.install b/core/profiles/testing/testing.install index bdd6154..7ab1118 100644 --- a/core/profiles/testing/testing.install +++ b/core/profiles/testing/testing.install @@ -13,7 +13,7 @@ */ function testing_install() { // Allow visitor account creation, but with administrative approval. - variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL); + config('user.settings')->set('register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)->save(); // Enable default permissions for system roles. // @todo Remove dependency on Node module.