Updated to Drupal 8.5. Core Media not yet in use.
[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       'tid',
41       'uid',
42     ],
43   ];
44
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.",
48     'fields' => [
49       'tid' => [
50         'type' => 'int',
51         'unsigned' => TRUE,
52         'not null' => TRUE,
53       ],
54       'rid' => [
55         'type' => 'varchar',
56         'length' => 60,
57         'not null' => TRUE,
58       ],
59       'langcode' => [
60         'type' => 'varchar_ascii',
61         'length' => 12,
62         'not null' => TRUE,
63         'default' => '',
64       ],
65     ],
66     'primary key' => [
67       'tid',
68       'rid',
69     ],
70   ];
71
72   return $schema;
73
74 }
75
76 /**
77  * Implements hook_install().
78  */
79 function permissions_by_term_install() {
80   node_access_rebuild(TRUE);
81 }
82
83 /**
84  * Implements hook_uninstall().
85  */
86 function permissions_by_term_uninstall() {
87   node_access_rebuild(TRUE);
88 }
89
90 /**
91  * Mandatory initial run of node_access_rebuild() Drupal core function.
92  */
93 function permissions_by_term_update_8113() {
94   node_access_rebuild(TRUE);
95 }
96
97 /**
98  * Force a node access rebuild to fix node access grants.
99  */
100 function permissions_by_term_update_8114() {
101   node_access_rebuild(TRUE);
102 }
103
104 /**
105  * Force a node access rebuild to fix multilingual node access grants.
106  */
107 function permissions_by_term_update_8142() {
108   node_access_rebuild(TRUE);
109 }
110
111 /**
112  * Add field for langcode in user and role permission tables.
113  */
114 function permissions_by_term_update_8145() {
115   $database = \Drupal::database();
116   $schema = $database->schema();
117
118   $spec = [
119     'type'     => 'varchar_ascii',
120     'length'   => 12,
121     'not null' => TRUE,
122     'default'  => '',
123   ];
124   $schema->addField('permissions_by_term_role', 'langcode', $spec);
125   $schema->addField('permissions_by_term_user', 'langcode', $spec);
126 }
127
128 /**
129  * Add langcode to each permission restriction dataset. Cleanup dangling datasets, with no relation to any taxonomy term.
130  */
131 function permissions_by_term_update_8152() {
132   /**
133    * @var Connection $database
134    */
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();
138
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,
146         ]);
147       }
148     } else {
149       $database->query("DELETE FROM {permissions_by_term_role} WHERE tid = :tid", [
150         ':tid' => $roleTerm->tid,
151       ]);
152     }
153   }
154
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
162         ]);
163       }
164     } else {
165       $database->query("DELETE FROM {permissions_by_term_user} WHERE tid = :tid", [
166         ':tid' => $userTerm->tid,
167       ]);
168     }
169   }
170 }