Security update for permissions_by_term
[yaffs-website] / web / modules / contrib / permissions_by_term / src / Controller / NodeEntityBundleController.php
1 <?php
2
3 namespace Drupal\permissions_by_term\Controller;
4
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;
11
12 /**
13  * Class NodeEntityBundleController
14  *
15  * @package Drupal\permissions_by_term\Controller
16  */
17 class NodeEntityBundleController extends ControllerBase {
18
19   /**
20    * @var EntityFieldManager
21    */
22   private $entityFieldManager;
23
24   /**
25    * @var AccessStorage
26    */
27   private $accessStorage;
28
29   /**
30    * @var NodeEntityBundleInfo
31    */
32   private $nodeEntityBundleInfo;
33
34   /**
35    * NodeBundleInfoController constructor.
36    *
37    * @param EntityFieldManager   $entityFieldManager
38    * @param AccessStorage        $accessStorage
39    * @param NodeEntityBundleInfo $nodeEntityBundleInfo
40    */
41   public function __construct(EntityFieldManager $entityFieldManager, AccessStorage $accessStorage, NodeEntityBundleInfo $nodeEntityBundleInfo) {
42     $this->entityFieldManager = $entityFieldManager;
43     $this->accessStorage = $accessStorage;
44     $this->nodeEntityBundleInfo = $nodeEntityBundleInfo;
45   }
46
47   /**
48    * {@inheritdoc}
49    */
50   public static function create(ContainerInterface $container) {
51     return new static(
52       $container->get('entity_field.manager'),
53       $container->get('permissions_by_term.access_storage'),
54       $container->get('permissions_by_term.node_entity_bundle_info')
55     );
56   }
57
58   /**
59    * @param string $nodeType
60    *
61    * @return JsonResponse
62    */
63   public function getFormInfoByContentType($nodeType) {
64     $fields = $this->entityFieldManager->getFieldDefinitions('node', $nodeType);
65
66     $fieldNames = null;
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();
71       }
72     }
73
74     return new JsonResponse(
75       [
76         'taxonomyRelationFieldNames' => $fieldNames,
77         'permissions'                => $this->nodeEntityBundleInfo->getPermissions()
78       ]
79     );
80   }
81
82   /**
83    * @return JsonResponse
84    */
85   public function getFormInfoByUrl() {
86
87     $contentType = $this->getContentType(\Drupal::request()->query->get('url'));
88
89     $fields = $this->entityFieldManager->getFieldDefinitions('node', $contentType);
90
91     $fieldNames = null;
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();
96       }
97     }
98
99     return new JsonResponse(
100       [
101         'taxonomyRelationFieldNames' => $fieldNames,
102         'permissions'                => $this->nodeEntityBundleInfo->getPermissions()
103       ]
104     );
105   }
106
107   private function getContentType($nodeEditPath) {
108     preg_match_all('!\d+!', $nodeEditPath, $matches);
109     $nid = $matches[0][0];
110
111     $node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
112
113     return $node->getType();
114   }
115
116 }