+
+/**
+ * Implements hook_options_list_alter().
+ */
+function permissions_by_term_options_list_alter(array &$options, array $context) {
+ $fieldDefinitionSettings = $context['fieldDefinition']->getFieldStorageDefinition()->getSettings();
+ if (!empty($fieldDefinitionSettings['target_type']) && $fieldDefinitionSettings['target_type'] == 'taxonomy_term') {
+ foreach ($options as $id => $names) {
+ if ($id !== '_none') {
+ /**
+ * @var \Drupal\permissions_by_term\Service\AccessCheck $accessCheck
+ */
+ $accessCheck = \Drupal::service('permissions_by_term.access_check');
+
+ if (is_array($names)) {
+ foreach ($names as $group_id => $name) {
+ if (!$accessCheck->isAccessAllowedByDatabase($group_id)) {
+ unset($options[$id]);
+ }
+ }
+ } elseif(is_string($names)) {
+ if (!$accessCheck->isAccessAllowedByDatabase($id)) {
+ unset($options[$id]);
+ }
+ }
+ }
+
+ }
+ }
+}
+
+/**
+ * Implements hook_user_cancel().
+ *
+ * Deletes all term permissions for a user when their account is cancelled.
+ */
+function permissions_by_term_user_cancel($edit, $account, $method) {
+ $deleted_user_id = $account->id();
+
+ /* @var \Drupal\permissions_by_term\Service\AccessStorage $access_storage */
+ $access_storage = \Drupal::service('permissions_by_term.access_storage');
+ $access_storage->deleteAllTermPermissionsByUserId($deleted_user_id);
+}
+
+/**
+ * Implements hook_ENTITY_TYPE_delete().
+ *
+ * Deletes all term permissions from storage when a term is deleted.
+ */
+function permissions_by_term_taxonomy_term_delete(EntityInterface $entity) {
+ /* @var \Drupal\permissions_by_term\Service\AccessStorage $access_storage */
+ $access_storage = \Drupal::service('permissions_by_term.access_storage');
+ $access_storage->deleteAllTermPermissionsByTid($entity->id());
+}