drupalmoduleupgrader-8.x-1.5/src/Plugin/DMU/Converter/Functions/VariableGet.php

src/Plugin/DMU/Converter/Functions/VariableGet.php
<?php

namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Converter\Functions;

use Drupal\Component\Serialization\Yaml;
use Drupal\Core\Config\InstallStorage;
use Drupal\drupalmoduleupgrader\TargetInterface;
use Pharborist\Functions\FunctionCallNode;
use Pharborist\Objects\ClassMethodCallNode;
use Pharborist\Types\ScalarNode;

/**
 * @Converter(
 *  id = "variable_get",
 *  description = @Translation("Replaces variable_get() calls with Configuration API.")
 * )
 */
class VariableGet extends VariableAPI {

  /**
   * Default configuration values extracted from rewritten calls to
   * variable_get().
   *
   * @var mixed[]
   */
  private $defaults = [];

  /**
   * The schema accompanying any extracted default values.
   *
   * @var array
   */
  private $schema = [];

  /**
   * {@inheritdoc}
   */
  public function rewrite(FunctionCallNode $call, TargetInterface $target) {
    if ($this->tryRewrite($call, $target)) {
      $arguments = $call->getArguments();
      $key = $arguments[0]->toValue();

      if ($arguments[1] instanceof ScalarNode) {
        // @TODO Couldn't convert() derive the schema from $this->defaults?
        // That'd be preferable to having yet another state property ($schema)
        // on this class.
        $this->defaults[$key] = $arguments[1]->toValue();
        $this->schema[$key]['type'] = gettype($this->defaults[$key]);
      }
      else {
        $comment = <<<END
Could not extract the default value because it is either indeterminate, or
not scalar. You'll need to provide a default value in
config/install/@module.settings.yml and config/schema/@module.schema.yml.
END;
        $variables = ['@module' => $target->id()];
        $this->buildFixMe($comment, $variables)->prependTo($call->getStatement());
      }

      return ClassMethodCallNode::create('\Drupal', 'config')
        ->appendArgument($target->id() . '.settings')
        ->appendMethodCall('get')
        ->appendArgument(clone $arguments[0]);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function convert(TargetInterface $target) {
    parent::convert($target);

    if ($this->defaults && $this->schema) {
      $group = $target->id() . '.settings';

      $this->write($target, InstallStorage::CONFIG_INSTALL_DIRECTORY . '/' . $group . '.yml', Yaml::encode($this->defaults));
      $this->defaults = [];

      $schema = [
        $group => [
          'type' => 'mapping',
          'label' => (string) $this->t('Settings'),
          'mapping' => $this->schema,
        ],
      ];
      $this->write($target, InstallStorage::CONFIG_SCHEMA_DIRECTORY . '/' . $target->id() . '.schema.yml', Yaml::encode($schema));
      $this->schema = [];
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc