Skip to content
Snippets Groups Projects
Commit f7711c32 authored by Adrian Lorenc's avatar Adrian Lorenc Committed by Claudiu Cristea
Browse files

Issue #3487689 by alorenc, claudiu.cristea: Drop uninstall_page library

parent bc2b16ef
No related branches found
No related tags found
1 merge request!139Resolve #3487689 "Drop uninstallpage library"
Pipeline #342127 passed
/**
* @file
* Adds JavaScript functionality to the uninstall preparation confirm page.
*/
(($, Drupal, window, once) => {
function uninstallButtonWatcher(context) {
$(
once(
'uninstall-button-watcher',
'#private-message-admin-uninstall-form #edit-submit',
context,
),
).each(() => {
$(this).click(() => {
return window.confirm(
Drupal.t(
'This will delete all private message content from the database. Are you absolutely sure you wish to proceed?',
),
);
});
});
}
Drupal.behaviors.privateMessageUninstallPrepConfirm = {
attach(context) {
uninstallButtonWatcher(context);
},
};
})(jQuery, Drupal, window, once);
......@@ -63,11 +63,3 @@ message_form:
- core/once
- core/drupalSettings
- private_message/browser_notification
uninstall_page:
js:
js/private_message_uninstall_prep_confirm.js: {}
dependencies:
- core/jquery
- core/once
......@@ -130,6 +130,13 @@ private_message.admin_config.uninstall:
requirements:
_permission: 'administer private message module'
private_message.admin_config.uninstall_confirm:
path: '/admin/config/private-message/uninstall/confirm'
defaults:
_form: '\Drupal\private_message\Form\AdminUninstallForm'
requirements:
_permission: 'administer private message module'
private_message.ajax_callback:
path: '/private-message/ajax-callback/{op}'
defaults:
......
......@@ -170,9 +170,19 @@ class PrivateMessageController extends ControllerBase implements PrivateMessageC
*/
public function adminUninstallPage() {
return [
'#prefix' => '<div id="private_message_admin_uninstall_page">',
'#suffix' => '</div>',
'form' => $this->formBuilder->getForm('Drupal\private_message\Form\AdminUninstallForm'),
'message' => [
'#prefix' => '<div id="private_message_admin_uninstall_page">',
'#suffix' => '</div>',
'#markup' => $this->t('The private message module cannot be uninstalled if there is private message content in the database.'),
],
'link' => [
'#type' => 'link',
'#title' => $this->t('Delete all private message content'),
'#url' => Url::fromRoute('private_message.admin_config.uninstall_confirm'),
'#attributes' => [
'class' => ['button'],
],
],
];
}
......
......@@ -57,37 +57,14 @@ class AdminUninstallForm extends ConfirmFormBase {
* {@inheritdoc}
*/
public function getCancelUrl() {
return Url::fromRoute('private_message.admin_config');
return Url::fromRoute('private_message.admin_config.uninstall');
}
/**
* {@inheritdoc}
*/
public function getDescription() {
return $this->t('The private message module cannot be uninstalled if there is private message content in the database. Clicking the button below will delete all private message content from the system, allowing the module to be uninstalled.') . '<br><strong>' . $this->t('THIS ACTION CANNOT BE REVERSED') . '</strong>';
}
/**
* {@inheritdoc}
*/
public function getConfirmText() {
return $this->t('Delete all private message content');
}
/**
* {@inheritdoc}
*/
public function getCancelText() {
return $this->t('Cancel');
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['#attached']['library'][] = 'private_message/uninstall_page';
return parent::buildForm($form, $form_state);
return $this->t('Clicking the button below will delete all private message content from the system, allowing the module to be uninstalled.') . '<br><strong>' . $this->t('THIS ACTION CANNOT BE REVERSED') . '</strong>';
}
/**
......@@ -105,6 +82,8 @@ class AdminUninstallForm extends ConfirmFormBase {
batch_set($batch);
$this->messenger->addMessage($this->t('Private message data has been deleted.'));
$form_state->setRedirectUrl($this->getCancelUrl());
}
/**
......
<?php
declare(strict_types=1);
namespace Drupal\Tests\private_message\Functional;
use Drupal\Tests\BrowserTestBase;
use Drupal\private_message\Entity\PrivateMessage;
use Drupal\private_message\Entity\PrivateMessageThread;
/**
* Tests for the uninstallation process.
*
* @group private_message
*/
class PrivateMessageUninstallTest extends BrowserTestBase {
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* Modules to install.
*
* @var array
*/
protected static $modules = ['private_message'];
/**
* Tests the access to uninstall routes.
*/
public function testLimitedAccess(): void {
$this->drupalGet('/admin/config/private-message/uninstall');
$this->assertSession()->statusCodeEquals(403);
$this->drupalGet('/admin/config/private-message/uninstall/confirm');
$this->assertSession()->statusCodeEquals(403);
}
/**
* Tests deletion of all private message content from the system.
*/
public function testUninstallation(): void {
$owner = $this->DrupalCreateUser();
$adminUser = $this->DrupalCreateUser([
'administer site configuration',
'administer private message module',
]);
PrivateMessageThread::create([
'members' => [$owner, $adminUser],
'subject' => $this->getRandomGenerator()->word(10),
'updated' => \Drupal::time()->getRequestTime() - 3600,
'private_messages' => [
PrivateMessage::create([
'owner' => $owner,
'message' => [
'value' => $this->getRandomGenerator()->sentences(5),
'format' => 'plain_text',
],
]),
],
])->save();
$this->drupalLogin($adminUser);
$this->drupalGet('/admin/config/private-message/uninstall');
$this->getSession()
->getPage()
->clickLink('Delete all private message content');
$this->assertSession()->statusCodeEquals(200);
$this->getSession()->getPage()->clickLink('Cancel');
$this->assertSame(2, $this->retrieveCount());
$this->getSession()
->getPage()
->clickLink('Delete all private message content');
$this->assertSession()->statusCodeEquals(200);
$this->submitForm([], t('Confirm'));
$this->assertSame(0, $this->retrieveCount());
}
/**
* Returns a count of entities.
*
* @return int
* Number of entities.
*/
protected function retrieveCount(): int {
$messages = $this
->container
->get('entity_type.manager')
->getStorage('private_message')
->getQuery()
->accessCheck(FALSE)
->count()
->execute();
$threads = $this
->container
->get('entity_type.manager')
->getStorage('private_message_thread')
->getQuery()
->accessCheck(FALSE)
->count()
->execute();
return $messages + $threads;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment