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\DependencyInjection\ContainerInterface;
10 use Symfony\Component\HttpFoundation\JsonResponse;
13 * Class NodeEntityBundleController
15 * @package Drupal\permissions_by_term\Controller
17 class NodeEntityBundleController extends ControllerBase {
20 * @var EntityFieldManager
22 private $entityFieldManager;
25 * @var NodeEntityBundleInfo
27 private $nodeEntityBundleInfo;
29 public function __construct(EntityFieldManager $entityFieldManager, NodeEntityBundleInfo $nodeEntityBundleInfo) {
30 $this->entityFieldManager = $entityFieldManager;
31 $this->nodeEntityBundleInfo = $nodeEntityBundleInfo;
37 public static function create(ContainerInterface $container) {
39 $container->get('entity_field.manager'),
40 $container->get('permissions_by_term.node_entity_bundle_info')
45 * @param string $nodeType
47 * @return JsonResponse
49 public function getFormInfoByContentType($nodeType) {
50 $fields = $this->entityFieldManager->getFieldDefinitions('node', $nodeType);
53 foreach ($fields as $field) {
54 $fieldDefinitionSettings = $field->getSettings();
55 if (!empty($fieldDefinitionSettings['target_type']) && $fieldDefinitionSettings['target_type'] == 'taxonomy_term') {
56 $fieldNames[] = $field->getFieldStorageDefinition()->getName();
60 return new JsonResponse(
62 'taxonomyRelationFieldNames' => $fieldNames,
63 'permissions' => $this->nodeEntityBundleInfo->getPermissions()
69 * @return JsonResponse
71 public function getFormInfoByUrl() {
73 $contentType = $this->getContentType(\Drupal::request()->query->get('url'));
75 $fields = $this->entityFieldManager->getFieldDefinitions('node', $contentType);
78 foreach ($fields as $field) {
79 $fieldDefinitionSettings = $field->getSettings();
80 if (!empty($fieldDefinitionSettings['target_type']) && $fieldDefinitionSettings['target_type'] == 'taxonomy_term') {
81 $fieldNames[] = $field->getFieldStorageDefinition()->getName();
85 return new JsonResponse(
87 'taxonomyRelationFieldNames' => $fieldNames,
88 'permissions' => $this->nodeEntityBundleInfo->getPermissions()
93 private function getContentType($nodeEditPath) {
94 preg_match_all('!\d+!', $nodeEditPath, $matches);
95 $nid = $matches[0][0];
97 $node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
99 return $node->getType();