123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <?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);
- }
- }
- }
|