X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fdrupal%2Fdrupal-driver%2Fsrc%2FDrupal%2FDriver%2FCores%2FDrupal8.php;fp=vendor%2Fdrupal%2Fdrupal-driver%2Fsrc%2FDrupal%2FDriver%2FCores%2FDrupal8.php;h=c1cd9ab0b83306e71c60e8b929aaafcbed7a98b0;hb=1270d9129ce8f27c9b28b10518e32132c58e0aca;hp=0000000000000000000000000000000000000000;hpb=c27c0f0cdaa3f354b1fe54a56ae7e854be6e3f68;p=yaffs-website diff --git a/vendor/drupal/drupal-driver/src/Drupal/Driver/Cores/Drupal8.php b/vendor/drupal/drupal-driver/src/Drupal/Driver/Cores/Drupal8.php new file mode 100644 index 000000000..c1cd9ab0b --- /dev/null +++ b/vendor/drupal/drupal-driver/src/Drupal/Driver/Cores/Drupal8.php @@ -0,0 +1,423 @@ +drupalRoot); + } + + // Bootstrap Drupal. + chdir(DRUPAL_ROOT); + $autoloader = require DRUPAL_ROOT . '/autoload.php'; + require_once DRUPAL_ROOT . '/core/includes/bootstrap.inc'; + $this->validateDrupalSite(); + + $request = Request::createFromGlobals(); + $kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod'); + $kernel->boot(); + $kernel->prepareLegacyRequest($request); + + // Initialise an anonymous session. required for the bootstrap. + \Drupal::service('session_manager')->start(); + } + + /** + * {@inheritdoc} + */ + public function clearCache() { + // Need to change into the Drupal root directory or the registry explodes. + drupal_flush_all_caches(); + } + + /** + * {@inheritdoc} + */ + public function nodeCreate($node) { + // Throw an exception if the node type is missing or does not exist. + if (!isset($node->type) || !$node->type) { + throw new \Exception("Cannot create content because it is missing the required property 'type'."); + } + $bundles = \Drupal::entityManager()->getBundleInfo('node'); + if (!in_array($node->type, array_keys($bundles))) { + throw new \Exception("Cannot create content because provided content type '$node->type' does not exist."); + } + // Default status to 1 if not set. + if (!isset($node->status)) { + $node->status = 1; + } + // If 'author' is set, remap it to 'uid'. + if (isset($node->author)) { + $user = user_load_by_name($node->author); + if ($user) { + $node->uid = $user->id(); + } + } + $this->expandEntityFields('node', $node); + $entity = entity_create('node', (array) $node); + $entity->save(); + + $node->nid = $entity->id(); + + return $node; + } + + /** + * {@inheritdoc} + */ + public function nodeDelete($node) { + $node = $node instanceof NodeInterface ? $node : Node::load($node->nid); + if ($node instanceof NodeInterface) { + $node->delete(); + } + } + + /** + * {@inheritdoc} + */ + public function runCron() { + return \Drupal::service('cron')->run(); + } + + /** + * {@inheritdoc} + */ + public function userCreate(\stdClass $user) { + $this->validateDrupalSite(); + + // Default status to TRUE if not explicitly creating a blocked user. + if (!isset($user->status)) { + $user->status = 1; + } + + // Clone user object, otherwise user_save() changes the password to the + // hashed password. + $this->expandEntityFields('user', $user); + $account = entity_create('user', (array) $user); + $account->save(); + + // Store UID. + $user->uid = $account->id(); + } + + /** + * {@inheritdoc} + */ + public function roleCreate(array $permissions) { + // Generate a random, lowercase machine name. + $rid = strtolower($this->random->name(8, TRUE)); + + // Generate a random label. + $name = trim($this->random->name(8, TRUE)); + + // Convert labels to machine names. + $this->convertPermissions($permissions); + + // Check the all the permissions strings are valid. + $this->checkPermissions($permissions); + + // Create new role. + $role = entity_create('user_role', array( + 'id' => $rid, + 'label' => $name, + )); + $result = $role->save(); + + if ($result === SAVED_NEW) { + // Grant the specified permissions to the role, if any. + if (!empty($permissions)) { + user_role_grant_permissions($role->id(), $permissions); + } + return $role->id(); + } + + throw new \RuntimeException(sprintf('Failed to create a role with "%s" permission(s).', implode(', ', $permissions))); + } + + /** + * {@inheritdoc} + */ + public function roleDelete($role_name) { + $role = user_role_load($role_name); + + if (!$role) { + throw new \RuntimeException(sprintf('No role "%s" exists.', $role_name)); + } + + $role->delete(); + } + + /** + * {@inheritdoc} + */ + public function processBatch() { + $this->validateDrupalSite(); + $batch =& batch_get(); + $batch['progressive'] = FALSE; + batch_process(); + } + + /** + * Retrieve all permissions. + * + * @return array + * Array of all defined permissions. + */ + protected function getAllPermissions() { + $permissions = &drupal_static(__FUNCTION__); + + if (!isset($permissions)) { + $permissions = \Drupal::service('user.permissions')->getPermissions(); + } + + return $permissions; + } + + /** + * Convert any permission labels to machine name. + * + * @param array &$permissions + * Array of permission names. + */ + protected function convertPermissions(array &$permissions) { + $all_permissions = $this->getAllPermissions(); + + foreach ($all_permissions as $name => $definition) { + $key = array_search($definition['title'], $permissions); + if (FALSE !== $key) { + $permissions[$key] = $name; + } + } + } + + /** + * Check to make sure that the array of permissions are valid. + * + * @param array $permissions + * Permissions to check. + */ + protected function checkPermissions(array &$permissions) { + $available = array_keys($this->getAllPermissions()); + + foreach ($permissions as $permission) { + if (!in_array($permission, $available)) { + throw new \RuntimeException(sprintf('Invalid permission "%s".', $permission)); + } + } + } + + /** + * {@inheritdoc} + */ + public function userDelete(\stdClass $user) { + user_cancel(array(), $user->uid, 'user_cancel_delete'); + } + + /** + * {@inheritdoc} + */ + public function userAddRole(\stdClass $user, $role_name) { + // Allow both machine and human role names. + $roles = user_role_names(); + $id = array_search($role_name, $roles); + if (FALSE !== $id) { + $role_name = $id; + } + + if (!$role = user_role_load($role_name)) { + throw new \RuntimeException(sprintf('No role "%s" exists.', $role_name)); + } + + $account = \user_load($user->uid); + $account->addRole($role->id()); + $account->save(); + } + + /** + * {@inheritdoc} + */ + public function validateDrupalSite() { + if ('default' !== $this->uri) { + // Fake the necessary HTTP headers that Drupal needs: + $drupal_base_url = parse_url($this->uri); + // If there's no url scheme set, add http:// and re-parse the url + // so the host and path values are set accurately. + if (!array_key_exists('scheme', $drupal_base_url)) { + $drupal_base_url = parse_url($this->uri); + } + // Fill in defaults. + $drupal_base_url += array( + 'path' => NULL, + 'host' => NULL, + 'port' => NULL, + ); + $_SERVER['HTTP_HOST'] = $drupal_base_url['host']; + + if ($drupal_base_url['port']) { + $_SERVER['HTTP_HOST'] .= ':' . $drupal_base_url['port']; + } + $_SERVER['SERVER_PORT'] = $drupal_base_url['port']; + + if (array_key_exists('path', $drupal_base_url)) { + $_SERVER['PHP_SELF'] = $drupal_base_url['path'] . '/index.php'; + } + else { + $_SERVER['PHP_SELF'] = '/index.php'; + } + } + else { + $_SERVER['HTTP_HOST'] = 'default'; + $_SERVER['PHP_SELF'] = '/index.php'; + } + + $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF']; + $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; + $_SERVER['REQUEST_METHOD'] = NULL; + + $_SERVER['SERVER_SOFTWARE'] = NULL; + $_SERVER['HTTP_USER_AGENT'] = NULL; + + $conf_path = DrupalKernel::findSitePath(Request::createFromGlobals()); + $conf_file = $this->drupalRoot . "/$conf_path/settings.php"; + if (!file_exists($conf_file)) { + throw new BootstrapException(sprintf('Could not find a Drupal settings.php file at "%s"', $conf_file)); + } + } + + /** + * {@inheritdoc} + */ + public function termCreate(\stdClass $term) { + $term->vid = $term->vocabulary_machine_name; + $this->expandEntityFields('taxonomy_term', $term); + $entity = Term::create((array) $term); + $entity->save(); + + $term->tid = $entity->id(); + return $term; + } + + /** + * {@inheritdoc} + */ + public function termDelete(\stdClass $term) { + $term = $term instanceof TermInterface ? $term : Term::load($term->tid); + if ($term instanceof TermInterface) { + $term->delete(); + } + } + + /** + * {@inheritdoc} + */ + public function getModuleList() { + return array_keys(\Drupal::moduleHandler()->getModuleList()); + } + + /** + * {@inheritdoc} + */ + public function getExtensionPathList() { + $paths = array(); + + // Get enabled modules. + foreach (\Drupal::moduleHandler()->getModuleList() as $module) { + $paths[] = $this->drupalRoot . DIRECTORY_SEPARATOR . $module->getPath(); + } + + return $paths; + } + + /** + * {@inheritdoc} + */ + public function getEntityFieldTypes($entity_type) { + $return = array(); + $fields = \Drupal::entityManager()->getFieldStorageDefinitions($entity_type); + foreach ($fields as $field_name => $field) { + if ($this->isField($entity_type, $field_name)) { + $return[$field_name] = $field->getType(); + } + } + return $return; + } + + /** + * {@inheritdoc} + */ + public function isField($entity_type, $field_name) { + $fields = \Drupal::entityManager()->getFieldStorageDefinitions($entity_type); + return (isset($fields[$field_name]) && $fields[$field_name] instanceof FieldStorageConfig); + } + + /** + * {@inheritdoc} + */ + public function languageCreate(\stdClass $language) { + $langcode = $language->langcode; + + // Enable a language only if it has not been enabled already. + if (!ConfigurableLanguage::load($langcode)) { + $created_language = ConfigurableLanguage::createFromLangcode($language->langcode); + if (!$created_language) { + throw new InvalidArgumentException("There is no predefined language with langcode '{$langcode}'."); + } + $created_language->save(); + return $language; + } + + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function languageDelete(\stdClass $language) { + $configurable_language = ConfigurableLanguage::load($language->langcode); + $configurable_language->delete(); + } + + /** + * {@inheritdoc} + */ + public function clearStaticCaches() { + drupal_static_reset(); + \Drupal::service('cache_tags.invalidator')->resetChecksums(); + } + + /** + * {@inheritdoc} + */ + public function configGet($name, $key = '') { + return \Drupal::config($name)->get($key); + } + + /** + * {@inheritdoc} + */ + public function configSet($name, $key, $value) { + \Drupal::configFactory()->getEditable($name) + ->set($key, $value) + ->save(); + } + +}