Security update for permissions_by_term
[yaffs-website] / vendor / drupal / drupal-driver / src / Drupal / Driver / DrupalDriver.php
diff --git a/vendor/drupal/drupal-driver/src/Drupal/Driver/DrupalDriver.php b/vendor/drupal/drupal-driver/src/Drupal/Driver/DrupalDriver.php
new file mode 100644 (file)
index 0000000..7764b55
--- /dev/null
@@ -0,0 +1,322 @@
+<?php
+
+namespace Drupal\Driver;
+
+use Drupal\Driver\Exception\BootstrapException;
+
+use Behat\Behat\Tester\Exception\PendingException;
+
+/**
+ * Fully bootstraps Drupal and uses native API calls.
+ */
+class DrupalDriver implements DriverInterface, SubDriverFinderInterface {
+
+  /**
+   * Track whether Drupal has been bootstrapped.
+   *
+   * @var bool
+   */
+  private $bootstrapped = FALSE;
+
+  /**
+   * Drupal core object.
+   *
+   * @var \Drupal\Driver\Cores\CoreInterface
+   */
+  public $core;
+
+  /**
+   * System path to the Drupal installation.
+   *
+   * @var string
+   */
+  private $drupalRoot;
+
+  /**
+   * URI for the Drupal installation.
+   *
+   * @var string
+   */
+  private $uri;
+
+  /**
+   * Drupal core version.
+   *
+   * @var integer
+   */
+  public $version;
+
+  /**
+   * Set Drupal root and URI.
+   *
+   * @param string $drupal_root
+   *   The Drupal root path.
+   * @param string $uri
+   *   The URI for the Drupal installation.
+   *
+   * @throws BootstrapException
+   *   Thrown when the Drupal installation is not found in the given root path.
+   */
+  public function __construct($drupal_root, $uri) {
+    $this->drupalRoot = realpath($drupal_root);
+    if (!$this->drupalRoot) {
+      throw new BootstrapException(sprintf('No Drupal installation found at %s', $drupal_root));
+    }
+    $this->uri = $uri;
+    $this->version = $this->getDrupalVersion();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRandom() {
+    return $this->getCore()->getRandom();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function bootstrap() {
+    $this->getCore()->bootstrap();
+    $this->bootstrapped = TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isBootstrapped() {
+    // Assume the blackbox is always bootstrapped.
+    return $this->bootstrapped;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function userCreate(\stdClass $user) {
+    $this->getCore()->userCreate($user);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function userDelete(\stdClass $user) {
+    $this->getCore()->userDelete($user);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function processBatch() {
+    $this->getCore()->processBatch();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function userAddRole(\stdClass $user, $role_name) {
+    $this->getCore()->userAddRole($user, $role_name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fetchWatchdog($count = 10, $type = NULL, $severity = NULL) {
+    throw new PendingException(sprintf('Currently no ability to access watchdog entries in %s', $this));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function clearCache($type = NULL) {
+    $this->getCore()->clearCache();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSubDriverPaths() {
+    // Ensure system is bootstrapped.
+    if (!$this->isBootstrapped()) {
+      $this->bootstrap();
+    }
+
+    return $this->getCore()->getExtensionPathList();
+  }
+
+  /**
+   * Determine major Drupal version.
+   *
+   * @return int
+   *   The major Drupal version.
+   *
+   * @throws \Drupal\Driver\Exception\BootstrapException
+   *   Thrown when the Drupal version could not be determined.
+   *
+   * @see drush_drupal_version()
+   */
+  public function getDrupalVersion() {
+    if (!isset($this->version)) {
+      // Support 6, 7 and 8.
+      $version_constant_paths = array(
+        // Drupal 6.
+        '/modules/system/system.module',
+        // Drupal 7.
+        '/includes/bootstrap.inc',
+        // Drupal 8.
+        '/autoload.php',
+        '/core/includes/bootstrap.inc',
+      );
+
+      if ($this->drupalRoot === FALSE) {
+        throw new BootstrapException('`drupal_root` parameter must be defined.');
+      }
+
+      foreach ($version_constant_paths as $path) {
+        if (file_exists($this->drupalRoot . $path)) {
+          require_once $this->drupalRoot . $path;
+        }
+      }
+      if (defined('VERSION')) {
+        $version = VERSION;
+      }
+      elseif (defined('\Drupal::VERSION')) {
+        $version = \Drupal::VERSION;
+      }
+      else {
+        throw new BootstrapException('Unable to determine Drupal core version. Supported versions are 6, 7, and 8.');
+      }
+
+      // Extract the major version from VERSION.
+      $version_parts = explode('.', $version);
+      if (is_numeric($version_parts[0])) {
+        $this->version = (integer) $version_parts[0];
+      }
+      else {
+        throw new BootstrapException(sprintf('Unable to extract major Drupal core version from version string %s.', $version));
+      }
+    }
+    return $this->version;
+  }
+
+  /**
+   * Instantiate and set Drupal core class.
+   *
+   * @param array $available_cores
+   *   A major-version-keyed array of available core controllers.
+   */
+  public function setCore(array $available_cores) {
+    if (!isset($available_cores[$this->version])) {
+      throw new BootstrapException(sprintf('There is no available Drupal core controller for Drupal version %s.', $this->version));
+    }
+    $this->core = $available_cores[$this->version];
+  }
+
+  /**
+   * Automatically set the core from the current version.
+   */
+  public function setCoreFromVersion() {
+    $core = '\Drupal\Driver\Cores\Drupal' . $this->getDrupalVersion();
+    $this->core = new $core($this->drupalRoot, $this->uri);
+  }
+
+  /**
+   * Return current core.
+   */
+  public function getCore() {
+    return $this->core;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function createNode($node) {
+    return $this->getCore()->nodeCreate($node);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function nodeDelete($node) {
+    return $this->getCore()->nodeDelete($node);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function runCron() {
+    if (!$this->getCore()->runCron()) {
+      throw new \Exception('Failed to run cron.');
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function createTerm(\stdClass $term) {
+    return $this->getCore()->termCreate($term);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function termDelete(\stdClass $term) {
+    return $this->getCore()->termDelete($term);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function roleCreate(array $permissions) {
+    return $this->getCore()->roleCreate($permissions);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function roleDelete($rid) {
+    $this->getCore()->roleDelete($rid);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isField($entity_type, $field_name) {
+    return $this->getCore()->isField($entity_type, $field_name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function languageCreate($language) {
+    return $this->getCore()->languageCreate($language);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function languageDelete($language) {
+    $this->getCore()->languageDelete($language);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function configGet($name, $key) {
+    return $this->getCore()->configGet($name, $key);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function configSet($name, $key, $value) {
+    $this->getCore()->configSet($name, $key, $value);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function clearStaticCaches() {
+    $this->getCore()->clearStaticCaches();
+  }
+
+}