Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / permissions_by_term / src / Listener / KernelEventListener.php
index e3a8df074810c0d4857b38013c3125cc0d0f8cb1..5473fe4d61bef1de33af6ba8b1fa8787e341eca1 100644 (file)
@@ -4,15 +4,16 @@ namespace Drupal\permissions_by_term\Listener;
 
 use Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher;
 use Drupal\permissions_by_term\Event\PermissionsByTermDeniedEvent;
+use Drupal\permissions_by_term\Service\AccessCheck;
+use Drupal\permissions_by_term\Service\AccessStorage;
+use Drupal\permissions_by_term\Service\Term;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpFoundation\JsonResponse;
-use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
-use Symfony\Component\HttpKernel\Event\GetResponseEvent;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Request;
-use Drupal\permissions_by_term\Service\AccessCheck;
-use Drupal\permissions_by_term\Service\Term;
+use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
+use Symfony\Component\HttpKernel\Event\GetResponseEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
 
 /**
  * Class KernelEventListener.
@@ -37,12 +38,18 @@ class KernelEventListener implements EventSubscriberInterface
    */
   private $eventDispatcher;
 
+  /**
+   * @var AccessStorage
+   */
+  private $accessStorageService;
+
   /**
    * Instantiating of objects on class construction.
    */
   public function __construct()
   {
     $this->accessCheckService = \Drupal::service('permissions_by_term.access_check');
+    $this->accessStorageService = \Drupal::service('permissions_by_term.access_storage');
     $this->term = \Drupal::service('permissions_by_term.term');
     $this->eventDispatcher = \Drupal::service('event_dispatcher');
   }
@@ -55,7 +62,7 @@ class KernelEventListener implements EventSubscriberInterface
     // Restricts access to nodes (views/edit).
     if ($this->canRequestGetNode($event->getRequest())) {
       $nid = $event->getRequest()->attributes->get('node')->get('nid')->getValue()['0']['value'];
-      if (!$this->accessCheckService->canUserAccessByNodeId($nid)) {
+      if (!$this->accessCheckService->canUserAccessByNodeId($nid, false, $this->accessStorageService->getLangCode($nid))) {
         $accessDeniedEvent = new PermissionsByTermDeniedEvent($nid);
         $this->eventDispatcher->dispatch(PermissionsByTermDeniedEvent::NAME, $accessDeniedEvent);
 
@@ -70,7 +77,14 @@ class KernelEventListener implements EventSubscriberInterface
       $query_string = trim($query_string);
 
       $tid = $this->term->getTermIdByName($query_string);
-      if (!$this->accessCheckService->isAccessAllowedByDatabase($tid)) {
+
+      $term = $this->term->getTerm();
+      $termLangcode = 'en';
+      if ($term instanceof \Drupal\taxonomy\Entity\Term) {
+        $termLangcode = $term->language()->getId();
+      }
+
+      if (!$this->accessCheckService->isAccessAllowedByDatabase($tid, \Drupal::currentUser()->id(), $termLangcode)) {
         $this->sendUserToAccessDeniedPage();
       }
     }
@@ -95,7 +109,12 @@ class KernelEventListener implements EventSubscriberInterface
       $allowed_terms = [];
       foreach ($suggested_terms as $term) {
         $tid = $this->term->getTermIdByName($term->label);
-        if ($this->accessCheckService->isAccessAllowedByDatabase($tid)) {
+        $termLangcode = 'en';
+        if ($this->term->getTerm() instanceof \Drupal\taxonomy\Entity\Term) {
+          $termLangcode = $this->term->getTerm()->language()->getId();
+        }
+
+        if ($this->accessCheckService->isAccessAllowedByDatabase($tid, \Drupal::currentUser()->id(), $termLangcode)) {
           $allowed_terms[] = [
             'value' => $term->value,
             'label' => $term->label,