Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / permissions_by_term / permissions_by_term.install
index 738b9bf77351828374485751e0a85cc0cbe2d07f..50bc550ac1c54493f3c99adfd69a628c9de78e5c 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+use Drupal\Core\Database\Connection;
+use Drupal\taxonomy\Entity\Term;
+
 /**
  * @file
  * Install, update and uninstall functions for the permissions_by_term module.
@@ -26,6 +29,12 @@ function permissions_by_term_schema() {
         'unsigned' => TRUE,
         'not null' => TRUE,
       ],
+      'langcode' => [
+        'type' => 'varchar_ascii',
+        'length' => 12,
+        'not null' => TRUE,
+        'default' => '',
+      ],
     ],
     'primary key' => [
       'tid',
@@ -47,6 +56,12 @@ function permissions_by_term_schema() {
         'length' => 60,
         'not null' => TRUE,
       ],
+      'langcode' => [
+        'type' => 'varchar_ascii',
+        'length' => 12,
+        'not null' => TRUE,
+        'default' => '',
+      ],
     ],
     'primary key' => [
       'tid',
@@ -85,3 +100,71 @@ function permissions_by_term_update_8113() {
 function permissions_by_term_update_8114() {
   node_access_rebuild(TRUE);
 }
+
+/**
+ * Force a node access rebuild to fix multilingual node access grants.
+ */
+function permissions_by_term_update_8142() {
+  node_access_rebuild(TRUE);
+}
+
+/**
+ * Add field for langcode in user and role permission tables.
+ */
+function permissions_by_term_update_8145() {
+  $database = \Drupal::database();
+  $schema = $database->schema();
+
+  $spec = [
+    'type'     => 'varchar_ascii',
+    'length'   => 12,
+    'not null' => TRUE,
+    'default'  => '',
+  ];
+  $schema->addField('permissions_by_term_role', 'langcode', $spec);
+  $schema->addField('permissions_by_term_user', 'langcode', $spec);
+}
+
+/**
+ * Add langcode to each permission restriction dataset. Cleanup dangling datasets, with no relation to any taxonomy term.
+ */
+function permissions_by_term_update_8152() {
+  /**
+   * @var Connection $database
+   */
+  $database = \Drupal::service('database');
+  $userTerms = $database->query("SELECT tid FROM {permissions_by_term_user} WHERE langcode = '' OR langcode IS NULL")->fetchAll();
+  $roleTerms = $database->query("SELECT tid FROM {permissions_by_term_role} WHERE langcode = '' OR langcode IS NULL")->fetchAll();
+
+  foreach ($roleTerms as $roleTerm) {
+    if (!empty($term = Term::load($roleTerm->tid))) {
+      $termLangcode = $term->get('langcode')->getLangcode();
+      if (!empty($termLangcode)) {
+        $database->query("UPDATE {permissions_by_term_role} SET langcode = :langcode WHERE tid = :tid", [
+          ':langcode' => $termLangcode,
+          ':tid'      => $roleTerm->tid,
+        ]);
+      }
+    } else {
+      $database->query("DELETE FROM {permissions_by_term_role} WHERE tid = :tid", [
+        ':tid' => $roleTerm->tid,
+      ]);
+    }
+  }
+
+  foreach ($userTerms as $userTerm) {
+    if (!empty($term = Term::load($userTerm->tid))) {
+      $termLangcode = $term->get('langcode')->getLangcode();
+      if (!empty($termLangcode)) {
+        $database->query("UPDATE {permissions_by_term_user} SET langcode = :langcode WHERE tid = :tid", [
+          ':langcode' => $termLangcode,
+          ':tid'      => $userTerm->tid
+        ]);
+      }
+    } else {
+      $database->query("DELETE FROM {permissions_by_term_user} WHERE tid = :tid", [
+        ':tid' => $userTerm->tid,
+      ]);
+    }
+  }
+}
\ No newline at end of file