Skip to content

Commit

Permalink
UHF-10045: Improve instructions
Browse files Browse the repository at this point in the history
  • Loading branch information
hyrsky committed Aug 26, 2024
1 parent 932a997 commit 1b2885e
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 32 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ This repository holds configuration for the Hel.fi platform.
- [Update instructions (2.x to 3.x)](documentation/update.md)
- [Two-factor authentication/TFA/MFA](/modules/helfi_tfa/README.md)
- [JSON:API remote entities](/modules/helfi_etusivu_entities/README.md)
- [Users](/modules/helfi_users/README.md)

## Contact

Expand Down
25 changes: 0 additions & 25 deletions helfi_platform_config.module
Original file line number Diff line number Diff line change
Expand Up @@ -496,31 +496,6 @@ function helfi_platform_config_config_ignore_settings_alter(array &$settings) {
}
}

/**
* Implements hook_user_cancel_methods_alter().
*/
function helfi_platform_config_user_cancel_methods_alter(array &$methods): void {
/** @var \Drupal\Core\Session\AccountInterface $account */
$account = \Drupal::currentUser();

// Only allow user to disable user accounts if the user doesn't have
// a permission to delete user accounts.
$white_listed_methods = [
'user_cancel_block',
'user_cancel_block_unpublish',
];

// Deny access to all non-whitelisted methods if user doesn't have
// the 'delete user accounts' permission.
if (!$account->hasPermission('delete user accounts')) {
foreach ($methods as $name => &$method) {
if (!in_array($name, $white_listed_methods)) {
$method['access'] = FALSE;
}
}
}
}

/**
* Implements hook_config_schema_info_alter().
*/
Expand Down
7 changes: 7 additions & 0 deletions modules/helfi_users/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# HELfi users

Fixes related to deleting or banning users.

Other user account related fixes and features:
- [Expired users](https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/blob/main/documentation/user-expire.md)
- [Infofinland user sanitization](https://github.com/City-of-Helsinki/drupal-infofinland/blob/dev/public/modules/custom/infofinland_user_cancel/README.md)
2 changes: 2 additions & 0 deletions modules/helfi_users/helfi_users.info.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ description: 'Fixes related to deleting or canceling users.'
package: HELfi
type: module
core_version_requirement: ^10 || ^11
'interface translation project': helfi_users
'interface translation server pattern': modules/contrib/helfi_platform_config/modules/helfi_users/translations/%language.po
51 changes: 46 additions & 5 deletions modules/helfi_users/helfi_users.module
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ declare(strict_types=1);
* and we can reassign module weights / run order if necessary.
*/

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\user\Entity\User;
use Drupal\user\UserInterface;

Expand All @@ -28,6 +30,47 @@ function helfi_users_module_implements_alter(&$implementations, $hook) : void {
}
}

/**
* Implements hook_form_alter().
*/
function helfi_users_form_alter(&$form, FormStateInterface $form_state, $form_id): void {
if (!in_array($form_id, ["user_multiple_cancel_confirm", "user_cancel_form"])) {
return;
}

// Hide email confirmation checkbox.
$form['user_cancel_confirm']['#access'] = FALSE;
$form['user_cancel_method']['#description'] = new TranslatableMarkup(
"Banning accounts prevents them from logging in. If the account is no longer needed, it should be deleted."
);
}

/**
* Implements hook_user_cancel_methods_alter().
*/
function helfi_users_user_cancel_methods_alter(array &$methods): void {
// User can only access allowed methods. User must also have
// 'administer users' permission from core to be able to cancel users.
$allowed_methods = [
'user_cancel_block' => new TranslatableMarkup("Ban the account and keep their content."),
'user_cancel_block_unpublish' => new TranslatableMarkup("Ban the account and unpublish their content."),
'user_cancel_reassign' => new TranslatableMarkup("Delete the account and make their content belong to %uid1. This action cannot be undone.", [
'%uid1' => User::load(1)->getAccountName(),
]),
];

foreach ($allowed_methods as $name => $title) {
$methods[$name]['title'] = $title;
}

// Without special permission, user is not allowed to access all methods.
if (!\Drupal::currentUser()->hasPermission('allow all user cancel methods')) {
foreach ($methods as $name => &$method) {
$method['access'] = array_key_exists($name, $allowed_methods);
}
}
}

/**
* Implements hook_user_cancel().
*
Expand All @@ -38,11 +81,9 @@ function helfi_users_module_implements_alter(&$implementations, $hook) : void {
* This has to run before node module's user_cancel hook.
*/
function helfi_users_user_cancel($edit, UserInterface $account, $method): void {
switch ($method) {
case 'user_cancel_reassign':
// Anonymize all the nodes for this old account.
_helfi_users_reassign_nodes($account, User::load(1));
break;
// Reassign nodes for the old account.
if ($method === 'user_cancel_reassign') {
_helfi_users_reassign_nodes($account, User::load(1));
}
}

Expand Down
4 changes: 2 additions & 2 deletions modules/helfi_users/helfi_users.permissions.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
delete user accounts:
title: Delete user accounts
allow all user cancel methods:
title: All access to all user cancel methods
14 changes: 14 additions & 0 deletions modules/helfi_users/translations/fi.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
msgid ""
msgstr ""

msgid "Ban the account and keep their content."
msgstr "Estä käyttäjä ja säilytä luotu sisältö."

msgid "Ban the account and unpublish their content."
msgstr "Estä käyttäjä ja piilota luotu sisältö."

msgid "Delete the account and make their content belong to %uid1. This action cannot be undone."
msgstr "Poista käyttäjä ja siirrä luotu sisältö käyttäjälle %uid1. Tätä toimintoa ei voi peruuttaa."

msgid "Banning accounts prevents them from logging in. If the account is no longer needed, it should be deleted."
msgstr "Käyttäjän estäminen estää kirjautumisen käyttäjällä. Käyttäjä tulisi poistaa jos sitä ei enää tarvita."

0 comments on commit 1b2885e

Please sign in to comment.