3 use Drupal\Core\Database\Connection;
4 use Drupal\taxonomy\Entity\Term;
8 * Install, update and uninstall functions for the permissions_by_term module.
12 * Implements hook_schema().
14 function permissions_by_term_schema() {
18 // Specifications for tabe 'permissions_by_term_user'.
19 $schema['permissions_by_term_user'] = [
20 'description' => "Stores the tid's to which a user has permission by his uid.",
33 'type' => 'varchar_ascii',
45 // Specifications for tabe 'permissions_by_term_role'.
46 $schema['permissions_by_term_role'] = [
47 'description' => "Stores the tid's to which user's are allowed to by rid.",
60 'type' => 'varchar_ascii',
77 * Implements hook_install().
79 function permissions_by_term_install() {
80 node_access_rebuild(TRUE);
84 * Implements hook_uninstall().
86 function permissions_by_term_uninstall() {
87 node_access_rebuild(TRUE);
91 * Mandatory initial run of node_access_rebuild() Drupal core function.
93 function permissions_by_term_update_8113() {
94 node_access_rebuild(TRUE);
98 * Force a node access rebuild to fix node access grants.
100 function permissions_by_term_update_8114() {
101 node_access_rebuild(TRUE);
105 * Force a node access rebuild to fix multilingual node access grants.
107 function permissions_by_term_update_8142() {
108 node_access_rebuild(TRUE);
112 * Add field for langcode in user and role permission tables.
114 function permissions_by_term_update_8145() {
115 $database = \Drupal::database();
116 $schema = $database->schema();
119 'type' => 'varchar_ascii',
124 $schema->addField('permissions_by_term_role', 'langcode', $spec);
125 $schema->addField('permissions_by_term_user', 'langcode', $spec);
129 * Add langcode to each permission restriction dataset. Cleanup dangling datasets, with no relation to any taxonomy term.
131 function permissions_by_term_update_8152() {
133 * @var Connection $database
135 $database = \Drupal::service('database');
136 $userTerms = $database->query("SELECT tid FROM {permissions_by_term_user} WHERE langcode = '' OR langcode IS NULL")->fetchAll();
137 $roleTerms = $database->query("SELECT tid FROM {permissions_by_term_role} WHERE langcode = '' OR langcode IS NULL")->fetchAll();
139 foreach ($roleTerms as $roleTerm) {
140 if (!empty($term = Term::load($roleTerm->tid))) {
141 $termLangcode = $term->get('langcode')->getLangcode();
142 if (!empty($termLangcode)) {
143 $database->query("UPDATE {permissions_by_term_role} SET langcode = :langcode WHERE tid = :tid", [
144 ':langcode' => $termLangcode,
145 ':tid' => $roleTerm->tid,
149 $database->query("DELETE FROM {permissions_by_term_role} WHERE tid = :tid", [
150 ':tid' => $roleTerm->tid,
155 foreach ($userTerms as $userTerm) {
156 if (!empty($term = Term::load($userTerm->tid))) {
157 $termLangcode = $term->get('langcode')->getLangcode();
158 if (!empty($termLangcode)) {
159 $database->query("UPDATE {permissions_by_term_user} SET langcode = :langcode WHERE tid = :tid", [
160 ':langcode' => $termLangcode,
161 ':tid' => $userTerm->tid
165 $database->query("DELETE FROM {permissions_by_term_user} WHERE tid = :tid", [
166 ':tid' => $userTerm->tid,