Pull merge.
[yaffs-website] / web / modules / contrib / permissions_by_term / permissions_by_term.install
1 <?php
2
3 use Drupal\Core\Database\Connection;
4 use Drupal\taxonomy\Entity\Term;
5
6 /**
7  * @file
8  * Install, update and uninstall functions for the permissions_by_term module.
9  */
10
11 /**
12  * Implements hook_schema().
13  */
14 function permissions_by_term_schema() {
15
16   $schema = [];
17
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.",
21     'fields' => [
22       'tid' => [
23         'type' => 'int',
24         'unsigned' => TRUE,
25         'not null' => TRUE,
26       ],
27       'uid' => [
28         'type' => 'int',
29         'unsigned' => TRUE,
30         'not null' => TRUE,
31       ],
32       'langcode' => [
33         'type' => 'varchar_ascii',
34         'length' => 12,
35         'not null' => TRUE,
36         'default' => '',
37       ],
38     ],
39     'primary key' => [
40     ],
41   ];
42
43   // Specifications for tabe 'permissions_by_term_role'.
44   $schema['permissions_by_term_role'] = [
45     'description' => "Stores the tid's to which user's are allowed to by rid.",
46     'fields' => [
47       'tid' => [
48         'type' => 'int',
49         'unsigned' => TRUE,
50         'not null' => TRUE,
51       ],
52       'rid' => [
53         'type' => 'varchar',
54         'length' => 60,
55         'not null' => TRUE,
56       ],
57       'langcode' => [
58         'type' => 'varchar_ascii',
59         'length' => 12,
60         'not null' => TRUE,
61         'default' => '',
62       ],
63     ],
64     'primary key' => [
65     ],
66   ];
67
68   return $schema;
69
70 }
71
72 /**
73  * Implements hook_install().
74  */
75 function permissions_by_term_install() {
76   node_access_rebuild(TRUE);
77 }
78
79 /**
80  * Implements hook_uninstall().
81  */
82 function permissions_by_term_uninstall() {
83   node_access_rebuild(TRUE);
84 }
85
86 /**
87  * Mandatory initial run of node_access_rebuild() Drupal core function.
88  */
89 function permissions_by_term_update_8113() {
90   node_access_rebuild(TRUE);
91 }
92
93 /**
94  * Force a node access rebuild to fix node access grants.
95  */
96 function permissions_by_term_update_8114() {
97   node_access_rebuild(TRUE);
98 }
99
100 /**
101  * Force a node access rebuild to fix multilingual node access grants.
102  */
103 function permissions_by_term_update_8142() {
104   node_access_rebuild(TRUE);
105 }
106
107 /**
108  * Add field for langcode in user and role permission tables.
109  */
110 function permissions_by_term_update_8145() {
111   $database = \Drupal::database();
112   $schema = $database->schema();
113
114   $spec = [
115     'type'     => 'varchar_ascii',
116     'length'   => 12,
117     'not null' => TRUE,
118     'default'  => '',
119   ];
120   $schema->addField('permissions_by_term_role', 'langcode', $spec);
121   $schema->addField('permissions_by_term_user', 'langcode', $spec);
122 }
123
124 /**
125  * Add langcode to each permission restriction dataset. Cleanup dangling datasets, with no relation to any taxonomy term.
126  */
127 function permissions_by_term_update_8152() {
128   /**
129    * @var Connection $database
130    */
131   $database = \Drupal::service('database');
132   $userTerms = $database->query("SELECT tid FROM {permissions_by_term_user} WHERE langcode = '' OR langcode IS NULL")->fetchAll();
133   $roleTerms = $database->query("SELECT tid FROM {permissions_by_term_role} WHERE langcode = '' OR langcode IS NULL")->fetchAll();
134
135   foreach ($roleTerms as $roleTerm) {
136     if (!empty($term = Term::load($roleTerm->tid))) {
137       $termLangcode = $term->get('langcode')->getLangcode();
138       if (!empty($termLangcode)) {
139         $database->query("UPDATE {permissions_by_term_role} SET langcode = :langcode WHERE tid = :tid", [
140           ':langcode' => $termLangcode,
141           ':tid'      => $roleTerm->tid,
142         ]);
143       }
144     } else {
145       $database->query("DELETE FROM {permissions_by_term_role} WHERE tid = :tid", [
146         ':tid' => $roleTerm->tid,
147       ]);
148     }
149   }
150
151   foreach ($userTerms as $userTerm) {
152     if (!empty($term = Term::load($userTerm->tid))) {
153       $termLangcode = $term->get('langcode')->getLangcode();
154       if (!empty($termLangcode)) {
155         $database->query("UPDATE {permissions_by_term_user} SET langcode = :langcode WHERE tid = :tid", [
156           ':langcode' => $termLangcode,
157           ':tid'      => $userTerm->tid
158         ]);
159       }
160     } else {
161       $database->query("DELETE FROM {permissions_by_term_user} WHERE tid = :tid", [
162         ':tid' => $userTerm->tid,
163       ]);
164     }
165   }
166 }
167
168 /**
169  * Remove primary keys due language codes.
170  */
171 function permissions_by_term_update_8153() {
172   $database = \Drupal::database();
173   $schema = $database->schema();
174
175   $schema->dropPrimaryKey('permissions_by_term_role');
176   $schema->dropPrimaryKey('permissions_by_term_user');
177 }