Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 100 |
| DeleteMultiple | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
756 | |
0.00% |
0 / 100 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| 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 / 40 |
|||
| submitForm | |
0.00% |
0 / 1 |
182 | |
0.00% |
0 / 44 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\node\Form\DeleteMultiple. | |
| */ | |
| namespace Drupal\node\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 Symfony\Component\DependencyInjection\ContainerInterface; | |
| use Symfony\Component\HttpFoundation\RedirectResponse; | |
| /** | |
| * Provides a node deletion confirmation form. | |
| */ | |
| class DeleteMultiple extends ConfirmFormBase { | |
| /** | |
| * The array of nodes to delete. | |
| * | |
| * @var string[][] | |
| */ | |
| protected $nodeInfo = array(); | |
| /** | |
| * The tempstore factory. | |
| * | |
| * @var \Drupal\user\PrivateTempStoreFactory | |
| */ | |
| protected $tempStoreFactory; | |
| /** | |
| * The node storage. | |
| * | |
| * @var \Drupal\Core\Entity\EntityStorageInterface | |
| */ | |
| protected $manager; | |
| /** | |
| * Constructs a DeleteMultiple form object. | |
| * | |
| * @param \Drupal\user\PrivateTempStoreFactory $temp_store_factory | |
| * The tempstore factory. | |
| * @param \Drupal\Core\Entity\EntityManagerInterface $manager | |
| * The entity manager. | |
| */ | |
| public function __construct(PrivateTempStoreFactory $temp_store_factory, EntityManagerInterface $manager) { | |
| $this->tempStoreFactory = $temp_store_factory; | |
| $this->storage = $manager->getStorage('node'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('user.private_tempstore'), | |
| $container->get('entity.manager') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFormId() { | |
| return 'node_multiple_delete_confirm'; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getQuestion() { | |
| return $this->formatPlural(count($this->nodeInfo), 'Are you sure you want to delete this item?', 'Are you sure you want to delete these items?'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getCancelUrl() { | |
| return new Url('system.admin_content'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getConfirmText() { | |
| return t('Delete'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildForm(array $form, FormStateInterface $form_state) { | |
| $this->nodeInfo = $this->tempStoreFactory->get('node_multiple_delete_confirm')->get(\Drupal::currentUser()->id()); | |
| if (empty($this->nodeInfo)) { | |
| return new RedirectResponse($this->getCancelUrl()->setAbsolute()->toString()); | |
| } | |
| /** @var \Drupal\node\NodeInterface[] $nodes */ | |
| $nodes = $this->storage->loadMultiple(array_keys($this->nodeInfo)); | |
| $items = []; | |
| foreach ($this->nodeInfo as $id => $langcodes) { | |
| foreach ($langcodes as $langcode) { | |
| $node = $nodes[$id]->getTranslation($langcode); | |
| $key = $id . ':' . $langcode; | |
| $default_key = $id . ':' . $node->getUntranslated()->language()->getId(); | |
| // If we have a translated entity we build a nested list of translations | |
| // that will be deleted. | |
| $languages = $node->getTranslationLanguages(); | |
| if (count($languages) > 1 && $node->isDefaultTranslation()) { | |
| $names = []; | |
| foreach ($languages as $translation_langcode => $language) { | |
| $names[] = $language->getName(); | |
| unset($items[$id . ':' . $translation_langcode]); | |
| } | |
| $items[$default_key] = [ | |
| 'label' => [ | |
| '#markup' => $this->t('@label (Original translation) - <em>The following content translations will be deleted:</em>', ['@label' => $node->label()]), | |
| ], | |
| 'deleted_translations' => [ | |
| '#theme' => 'item_list', | |
| '#items' => $names, | |
| ], | |
| ]; | |
| } | |
| elseif (!isset($items[$default_key])) { | |
| $items[$key] = $node->label(); | |
| } | |
| } | |
| } | |
| $form['nodes'] = array( | |
| '#theme' => 'item_list', | |
| '#items' => $items, | |
| ); | |
| $form = parent::buildForm($form, $form_state); | |
| return $form; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function submitForm(array &$form, FormStateInterface $form_state) { | |
| if ($form_state->getValue('confirm') && !empty($this->nodeInfo)) { | |
| $total_count = 0; | |
| $delete_nodes = []; | |
| /** @var \Drupal\Core\Entity\ContentEntityInterface[][] $delete_translations */ | |
| $delete_translations = []; | |
| /** @var \Drupal\node\NodeInterface[] $nodes */ | |
| $nodes = $this->storage->loadMultiple(array_keys($this->nodeInfo)); | |
| foreach ($this->nodeInfo as $id => $langcodes) { | |
| foreach ($langcodes as $langcode) { | |
| $node = $nodes[$id]->getTranslation($langcode); | |
| if ($node->isDefaultTranslation()) { | |
| $delete_nodes[$id] = $node; | |
| unset($delete_translations[$id]); | |
| $total_count += count($node->getTranslationLanguages()); | |
| } | |
| elseif (!isset($delete_nodes[$id])) { | |
| $delete_translations[$id][] = $node; | |
| } | |
| } | |
| } | |
| if ($delete_nodes) { | |
| $this->storage->delete($delete_nodes); | |
| $this->logger('content')->notice('Deleted @count posts.', array('@count' => count($delete_nodes))); | |
| } | |
| if ($delete_translations) { | |
| $count = 0; | |
| foreach ($delete_translations as $id => $translations) { | |
| $node = $nodes[$id]->getUntranslated(); | |
| foreach ($translations as $translation) { | |
| $node->removeTranslation($translation->language()->getId()); | |
| } | |
| $node->save(); | |
| $count += count($translations); | |
| } | |
| if ($count) { | |
| $total_count += $count; | |
| $this->logger('content')->notice('Deleted @count content translations.', array('@count' => $count)); | |
| } | |
| } | |
| if ($total_count) { | |
| drupal_set_message($this->formatPlural($total_count, 'Deleted 1 post.', 'Deleted @count posts.')); | |
| } | |
| $this->tempStoreFactory->get('node_multiple_delete_confirm')->delete(\Drupal::currentUser()->id()); | |
| } | |
| $form_state->setRedirect('system.admin_content'); | |
| } | |
| } |