From 9486492f3bddec3ce3189fdd24b7a535fdc108be Mon Sep 17 00:00:00 2001 From: Elias Tertsunen Date: Fri, 8 Sep 2023 13:01:00 +0000 Subject: [PATCH] Periodically strip 'Ask librarian' role from unused accounts --- asklib.module | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/asklib.module b/asklib.module index 4cd9727..a9d3718 100644 --- a/asklib.module +++ b/asklib.module @@ -126,6 +126,7 @@ function asklib_cron() { } // Clear contact information of old questions periodically to improve privacy. + // Also strip 'Ask Librarian' role from unsued accounts. $request_time = \Drupal::time()->getRequestTime(); $next_execution = \Drupal::state()->get('asklib.next_question_contact_cleanup', 0); @@ -134,6 +135,7 @@ function asklib_cron() { mktime(1, 0, 0, date("m") , date("d") + 7, date("Y"))); _asklib_clear_old_question_contact_info(); + _asklib_strip_role_asklib_librarian_from_unused_accounts(); } } @@ -167,6 +169,33 @@ function _asklib_clear_old_question_contact_info() } } +function _asklib_strip_role_asklib_librarian_from_unused_accounts() +{ + $five_years_ago = mktime(1, 0, 0, date("m"), date("d"), date("Y") - 5); + + $storage = \Drupal::entityTypeManager()->getStorage('user'); + + $never_used_uids = $storage->getQuery() + ->condition('roles', 'asklib_librarian') + ->condition('login', 0) + ->condition('created', $five_years_ago, '<=') + ->execute(); + + $old_uids = $storage->getQuery() + ->condition('roles', 'asklib_librarian') + ->condition('login', $five_years_ago, '<=') + ->condition('login', 0, '!=') + ->execute(); + + $uids = array_unique(array_merge($never_used_uids, $old_uids)); + $users = $storage->loadMultiple($uids); + + foreach ($users as $user) { + $user->removeRole('asklib_librarian'); + $user->save(); + } +} + function template_preprocess_asklib_email(&$variables) { if ($variables['message']['body']) { $variables['body'] = $variables['message']['body'];