Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / chi-teck / drupal-code-generator / src / Utils.php
diff --git a/vendor/chi-teck/drupal-code-generator/src/Utils.php b/vendor/chi-teck/drupal-code-generator/src/Utils.php
new file mode 100644 (file)
index 0000000..feea5cb
--- /dev/null
@@ -0,0 +1,201 @@
+<?php
+
+namespace DrupalCodeGenerator;
+
+use Symfony\Component\Console\Question\Question;
+
+/**
+ * Helper methods for code generators.
+ */
+class Utils {
+
+  /**
+   * Creates default plugin ID.
+   */
+  public static function defaultPluginId(array $vars) {
+    return $vars['machine_name'] . '_' . self::human2machine($vars['plugin_label']);
+  }
+
+  /**
+   * Transforms a machine name to human name.
+   */
+  public static function machine2human($machine_name) {
+    return ucfirst(trim(str_replace('_', ' ', $machine_name)));
+  }
+
+  /**
+   * Transforms a human name to machine name.
+   */
+  public static function human2machine($human_name) {
+    return trim(preg_replace(
+      ['/^[0-9]+/', '/[^a-z0-9_]+/'],
+      '_',
+      strtolower($human_name)
+    ), '_');
+  }
+
+  /**
+   * Camelize a string.
+   */
+  public static function camelize($string, $upper_camel = TRUE) {
+    $output = preg_replace('/([^A-Z])([A-Z])/', '$1 $2', $string);
+    $output = strtolower($output);
+    $output = preg_replace('/[^a-z0-9]/', ' ', $output);
+    $output = trim($output);
+    $output = ucwords($output);
+    $output = str_replace(' ', '', $output);
+    return $upper_camel ? $output : lcfirst($output);
+  }
+
+  /**
+   * Machine name validator.
+   */
+  public static function validateMachineName($value) {
+    if (!preg_match('/^[a-z][a-z0-9_]*[a-z0-9]$/', $value)) {
+      throw new \UnexpectedValueException('The value is not correct machine name.');
+    }
+    return $value;
+  }
+
+  /**
+   * Class name validator.
+   *
+   * @see http://php.net/manual/en/language.oop5.basic.php
+   */
+  public static function validateClassName($value) {
+    if (!preg_match('/^[A-Z][a-zA-Z0-0][a-zA-Z0-9]*$/', $value)) {
+      throw new \UnexpectedValueException('The value is not correct class name.');
+    }
+    return $value;
+  }
+
+  /**
+   * Required value validator.
+   */
+  public static function validateRequired($value) {
+    // FALSE is not considered as empty value because question helper use
+    // it as negative answer on confirmation questions.
+    if ($value === NULL || $value === '') {
+      throw new \UnexpectedValueException('The value is required.');
+    }
+    return $value;
+  }
+
+  /**
+   * Returns normalized file path.
+   *
+   * @codeCoverageIgnore
+   * @deprecated
+   */
+  public static function normalizePath($path) {
+    $parts = [];
+    $path = str_replace('\\', '/', $path);
+    $path = preg_replace('/\/+/', '/', $path);
+    $segments = explode('/', $path);
+    foreach ($segments as $segment) {
+      if ($segment != '.') {
+        $test = array_pop($parts);
+        if (is_null($test)) {
+          $parts[] = $segment;
+        }
+        elseif ($segment == '..') {
+          if ($test == '..') {
+            $parts[] = $test;
+          }
+          if ($test == '..' || $test == '') {
+            $parts[] = $segment;
+          }
+        }
+        else {
+          $parts[] = $test;
+          $parts[] = $segment;
+        }
+      }
+    }
+    return implode('/', $parts);
+  }
+
+  /**
+   * Returns default questions for module generators.
+   *
+   * @return \Symfony\Component\Console\Question\Question[]
+   *   Array of default questions.
+   */
+  public static function defaultQuestions() {
+    $questions['name'] = new Question('Module name');
+    $questions['name']->setValidator([Utils::class, 'validateRequired']);
+    $questions['machine_name'] = new Question('Module machine name');
+    $questions['machine_name']->setValidator([Utils::class, 'validateMachineName']);
+    return $questions;
+  }
+
+  /**
+   * Returns default questions for plugin generators.
+   *
+   * @return \Symfony\Component\Console\Question\Question[]
+   *   Array of default questions.
+   */
+  public static function defaultPluginQuestions() {
+    $questions = Utils::defaultQuestions();
+    $questions['plugin_label'] = new Question('Plugin label', 'Example');
+    $questions['plugin_label']->setValidator([Utils::class, 'validateRequired']);
+    $questions['plugin_id'] = new Question('Plugin ID', [Utils::class, 'defaultPluginId']);
+    $questions['plugin_id']->setValidator([Utils::class, 'validateMachineName']);
+    return $questions;
+  }
+
+  /**
+   * Returns extension root.
+   *
+   * @return string|bool
+   *   Extension root directory or false if it was not found.
+   */
+  public static function getExtensionRoot($directory) {
+    $extension_root = FALSE;
+    for ($i = 1; $i <= 5; $i++) {
+      $info_file = $directory . '/' . basename($directory) . '.info';
+      if (file_exists($info_file) || file_exists($info_file . '.yml')) {
+        $extension_root = $directory;
+        break;
+      }
+      $directory = dirname($directory);
+    }
+    return $extension_root;
+  }
+
+  /**
+   * Removes a given number of lines from the beginning of the string.
+   */
+  public static function removeHeader($content, $header_size) {
+    return implode("\n", array_slice(explode("\n", $content), $header_size));
+  }
+
+  /**
+   * Return the user's home directory.
+   */
+  public static function getHomeDirectory() {
+    return isset($_SERVER['HOME']) ? $_SERVER['HOME'] : getenv('HOME');
+  }
+
+  /**
+   * Replaces all tokens in a given string with appropriate values.
+   *
+   * @param string $text
+   *   A string potentially containing replaceable tokens.
+   * @param array $data
+   *   An array where keys are token names and values are replacements.
+   *
+   * @return string
+   *   Text with tokens replaced.
+   */
+  public static function tokenReplace($text, array $data) {
+    $tokens = [];
+    foreach ($data as $var_name => $var) {
+      if (is_string($var)) {
+        $tokens['{' . $var_name . '}'] = $var;
+      }
+    }
+    return str_replace(array_keys($tokens), array_values($tokens), $text);
+  }
+
+}