class TaxonomyViewsIntegratorManager in Taxonomy Views Integrator 8
Default implementation of TaxonomyViewsIntegratorManagerInterface.
The manager will inspect the configuration of the passed TermInterface object and determine which view will be injected as the page output.
At a later point, it would be great to support adherence to the Views permission settings, there is an outstanding patch and issue for that.
Hierarchy
- class \Drupal\tvi\Service\TaxonomyViewsIntegratorManager implements \Symfony\Component\DependencyInjection\ContainerAwareInterface, TaxonomyViewsIntegratorManagerInterface uses \Symfony\Component\DependencyInjection\ContainerAwareTrait
Expanded class hierarchy of TaxonomyViewsIntegratorManager
1 string reference to 'TaxonomyViewsIntegratorManager'
1 service uses TaxonomyViewsIntegratorManager
File
- src/
Service/ TaxonomyViewsIntegratorManager.php, line 23
Namespace
Drupal\tvi\ServiceView source
class TaxonomyViewsIntegratorManager implements TaxonomyViewsIntegratorManagerInterface, ContainerAwareInterface {
use ContainerAwareTrait;
/**
* Core config factory service.
*
* @var \Drupal\Core\Config\ConfigFactory
*/
private $config;
/**
* The entity type manager service.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
private $entityTypeManager;
/**
* The current request stack.
*
* @var \Symfony\Component\HttpFoundation\Request
*/
private $requestStack;
/**
* TaxonomyViewsIntegratorManager constructor.
*
* @param \Drupal\Core\Config\ConfigFactory $config
* Core config factory service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager service.
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
* The current request stack.
*/
public function __construct(ConfigFactory $config, EntityTypeManagerInterface $entity_type_manager, RequestStack $requestStack) {
$this->config = $config;
$this->entityTypeManager = $entity_type_manager;
$this->requestStack = $requestStack;
}
/**
* Get the taxonomy view integrator settings for this term entity.
*
* @param \Drupal\taxonomy\TermInterface $taxonomy_term
* Active taxonomy term.
*
* @return \Drupal\Core\Config\Config
* TVI config for the term.
*/
public function getTermConfigSettings(TermInterface $taxonomy_term) {
return $this->config
->get('tvi.taxonomy_term.' . $taxonomy_term
->id());
}
/**
* Get the taxonomy view integrator settings for this terms vocabulary entity.
*
* @param \Drupal\taxonomy\TermInterface $taxonomy_term
* Active taxonomy term.
*
* @return \Drupal\Core\Config\Config
* TVI config for the vocabulary.
*/
public function getVocabularyConfigSettings(TermInterface $taxonomy_term) {
return $this->config
->get('tvi.taxonomy_vocabulary.' . $taxonomy_term
->bundle());
}
/**
* Get the default taxonomy view integrator settings.
*
* @return \Drupal\Core\Config\Config
* The TVI configuration.
*/
public function getDefaultConfigSettings() {
return $this->config
->get('tvi.global_settings');
}
/**
* Wrapper method for obtaining parents of a given taxonomy term.
*
* @param \Drupal\taxonomy\TermInterface $taxonomy_term
* Starting term.
*
* @return array
* Parent terms of given term.
*/
public function getTermParents(TermInterface $taxonomy_term) {
return $this->entityTypeManager
->getStorage('taxonomy_term')
->loadAllParents($taxonomy_term
->id());
}
/**
* Return an array of arguments from the URI.
*
* It is assumed tha URI will be taxonomy/term/{taxonomy_term}, so anything
* after that will be returned.
*
* @return array
* Views arguments.
*/
public function getRequestUriArguments() {
return array_slice(explode('/', $this->requestStack
->getCurrentRequest()
->getRequestUri()), 3);
}
/**
* {@inheritdoc}
*/
public function getTaxonomyTermView(TermInterface $taxonomy_term) {
$view_info = $this
->getTaxonomyTermViewAndDisplayId($taxonomy_term);
$config = $this
->getTermConfigSettings($taxonomy_term);
$view_arguments = [
$taxonomy_term
->id(),
];
// If the option to pass all args to views is enabled, pass them on.
if ($config
->get('pass_arguments')) {
$view_arguments += $this
->getRequestUriArguments();
}
$build = NULL;
if ($view_info['display_id']) {
$view = Views::getView($view_info['view_id']);
// Ensure view exists and is enabled.
if ($view && $view->storage
->status()) {
$view->override_url = Url::fromUri($this->requestStack
->getCurrentRequest()
->getUri());
$build = $view
->executeDisplay($view_info['display_id'], $view_arguments);
}
}
if (!$build) {
$build = $this->entityTypeManager
->getViewBuilder('taxonomy_term')
->view($taxonomy_term, 'full');
}
return $build;
}
/**
* {@inheritdoc}
*/
public function getTaxonomyTermViewAndDisplayId(TermInterface $taxonomy_term) {
// If we have no matches, we are going to call the default core term view.
$view_name = 'taxonomy_term';
$view_id = 'page_1';
$global_config = $this
->getDefaultConfigSettings();
if ($global_config
->get('disable_default_view')) {
$view_name = NULL;
$view_id = NULL;
}
elseif ($global_config
->get('enable_override')) {
$view_name = $global_config
->get('view');
$view_id = $global_config
->get('view_display');
}
// Check for global overrides.
$term_config = $this
->getTermConfigSettings($taxonomy_term);
if ($term_config
->get('enable_override')) {
$view_name = $term_config
->get('view');
$view_id = $term_config
->get('view_display');
}
else {
// Check parent terms and vocab for settings.
$vocab_config = $this
->getVocabularyConfigSettings($taxonomy_term);
if ($vocab_config
->get('enable_override') && $vocab_config
->get('inherit_settings')) {
$view_name = $vocab_config
->get('view');
$view_id = $vocab_config
->get('view_display');
}
$parents = $this
->getTermParents($taxonomy_term);
unset($parents[$taxonomy_term
->id()]);
foreach ($parents as $parent) {
$parent_config = $this
->getTermConfigSettings($parent);
if ($parent_config
->get('enable_override') && $parent_config
->get('inherit_settings')) {
$view_name = $parent_config
->get('view');
$view_id = $parent_config
->get('view_display');
break;
}
}
}
return [
'view_id' => $view_name,
'display_id' => $view_id,
];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
TaxonomyViewsIntegratorManager:: |
private | property | Core config factory service. | |
TaxonomyViewsIntegratorManager:: |
private | property | The entity type manager service. | |
TaxonomyViewsIntegratorManager:: |
private | property | The current request stack. | |
TaxonomyViewsIntegratorManager:: |
public | function | Get the default taxonomy view integrator settings. | |
TaxonomyViewsIntegratorManager:: |
public | function | Return an array of arguments from the URI. | |
TaxonomyViewsIntegratorManager:: |
public | function |
Return the taxonomy term View per taxonomy view integrator settings. Overrides TaxonomyViewsIntegratorManagerInterface:: |
|
TaxonomyViewsIntegratorManager:: |
public | function |
Return array with view and display id for current term based on settings. Overrides TaxonomyViewsIntegratorManagerInterface:: |
|
TaxonomyViewsIntegratorManager:: |
public | function | Get the taxonomy view integrator settings for this term entity. | |
TaxonomyViewsIntegratorManager:: |
public | function | Wrapper method for obtaining parents of a given taxonomy term. | |
TaxonomyViewsIntegratorManager:: |
public | function | Get the taxonomy view integrator settings for this terms vocabulary entity. | |
TaxonomyViewsIntegratorManager:: |
public | function | TaxonomyViewsIntegratorManager constructor. |