class TeamStorage in Apigee Edge 8
Entity storage implementation for teams.
Hierarchy
- class \Drupal\Core\Entity\EntityHandlerBase uses DependencySerializationTrait, StringTranslationTrait
- class \Drupal\Core\Entity\EntityStorageBase implements EntityHandlerInterface, EntityStorageInterface
- class \Drupal\apigee_edge\Entity\Storage\EdgeEntityStorageBase implements EdgeEntityStorageInterface
- class \Drupal\apigee_edge\Entity\Storage\FieldableEdgeEntityStorageBase implements FieldableEdgeEntityStorageInterface
- class \Drupal\apigee_edge\Entity\Storage\AttributesAwareFieldableEdgeEntityStorageBase implements AttributesAwareFieldableEdgeEntityStorageInterface
- class \Drupal\apigee_edge_teams\Entity\Storage\TeamStorage implements TeamStorageInterface
- class \Drupal\apigee_edge\Entity\Storage\AttributesAwareFieldableEdgeEntityStorageBase implements AttributesAwareFieldableEdgeEntityStorageInterface
- class \Drupal\apigee_edge\Entity\Storage\FieldableEdgeEntityStorageBase implements FieldableEdgeEntityStorageInterface
- class \Drupal\apigee_edge\Entity\Storage\EdgeEntityStorageBase implements EdgeEntityStorageInterface
- class \Drupal\Core\Entity\EntityStorageBase implements EntityHandlerInterface, EntityStorageInterface
Expanded class hierarchy of TeamStorage
File
- modules/
apigee_edge_teams/ src/ Entity/ Storage/ TeamStorage.php, line 45
Namespace
Drupal\apigee_edge_teams\Entity\StorageView source
class TeamStorage extends AttributesAwareFieldableEdgeEntityStorageBase implements TeamStorageInterface {
/**
* The team controller service.
*
* @var \Drupal\apigee_edge_teams\Entity\Controller\TeamControllerInterface
*/
private $teamController;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The logger.
*
* @var \Psr\Log\LoggerInterface
*/
private $logger;
/**
* Constructs an DeveloperStorage instance.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type definition.
* @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
* The cache backend to be used.
* @param \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface $memory_cache
* The memory cache.
* @param \Drupal\Component\Datetime\TimeInterface $system_time
* The system time.
* @param \Drupal\apigee_edge_teams\Entity\Controller\TeamControllerInterface $team_controller
* The team controller service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config
* Configuration factory.
* @param \Psr\Log\LoggerInterface $logger
* The logger.
*/
public function __construct(EntityTypeInterface $entity_type, CacheBackendInterface $cache_backend, MemoryCacheInterface $memory_cache, TimeInterface $system_time, TeamControllerInterface $team_controller, EntityTypeManagerInterface $entity_type_manager, ConfigFactoryInterface $config, LoggerInterface $logger) {
parent::__construct($entity_type, $cache_backend, $memory_cache, $system_time);
$this->teamController = $team_controller;
$this->cacheExpiration = $config
->get('apigee_edge_teams.team_settings')
->get('cache_expiration');
$this->entityTypeManager = $entity_type_manager;
$this->logger = $logger;
}
/**
* {@inheritdoc}
*/
public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
return new static($entity_type, $container
->get('cache.apigee_edge_entity'), $container
->get('entity.memory_cache'), $container
->get('datetime.time'), $container
->get('apigee_edge_teams.controller.team'), $container
->get('entity_type.manager'), $container
->get('config.factory'), $container
->get('logger.channel.apigee_edge_teams'));
}
/**
* {@inheritdoc}
*/
protected function entityController() : EdgeEntityControllerInterface {
if ($this->teamController instanceof EntityCacheAwareControllerInterface) {
return new CachedManagementApiEdgeEntityControllerProxy($this->teamController);
}
return new ManagementApiEdgeEntityControllerProxy($this->teamController);
}
/**
* {@inheritdoc}
*/
protected function doSave($id, EntityInterface $entity) {
/** @var \Drupal\apigee_edge_teams\Entity\TeamInterface $entity */
$team_status = $entity
->getStatus();
$result = parent::doSave($id, $entity);
// Change the status of the team (company) in Apigee Edge.
// TODO Only change it if it has changed.
try {
$this->teamController
->setStatus($entity
->id(), $team_status);
} catch (ApiException $exception) {
throw new EntityStorageException($exception
->getMessage(), $exception
->getCode(), $exception);
}
// Apply status change in the entity object as well.
$entity
->setStatus($team_status);
return $result;
}
/**
* {@inheritdoc}
*/
protected function doPostSave(EntityInterface $entity, $update) {
/** @var \Drupal\apigee_edge_teams\Entity\TeamInterface $entity */
if (!$update) {
/** @var \Drupal\apigee_edge_teams\Entity\Storage\TeamMemberRoleStorageInterface $team_member_role_storage */
$team_member_role_storage = $this->entityTypeManager
->getStorage('team_member_role');
/** @var \Drupal\apigee_edge_teams\Entity\TeamMemberRoleInterface[] $team_roles_by_teams */
$team_roles_by_teams = $team_member_role_storage
->loadByTeam($entity);
if ($team_roles_by_teams) {
// Teams (Companies) can be deleted outside of Drupal so it could
// happen that remnant team member roles exist in database when
// a new team gets created with a previously used team id.
$context = [
'%team' => "{$entity->label()} ({$entity->id()})",
'link' => $entity
->toLink($this
->t('Members'), 'members')
->toString(),
];
$this->logger
->warning('Integrity check: Remnant team member roles found for new %team team.', $context);
$success = TRUE;
foreach ($team_roles_by_teams as $team_member_role) {
try {
$team_member_role
->delete();
} catch (\Exception $exception) {
$success = FALSE;
$context += Error::decodeException($exception);
$this->logger
->warning('Failed to remove remnant developer role from new %team team. @message %function (line %line of %file). <pre>@backtrace_string</pre>', $context);
}
}
if ($success) {
$this->logger
->info('Integrity check: Successfully removed all remnant team member roles in association with the new %team team.', $context);
}
else {
$this->logger
->critical('Integrity check: Failed to remove all remnant team member roles from the database for the new %team team.', $context);
}
}
}
parent::doPostSave($entity, $update);
}
/**
* {@inheritdoc}
*/
protected function doDelete($entities) {
parent::doDelete($entities);
/** @var \Drupal\apigee_edge_teams\Entity\Storage\TeamMemberRoleStorageInterface $team_member_role_storage */
$team_member_role_storage = $this->entityTypeManager
->getStorage('team_member_role');
/** @var \Drupal\apigee_edge_teams\Entity\TeamMemberRoleInterface[] $dev_roles_by_teams */
$dev_roles_by_teams = $team_member_role_storage
->loadByProperties([
'team' => array_keys($entities),
]);
// When a team gets deleted all team member roles related to the team
// should be deleted from the database.
foreach ($dev_roles_by_teams as $role) {
try {
$role
->delete();
} catch (\Exception $exception) {
$context = [
'%team' => "{$role->getTeam()->label()} ({$role->getTeam()->id()})",
'%developer' => $role
->getDeveloper()
->getEmail(),
];
$context += Error::decodeException($exception);
$this->logger
->critical("Integrity check: Failed to remove %developer team member's role(s) from %team team when team got deleted. @message %function (line %line of %file). <pre>@backtrace_string</pre>", $context);
}
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AttributesAwareFieldableEdgeEntityStorageBase:: |
public | function |
Determines the number of entities with values for a given field. Overrides FieldableEdgeEntityStorageBase:: |
|
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 | |
EdgeEntityStorageBase:: |
protected | property | Cache backend. | |
EdgeEntityStorageBase:: |
protected | property | Number of seconds until an entity can be served from cache. | |
EdgeEntityStorageBase:: |
protected | property | The system time. | |
EdgeEntityStorageBase:: |
protected | function |
Builds the cache ID for the passed in entity ID. Overrides EntityStorageBase:: |
|
EdgeEntityStorageBase:: |
protected | function | Creates a new Drupal entity from an SDK entity. | |
EdgeEntityStorageBase:: |
public | function |
Delete a specific entity revision. Overrides EntityStorageInterface:: |
|
EdgeEntityStorageBase:: |
protected | function |
Performs storage-specific loading of entities. Overrides EntityStorageBase:: |
|
EdgeEntityStorageBase:: |
protected | function | Gets entities from the persistent cache backend. | |
EdgeEntityStorageBase:: |
protected | function | Gets entities from the storage. | 1 |
EdgeEntityStorageBase:: |
protected | function | Number of seconds after a cache item expires. | |
EdgeEntityStorageBase:: |
protected | function |
Gets the name of the service for the query for this entity storage. Overrides EntityStorageBase:: |
|
EdgeEntityStorageBase:: |
protected | function |
Determines if this entity already exists in storage. Overrides EntityStorageBase:: |
|
EdgeEntityStorageBase:: |
protected | function | Invokes hook_entity_storage_load(). | |
EdgeEntityStorageBase:: |
public | function |
Load a specific entity revision. Overrides EntityStorageInterface:: |
|
EdgeEntityStorageBase:: |
public | function |
Loads an unchanged entity from the database. Overrides EntityStorageBase:: |
1 |
EdgeEntityStorageBase:: |
final protected | function | Processes loaded (SDK) entities to Drupal entities. | |
EdgeEntityStorageBase:: |
public | function |
Resets the internal, static entity cache. Overrides EntityStorageBase:: |
2 |
EdgeEntityStorageBase:: |
protected | function | Resets entity controller's cache if it is a cached entity controller. | |
EdgeEntityStorageBase:: |
public | constant | Initial status for saving a item to Apigee Edge. | |
EdgeEntityStorageBase:: |
protected | function | Stores entities in the persistent cache backend. | 2 |
EdgeEntityStorageBase:: |
protected | function | Wraps communication with Apigee Edge. | |
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. | |
EntityStorageBase:: |
protected | property | Name of the entity class. | |
EntityStorageBase:: |
protected | property | Information about the entity type. | |
EntityStorageBase:: |
protected | property | Entity type ID for this storage. | |
EntityStorageBase:: |
protected | property | Name of the entity's ID field in the entity database table. | |
EntityStorageBase:: |
protected | property | The name of the entity langcode property. | 1 |
EntityStorageBase:: |
protected | property | The memory cache. | |
EntityStorageBase:: |
protected | property | The memory cache cache tag. | |
EntityStorageBase:: |
protected | property | Name of entity's UUID database table field, if it supports UUIDs. | 1 |
EntityStorageBase:: |
protected | property | The UUID service. | 1 |
EntityStorageBase:: |
protected | function | Builds an entity query. | 1 |
EntityStorageBase:: |
public | function |
Constructs a new entity object, without permanently saving it. Overrides EntityStorageInterface:: |
1 |
EntityStorageBase:: |
public | function |
Deletes permanently saved entities. Overrides EntityStorageInterface:: |
2 |
EntityStorageBase:: |
protected | function | Performs presave entity processing. | 1 |
EntityStorageBase:: |
public | function |
Gets an aggregated query instance. Overrides EntityStorageInterface:: |
|
EntityStorageBase:: |
public | function |
Gets the entity type definition. Overrides EntityStorageInterface:: |
|
EntityStorageBase:: |
public | function |
Gets the entity type ID. Overrides EntityStorageInterface:: |
|
EntityStorageBase:: |
protected | function | Gets entities from the static cache. | |
EntityStorageBase:: |
public | function |
Gets an entity query instance. Overrides EntityStorageInterface:: |
|
EntityStorageBase:: |
public | function |
Determines if the storage contains any data. Overrides EntityStorageInterface:: |
3 |
EntityStorageBase:: |
protected | function | Invokes a hook on behalf of the entity. | 2 |
EntityStorageBase:: |
public | function |
Loads one entity. Overrides EntityStorageInterface:: |
2 |
EntityStorageBase:: |
public | function |
Load entities by their property values. Overrides EntityStorageInterface:: |
3 |
EntityStorageBase:: |
public | function |
Loads one or more entities. Overrides EntityStorageInterface:: |
1 |
EntityStorageBase:: |
protected | function | Maps from storage records to entity objects. | 4 |
EntityStorageBase:: |
protected | function | Attaches data to entities upon loading. | |
EntityStorageBase:: |
protected | function | Gathers entities from a 'preload' step. | 1 |
EntityStorageBase:: |
public | function |
Restores a previously saved entity. Overrides EntityStorageInterface:: |
1 |
EntityStorageBase:: |
public | function |
Saves the entity permanently. Overrides EntityStorageInterface:: |
4 |
EntityStorageBase:: |
protected | function | Stores entities in the static entity cache. | |
EntityStorageInterface:: |
constant | Load the most recent version of an entity's field data. | ||
EntityStorageInterface:: |
constant | Load the version of an entity's field data specified in the entity. | ||
FieldableEdgeEntityStorageBase:: |
protected | function |
Overrides EntityStorageBase:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Performs final cleanup after all data of a field has been purged. Overrides FieldableEntityStorageInterface:: |
|
FieldableEdgeEntityStorageBase:: |
protected | function |
Generates cache tags for entities. Overrides EdgeEntityStorageBase:: |
1 |
FieldableEdgeEntityStorageBase:: |
protected | function | Initializes field values. | 1 |
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the creation of the entity type. Overrides EntityTypeListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the deletion of the entity type. Overrides EntityTypeListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the update of the entity type. Overrides EntityTypeListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the creation of the fieldable entity type. Overrides EntityTypeListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the update of a fieldable entity type. Overrides EntityTypeListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the creation of a field. Overrides FieldDefinitionListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the deletion of a field. Overrides FieldDefinitionListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the update of a field. Overrides FieldDefinitionListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the creation of a field storage definition. Overrides FieldStorageDefinitionListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the deletion of a field storage definition. Overrides FieldStorageDefinitionListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Reacts to the update of a field storage definition. Overrides FieldStorageDefinitionListenerInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Purges a batch of field data. Overrides FieldableEntityStorageInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Checks if existing data would be lost if the schema changes were applied. Overrides EntityStorageSchemaInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Checks if the changes to the entity type requires storage schema changes. Overrides EntityStorageSchemaInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Checks if existing data would be lost if the schema changes were applied. Overrides DynamicallyFieldableEntityStorageSchemaInterface:: |
|
FieldableEdgeEntityStorageBase:: |
public | function |
Checks if the changes to the storage definition requires schema changes. Overrides DynamicallyFieldableEntityStorageSchemaInterface:: |
|
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. | |
TeamStorage:: |
protected | property | The entity type manager. | |
TeamStorage:: |
private | property | The logger. | |
TeamStorage:: |
private | property | The team controller service. | |
TeamStorage:: |
public static | function |
Instantiates a new instance of this entity handler. Overrides EdgeEntityStorageBase:: |
|
TeamStorage:: |
protected | function |
Performs storage-specific entity deletion. Overrides EdgeEntityStorageBase:: |
|
TeamStorage:: |
protected | function |
Performs post save entity processing. Overrides EntityStorageBase:: |
|
TeamStorage:: |
protected | function |
Performs storage-specific saving of the entity. Overrides EdgeEntityStorageBase:: |
|
TeamStorage:: |
protected | function |
Returns the wrapped controller instance used by this storage. Overrides EdgeEntityStorageBase:: |
|
TeamStorage:: |
public | function |
Constructs an DeveloperStorage instance. Overrides EdgeEntityStorageBase:: |