From 381684700517ee877ec907a013405fd970785e07 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 29 Oct 2012 23:09:48 +0000
Subject: [PATCH] Issue #1807266 by cam8001, barbun: Convert
 user_cancel_method() variable to CMI system.

---
 .../statistics/Tests/StatisticsAdminTest.php   |  2 +-
 .../Tests/Upgrade/SystemUpgradePathTest.php    |  8 ++++++--
 .../tests/upgrade/drupal-7.system.database.php |  4 ++++
 core/modules/user/config/user.settings.yml     |  1 +
 .../lib/Drupal/user/Tests/UserCancelTest.php   | 18 +++++++++---------
 core/modules/user/user.admin.inc               |  2 ++
 core/modules/user/user.install                 | 15 +++++++++++++++
 core/modules/user/user.pages.inc               |  4 +---
 8 files changed, 39 insertions(+), 15 deletions(-)

diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
index 6824e34cd47f..a7487f7f4d1f 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
@@ -138,7 +138,7 @@ function testDeleteNode() {
   function testDeleteUser() {
     config('statistics.settings')->set('access_log.enabled', 1)->save();
 
-    variable_set('user_cancel_method', 'user_cancel_delete');
+    config('user.settings')->set('cancel_method', 'user_cancel_delete')->save();
     $this->drupalLogout($this->privileged_user);
     $account = $this->drupalCreateUser(array('access content', 'cancel account'));
     $this->drupalLogin($account);
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php
index db95f06f1b88..e3cb1d03ba3e 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php
@@ -28,9 +28,9 @@ public function setUp() {
   }
 
   /**
-   * Tests upgrade of system variables.
+   * Tests upgrade of variables to config.
    */
-  public function testSystemVariableUpgrade() {
+  public function testVariableUpgrade() {
     $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
 
     // Verify that variables were properly upgraded.
@@ -75,6 +75,10 @@ public function testSystemVariableUpgrade() {
       'page.front' => 'node',
     );
 
+    $expected_config['user.settings'] = array(
+      'cancel_method' => 'user_cancel_reassign',
+    );
+
     foreach ($expected_config as $file => $values) {
       $config = config($file);
       $this->verbose(print_r($config->get(), TRUE));
diff --git a/core/modules/system/tests/upgrade/drupal-7.system.database.php b/core/modules/system/tests/upgrade/drupal-7.system.database.php
index 8afbc12ae842..e9f31d375faa 100644
--- a/core/modules/system/tests/upgrade/drupal-7.system.database.php
+++ b/core/modules/system/tests/upgrade/drupal-7.system.database.php
@@ -91,6 +91,10 @@
     'name' => 'site_slogan',
     'value' => 's:31:"CMI makes Drupal 8 drush cex -y";',
   ))
+->values(array(
+  'name' => 'user_cancel_method',
+  'value' => 's:20:"user_cancel_reassign"',
+))
 ->execute();
 
 db_update('variable')
diff --git a/core/modules/user/config/user.settings.yml b/core/modules/user/config/user.settings.yml
index 98c8d255d1f7..efc0e4bf4da9 100644
--- a/core/modules/user/config/user.settings.yml
+++ b/core/modules/user/config/user.settings.yml
@@ -12,3 +12,4 @@ notify:
   register_pending_approval: '1'
 register: visitors
 signatures: '0'
+cancel_method: user_cancel_block
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserCancelTest.php b/core/modules/user/lib/Drupal/user/Tests/UserCancelTest.php
index 8b51fe0994fc..8b5db875d40a 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserCancelTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserCancelTest.php
@@ -35,7 +35,7 @@ public static function getInfo() {
    * Attempt to cancel account without permission.
    */
   function testUserCancelWithoutPermission() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
+    config('user.settings')->set('cancel_method', 'user_cancel_reassign')->save();
 
     // Create a user.
     $account = $this->drupalCreateUser(array());
@@ -105,7 +105,7 @@ function testUserCancelUid1() {
    * Attempt invalid account cancellations.
    */
   function testUserCancelInvalid() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
+    config('user.settings')->set('cancel_method', 'user_cancel_reassign')->save();
 
     // Create a user.
     $account = $this->drupalCreateUser(array('cancel account'));
@@ -147,7 +147,7 @@ function testUserCancelInvalid() {
    * Disable account and keep all content.
    */
   function testUserBlock() {
-    variable_set('user_cancel_method', 'user_cancel_block');
+    config('user.settings')->set('cancel_method', 'user_cancel_block')->save();
 
     // Create a user.
     $web_user = $this->drupalCreateUser(array('cancel account'));
@@ -182,7 +182,7 @@ function testUserBlock() {
    * Disable account and unpublish all content.
    */
   function testUserBlockUnpublish() {
-    variable_set('user_cancel_method', 'user_cancel_block_unpublish');
+    config('user.settings')->set('cancel_method', 'user_cancel_block_unpublish')->save();
 
     // Create a user.
     $account = $this->drupalCreateUser(array('cancel account'));
@@ -226,7 +226,7 @@ function testUserBlockUnpublish() {
    * Delete account and anonymize all content.
    */
   function testUserAnonymize() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
+    config('user.settings')->set('cancel_method', 'user_cancel_reassign')->save();
 
     // Create a user.
     $account = $this->drupalCreateUser(array('cancel account'));
@@ -277,7 +277,7 @@ function testUserAnonymize() {
    * Delete account and remove all content.
    */
   function testUserDelete() {
-    variable_set('user_cancel_method', 'user_cancel_delete');
+    config('user.settings')->set('cancel_method', 'user_cancel_delete')->save();
 
     // Create a user.
     $account = $this->drupalCreateUser(array('cancel account', 'post comments', 'skip comment approval'));
@@ -339,7 +339,7 @@ function testUserDelete() {
    * Create an administrative user and delete another user.
    */
   function testUserCancelByAdmin() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
+    config('user.settings')->set('cancel_method', 'user_cancel_reassign')->save();
 
     // Create a regular user.
     $account = $this->drupalCreateUser(array());
@@ -364,7 +364,7 @@ function testUserCancelByAdmin() {
    * Tests deletion of a user account without an e-mail address.
    */
   function testUserWithoutEmailCancelByAdmin() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
+    config('user.settings')->set('cancel_method', 'user_cancel_reassign')->save();
 
     // Create a regular user.
     $account = $this->drupalCreateUser(array());
@@ -392,7 +392,7 @@ function testUserWithoutEmailCancelByAdmin() {
    * Create an administrative user and mass-delete other users.
    */
   function testMassUserCancelByAdmin() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
+    config('user.settings')->set('cancel_method', 'user_cancel_reassign')->save();
     // Enable account cancellation notification.
     variable_set('user_mail_status_canceled_notify', TRUE);
 
diff --git a/core/modules/user/user.admin.inc b/core/modules/user/user.admin.inc
index 396f4c0e76c2..095a6e266f16 100644
--- a/core/modules/user/user.admin.inc
+++ b/core/modules/user/user.admin.inc
@@ -332,6 +332,7 @@ function user_admin_settings($form, &$form_state) {
   $form['registration_cancellation']['user_cancel_method'] = array(
     '#type' => 'item',
     '#title' => t('When cancelling a user account'),
+    '#default_value' => $config->get('cancel_method'),
     '#description' => t('Users with the %select-cancel-method or %administer-users <a href="@permissions-url">permissions</a> can override this default method.', array('%select-cancel-method' => t('Select method for cancelling account'), '%administer-users' => t('Administer users'), '@permissions-url' => url('admin/people/permissions'))),
   );
   $form['registration_cancellation']['user_cancel_method'] += user_cancel_methods();
@@ -665,6 +666,7 @@ function user_admin_settings_submit($form, &$form_state) {
     ->set('register', $form_state['values']['user_register'])
     ->set('verify_mail', $form_state['values']['user_email_verification'])
     ->set('signatures', $form_state['values']['user_signatures'])
+    ->set('cancel_method', $form_state['values']['user_cancel_method'])
     ->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'])
diff --git a/core/modules/user/user.install b/core/modules/user/user.install
index 492f1e04394c..d5c3e4a56e3c 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -491,6 +491,7 @@ function user_update_8004() {
     'user_admin_role' => 'admin_role',
     'user_register' => 'register',
     'user_signatures' => 'signatures',
+    'user_cancel_method' => 'cancel_method',
     'user_mail_status_activated_notify' => 'notify.status_activated',
     'user_mail_status_blocked_notify' => 'notify.status_blocked',
     'user_mail_status_cancelled_notify' => 'notify.status_cancelled',
@@ -503,12 +504,26 @@ function user_update_8004() {
     '1' => 'visitors',
     '2' => 'visitors_admin_approval',
   );
+
   $config = config('user.settings');
   $user_register = $config->get('register');
+  $user_cancel_method = $config->get('cancel_method');
 
   if (is_numeric($user_register) && isset($map[$user_register])) {
     $config->set('register', $map[$user_register])->save();
   }
+
+  // Convert user.settings:cancel_method numeric value to text value.
+  $cancel_map = array(
+    '0' => 'user_cancel_block',
+    '1' => 'user_cancel_block_unpublish',
+    '2' => 'user_cancel_block_reassign',
+    '3' => 'user_cancel_block_delete',
+  );
+
+  if (is_numeric($user_cancel_method) && isset($cancel_map[$user_cancel_method])) {
+    $config->set('cancel_method', $$cancel_map[$user_cancel_method])->save();
+  }
 }
 
 /**
diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc
index b088ecf35cac..1fd8aa548da7 100644
--- a/core/modules/user/user.pages.inc
+++ b/core/modules/user/user.pages.inc
@@ -230,7 +230,6 @@ function user_cancel_confirm_form($form, &$form_state, $account) {
   $form['_account'] = array('#type' => 'value', '#value' => $account);
 
   // Display account cancellation method selection, if allowed.
-  $default_method = variable_get('user_cancel_method', 'user_cancel_block');
   $admin_access = user_access('administer users');
   $can_select_method = $admin_access || user_access('select account cancellation method');
   $form['user_cancel_method'] = array(
@@ -365,14 +364,13 @@ function user_cancel_methods() {
   drupal_alter('user_cancel_methods', $methods);
 
   // Turn all methods into real form elements.
-  $default_method = variable_get('user_cancel_method', 'user_cancel_block');
   foreach ($methods as $name => $method) {
     $form[$name] = array(
       '#type' => 'radio',
       '#title' => $method['title'],
       '#description' => (isset($method['description']) ? $method['description'] : NULL),
       '#return_value' => $name,
-      '#default_value' => $default_method,
+      '#default_value' => config('user.settings')->get('cancel_method'),
       '#parents' => array('user_cancel_method'),
     );
   }
-- 
GitLab