Mercurial > hg > isophonics-drupal-site
diff core/modules/content_translation/src/ContentTranslationPermissions.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/content_translation/src/ContentTranslationPermissions.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,93 @@ +<?php + +namespace Drupal\content_translation; + +use Drupal\Core\DependencyInjection\ContainerInjectionInterface; +use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\StringTranslation\StringTranslationTrait; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Provides dynamic permissions for the content_translation module. + */ +class ContentTranslationPermissions implements ContainerInjectionInterface { + + use StringTranslationTrait; + + /** + * The entity manager. + * + * @var \Drupal\Core\Entity\EntityManagerInterface + */ + protected $entityManager; + + /** + * The content translation manager. + * + * @var \Drupal\content_translation\ContentTranslationManagerInterface + */ + protected $contentTranslationManager; + + /** + * Constructs a ContentTranslationPermissions instance. + * + * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * The entity manager. + * @param \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager + * The content translation manager. + */ + public function __construct(EntityManagerInterface $entity_manager, ContentTranslationManagerInterface $content_translation_manager) { + $this->entityManager = $entity_manager; + $this->contentTranslationManager = $content_translation_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('entity.manager'), + $container->get('content_translation.manager') + ); + } + + /** + * Returns an array of content translation permissions. + * + * @return array + */ + public function contentPermissions() { + $permission = []; + // Create a translate permission for each enabled entity type and (optionally) + // bundle. + foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) { + if ($permission_granularity = $entity_type->getPermissionGranularity()) { + $t_args = ['@entity_label' => $entity_type->getLowercaseLabel()]; + + switch ($permission_granularity) { + case 'bundle': + foreach ($this->entityManager->getBundleInfo($entity_type_id) as $bundle => $bundle_info) { + if ($this->contentTranslationManager->isEnabled($entity_type_id, $bundle)) { + $t_args['%bundle_label'] = isset($bundle_info['label']) ? $bundle_info['label'] : $bundle; + $permission["translate $bundle $entity_type_id"] = [ + 'title' => $this->t('Translate %bundle_label @entity_label', $t_args), + ]; + } + } + break; + + case 'entity_type': + if ($this->contentTranslationManager->isEnabled($entity_type_id)) { + $permission["translate $entity_type_id"] = [ + 'title' => $this->t('Translate @entity_label', $t_args), + ]; + } + break; + } + } + } + + return $permission; + } + +}