From b72614febbdb968daede12bb19b8ade470d8418e Mon Sep 17 00:00:00 2001
From: webchick <webchick@24967.no-reply.drupal.org>
Date: Tue, 24 Sep 2013 23:34:48 +0200
Subject: [PATCH] Issue #2058499 by mtift, BarisW: Added Combine Configuration
 Management menu items into one main menu item.

---
 core/includes/install.inc                     |  4 +--
 core/modules/config/config.info.yml           |  2 +-
 core/modules/config/config.module             | 29 +++++++++++++------
 core/modules/config/config.routing.yml        | 19 ++++++++----
 .../config/Controller/ConfigController.php    |  2 +-
 .../Drupal/config/Form/ConfigExportForm.php   |  2 +-
 .../Drupal/config/Form/ConfigImportForm.php   |  2 +-
 .../config/Tests/ConfigExportUITest.php       |  4 +--
 .../config/Tests/ConfigImportUITest.php       | 12 ++++----
 .../config/Tests/ConfigImportUploadTest.php   |  4 +--
 10 files changed, 49 insertions(+), 31 deletions(-)

diff --git a/core/includes/install.inc b/core/includes/install.inc
index fdf8e84bcf0f..308432cb10c2 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -486,10 +486,10 @@ function drupal_install_config_directories() {
     // to the drupal core repo.
     switch ($config_type) {
       case CONFIG_ACTIVE_DIRECTORY:
-        $text = 'This directory contains the active configuration for your Drupal site. To move this configuration between environments, contents from this directory should be placed in the staging directory on the target server. To make this configuration active, see admin/config/development/sync on the target server.';
+        $text = 'This directory contains the active configuration for your Drupal site. To move this configuration between environments, contents from this directory should be placed in the staging directory on the target server. To make this configuration active, see admin/config/development/configuration/sync on the target server.';
         break;
       case CONFIG_STAGING_DIRECTORY:
-        $text = 'This directory contains configuration to be imported into your Drupal site. To make this configuration active, see admin/config/development/sync.';
+        $text = 'This directory contains configuration to be imported into your Drupal site. To make this configuration active, see admin/config/development/configuration/sync.';
         break;
     }
     $text .=  ' For information about deploying configuration between servers, see http://drupal.org/documentation/administer/config';
diff --git a/core/modules/config/config.info.yml b/core/modules/config/config.info.yml
index 0b50306cf762..f69027b68eac 100644
--- a/core/modules/config/config.info.yml
+++ b/core/modules/config/config.info.yml
@@ -4,4 +4,4 @@ description: 'Allows administrators to manage configuration changes.'
 package: Core
 version: VERSION
 core: 8.x
-configure: admin/config/development/sync
+configure: admin/config/development/configuration/sync
diff --git a/core/modules/config/config.module b/core/modules/config/config.module
index 450f210e5f2e..5e93c02fe88a 100644
--- a/core/modules/config/config.module
+++ b/core/modules/config/config.module
@@ -18,7 +18,7 @@ function config_help($path, $arg) {
       )) . '</p>';
       return $output;
 
-    case 'admin/config/development/sync':
+    case 'admin/config/development/configuration/sync':
       $output = '';
       $output .= '<p>' . t('Import configuration that is placed in your staging directory. All changes, deletions, renames, and additions are listed below.') . '</p>';
       return $output;
@@ -61,27 +61,38 @@ function config_file_download($uri) {
  * Implements hook_menu().
  */
 function config_menu() {
-  $items['admin/config/development/sync'] = array(
-    'title' => 'Synchronize configuration',
+  $items['admin/config/development/configuration'] = array(
+    'title' => 'Configuration management',
+    'description' => 'Import, export, or synchronize your site configuration.',
+    'route_name' => 'config_management',
+  );
+  $items['admin/config/development/configuration/sync'] = array(
+    'title' => 'Synchronize',
     'description' => 'Synchronize configuration changes.',
     'route_name' => 'config.sync',
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'weight' => 0,
   );
-  $items['admin/config/development/export'] = array(
-    'title' => 'Configuration export',
+  $items['admin/config/development/configuration/export'] = array(
+    'title' => 'Export',
     'description' => 'Export your site configuration',
     'route_name' => 'config.export',
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 1,
   );
-  $items['admin/config/development/import'] = array(
-    'title' => 'Configuration import',
+  $items['admin/config/development/configuration/import'] = array(
+    'title' => 'Import',
     'description' => 'Import configuration for your site',
     'route_name' => 'config.import',
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 2,
   );
-  $items['admin/config/development/sync/diff/%'] = array(
+  $items['admin/config/development/configuration/sync/diff/%'] = array(
     'title' => 'Configuration file diff',
     'description' => 'Diff between active and staged configuration.',
     'route_name' => 'config.diff',
   );
-  $items['admin/config/development/sync/import'] = array(
+  $items['admin/config/development/configuration/sync/import'] = array(
     'title' => 'Import',
     'type' => MENU_DEFAULT_LOCAL_TASK,
   );
diff --git a/core/modules/config/config.routing.yml b/core/modules/config/config.routing.yml
index 678ce7d47c86..3eaeb34283ba 100644
--- a/core/modules/config/config.routing.yml
+++ b/core/modules/config/config.routing.yml
@@ -1,33 +1,40 @@
 config.diff:
-  path: '/admin/config/development/sync/diff/{config_file}'
+  path: '/admin/config/development/configuration/sync/diff/{config_file}'
   defaults:
     _content: '\Drupal\config\Controller\ConfigController::diff'
   requirements:
     _permission: 'synchronize configuration'
 
-config.export_download:
-  path: '/admin/config/development/export-download'
+config_management:
+  path: '/admin/config/development/configuration'
+  defaults:
+    _form: '\Drupal\config\Form\ConfigSync'
+  requirements:
+    _permission: 'synchronize configuration'
+
+config_export_download:
+  path: '/admin/config/development/configuration/export-download'
   defaults:
     _controller: '\Drupal\config\Controller\ConfigController::downloadExport'
   requirements:
     _permission: 'export configuration'
 
 config.export:
-  path: '/admin/config/development/export'
+  path: '/admin/config/development/configuration/export'
   defaults:
     _form: '\Drupal\config\Form\ConfigExportForm'
   requirements:
     _permission: 'export configuration'
 
 config.import:
-  path: '/admin/config/development/import'
+  path: '/admin/config/development/configuration/import'
   defaults:
     _form: '\Drupal\config\Form\ConfigImportForm'
   requirements:
     _permission: 'import configuration'
 
 config.sync:
-  path: '/admin/config/development/sync'
+  path: '/admin/config/development/configuration/sync'
   defaults:
     _form: '\Drupal\config\Form\ConfigSync'
   requirements:
diff --git a/core/modules/config/lib/Drupal/config/Controller/ConfigController.php b/core/modules/config/lib/Drupal/config/Controller/ConfigController.php
index f3fd08972e6e..59cb82bf1645 100644
--- a/core/modules/config/lib/Drupal/config/Controller/ConfigController.php
+++ b/core/modules/config/lib/Drupal/config/Controller/ConfigController.php
@@ -123,7 +123,7 @@ public function diff($config_file) {
         ),
       ),
       '#title' => "Back to 'Synchronize configuration' page.",
-      '#href' => 'admin/config/development/sync',
+      '#href' => 'admin/config/development/configuration/sync',
     );
 
     return $build;
diff --git a/core/modules/config/lib/Drupal/config/Form/ConfigExportForm.php b/core/modules/config/lib/Drupal/config/Form/ConfigExportForm.php
index e2f9faa6e462..c405c642c747 100644
--- a/core/modules/config/lib/Drupal/config/Form/ConfigExportForm.php
+++ b/core/modules/config/lib/Drupal/config/Form/ConfigExportForm.php
@@ -39,7 +39,7 @@ public function buildForm(array $form, array &$form_state) {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, array &$form_state) {
-    $form_state['redirect'] = 'admin/config/development/export-download';
+    $form_state['redirect'] = 'admin/config/development/configuration/export-download';
   }
 
 }
diff --git a/core/modules/config/lib/Drupal/config/Form/ConfigImportForm.php b/core/modules/config/lib/Drupal/config/Form/ConfigImportForm.php
index ebdeb498fc86..a18a9715257a 100644
--- a/core/modules/config/lib/Drupal/config/Form/ConfigImportForm.php
+++ b/core/modules/config/lib/Drupal/config/Form/ConfigImportForm.php
@@ -96,7 +96,7 @@ public function submitForm(array &$form, array &$form_state) {
         }
         $archiver->extractList($files, config_get_config_directory(CONFIG_STAGING_DIRECTORY));
         drupal_set_message($this->t('Your configuration files were successfully uploaded, ready for import.'));
-        $form_state['redirect'] = 'admin/config/development/sync';
+        $form_state['redirect'] = 'admin/config/development/configuration/sync';
       }
       catch (\Exception $e) {
         form_set_error('import_tarball', $this->t('Could not extract the contents of the tar file. The error message is <em>@message</em>', array('@message' => $e->getMessage())));
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigExportUITest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigExportUITest.php
index 80c63d66e54d..71c676239c2e 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigExportUITest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigExportUITest.php
@@ -44,11 +44,11 @@ protected function setUp() {
    */
   function testExport() {
     // Verify the export page with export submit button is available.
-    $this->drupalGet('admin/config/development/export');
+    $this->drupalGet('admin/config/development/configuration/export');
     $this->assertFieldById('edit-submit', t('Export'));
 
     // Submit the export form and verify response.
-    $this->drupalPostForm('admin/config/development/export', array(), t('Export'));
+    $this->drupalPostForm('admin/config/development/configuration/export', array(), t('Export'));
     $this->assertResponse(200, 'User can access the download callback.');
 
     // Get the archived binary file provided to user for download.
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigImportUITest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigImportUITest.php
index 737ddf866f1f..04aacadbc50a 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigImportUITest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigImportUITest.php
@@ -41,7 +41,7 @@ function testImport() {
     $storage = $this->container->get('config.storage');
     $staging = $this->container->get('config.storage.staging');
 
-    $this->drupalGet('admin/config/development/sync');
+    $this->drupalGet('admin/config/development/configuration/sync');
     $this->assertText('There are no configuration changes.');
     $this->assertNoFieldById('edit-submit', t('Import all'));
 
@@ -65,7 +65,7 @@ function testImport() {
     $this->assertIdentical($staging->exists($dynamic_name), TRUE, $dynamic_name . ' found.');
 
     // Verify that both appear as ready to import.
-    $this->drupalGet('admin/config/development/sync');
+    $this->drupalGet('admin/config/development/configuration/sync');
     $this->assertText($name);
     $this->assertText($dynamic_name);
     $this->assertFieldById('edit-submit', t('Import all'));
@@ -98,7 +98,7 @@ function testImportLock() {
     $this->prepareSiteNameUpdate($new_site_name);
 
     // Verify that there are configuration differences to import.
-    $this->drupalGet('admin/config/development/sync');
+    $this->drupalGet('admin/config/development/configuration/sync');
     $this->assertNoText(t('There are no configuration changes.'));
 
     // Acquire a fake-lock on the import mechanism.
@@ -140,7 +140,7 @@ function testImportDiff() {
     $staging->write($config_name, $staging_data);
 
     // Load the diff UI and verify that the diff reflects the change.
-    $this->drupalGet('admin/config/development/sync/diff/' . $config_name);
+    $this->drupalGet('admin/config/development/configuration/sync/diff/' . $config_name);
     $this->assertTitle(format_string('View changes of @config_name | Drupal', array('@config_name' => $config_name)));
 
     // Reset data back to original, and remove a key
@@ -149,7 +149,7 @@ function testImportDiff() {
     $staging->write($config_name, $staging_data);
 
     // Load the diff UI and verify that the diff reflects a removed key.
-    $this->drupalGet('admin/config/development/sync/diff/' . $config_name);
+    $this->drupalGet('admin/config/development/configuration/sync/diff/' . $config_name);
 
     // Reset data back to original and add a key
     $staging_data = $original_data;
@@ -157,7 +157,7 @@ function testImportDiff() {
     $staging->write($config_name, $staging_data);
 
     // Load the diff UI and verify that the diff reflects an added key.
-    $this->drupalGet('admin/config/development/sync/diff/' . $config_name);
+    $this->drupalGet('admin/config/development/configuration/sync/diff/' . $config_name);
   }
 
   function prepareSiteNameUpdate($new_site_name) {
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigImportUploadTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigImportUploadTest.php
index 89cdf6fd923d..b78639bd1d52 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigImportUploadTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigImportUploadTest.php
@@ -36,13 +36,13 @@ function setUp() {
    */
   function testImport() {
     // Verify access to the config upload form.
-    $this->drupalGet('admin/config/development/import');
+    $this->drupalGet('admin/config/development/configuration/import');
     $this->assertResponse(200);
 
     // Attempt to upload a non-tar file.
     $text_file = current($this->drupalGetTestFiles('text'));
     $edit = array('files[import_tarball]' => drupal_realpath($text_file->uri));
-    $this->drupalPostForm('admin/config/development/import', $edit, t('Upload'));
+    $this->drupalPostForm('admin/config/development/configuration/import', $edit, t('Upload'));
     $this->assertText(t('Could not extract the contents of the tar file'));
   }
 
-- 
GitLab