Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 14 |
CRAP | |
0.00% |
0 / 76 |
EntityDisplayRepository | |
0.00% |
0 / 1 |
|
0.00% |
0 / 14 |
650 | |
0.00% |
0 / 76 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
getAllViewModes | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getViewModes | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getAllFormModes | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getFormModes | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getAllDisplayModesByEntityType | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 19 |
|||
getDisplayModesByEntityType | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 11 |
|||
getViewModeOptions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getFormModeOptions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getViewModeOptionsByBundle | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getFormModeOptionsByBundle | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getDisplayModeOptions | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 6 |
|||
getDisplayModeOptionsByBundle | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 16 |
|||
clearDisplayModeInfo | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Entity\EntityDisplayRepository. | |
*/ | |
namespace Drupal\Core\Entity; | |
use Drupal\Core\Cache\CacheBackendInterface; | |
use Drupal\Core\Cache\UseCacheBackendTrait; | |
use Drupal\Core\Extension\ModuleHandlerInterface; | |
use Drupal\Core\Language\LanguageInterface; | |
use Drupal\Core\Language\LanguageManagerInterface; | |
use Drupal\Core\StringTranslation\StringTranslationTrait; | |
/** | |
* Provides a repository for entity display objects (view modes and form modes). | |
*/ | |
class EntityDisplayRepository implements EntityDisplayRepositoryInterface { | |
use UseCacheBackendTrait; | |
use StringTranslationTrait; | |
/** | |
* Static cache of display modes information. | |
* | |
* @var array | |
*/ | |
protected $displayModeInfo = []; | |
/** | |
* The language manager. | |
* | |
* @var \Drupal\Core\Language\LanguageManagerInterface | |
*/ | |
protected $languageManager; | |
/** | |
* The entity type manager. | |
* | |
* @var \Drupal\Core\Entity\EntityTypeManagerInterface | |
*/ | |
protected $entityTypeManager; | |
/** | |
* The module handler. | |
* | |
* @var \Drupal\Core\Extension\ModuleHandlerInterface | |
*/ | |
protected $moduleHandler; | |
/** | |
* Constructs a new EntityDisplayRepository. | |
* | |
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager | |
* The entity type manager. | |
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler | |
* The module handler. | |
* @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend | |
* The cache backend. | |
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
* The language manager. | |
*/ | |
public function __construct(EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManagerInterface $language_manager) { | |
$this->entityTypeManager = $entity_type_manager; | |
$this->moduleHandler = $module_handler; | |
$this->cacheBackend = $cache_backend; | |
$this->languageManager = $language_manager; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getAllViewModes() { | |
return $this->getAllDisplayModesByEntityType('view_mode'); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getViewModes($entity_type_id) { | |
return $this->getDisplayModesByEntityType('view_mode', $entity_type_id); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getAllFormModes() { | |
return $this->getAllDisplayModesByEntityType('form_mode'); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getFormModes($entity_type_id) { | |
return $this->getDisplayModesByEntityType('form_mode', $entity_type_id); | |
} | |
/** | |
* Gets the entity display mode info for all entity types. | |
* | |
* @param string $display_type | |
* The display type to be retrieved. It can be "view_mode" or "form_mode". | |
* | |
* @return array | |
* The display mode info for all entity types. | |
*/ | |
protected function getAllDisplayModesByEntityType($display_type) { | |
if (!isset($this->displayModeInfo[$display_type])) { | |
$key = 'entity_' . $display_type . '_info'; | |
$entity_type_id = 'entity_' . $display_type; | |
$langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_INTERFACE)->getId(); | |
if ($cache = $this->cacheGet("$key:$langcode")) { | |
$this->displayModeInfo[$display_type] = $cache->data; | |
} | |
else { | |
$this->displayModeInfo[$display_type] = []; | |
foreach ($this->entityTypeManager->getStorage($entity_type_id)->loadMultiple() as $display_mode) { | |
list($display_mode_entity_type, $display_mode_name) = explode('.', $display_mode->id(), 2); | |
$this->displayModeInfo[$display_type][$display_mode_entity_type][$display_mode_name] = $display_mode->toArray(); | |
} | |
$this->moduleHandler->alter($key, $this->displayModeInfo[$display_type]); | |
$this->cacheSet("$key:$langcode", $this->displayModeInfo[$display_type], CacheBackendInterface::CACHE_PERMANENT, ['entity_types', 'entity_field_info']); | |
} | |
} | |
return $this->displayModeInfo[$display_type]; | |
} | |
/** | |
* Gets the entity display mode info for a specific entity type. | |
* | |
* @param string $display_type | |
* The display type to be retrieved. It can be "view_mode" or "form_mode". | |
* @param string $entity_type_id | |
* The entity type whose display mode info should be returned. | |
* | |
* @return array | |
* The display mode info for a specific entity type. | |
*/ | |
protected function getDisplayModesByEntityType($display_type, $entity_type_id) { | |
if (isset($this->displayModeInfo[$display_type][$entity_type_id])) { | |
return $this->displayModeInfo[$display_type][$entity_type_id]; | |
} | |
else { | |
$display_modes = $this->getAllDisplayModesByEntityType($display_type); | |
if (isset($display_modes[$entity_type_id])) { | |
return $display_modes[$entity_type_id]; | |
} | |
} | |
return []; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getViewModeOptions($entity_type) { | |
return $this->getDisplayModeOptions('view_mode', $entity_type); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getFormModeOptions($entity_type_id) { | |
return $this->getDisplayModeOptions('form_mode', $entity_type_id); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getViewModeOptionsByBundle($entity_type_id, $bundle) { | |
return $this->getDisplayModeOptionsByBundle('view_mode', $entity_type_id, $bundle); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getFormModeOptionsByBundle($entity_type_id, $bundle) { | |
return $this->getDisplayModeOptionsByBundle('form_mode', $entity_type_id, $bundle); | |
} | |
/** | |
* Gets an array of display mode options. | |
* | |
* @param string $display_type | |
* The display type to be retrieved. It can be "view_mode" or "form_mode". | |
* @param string $entity_type_id | |
* The entity type whose display mode options should be returned. | |
* | |
* @return array | |
* An array of display mode labels, keyed by the display mode ID. | |
*/ | |
protected function getDisplayModeOptions($display_type, $entity_type_id) { | |
$options = array('default' => t('Default')); | |
foreach ($this->getDisplayModesByEntityType($display_type, $entity_type_id) as $mode => $settings) { | |
$options[$mode] = $settings['label']; | |
} | |
return $options; | |
} | |
/** | |
* Returns an array of enabled display mode options by bundle. | |
* | |
* @param $display_type | |
* The display type to be retrieved. It can be "view_mode" or "form_mode". | |
* @param string $entity_type_id | |
* The entity type whose display mode options should be returned. | |
* @param string $bundle | |
* The name of the bundle. | |
* | |
* @return array | |
* An array of display mode labels, keyed by the display mode ID. | |
*/ | |
protected function getDisplayModeOptionsByBundle($display_type, $entity_type_id, $bundle) { | |
// Collect all the entity's display modes. | |
$options = $this->getDisplayModeOptions($display_type, $entity_type_id); | |
// Filter out modes for which the entity display is disabled | |
// (or non-existent). | |
$load_ids = array(); | |
// Get the list of available entity displays for the current bundle. | |
foreach (array_keys($options) as $mode) { | |
$load_ids[] = $entity_type_id . '.' . $bundle . '.' . $mode; | |
} | |
// Load the corresponding displays. | |
$displays = $this->entityTypeManager | |
->getStorage($display_type == 'form_mode' ? 'entity_form_display' : 'entity_view_display') | |
->loadMultiple($load_ids); | |
// Unset the display modes that are not active or do not exist. | |
foreach (array_keys($options) as $mode) { | |
$display_id = $entity_type_id . '.' . $bundle . '.' . $mode; | |
if (!isset($displays[$display_id]) || !$displays[$display_id]->status()) { | |
unset($options[$mode]); | |
} | |
} | |
return $options; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function clearDisplayModeInfo() { | |
$this->displayModeInfo = []; | |
return $this; | |
} | |
} |