From 16005119bcd8a341f3803a595e8216cdb11993a1 Mon Sep 17 00:00:00 2001
From: webchick <webchick@24967.no-reply.drupal.org>
Date: Sun, 26 Aug 2012 14:15:58 -0700
Subject: [PATCH] Issue #1496534 by cosmicdreams, alexpott, aspilicious,
 kim.pepper, acrollet, dagmar, beejeebus, wizonesolutions | heyrocker: Convert
 account settings to configuration system.

---
 core/modules/comment/comment.module           |  4 +-
 core/modules/comment/comment.tokens.inc       |  2 +-
 .../Drupal/comment/CommentFormController.php  |  4 +-
 .../comment/Tests/CommentAnonymousTest.php    |  2 +-
 .../comment/Tests/CommentInterfaceTest.php    |  6 +--
 .../comment/Tests/CommentPreviewTest.php      |  2 +-
 core/modules/filter/filter.admin.inc          |  2 +-
 .../lib/Drupal/node/NodeFormController.php    |  5 +-
 .../openid/Tests/OpenIDRegistrationTest.php   |  8 ++--
 core/modules/openid/openid.module             | 10 ++--
 core/modules/shortcut/shortcut.api.php        |  2 +-
 .../Drupal/simpletest/Tests/BrowserTest.php   |  2 +-
 .../Tests/Form/ArbitraryRebuildTest.php       |  2 +-
 core/modules/system/system.api.php            |  2 +-
 core/modules/user/config/user.settings.yml    | 14 ++++++
 .../lib/Drupal/user/AccountFormController.php |  7 +--
 .../Drupal/user/RegisterFormController.php    |  4 +-
 .../lib/Drupal/user/Tests/UserCancelTest.php  |  2 +-
 .../user/Tests/UserEditedOwnAccountTest.php   |  2 +-
 .../user/Tests/UserEntityCallbacksTest.php    |  2 +-
 .../user/Tests/UserLanguageCreationTest.php   |  3 +-
 .../user/Tests/UserRegistrationTest.php       | 47 +++++++++++--------
 .../Drupal/user/Tests/UserSignatureTest.php   |  2 +-
 core/modules/user/user.admin.inc              | 45 ++++++++++++------
 core/modules/user/user.install                | 31 ++++++++++++
 core/modules/user/user.module                 | 25 +++++-----
 core/modules/user/user.pages.inc              |  9 ++--
 core/profiles/minimal/minimal.install         |  2 +-
 core/profiles/standard/standard.install       |  5 +-
 core/profiles/testing/testing.install         |  2 +-
 30 files changed, 163 insertions(+), 92 deletions(-)
 create mode 100644 core/modules/user/config/user.settings.yml

diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index aef62094afa1..8ab8070304a9 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('<a href="@login">Log in</a> or <a href="@register">register</a> 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 f4a401dcea68..318c1b6fc73a 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 9b3094e9fe68..f0f16c2b42bf 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentFormController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
@@ -85,7 +85,7 @@ public function form(array $form, array &$form_state, EntityInterface $comment)
         '#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 @@ public function submit(array $form, array &$form_state) {
     // 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 5181e329cb89..21a294480b52 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 @@ public static function getInfo() {
 
   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 2c324e25b5ae..e12214142ab0 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 @@ function testCommentNodeCommentStatistics() {
     $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 @@ function setEnvironment(array $info) {
     }
 
     // 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 @@ function assertCommentLinks(array $info) {
         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 e6eef561e694..10dc207f0d30 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 @@ function testCommentPreview() {
 
     // 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]'] = '<a href="http://example.com/">' . $test_signature. '</a>';
diff --git a/core/modules/filter/filter.admin.inc b/core/modules/filter/filter.admin.inc
index 40a5eabe9465..e441cb13b270 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 c5763e8ec479..51f43082342a 100644
--- a/core/modules/node/lib/Drupal/node/NodeFormController.php
+++ b/core/modules/node/lib/Drupal/node/NodeFormController.php
@@ -54,6 +54,7 @@ protected function prepareEntity(EntityInterface $node) {
    * 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 @@ public function form(array $form, array &$form_state, EntityInterface $node) {
           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 @@ public function form(array $form, array &$form_state, EntityInterface $node) {
       '#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 61291c4fda2a..d55630945b23 100644
--- a/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php
+++ b/core/modules/openid/lib/Drupal/openid/Tests/OpenIDRegistrationTest.php
@@ -33,14 +33,14 @@ public static function getInfo() {
 
   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');
 
@@ -97,7 +97,7 @@ function testRegisterUserWithEmailVerification() {
    * 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');
 
@@ -229,7 +229,7 @@ function testRegisterUserWithoutSreg() {
    * 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 5098216eef48..51d3f5cdf6c2 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 717a7c92b08c..2fcbdc9a808d 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 7e2becac74d6..e976a48624c2 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 @@ public static function getInfo() {
 
   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 824f829b4501..3e39788209c5 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 @@ function setUp() {
       ),
     );
     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 13dd567678c9..b020db989082 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -3785,7 +3785,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 000000000000..528395ff0410
--- /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 31ca843b3285..2c6f1820b4d1 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 @@ public function form(array $form, array &$form_state, EntityInterface $account)
         $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 @@ public function form(array $form, array &$form_state, EntityInterface $account)
       $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 @@ public function form(array $form, array &$form_state, EntityInterface $account)
       '#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 84134b77dfd7..77aa58b0cd8f 100644
--- a/core/modules/user/lib/Drupal/user/RegisterFormController.php
+++ b/core/modules/user/lib/Drupal/user/RegisterFormController.php
@@ -74,7 +74,7 @@ protected function actions(array $form, array &$form_state) {
   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 @@ public function save(array $form, array &$form_state) {
       drupal_set_message(t('Created a new user account for <a href="@url">%name</a>. 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 68c9e9486fa8..0d12cff00f48 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 @@ function testUserAnonymize() {
     $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 d7d3bb27f691..e06298f73354 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 @@ public static function getInfo() {
   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 a631620216ce..13eb0061c22f 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 @@ function testLabelCallback() {
 
     // 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 37ffef7af1bc..d611b57c9a8f 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 @@ public static function getInfo() {
 
   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 fb13f52e0d39..d89192f57dee 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 @@ public static function getInfo() {
   }
 
   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 @@ function testRegistrationWithEmailVerification() {
     $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 @@ function testRegistrationWithEmailVerification() {
   }
 
   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 @@ function testRegistrationWithoutEmailVerification() {
     $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 @@ function testRegistrationWithoutEmailVerification() {
   }
 
   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 @@ function testRegistrationEmailDuplicates() {
   }
 
   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 @@ function testRegistrationDefaultValues() {
     $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 d218b5ff343e..9ed88ca5bb2f 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 @@ function setUp() {
     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 fac97233f4a4..2268ae11b0b1 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 abb985baa350..920214512117 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -474,6 +474,37 @@ 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 0b3edd0d0969..e90c907eb571 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -23,18 +23,18 @@
 /**
  * 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 <a href="@user-settings-url">user settings</a>.', 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 <a href="@user-settings-url">user settings</a>.', 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);
 }
 
 /**
@@ -2811,7 +2811,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.'),
   );
 
@@ -2940,7 +2940,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
@@ -3030,9 +3030,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);
@@ -3225,7 +3224,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 e1f70880f902..d26ca6d43c3b 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 2c4cee1bfc65..224e54d68d7e 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 27faf10dd3aa..32221b36aadc 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 bdd6154d77a0..7ab11189ea13 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.
-- 
GitLab