Version 1
[yaffs-website] / web / modules / contrib / permissions_by_term / src / Controller / PermissionsByTermController.php
1 <?php
2
3 namespace Drupal\permissions_by_term\Controller;
4
5 use Drupal\Core\Controller\ControllerBase;
6 use \Drupal\Component\Utility\Tags;
7 use Symfony\Component\HttpFoundation\JsonResponse;
8 use \Drupal\permissions_by_term\AccessCheckInterface;
9 use \Drupal\Component\Utility\Html;
10 use \Drupal\Core\Access\AccessResult;
11
12 /**
13  * Default controller for the permissions_by_term module.
14  */
15 class PermissionsByTermController extends ControllerBase {
16
17   /**
18    * PermissionsByTermController constructor.
19    *
20    * @param \Drupal\permissions_by_term\AccessCheckInterface
21    */
22   public function __construct(AccessCheckInterface $access_check_service) {
23     $this->oAccessCheckService = $access_check_service;
24   }
25
26   /**
27    * Handles views in module's logic.
28    */
29   public function handleViews(&$view) {
30     if ($this->oAccessCheckService->viewContainsNode($view) === TRUE) {
31       $this->oAccessCheckService->removeForbiddenNodesFromView($view);
32     }
33   }
34
35   /**
36    * Handles nodes in module's logic.
37    *
38    * @return \Drupal\Core\Access\AccessResult
39    *   The AccessResult object.
40    */
41   public function handleNode($node_id) {
42     if ($this->oAccessCheckService->canUserAccessByNodeId($node_id) === TRUE) {
43       return AccessResult::neutral();
44     }
45     else {
46       return AccessResult::forbidden();
47     }
48   }
49
50   /**
51    * Returns JSON response for user's autocomplete field in permissions form.
52    *
53    * @return JsonResponse
54    *   The response as JSON.
55    */
56   public function autoCompleteMultiple() {
57     // The user enters a comma-separated list of users.
58     // We only autocomplete the last user.
59     $array = Tags::explode($_REQUEST['q']);
60
61     // Fetch last user.
62     $last_string = trim(array_pop($array));
63
64     $matches = [];
65
66     $aUserIds = \Drupal::entityQuery('user')
67       ->condition('name', $last_string, 'CONTAINS')
68       ->execute();
69
70     $prefix = count($array) ? implode(', ', $array) . ', ' : '';
71
72     foreach ($aUserIds as $iUserId) {
73       $oUser = user_load($iUserId);
74       $matches[$prefix . $oUser->getUsername()] = Html::escape($oUser->getUsername());
75     }
76
77     return new JsonResponse($matches);
78   }
79
80 }