You are here

public function TeamAppNameConverter::convert in Apigee Edge 8

Converts path variables to their corresponding objects.

Parameters

mixed $value: The raw value.

mixed $definition: The parameter definition provided in the route options.

string $name: The name of the parameter.

array $defaults: The route defaults array.

Return value

mixed|null The converted parameter value.

Overrides ParamConverterInterface::convert

File

modules/apigee_edge_teams/src/ParamConverter/TeamAppNameConverter.php, line 67

Class

TeamAppNameConverter
Resolves "team_app_by_name" type parameters in routes.

Namespace

Drupal\apigee_edge_teams\ParamConverter

Code

public function convert($value, $definition, $name, array $defaults) {
  if (empty($defaults['team'])) {
    return NULL;
  }
  $entity = NULL;

  /** @var \Drupal\apigee_edge_teams\Entity\TeamInterface $team */

  // If {team} parameter is before the {team_app} in the route then
  // entity parameter converter should have already up-casted it to
  // a team object if not then let's try to up-cast it here.
  $team = is_object($defaults['team']) ? $defaults['team'] : $this->entityTypeManager
    ->getStorage('team')
    ->load($defaults['team']);
  if ($team) {
    $app_storage = $this->entityTypeManager
      ->getStorage('team_app');
    $app_ids = $app_storage
      ->getQuery()
      ->condition('companyName', $team
      ->id())
      ->condition('name', $value)
      ->execute();
    if (!empty($app_ids)) {
      $app_id = reset($app_ids);

      // Load the entity directly from Apigee Edge if needed.
      // @see \Drupal\apigee_edge\ParamConverter\ApigeeEdgeLoadUnchangedEntity
      if (!empty($defaults['_route_object']
        ->getOption('apigee_edge_load_unchanged_entity'))) {
        if ($app_storage instanceof AppStorage) {
          $entity = $app_storage
            ->loadUnchangedByUuid($app_id);
        }
        else {
          $entity = $app_storage
            ->loadUnchanged($app_id);
        }
      }
      else {
        $entity = $app_storage
          ->load($app_id);
      }
    }
    if ($entity === NULL) {

      // App may have been deleted on Apigee Edge, that is a smaller
      // problem.
      $this->logger
        ->error('%class: Unable to load team app with %name name owned by %team team.', [
        '%class' => get_called_class(),
        '%name' => $value,
        '%team' => $team
          ->id(),
      ]);
    }
  }
  return $entity;
}