3 namespace Drupal\permissions_by_term\Controller;
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;
13 * Default controller for the permissions_by_term module.
15 class PermissionsByTermController extends ControllerBase {
18 * PermissionsByTermController constructor.
20 * @param \Drupal\permissions_by_term\AccessCheckInterface
22 public function __construct(AccessCheckInterface $access_check_service) {
23 $this->oAccessCheckService = $access_check_service;
27 * Handles views in module's logic.
29 public function handleViews(&$view) {
30 if ($this->oAccessCheckService->viewContainsNode($view) === TRUE) {
31 $this->oAccessCheckService->removeForbiddenNodesFromView($view);
36 * Handles nodes in module's logic.
38 * @return \Drupal\Core\Access\AccessResult
39 * The AccessResult object.
41 public function handleNode($node_id) {
42 if ($this->oAccessCheckService->canUserAccessByNodeId($node_id) === TRUE) {
43 return AccessResult::neutral();
46 return AccessResult::forbidden();
51 * Returns JSON response for user's autocomplete field in permissions form.
53 * @return JsonResponse
54 * The response as JSON.
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']);
62 $last_string = trim(array_pop($array));
66 $aUserIds = \Drupal::entityQuery('user')
67 ->condition('name', $last_string, 'CONTAINS')
70 $prefix = count($array) ? implode(', ', $array) . ', ' : '';
72 foreach ($aUserIds as $iUserId) {
73 $oUser = user_load($iUserId);
74 $matches[$prefix . $oUser->getUsername()] = Html::escape($oUser->getUsername());
77 return new JsonResponse($matches);