Mercurial > hg > isophonics-drupal-site
diff core/modules/rest/rest.install @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/rest/rest.install Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,122 @@ +<?php + +/** + * @file + * Install, update and uninstall functions for the rest module. + */ + +use Drupal\Core\Config\Entity\ConfigEntityType; +use Drupal\Core\StringTranslation\TranslatableMarkup; + +/** + * Implements hook_requirements(). + */ +function rest_requirements($phase) { + $requirements = []; + + if (version_compare(PHP_VERSION, '5.6.0', '>=') && version_compare(PHP_VERSION, '7', '<') && ini_get('always_populate_raw_post_data') != -1) { + $requirements['always_populate_raw_post_data'] = [ + 'title' => t('always_populate_raw_post_data PHP setting'), + 'value' => t('Not set to -1.'), + 'severity' => REQUIREMENT_ERROR, + 'description' => t('The always_populate_raw_post_data PHP setting should be set to -1 in PHP version 5.6. Please check the <a href="https://php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data">PHP manual</a> for information on how to correct this.'), + ]; + } + return $requirements; +} + +/** + * Install the REST config entity type and fix old settings-based config. + * + * @see rest_post_update_create_rest_resource_config_entities() + */ +function rest_update_8201() { + \Drupal::entityDefinitionUpdateManager()->installEntityType(new ConfigEntityType([ + 'id' => 'rest_resource_config', + 'label' => new TranslatableMarkup('REST resource configuration'), + 'config_prefix' => 'resource', + 'admin_permission' => 'administer rest resources', + 'label_callback' => 'getLabelFromPlugin', + 'entity_keys' => ['id' => 'id'], + 'config_export' => [ + 'id', + 'plugin_id', + 'granularity', + 'configuration', + ], + ])); + \Drupal::state()->set('rest_update_8201_resources', \Drupal::config('rest.settings')->get('resources')); + \Drupal::configFactory()->getEditable('rest.settings') + ->clear('resources') + ->save(); +} + +/** + * Re-save all views with a REST display to add new auth defaults. + */ +function rest_update_8202() { + $config_factory = \Drupal::configFactory(); + foreach ($config_factory->listAll('views.view.') as $view_config_name) { + $save = FALSE; + $view = $config_factory->getEditable($view_config_name); + $displays = $view->get('display'); + foreach ($displays as $display_name => &$display) { + if ($display['display_plugin'] == 'rest_export') { + if (!isset($display['display_options']['auth'])) { + $display['display_options']['auth'] = []; + $save = TRUE; + } + } + } + if ($save) { + $view->set('display', $displays); + $view->save(TRUE); + } + } +} + +/** + * Enable BC for EntityResource: continue to use permissions. + */ +function rest_update_8203() { + $config_factory = \Drupal::configFactory(); + $rest_settings = $config_factory->getEditable('rest.settings'); + $rest_settings->set('bc_entity_resource_permissions', TRUE) + ->save(TRUE); +} + +/** + * Ensure the right REST authentication method is used. + * + * This fixes the bug in https://www.drupal.org/node/2825204. + */ +function rest_update_8401() { + $config_factory = \Drupal::configFactory(); + $auth_providers = \Drupal::service('authentication_collector')->getSortedProviders(); + $process_auth = function ($auth_option) use ($auth_providers) { + foreach ($auth_providers as $provider_id => $provider_data) { + // The provider belongs to the module that declares it as a service. + if (strtok($provider_data->_serviceId, '.') === $auth_option) { + return $provider_id; + } + } + + return $auth_option; + }; + + foreach ($config_factory->listAll('views.view.') as $view_config_name) { + $save = FALSE; + $view = $config_factory->getEditable($view_config_name); + $displays = $view->get('display'); + foreach ($displays as $display_name => $display) { + if ('rest_export' === $display['display_plugin'] && !empty($display['display_options']['auth'])) { + $displays[$display_name]['display_options']['auth'] = array_map($process_auth, $display['display_options']['auth']); + $save = TRUE; + } + } + if ($save) { + $view->set('display', $displays); + $view->save(TRUE); + } + } +}