| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | <?php/** * @file * Post update functions for Rest. */use Drupal\rest\Entity\RestResourceConfig;use Drupal\rest\RestResourceConfigInterface;/** * Create REST resource configuration entities. * * @see rest_update_8201() * @see https://www.drupal.org/node/2308745 */function rest_post_update_create_rest_resource_config_entities() {  $resources = \Drupal::state()->get('rest_update_8201_resources', []);  foreach ($resources as $key => $resource) {    $resource = RestResourceConfig::create([      'id' => str_replace(':', '.', $key),      'granularity' => RestResourceConfigInterface::METHOD_GRANULARITY,      'configuration' => $resource,    ]);    $resource->save();  }}/** * Simplify method-granularity REST resource config to resource-granularity. * * @see https://www.drupal.org/node/2721595 */function rest_post_update_resource_granularity() {  /** @var \Drupal\rest\RestResourceConfigInterface[] $resource_config_entities */  $resource_config_entities = RestResourceConfig::loadMultiple();  foreach ($resource_config_entities as $resource_config_entity) {    if ($resource_config_entity->get('granularity') === RestResourceConfigInterface::METHOD_GRANULARITY) {      $configuration = $resource_config_entity->get('configuration');      $format_and_auth_configuration = [];      foreach (array_keys($configuration) as $method) {        $format_and_auth_configuration['format'][$method] = implode(',', $configuration[$method]['supported_formats']);        $format_and_auth_configuration['auth'][$method] = implode(',', $configuration[$method]['supported_auth']);      }      // If each method has the same formats and the same authentication      // providers configured, convert it to 'granularity: resource', which has      // a simpler/less verbose configuration.      if (count(array_unique($format_and_auth_configuration['format'])) === 1 && count(array_unique($format_and_auth_configuration['auth'])) === 1) {        $first_method = array_keys($configuration)[0];        $resource_config_entity->set('configuration', [          'methods' => array_keys($configuration),          'formats' => $configuration[$first_method]['supported_formats'],          'authentication' => $configuration[$first_method]['supported_auth']        ]);        $resource_config_entity->set('granularity', RestResourceConfigInterface::RESOURCE_GRANULARITY);        $resource_config_entity->save();      }    }  }}
 |