X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fpermissions_by_term%2Fpermissions_by_term.install;fp=web%2Fmodules%2Fcontrib%2Fpermissions_by_term%2Fpermissions_by_term.install;h=50bc550ac1c54493f3c99adfd69a628c9de78e5c;hp=738b9bf77351828374485751e0a85cc0cbe2d07f;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0 diff --git a/web/modules/contrib/permissions_by_term/permissions_by_term.install b/web/modules/contrib/permissions_by_term/permissions_by_term.install index 738b9bf77..50bc550ac 100644 --- a/web/modules/contrib/permissions_by_term/permissions_by_term.install +++ b/web/modules/contrib/permissions_by_term/permissions_by_term.install @@ -1,5 +1,8 @@ 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