54dec437da25b7ff3dadf870857ca6a818f83562
[yaffs-website] / web / modules / contrib / permissions_by_term / src / Service / NodeEntityBundleInfo.php
1 <?php
2
3 namespace Drupal\permissions_by_term\Service;
4
5 use Drupal\Core\Database\Connection;
6 use Drupal\Core\Template\TwigEnvironment;
7 use Drupal\user\Entity\Role;
8 use Drupal\user\Entity\User;
9
10 /**
11  * Class Info
12  *
13  * @package Drupal\permissions_by_term\Service
14  */
15 class NodeEntityBundleInfo {
16
17   /**
18    * @var AccessStorage
19    */
20   private $accessStorage;
21
22   /**
23    * @var Term
24    */
25   private $term;
26
27   /**
28    * @var TwigEnvironment
29    */
30   private $twig;
31
32   /**
33    * @var Connection
34    */
35   private $database;
36
37   /**
38    * Info constructor.
39    *
40    * @param AccessStorage   $accessStorage
41    * @param Term            $term
42    * @param TwigEnvironment $twig
43    * @param Connection      $database
44    */
45   public function __construct(
46     AccessStorage $accessStorage,
47     Term $term,
48     TwigEnvironment $twig,
49     Connection $database
50   ) {
51     $this->accessStorage = $accessStorage;
52     $this->term = $term;
53     $this->twig = $twig;
54     $this->database = $database;
55   }
56
57   /**
58    * @param string   $viewFilePath
59    * @param int|null $nid
60    * @return string
61    */
62   public function renderNodeDetails($viewFilePath, $nid = null) {
63     $roles = null;
64     $users = null;
65
66     if (!empty($nid)) {
67       $tids = $this->term->getTidsByNid($nid);
68       if (!empty($tids)) {
69         $uids = $this->accessStorage->getUserTermPermissionsByTids($tids);
70         $rids = $this->accessStorage->getRoleTermPermissionsByTids($tids);
71       }
72     }
73
74     if (!empty($rids)) {
75       $roles = Role::loadMultiple($rids);
76     }
77
78     if (!empty($uids)) {
79       $users = User::loadMultiple($uids);
80     }
81
82     $template = $this->twig->loadTemplate($viewFilePath);
83
84     return $template->render(['roles' => $roles, 'users' => $users]);
85
86   }
87
88   /**
89    * @return array
90    */
91   public function getPermissions()
92   {
93     $returnArray = null;
94
95     $permittedUsers = $this->database->select('permissions_by_term_user', 'pu')
96       ->fields('pu', ['uid', 'tid'])
97       ->execute()
98       ->fetchAll();
99
100     $permittedRoles = $this->database->select('permissions_by_term_role', 'pr')
101       ->fields('pr', ['rid', 'tid'])
102       ->execute()
103       ->fetchAll();
104
105     if (!empty($permittedRoles)) {
106       $returnArray['roleLabels'] = [];
107       foreach ($permittedRoles as $permittedRole) {
108         $role = Role::load($permittedRole->rid);
109         if (!empty($role)) {
110           $returnArray['roleLabels'][$permittedRole->tid][] = $role->label();
111         }
112       }
113     }
114
115     if (!empty($permittedUsers)) {
116       $returnArray['userDisplayNames'] = [];
117       foreach ($permittedUsers as $permittedUser) {
118         $user = User::load($permittedUser->uid);
119         if (!empty($user)) {
120           $returnArray['userDisplayNames'][$permittedUser->tid][] = $user->getDisplayName();
121         }
122       }
123     }
124
125     return $returnArray;
126   }
127
128 }