Skip to content
Snippets Groups Projects
Commit 2a21bdae authored by catch's avatar catch
Browse files

Issue #3258321 by darvanen, AaronMcHale, dww, mstrelan, lauriii, Gábor Hojtsy,...

Issue #3258321 by darvanen, AaronMcHale, dww, mstrelan, lauriii, Gábor Hojtsy, benjifisher, hmendes, rkoller, shaal, worldlinemine: Cancel account button on user form triggers server-side validation
parent f67f0cb2
No related branches found
No related tags found
37 merge requests!12227Issue #3181946 by jonmcl, mglaman,!7471uncessary 5 files are moved from media-library folder to misc folder,!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2853#3274419 Makes BaseFieldOverride inherit the internal property from the base field.,!2719Issue #3110137: Remove Classy from core.,!2437Issue #3238257 by hooroomoo, Wim Leers: Fragment link pointing to <textarea>...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
......@@ -17,13 +17,23 @@ class ProfileForm extends AccountForm {
protected function actions(array $form, FormStateInterface $form_state) {
$element = parent::actions($form, $form_state);
// The user account being edited.
$account = $this->entity;
$element['delete']['#type'] = 'submit';
$element['delete']['#value'] = $this->t('Cancel account');
$element['delete']['#submit'] = ['::editCancelSubmit'];
$element['delete']['#access'] = $account->id() > 1 && $account->access('delete');
if (!$this->entity->isNew() && $this->entity->hasLinkTemplate('cancel-form')) {
$route_info = $this->entity->toUrl('cancel-form');
if ($this->getRequest()->query->has('destination')) {
$query = $route_info->getOption('query');
$query['destination'] = $this->getRequest()->query->get('destination');
$route_info->setOption('query', $query);
}
$element['delete'] = [
'#type' => 'link',
'#title' => $this->t('Cancel account'),
'#access' => $this->entity->id() > 1 && $this->entity->access('delete'),
'#attributes' => [
'class' => ['button', 'button--danger'],
],
];
$element['delete']['#url'] = $route_info;
}
return $element;
}
......@@ -39,22 +49,4 @@ public function save(array $form, FormStateInterface $form_state) {
$this->messenger()->addStatus($this->t('The changes have been saved.'));
}
/**
* Provides a submit handler for the 'Cancel account' button.
*/
public function editCancelSubmit($form, FormStateInterface $form_state) {
$destination = [];
$query = $this->getRequest()->query;
if ($query->has('destination')) {
$destination = ['destination' => $query->get('destination')];
$query->remove('destination');
}
// We redirect from user/%/edit to user/%/cancel to make the tabs disappear.
$form_state->setRedirect(
'entity.user.cancel_form',
['user' => $this->entity->id()],
['query' => $destination]
);
}
}
......@@ -142,10 +142,7 @@ public function testUserCancelInvalid() {
$node = $this->drupalCreateNode(['uid' => $account->id()]);
// Attempt to cancel account.
$this->drupalGet('user/' . $account->id() . '/edit');
$this->submitForm([], 'Cancel account');
// Confirm account cancellation.
$this->drupalGet('user/' . $account->id() . '/cancel');
$timestamp = time();
$this->submitForm([], 'Confirm');
$this->assertSession()->pageTextContains('A confirmation request to cancel your account has been sent to your email address.');
......@@ -189,8 +186,7 @@ public function testUserBlock() {
$account = $user_storage->load($web_user->id());
// Attempt to cancel account.
$this->drupalGet('user/' . $account->id() . '/edit');
$this->submitForm([], 'Cancel account');
$this->drupalGet('user/' . $account->id() . '/cancel');
$this->assertSession()->pageTextContains('Are you sure you want to cancel your account?');
$this->assertSession()->pageTextContains('Your account will be blocked and you will no longer be able to log in. All of your content will remain attributed to your username.');
$this->assertSession()->pageTextNotContains('Cancellation method');
......@@ -249,8 +245,7 @@ public function testUserBlockUnpublish() {
$comment->save();
// Attempt to cancel account.
$this->drupalGet('user/' . $account->id() . '/edit');
$this->submitForm([], 'Cancel account');
$this->drupalGet('user/' . $account->id() . '/cancel');
$this->assertSession()->pageTextContains('Are you sure you want to cancel your account?');
$this->assertSession()->pageTextContains('Your account will be blocked and you will no longer be able to log in. All of your content will be hidden from everyone but administrators.');
......@@ -371,8 +366,7 @@ public function testUserAnonymize() {
$revision_node = $this->drupalCreateNode($settings);
// Attempt to cancel account.
$this->drupalGet('user/' . $account->id() . '/edit');
$this->submitForm([], 'Cancel account');
$this->drupalGet('user/' . $account->id() . '/cancel');
$this->assertSession()->pageTextContains('Are you sure you want to cancel your account?');
$this->assertSession()->pageTextContains("Your account will be removed and all account information deleted. All of your content will be assigned to the {$this->config('user.settings')->get('anonymous')} user.");
......@@ -435,8 +429,7 @@ public function testUserAnonymizeBatch() {
}
// Attempt to cancel account.
$this->drupalGet('user/' . $account->id() . '/edit');
$this->submitForm([], 'Cancel account');
$this->drupalGet('user/' . $account->id() . '/cancel');
$this->assertSession()->pageTextContains('Are you sure you want to cancel your account?');
$this->assertSession()->pageTextContains("Your account will be removed and all account information deleted. All of your content will be assigned to the {$this->config('user.settings')->get('anonymous')} user.");
......@@ -508,8 +501,7 @@ public function testUserDelete() {
$revision_node = $this->drupalCreateNode($settings);
// Attempt to cancel account.
$this->drupalGet('user/' . $account->id() . '/edit');
$this->submitForm([], 'Cancel account');
$this->drupalGet('user/' . $account->id() . '/cancel');
$this->assertSession()->pageTextContains('Are you sure you want to cancel your account?');
$this->assertSession()->pageTextContains('Your account will be removed and all account information deleted. All of your content will also be deleted.');
......@@ -555,8 +547,7 @@ public function testUserCancelByAdmin() {
$this->drupalLogin($admin_user);
// Delete regular user.
$this->drupalGet('user/' . $account->id() . '/edit');
$this->submitForm([], 'Cancel account');
$this->drupalGet('user/' . $account->id() . '/cancel');
$this->assertSession()->pageTextContains("Are you sure you want to cancel the account {$account->getAccountName()}?");
$this->assertSession()->pageTextContains('Cancellation method');
......@@ -583,8 +574,7 @@ public function testUserWithoutEmailCancelByAdmin() {
$this->drupalLogin($admin_user);
// Delete regular user without email address.
$this->drupalGet('user/' . $account->id() . '/edit');
$this->submitForm([], 'Cancel account');
$this->drupalGet('user/' . $account->id() . '/cancel');
$this->assertSession()->pageTextContains("Are you sure you want to cancel the account {$account->getAccountName()}?");
$this->assertSession()->pageTextContains('Cancellation method');
......
......@@ -109,7 +109,7 @@ public function testTranslatedUserDeletion() {
['language' => $this->container->get('language_manager')->getLanguage('en')]
);
$this->drupalGet($url);
$this->submitForm([], 'Cancel account');
$this->clickLink('Cancel account');
$this->assertSession()->statusCodeEquals(200);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment