rest.install in Drupal 8
Same filename and directory in other branches
Install, update and uninstall functions for the rest module.
File
core/modules/rest/rest.installView source
<?php
/**
* @file
* Install, update and uninstall functions for the rest module.
*/
use Drupal\Core\Config\Entity\ConfigEntityType;
use Drupal\Core\StringTranslation\TranslatableMarkup;
/**
* 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);
}
}
}
Functions
Name | Description |
---|---|
rest_update_8201 | Install the REST config entity type and fix old settings-based config. |
rest_update_8202 | Re-save all views with a REST display to add new auth defaults. |
rest_update_8203 | Enable BC for EntityResource: continue to use permissions. |
rest_update_8401 | Ensure the right REST authentication method is used. |