ConfigOptionsList.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Setup;
  7. use Magento\Framework\Config\Data\ConfigData;
  8. use Magento\Framework\Config\File\ConfigFilePool;
  9. use Magento\Framework\Setup\ConfigOptionsListInterface;
  10. use Magento\Framework\Setup\Option\TextConfigOption;
  11. use Magento\Framework\App\DeploymentConfig;
  12. use \Magento\Framework\Setup\BackendFrontnameGenerator;
  13. /**
  14. * Deployment configuration options needed for Backend module
  15. *
  16. */
  17. class ConfigOptionsList implements ConfigOptionsListInterface
  18. {
  19. /**
  20. * Input key for the options
  21. */
  22. const INPUT_KEY_BACKEND_FRONTNAME = 'backend-frontname';
  23. /**
  24. * Path to the values in the deployment config
  25. */
  26. const CONFIG_PATH_BACKEND_FRONTNAME = 'backend/frontName';
  27. /**
  28. * {@inheritdoc}
  29. */
  30. public function getOptions()
  31. {
  32. return [
  33. new TextConfigOption(
  34. self::INPUT_KEY_BACKEND_FRONTNAME,
  35. TextConfigOption::FRONTEND_WIZARD_TEXT,
  36. self::CONFIG_PATH_BACKEND_FRONTNAME,
  37. 'Backend frontname (will be autogenerated if missing)'
  38. )
  39. ];
  40. }
  41. /**
  42. * {@inheritdoc}
  43. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  44. */
  45. public function createConfig(array $options, DeploymentConfig $deploymentConfig)
  46. {
  47. $configData = new ConfigData(ConfigFilePool::APP_ENV);
  48. if (!$deploymentConfig->get(self::CONFIG_PATH_BACKEND_FRONTNAME)
  49. && !isset($options[self::INPUT_KEY_BACKEND_FRONTNAME])) {
  50. $options[self::INPUT_KEY_BACKEND_FRONTNAME] = BackendFrontnameGenerator::generate();
  51. }
  52. if (isset($options[self::INPUT_KEY_BACKEND_FRONTNAME])) {
  53. $configData->set(self::CONFIG_PATH_BACKEND_FRONTNAME, $options[self::INPUT_KEY_BACKEND_FRONTNAME]);
  54. }
  55. return [$configData];
  56. }
  57. /**
  58. * {@inheritdoc}
  59. */
  60. public function validate(array $options, DeploymentConfig $deploymentConfig)
  61. {
  62. $errors = [];
  63. if (isset($options[self::INPUT_KEY_BACKEND_FRONTNAME])
  64. && !preg_match('/^[a-zA-Z0-9_]+$/', $options[self::INPUT_KEY_BACKEND_FRONTNAME])
  65. ) {
  66. $errors[] = "Invalid backend frontname '{$options[self::INPUT_KEY_BACKEND_FRONTNAME]}'";
  67. }
  68. return $errors;
  69. }
  70. }