Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 93 |
| UserMultipleCancelConfirm | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
380 | |
0.00% |
0 / 93 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| getFormId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getQuestion | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getCancelUrl | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getConfirmText | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| buildForm | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 51 |
|||
| submitForm | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 24 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\user\Form\UserMultipleCancelConfirm. | |
| */ | |
| namespace Drupal\user\Form; | |
| use Drupal\Core\Entity\EntityManagerInterface; | |
| use Drupal\Core\Form\ConfirmFormBase; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\Core\Url; | |
| use Drupal\user\PrivateTempStoreFactory; | |
| use Drupal\user\UserStorageInterface; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Provides a confirmation form for cancelling multiple user accounts. | |
| */ | |
| class UserMultipleCancelConfirm extends ConfirmFormBase { | |
| /** | |
| * The temp store factory. | |
| * | |
| * @var \Drupal\user\PrivateTempStoreFactory | |
| */ | |
| protected $tempStoreFactory; | |
| /** | |
| * The user storage. | |
| * | |
| * @var \Drupal\user\UserStorageInterface | |
| */ | |
| protected $userStorage; | |
| /** | |
| * The entity manager. | |
| * | |
| * @var \Drupal\Core\Entity\EntityManagerInterface | |
| */ | |
| protected $entityManager; | |
| /** | |
| * Constructs a new UserMultipleCancelConfirm. | |
| * | |
| * @param \Drupal\user\PrivateTempStoreFactory $temp_store_factory | |
| * The temp store factory. | |
| * @param \Drupal\user\UserStorageInterface $user_storage | |
| * The user storage. | |
| * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager | |
| * The entity manager. | |
| */ | |
| public function __construct(PrivateTempStoreFactory $temp_store_factory, UserStorageInterface $user_storage, EntityManagerInterface $entity_manager) { | |
| $this->tempStoreFactory = $temp_store_factory; | |
| $this->userStorage = $user_storage; | |
| $this->entityManager = $entity_manager; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('user.private_tempstore'), | |
| $container->get('entity.manager')->getStorage('user'), | |
| $container->get('entity.manager') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFormId() { | |
| return 'user_multiple_cancel_confirm'; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getQuestion() { | |
| return $this->t('Are you sure you want to cancel these user accounts?'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getCancelUrl() { | |
| return new Url('entity.user.collection'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getConfirmText() { | |
| return $this->t('Cancel accounts'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildForm(array $form, FormStateInterface $form_state) { | |
| // Retrieve the accounts to be canceled from the temp store. | |
| $accounts = $this->tempStoreFactory | |
| ->get('user_user_operations_cancel') | |
| ->get($this->currentUser()->id()); | |
| if (!$accounts) { | |
| return $this->redirect('entity.user.collection'); | |
| } | |
| $root = NULL; | |
| $form['accounts'] = array('#prefix' => '<ul>', '#suffix' => '</ul>', '#tree' => TRUE); | |
| foreach ($accounts as $account) { | |
| $uid = $account->id(); | |
| // Prevent user 1 from being canceled. | |
| if ($uid <= 1) { | |
| $root = intval($uid) === 1 ? $account : $root; | |
| continue; | |
| } | |
| $form['accounts'][$uid] = array( | |
| '#type' => 'hidden', | |
| '#value' => $uid, | |
| '#prefix' => '<li>', | |
| '#suffix' => $account->label() . "</li>\n", | |
| ); | |
| } | |
| // Output a notice that user 1 cannot be canceled. | |
| if (isset($root)) { | |
| $redirect = (count($accounts) == 1); | |
| $message = $this->t('The user account %name cannot be canceled.', array('%name' => $root->label())); | |
| drupal_set_message($message, $redirect ? 'error' : 'warning'); | |
| // If only user 1 was selected, redirect to the overview. | |
| if ($redirect) { | |
| return $this->redirect('entity.user.collection'); | |
| } | |
| } | |
| $form['operation'] = array('#type' => 'hidden', '#value' => 'cancel'); | |
| $form['user_cancel_method'] = array( | |
| '#type' => 'radios', | |
| '#title' => $this->t('When cancelling these accounts'), | |
| ); | |
| $form['user_cancel_method'] += user_cancel_methods(); | |
| // Allow to send the account cancellation confirmation mail. | |
| $form['user_cancel_confirm'] = array( | |
| '#type' => 'checkbox', | |
| '#title' => $this->t('Require email confirmation to cancel account'), | |
| '#default_value' => FALSE, | |
| '#description' => $this->t('When enabled, the user must confirm the account cancellation via email.'), | |
| ); | |
| // Also allow to send account canceled notification mail, if enabled. | |
| $form['user_cancel_notify'] = array( | |
| '#type' => 'checkbox', | |
| '#title' => $this->t('Notify user when account is canceled'), | |
| '#default_value' => FALSE, | |
| '#access' => $this->config('user.settings')->get('notify.status_canceled'), | |
| '#description' => $this->t('When enabled, the user will receive an email notification after the account has been canceled.'), | |
| ); | |
| $form = parent::buildForm($form, $form_state); | |
| return $form; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function submitForm(array &$form, FormStateInterface $form_state) { | |
| $current_user_id = $this->currentUser()->id(); | |
| // Clear out the accounts from the temp store. | |
| $this->tempStoreFactory->get('user_user_operations_cancel')->delete($current_user_id); | |
| if ($form_state->getValue('confirm')) { | |
| foreach ($form_state->getValue('accounts') as $uid => $value) { | |
| // Prevent programmatic form submissions from cancelling user 1. | |
| if ($uid <= 1) { | |
| continue; | |
| } | |
| // Prevent user administrators from deleting themselves without confirmation. | |
| if ($uid == $current_user_id) { | |
| $admin_form_mock = array(); | |
| $admin_form_state = $form_state; | |
| $admin_form_state->unsetValue('user_cancel_confirm'); | |
| // The $user global is not a complete user entity, so load the full | |
| // entity. | |
| $account = $this->userStorage->load($uid); | |
| $admin_form = $this->entityManager->getFormObject('user', 'cancel'); | |
| $admin_form->setEntity($account); | |
| // Calling this directly required to init form object with $account. | |
| $admin_form->buildForm($admin_form_mock, $admin_form_state); | |
| $admin_form->submitForm($admin_form_mock, $admin_form_state); | |
| } | |
| else { | |
| user_cancel($form_state->getValues(), $uid, $form_state->getValue('user_cancel_method')); | |
| } | |
| } | |
| } | |
| $form_state->setRedirect('entity.user.collection'); | |
| } | |
| } |