Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 59 |
ConfigController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
72 | |
0.00% |
0 / 59 |
create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
downloadExport | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 14 |
|||
diff | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 31 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\config\Controller\ConfigController. | |
*/ | |
namespace Drupal\config\Controller; | |
use Drupal\Core\Archiver\ArchiveTar; | |
use Drupal\Component\Serialization\Yaml; | |
use Drupal\Core\Config\ConfigManagerInterface; | |
use Drupal\Core\Config\StorageInterface; | |
use Drupal\Core\DependencyInjection\ContainerInjectionInterface; | |
use Drupal\Core\Diff\DiffFormatter; | |
use Drupal\Core\Url; | |
use Drupal\system\FileDownloadController; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
use Symfony\Component\HttpFoundation\Request; | |
/** | |
* Returns responses for config module routes. | |
*/ | |
class ConfigController implements ContainerInjectionInterface { | |
/** | |
* The target storage. | |
* | |
* @var \Drupal\Core\Config\StorageInterface | |
*/ | |
protected $targetStorage; | |
/** | |
* The source storage. | |
* | |
* @var \Drupal\Core\Config\StorageInterface | |
*/ | |
protected $sourceStorage; | |
/** | |
* The configuration manager. | |
* | |
* @var \Drupal\Core\Config\ConfigManagerInterface | |
*/ | |
protected $configManager; | |
/** | |
* The file download controller. | |
* | |
* @var \Drupal\system\FileDownloadController | |
*/ | |
protected $fileDownloadController; | |
/** | |
* The diff formatter. | |
* | |
* @var \Drupal\Core\Diff\DiffFormatter | |
*/ | |
protected $diffFormatter; | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function create(ContainerInterface $container) { | |
return new static( | |
$container->get('config.storage'), | |
$container->get('config.storage.sync'), | |
$container->get('config.manager'), | |
new FileDownloadController(), | |
$container->get('diff.formatter') | |
); | |
} | |
/** | |
* Constructs a ConfigController object. | |
* | |
* @param \Drupal\Core\Config\StorageInterface $target_storage | |
* The target storage. | |
* @param \Drupal\Core\Config\StorageInterface $source_storage | |
* The source storage | |
* @param \Drupal\system\FileDownloadController $file_download_controller | |
* The file download controller. | |
*/ | |
public function __construct(StorageInterface $target_storage, StorageInterface $source_storage, ConfigManagerInterface $config_manager, FileDownloadController $file_download_controller, DiffFormatter $diff_formatter) { | |
$this->targetStorage = $target_storage; | |
$this->sourceStorage = $source_storage; | |
$this->configManager = $config_manager; | |
$this->fileDownloadController = $file_download_controller; | |
$this->diffFormatter = $diff_formatter; | |
} | |
/** | |
* Downloads a tarball of the site configuration. | |
*/ | |
public function downloadExport() { | |
file_unmanaged_delete(file_directory_temp() . '/config.tar.gz'); | |
$archiver = new ArchiveTar(file_directory_temp() . '/config.tar.gz', 'gz'); | |
// Get raw configuration data without overrides. | |
foreach ($this->configManager->getConfigFactory()->listAll() as $name) { | |
$archiver->addString("$name.yml", Yaml::encode($this->configManager->getConfigFactory()->get($name)->getRawData())); | |
} | |
// Get all override data from the remaining collections. | |
foreach ($this->targetStorage->getAllCollectionNames() as $collection) { | |
$collection_storage = $this->targetStorage->createCollection($collection); | |
foreach ($collection_storage->listAll() as $name) { | |
$archiver->addString(str_replace('.', '/', $collection) . "/$name.yml", Yaml::encode($collection_storage->read($name))); | |
} | |
} | |
$request = new Request(array('file' => 'config.tar.gz')); | |
return $this->fileDownloadController->download($request, 'temporary'); | |
} | |
/** | |
* Shows diff of specified configuration file. | |
* | |
* @param string $source_name | |
* The name of the configuration file. | |
* @param string $target_name | |
* (optional) The name of the target configuration file if different from | |
* the $source_name. | |
* @param string $collection | |
* (optional) The configuration collection name. Defaults to the default | |
* collection. | |
* | |
* @return string | |
* Table showing a two-way diff between the active and staged configuration. | |
*/ | |
public function diff($source_name, $target_name = NULL, $collection = NULL) { | |
if (!isset($collection)) { | |
$collection = StorageInterface::DEFAULT_COLLECTION; | |
} | |
$diff = $this->configManager->diff($this->targetStorage, $this->sourceStorage, $source_name, $target_name, $collection); | |
$this->diffFormatter->show_header = FALSE; | |
$build = array(); | |
$build['#title'] = t('View changes of @config_file', array('@config_file' => $source_name)); | |
// Add the CSS for the inline diff. | |
$build['#attached']['library'][] = 'system/diff'; | |
$build['diff'] = array( | |
'#type' => 'table', | |
'#attributes' => array( | |
'class' => array('diff'), | |
), | |
'#header' => array( | |
array('data' => t('Active'), 'colspan' => '2'), | |
array('data' => t('Staged'), 'colspan' => '2'), | |
), | |
'#rows' => $this->diffFormatter->format($diff), | |
); | |
$build['back'] = array( | |
'#type' => 'link', | |
'#attributes' => array( | |
'class' => array( | |
'dialog-cancel', | |
), | |
), | |
'#title' => "Back to 'Synchronize configuration' page.", | |
'#url' => Url::fromRoute('config.sync'), | |
); | |
return $build; | |
} | |
} |