diff core/lib/Drupal/Core/Extension/InfoParserDynamic.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/Extension/InfoParserDynamic.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,48 @@
+<?php
+
+namespace Drupal\Core\Extension;
+
+use Drupal\Component\Serialization\Exception\InvalidDataTypeException;
+use Drupal\Core\Serialization\Yaml;
+
+/**
+ * Parses dynamic .info.yml files that might change during the page request.
+ */
+class InfoParserDynamic implements InfoParserInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function parse($filename) {
+    if (!file_exists($filename)) {
+      $parsed_info = [];
+    }
+    else {
+      try {
+        $parsed_info = Yaml::decode(file_get_contents($filename));
+      }
+      catch (InvalidDataTypeException $e) {
+        throw new InfoParserException("Unable to parse $filename " . $e->getMessage());
+      }
+      $missing_keys = array_diff($this->getRequiredKeys(), array_keys($parsed_info));
+      if (!empty($missing_keys)) {
+        throw new InfoParserException('Missing required keys (' . implode(', ', $missing_keys) . ') in ' . $filename);
+      }
+      if (isset($parsed_info['version']) && $parsed_info['version'] === 'VERSION') {
+        $parsed_info['version'] = \Drupal::VERSION;
+      }
+    }
+    return $parsed_info;
+  }
+
+  /**
+   * Returns an array of keys required to exist in .info.yml file.
+   *
+   * @return array
+   *   An array of required keys.
+   */
+  protected function getRequiredKeys() {
+    return ['type', 'core', 'name'];
+  }
+
+}