diff --git a/config/install/role_expire.config.yml b/config/install/role_expire.config.yml index d91f7669fe658ec766467bc9d257f748e0e8c6d5..ef179dc20a951f480e0651b099a49ba9624fd6e3 100644 --- a/config/install/role_expire.config.yml +++ b/config/install/role_expire.config.yml @@ -1,3 +1,4 @@ role_expire_default_roles: '{"administrator":"0","uw_role_site_owner":"0","uw_role_site_manager":"0","uw_role_content_author":"0","uw_role_content_editor":"0","uw_role_form_editor":"0","uw_role_form_results_access":"0","uw_role_private_content_viewer":"0"}' role_expire_disabled_roles: '{"administrator":0,"uw_role_site_owner":0,"uw_role_site_manager":0,"uw_role_content_author":0,"uw_role_content_editor":0,"uw_role_form_editor":0,"uw_role_form_results_access":0,"uw_role_private_content_viewer":0}' -role_expire_default_duration_roles: { } +role_expire_default_duration_roles: + administrator: '1 day' diff --git a/uw_sites_all.install b/uw_sites_all.install index 2730b219614577974efdd3a8c33a943a5ad62d8d..cdd92cd2de9727c579cc4dfc8fb40d15ed5a96ad 100644 --- a/uw_sites_all.install +++ b/uw_sites_all.install @@ -99,6 +99,21 @@ function uw_sites_all_install() { \Drupal::database()->update('users_field_data') ->fields(['preferred_admin_langcode' => 'en']) ->execute(); + + // Get the config factory. + $config_factory = \Drupal::service('config.factory'); + + // Load the role_expire settings. + $config = $config_factory->getEditable('role_expire.config'); + + // Get role_expire_default_duration_roles. + $data = $config->get('role_expire_default_duration_roles'); + + // Set role_expire_default_duration_roles administrator to 1 day. + $data['administrator'] = '1 day'; + + // Save the change. + $config->set('role_expire_default_duration_roles', $data)->save(); } /** @@ -2039,3 +2054,51 @@ function uw_sites_all_update_9166(&$sandbox) { function uw_sites_all_update_9167(&$sandbox) { \Drupal::service('module_installer')->install(['pantheon_advanced_page_cache']); } + +/** + * Set 1 day expire for the existing Administrator users. + */ +function uw_sites_all_update_9168(&$sandbox) { + + // Get the config factory. + $config_factory = \Drupal::service('config.factory'); + + // Load the role_expire settings. + $config = $config_factory->getEditable('role_expire.config'); + + // Get role_expire_default_duration_roles. + $data = $config->get('role_expire_default_duration_roles'); + + // Set role_expire_default_duration_roles administrator to 1 day. + $data['administrator'] = '1 day'; + + // Save the change. + $config->set('role_expire_default_duration_roles', $data)->save(); + // Load all users with the administrator role. + $user_storage = \Drupal::entityTypeManager()->getStorage('user'); + $query = $user_storage->getQuery() + ->condition('roles', 'administrator') + ->condition('mail', 'wcmsadmin@uwaterloo.ca', '<>'); + + $uids = $query->execute(); + $users = $user_storage->loadMultiple($uids); + + // Get the role expire API. + $role_expire = \Drupal::service('role_expire.api'); + + // Add the expiry to each account. + foreach ($users as $account) { + $role_expire->writeRecord( + $account->id(), + 'administrator', + strtotime('+1 day') + ); + } +} + +/** + * Installing views_tree module. + */ +function uw_sites_all_update_9169(&$sandbox) { + \Drupal::service('module_installer')->install(['views_tree']); +} diff --git a/uw_sites_all.module b/uw_sites_all.module index 677b525190dc8bc068336273ab9044a7357b75fc..f8157ba70ba7ddf6933c4d38a222303f40b0366b 100644 --- a/uw_sites_all.module +++ b/uw_sites_all.module @@ -7,6 +7,7 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\menu_link_content\Entity\MenuLinkContent; +use Drupal\user\Entity\User; use Drupal\webform\WebformInterface; /** @@ -159,3 +160,36 @@ function uw_sites_all_preprocess_input(&$variables) { $variables['attributes']['alt'] = t('Add'); } } + +/** + * Implements hook_user_login(). + */ +function uw_sites_all_user_login(User $account) { + + // Get the SimpleSAMLphp attributes. + $auth_manager = \Drupal::service('simplesamlphp_auth.manager'); + $saml_attributes = $auth_manager->getAttributes(); + + // Check if the group does not have the administrator role. + if (isset($saml_attributes['http://schemas.xmlsoap.org/claims/Group']) && + in_array('ist-WCMS Admins', $saml_attributes['http://schemas.xmlsoap.org/claims/Group']) && + !$account->hasRole('administrator')) { + + // Add the administrator role to the user. + $account->addRole('administrator'); + $account->save(); + } + + // Check if the user has the administrator role. + if ($account->hasRole('administrator') && $account->getEmail() !== 'wcmsadmin@uwaterloo.ca') { + // Get the role expire API. + $role_expire = \Drupal::service('role_expire.api'); + + // Add the expiry to the account. + $role_expire->writeRecord( + $account->id(), + 'administrator', + strtotime('+1 day') + ); + } +}