class DeveloperAppListBuilderForDeveloper in Apigee Edge 8
Lists developer apps of a developer on the UI.
Hierarchy
- class \Drupal\Core\Entity\EntityHandlerBase uses DependencySerializationTrait, StringTranslationTrait
- class \Drupal\Core\Entity\EntityListBuilder implements EntityHandlerInterface, EntityListBuilderInterface uses MessengerTrait, RedirectDestinationTrait
- class \Drupal\apigee_edge\Entity\ListBuilder\EdgeEntityListBuilder
- class \Drupal\apigee_edge\Entity\ListBuilder\AppListBuilder
- class \Drupal\apigee_edge\Entity\ListBuilder\DeveloperAppListBuilderForDeveloper implements ContainerInjectionInterface
- class \Drupal\apigee_edge\Entity\ListBuilder\AppListBuilder
- class \Drupal\apigee_edge\Entity\ListBuilder\EdgeEntityListBuilder
- class \Drupal\Core\Entity\EntityListBuilder implements EntityHandlerInterface, EntityListBuilderInterface uses MessengerTrait, RedirectDestinationTrait
Expanded class hierarchy of DeveloperAppListBuilderForDeveloper
1 file declares its use of DeveloperAppListBuilderForDeveloper
- DeveloperAppRouteProvider.php in src/
Entity/ DeveloperAppRouteProvider.php
File
- src/
Entity/ ListBuilder/ DeveloperAppListBuilderForDeveloper.php, line 46
Namespace
Drupal\apigee_edge\Entity\ListBuilderView source
class DeveloperAppListBuilderForDeveloper extends AppListBuilder implements ContainerInjectionInterface {
/**
* The current user.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $currentUser;
/**
* Route match object.
*
* @var \Drupal\Core\Routing\RouteMatchInterface
*/
protected $routeMatch;
/**
* Associative array that contains generated CSS entity ids for apps by name.
*
* @var array
*/
private $appNameCssIdCache = [];
/**
* DeveloperAppListBuilderForDeveloper constructor.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Render\RendererInterface $render
* The render.
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* The request stack object.
* @param \Drupal\Component\Datetime\TimeInterface $time
* The time service.
* @param \Drupal\Core\Session\AccountInterface $current_user
* Currently logged-in user.
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match
* The route match object.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The config factory.
*/
public function __construct(EntityTypeInterface $entity_type, EntityTypeManagerInterface $entity_type_manager, RendererInterface $render, RequestStack $request_stack, TimeInterface $time, AccountInterface $current_user, RouteMatchInterface $route_match, ConfigFactoryInterface $config_factory = NULL) {
if (!$config_factory) {
$config_factory = \Drupal::service('config.factory');
}
parent::__construct($entity_type, $entity_type_manager, $render, $request_stack, $time, $config_factory);
$this->currentUser = $current_user;
$this->routeMatch = $route_match;
}
/**
* {@inheritdoc}
*/
public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
return new static($entity_type, $container
->get('entity_type.manager'), $container
->get('renderer'), $container
->get('request_stack'), $container
->get('datetime.time'), $container
->get('current_user'), $container
->get('current_route_match'), $container
->get('config.factory'));
}
/**
* {@inheritdoc}
*
* Because we use the _controller directive in the route we had to implement
* the ContainerInjectionInterface interface.
*/
public static function create(ContainerInterface $container) {
return static::createInstance($container, $container
->get('entity_type.manager')
->getDefinition('developer_app'));
}
/**
* {@inheritdoc}
*/
protected function buildEntityIdQuery() : QueryInterface {
$query = parent::buildEntityIdQuery();
$user = $this->routeMatch
->getParameter('user');
$developer_id = $user
->get('apigee_edge_developer_id')->value;
// If developer id can not be retrieved for a Drupal user it means that
// either there is connection error or the site is out of sync with
// Apigee Edge.
if ($developer_id === NULL) {
throw new DeveloperDoesNotExistException($user
->getEmail());
}
$query
->condition('developerId', $developer_id);
return $query;
}
/**
* {@inheritdoc}
*/
protected function getDefaultOperations(EntityInterface $entity) {
$operations = parent::getDefaultOperations($entity);
foreach ($operations as $operation => $parameters) {
if ($entity
->hasLinkTemplate("{$operation}-for-developer")) {
$operations[$operation]['url'] = $entity
->toUrl("{$operation}-for-developer");
}
if ($entity
->hasLinkTemplate("{$operation}-form-for-developer")) {
$operations[$operation]['url'] = $this
->ensureDestination($entity
->toUrl("{$operation}-form-for-developer"));
}
}
return $operations;
}
/**
* {@inheritdoc}
*/
protected function generateCssIdForApp(AppInterface $app) : string {
// If we are listing the apps of a developer then developer app name is also
// unique. But this method must return the same CSS id for an app within
// the same page request.
if (!array_key_exists($app
->getName(), $this->appNameCssIdCache)) {
$this->appNameCssIdCache[$app
->getName()] = Html::getUniqueId($app
->getName());
}
return $this->appNameCssIdCache[$app
->getName()];
}
/**
* {@inheritdoc}
*/
protected function renderAppName(AppInterface $app) : array {
if ($app
->access('view')) {
return $app
->toLink(NULL, 'canonical-by-developer')
->toRenderable();
}
return parent::renderAppName($app);
}
/**
* Redirects users to their Apps page.
*
* This controller assumes that it is only invoked for authenticated users.
* This is enforced for the 'apigee_edge.user.apps' route with the
* '_user_is_logged_in' requirement.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* Returns a redirect to the Apps of the currently logged in user.
*/
public function appsPage() : RedirectResponse {
$options['absolute'] = TRUE;
$url = Url::fromRoute('entity.developer_app.collection_by_developer', [
'user' => $this->currentUser
->id(),
], $options);
return new RedirectResponse($url
->toString(), 302);
}
/**
* Returns the title of the "developer app list by user" page.
*
* @return \Drupal\Core\StringTranslation\TranslatableMarkup
* The title of the page.
*/
public function pageTitle() : TranslatableMarkup {
/** @var \Drupal\user\UserInterface $account */
$account = $this->routeMatch
->getParameter('user');
if ($account && $account
->id() != $this->currentUser
->id()) {
$args['@user'] = Markup::create($account
->label());
$title = $this
->t('Apps of @user', $args);
}
else {
$title = apigee_edge_app_listing_page_title();
}
return $title;
}
/**
* {@inheritdoc}
*/
protected function getCacheMaxAge() {
return $this->configFactory
->get('apigee_edge.developer_app_settings')
->get('cache_expiration');
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AppListBuilder:: |
protected | property | The app warnings checker. | |
AppListBuilder:: |
protected | property |
The config factory. Overrides EdgeEntityListBuilder:: |
|
AppListBuilder:: |
protected | property | The renderer service. | |
AppListBuilder:: |
protected | property | The request stack. | |
AppListBuilder:: |
protected | property | The time service. | |
AppListBuilder:: |
public | function |
Builds the header row for the entity listing. Overrides EntityListBuilder:: |
1 |
AppListBuilder:: |
protected | function | Builds an info row for an app in the entity listing. | 1 |
AppListBuilder:: |
public | function |
Builds a row for an entity in the entity listing. Overrides EntityListBuilder:: |
|
AppListBuilder:: |
protected | function | Builds a warning row for an app in the entity listing. | |
AppListBuilder:: |
protected | function | Checks credentials of an app and returns warnings about them. | |
AppListBuilder:: |
final protected | function | Returns the CSS ID of the app info row. | |
AppListBuilder:: |
final protected | function | Returns the CSS ID of the app warning row. | |
AppListBuilder:: |
public | function |
Builds the entity listing as renderable array for table.html.twig. Overrides EdgeEntityListBuilder:: |
1 |
AppListBuilder:: |
protected | function | Renders the status of an app for the entity list. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
DeveloperAppListBuilderForDeveloper:: |
private | property | Associative array that contains generated CSS entity ids for apps by name. | |
DeveloperAppListBuilderForDeveloper:: |
protected | property | The current user. | |
DeveloperAppListBuilderForDeveloper:: |
protected | property | Route match object. | |
DeveloperAppListBuilderForDeveloper:: |
public | function | Redirects users to their Apps page. | |
DeveloperAppListBuilderForDeveloper:: |
protected | function |
Builds an entity query used by entity listing. Overrides EdgeEntityListBuilder:: |
|
DeveloperAppListBuilderForDeveloper:: |
public static | function |
Because we use the _controller directive in the route we had to implement
the ContainerInjectionInterface interface. Overrides ContainerInjectionInterface:: |
|
DeveloperAppListBuilderForDeveloper:: |
public static | function |
Instantiates a new instance of this entity handler. Overrides AppListBuilder:: |
|
DeveloperAppListBuilderForDeveloper:: |
protected | function |
Generates a unique CSS id for an app. Overrides AppListBuilder:: |
|
DeveloperAppListBuilderForDeveloper:: |
protected | function |
Returns the cache max age. Overrides EdgeEntityListBuilder:: |
|
DeveloperAppListBuilderForDeveloper:: |
protected | function |
Gets this list's default operations. Overrides AppListBuilder:: |
|
DeveloperAppListBuilderForDeveloper:: |
public | function | Returns the title of the "developer app list by user" page. | |
DeveloperAppListBuilderForDeveloper:: |
protected | function |
Renders the name of an app for the entity list. Overrides AppListBuilder:: |
|
DeveloperAppListBuilderForDeveloper:: |
public | function |
DeveloperAppListBuilderForDeveloper constructor. Overrides AppListBuilder:: |
|
EdgeEntityListBuilder:: |
protected | property | The entity type manager service. | |
EdgeEntityListBuilder:: |
constant | The default display type. | ||
EdgeEntityListBuilder:: |
protected | function | Returns the display settings. | |
EdgeEntityListBuilder:: |
final protected | function |
Loads entity IDs using a pager sorted by the entity id. Overrides EntityListBuilder:: |
|
EdgeEntityListBuilder:: |
protected | function | Renders a list of entities using the provided view mode. | |
EdgeEntityListBuilder:: |
protected | function | Returns TRUE if entity type is configure to use provided display type. | |
EdgeEntityListBuilder:: |
constant | The view mode display type. | ||
EntityHandlerBase:: |
protected | property | The module handler to invoke hooks on. | 2 |
EntityHandlerBase:: |
protected | function | Gets the module handler. | 2 |
EntityHandlerBase:: |
public | function | Sets the module handler for this handler. | |
EntityListBuilder:: |
protected | property | Information about the entity type. | |
EntityListBuilder:: |
protected | property | The entity type ID. | |
EntityListBuilder:: |
protected | property | The number of entities to list per page, or FALSE to list all entities. | 3 |
EntityListBuilder:: |
protected | property | The entity storage class. | 1 |
EntityListBuilder:: |
public | function | Builds a renderable list of operation links for the entity. | 2 |
EntityListBuilder:: |
protected | function | Ensures that a destination is present on the given URL. | |
EntityListBuilder:: |
protected | function | Gets the label of an entity. | |
EntityListBuilder:: |
public | function |
Provides an array of information to build a list of operation links. Overrides EntityListBuilderInterface:: |
2 |
EntityListBuilder:: |
public | function |
Gets the entity storage. Overrides EntityListBuilderInterface:: |
|
EntityListBuilder:: |
protected | function | Gets the title of the page. | 1 |
EntityListBuilder:: |
public | function |
Loads entities of this type from storage for listing. Overrides EntityListBuilderInterface:: |
4 |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |