annotate 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
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\content_translation;
Chris@0 4
Chris@0 5 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
Chris@0 6 use Drupal\Core\Entity\EntityManagerInterface;
Chris@0 7 use Drupal\Core\StringTranslation\StringTranslationTrait;
Chris@0 8 use Symfony\Component\DependencyInjection\ContainerInterface;
Chris@0 9
Chris@0 10 /**
Chris@0 11 * Provides dynamic permissions for the content_translation module.
Chris@0 12 */
Chris@0 13 class ContentTranslationPermissions implements ContainerInjectionInterface {
Chris@0 14
Chris@0 15 use StringTranslationTrait;
Chris@0 16
Chris@0 17 /**
Chris@0 18 * The entity manager.
Chris@0 19 *
Chris@0 20 * @var \Drupal\Core\Entity\EntityManagerInterface
Chris@0 21 */
Chris@0 22 protected $entityManager;
Chris@0 23
Chris@0 24 /**
Chris@0 25 * The content translation manager.
Chris@0 26 *
Chris@0 27 * @var \Drupal\content_translation\ContentTranslationManagerInterface
Chris@0 28 */
Chris@0 29 protected $contentTranslationManager;
Chris@0 30
Chris@0 31 /**
Chris@0 32 * Constructs a ContentTranslationPermissions instance.
Chris@0 33 *
Chris@0 34 * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
Chris@0 35 * The entity manager.
Chris@0 36 * @param \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager
Chris@0 37 * The content translation manager.
Chris@0 38 */
Chris@0 39 public function __construct(EntityManagerInterface $entity_manager, ContentTranslationManagerInterface $content_translation_manager) {
Chris@0 40 $this->entityManager = $entity_manager;
Chris@0 41 $this->contentTranslationManager = $content_translation_manager;
Chris@0 42 }
Chris@0 43
Chris@0 44 /**
Chris@0 45 * {@inheritdoc}
Chris@0 46 */
Chris@0 47 public static function create(ContainerInterface $container) {
Chris@0 48 return new static(
Chris@0 49 $container->get('entity.manager'),
Chris@0 50 $container->get('content_translation.manager')
Chris@0 51 );
Chris@0 52 }
Chris@0 53
Chris@0 54 /**
Chris@0 55 * Returns an array of content translation permissions.
Chris@0 56 *
Chris@0 57 * @return array
Chris@0 58 */
Chris@0 59 public function contentPermissions() {
Chris@0 60 $permission = [];
Chris@0 61 // Create a translate permission for each enabled entity type and (optionally)
Chris@0 62 // bundle.
Chris@0 63 foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) {
Chris@0 64 if ($permission_granularity = $entity_type->getPermissionGranularity()) {
Chris@0 65 $t_args = ['@entity_label' => $entity_type->getLowercaseLabel()];
Chris@0 66
Chris@0 67 switch ($permission_granularity) {
Chris@0 68 case 'bundle':
Chris@0 69 foreach ($this->entityManager->getBundleInfo($entity_type_id) as $bundle => $bundle_info) {
Chris@0 70 if ($this->contentTranslationManager->isEnabled($entity_type_id, $bundle)) {
Chris@0 71 $t_args['%bundle_label'] = isset($bundle_info['label']) ? $bundle_info['label'] : $bundle;
Chris@0 72 $permission["translate $bundle $entity_type_id"] = [
Chris@0 73 'title' => $this->t('Translate %bundle_label @entity_label', $t_args),
Chris@0 74 ];
Chris@0 75 }
Chris@0 76 }
Chris@0 77 break;
Chris@0 78
Chris@0 79 case 'entity_type':
Chris@0 80 if ($this->contentTranslationManager->isEnabled($entity_type_id)) {
Chris@0 81 $permission["translate $entity_type_id"] = [
Chris@0 82 'title' => $this->t('Translate @entity_label', $t_args),
Chris@0 83 ];
Chris@0 84 }
Chris@0 85 break;
Chris@0 86 }
Chris@0 87 }
Chris@0 88 }
Chris@0 89
Chris@0 90 return $permission;
Chris@0 91 }
Chris@0 92
Chris@0 93 }