diff --git a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php index bf7eca2..50bbbbf 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php +++ b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php @@ -27,7 +27,8 @@ * "edit" = "Drupal\views_ui\ViewEditFormController", * "add" = "Drupal\views_ui\ViewAddFormController", * "preview" = "Drupal\views_ui\ViewPreviewFormController", - * "clone" = "Drupal\views_ui\ViewCloneFormController" + * "clone" = "Drupal\views_ui\ViewCloneFormController", + * "export" = "Drupal\views_ui\ViewExportFormController" * }, * config_prefix = "views.view", * fieldable = FALSE, diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php index 595113f..18f34d3 100644 --- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php +++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php @@ -656,6 +656,10 @@ public function renderDisplayTop(ViewUI $view) { 'title' => t('clone view'), 'href' => "admin/structure/views/view/{$view->id()}/clone", ), + 'export' => array( + 'title' => t('export view'), + 'href' => "admin/structure/views/view/{$view->id()}/export", + ), 'reorder' => array( 'title' => t('reorder displays'), 'href' => "admin/structure/views/nojs/reorder-displays/{$view->id()}/$display_id", diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewExportFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewExportFormController.php new file mode 100644 index 0000000..5b1af33 --- /dev/null +++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewExportFormController.php @@ -0,0 +1,53 @@ +get('plugin.manager.entity')->getStorageController('view'); + + // Get the actual config data the config storage. + // @todo This could be a method (export) on the config storage controller. + $prefix = $storage_controller->getConfigPrefix(); + $config_storage = drupal_container()->get('config.storage'); + // Read the raw config data and encode it as yaml. + $data = $config_storage->read($prefix . $entity->id()); + $yaml = $config_storage->encode($data); + + $form['export'] = array( + '#title' => t('View Export'), + '#type' => 'textarea', + '#default_value' => $yaml, + '#rows' => 100, + ); + + return $form; + } + + + /** + * Overrides \Drupal\Core\Entity\EntityFormController::actions(). + */ + protected function actions(array $form, array &$form_state) { + // Export does not provide actions. + return array(); + } + + +} diff --git a/core/modules/views/views_ui/views_ui.module b/core/modules/views/views_ui/views_ui.module index 5157195..c568da3 100644 --- a/core/modules/views/views_ui/views_ui.module +++ b/core/modules/views/views_ui/views_ui.module @@ -58,6 +58,14 @@ function views_ui_menu() { 'type' => MENU_CALLBACK, ) + $base; + $items['admin/structure/views/view/%views_ui_cache/export'] = array( + 'title callback' => 'views_ui_export_title', + 'title arguments' => array(4), + 'page callback' => 'entity_get_form', + 'page arguments' => array(4, 'export'), + 'type' => MENU_VISIBLE_IN_BREADCRUMB, + ) + $base; + $items['admin/structure/views/view/%views_ui/enable'] = array( 'title' => 'Enable a view', ) + $ajax_base; @@ -393,6 +401,19 @@ function views_ui_clone_title(ViewUI $view) { } /** + * Title callback for the views export form. + * + * @param \Drupal\views_ui\ViewUI $view + * The view to export. + * + * @return string + * The title of the export page. + */ +function views_ui_export_title(ViewUI $view) { + return t('Export of @human_name', array('@human_name' => $view->getHumanName())); +} + +/** * Theme preprocess for views-view.tpl.php. */ function views_ui_preprocess_views_view(&$vars) {