3 namespace Drupal\permissions_by_term\Controller;
5 use Drupal\Core\Controller\ControllerBase;
6 use Drupal\Core\Entity\EntityFieldManager;
7 use Drupal\permissions_by_term\Service\AccessStorage;
8 use Drupal\permissions_by_term\Service\NodeEntityBundleInfo;
9 use Symfony\Component\HttpFoundation\JsonResponse;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
13 * Class NodeEntityBundleController
15 * @package Drupal\permissions_by_term\Controller
17 class NodeEntityBundleController extends ControllerBase {
20 * @var EntityFieldManager
22 private $entityFieldManager;
27 private $accessStorage;
30 * @var NodeEntityBundleInfo
32 private $nodeEntityBundleInfo;
35 * NodeBundleInfoController constructor.
37 * @param EntityFieldManager $entityFieldManager
38 * @param AccessStorage $accessStorage
39 * @param NodeEntityBundleInfo $nodeEntityBundleInfo
41 public function __construct(EntityFieldManager $entityFieldManager, AccessStorage $accessStorage, NodeEntityBundleInfo $nodeEntityBundleInfo) {
42 $this->entityFieldManager = $entityFieldManager;
43 $this->accessStorage = $accessStorage;
44 $this->nodeEntityBundleInfo = $nodeEntityBundleInfo;
50 public static function create(ContainerInterface $container) {
52 $container->get('entity_field.manager'),
53 $container->get('permissions_by_term.access_storage'),
54 $container->get('permissions_by_term.node_entity_bundle_info')
59 * @param string $nodeType
61 * @return JsonResponse
63 public function getFormInfoByContentType($nodeType) {
64 $fields = $this->entityFieldManager->getFieldDefinitions('node', $nodeType);
67 foreach ($fields as $field) {
68 $fieldDefinitionSettings = $field->getSettings();
69 if (!empty($fieldDefinitionSettings['target_type']) && $fieldDefinitionSettings['target_type'] == 'taxonomy_term') {
70 $fieldNames[] = $field->getFieldStorageDefinition()->getName();
74 return new JsonResponse(
76 'taxonomyRelationFieldNames' => $fieldNames,
77 'permissions' => $this->nodeEntityBundleInfo->getPermissions()
83 * @return JsonResponse
85 public function getFormInfoByUrl() {
87 $contentType = $this->getContentType(\Drupal::request()->query->get('url'));
89 $fields = $this->entityFieldManager->getFieldDefinitions('node', $contentType);
92 foreach ($fields as $field) {
93 $fieldDefinitionSettings = $field->getSettings();
94 if (!empty($fieldDefinitionSettings['target_type']) && $fieldDefinitionSettings['target_type'] == 'taxonomy_term') {
95 $fieldNames[] = $field->getFieldStorageDefinition()->getName();
99 return new JsonResponse(
101 'taxonomyRelationFieldNames' => $fieldNames,
102 'permissions' => $this->nodeEntityBundleInfo->getPermissions()
107 private function getContentType($nodeEditPath) {
108 preg_match_all('!\d+!', $nodeEditPath, $matches);
109 $nid = $matches[0][0];
111 $node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
113 return $node->getType();