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 }
|