Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
25.00% |
1 / 4 |
CRAP | |
38.89% |
7 / 18 |
| BookUninstallValidator | |
0.00% |
0 / 1 |
|
25.00% |
1 / 4 |
18.18 | |
38.89% |
7 / 18 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| validate | |
100.00% |
1 / 1 |
4 | |
100.00% |
7 / 7 |
|||
| hasBookOutlines | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| hasBookNodes | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\book\BookUninstallValidator. | |
| */ | |
| namespace Drupal\book; | |
| use Drupal\Core\Entity\Query\QueryFactory; | |
| use Drupal\Core\Extension\ModuleUninstallValidatorInterface; | |
| use Drupal\Core\StringTranslation\StringTranslationTrait; | |
| use Drupal\Core\StringTranslation\TranslationInterface; | |
| /** | |
| * Prevents book module from being uninstalled whilst any book nodes exist or | |
| * there are any book outline stored. | |
| */ | |
| class BookUninstallValidator implements ModuleUninstallValidatorInterface { | |
| use StringTranslationTrait; | |
| /** | |
| * The book outline storage. | |
| * | |
| * @var \Drupal\book\BookOutlineStorageInterface | |
| */ | |
| protected $bookOutlineStorage; | |
| /** | |
| * The entity query for node. | |
| * | |
| * @var \Drupal\Core\Entity\Query\QueryInterface | |
| */ | |
| protected $entityQuery; | |
| /** | |
| * Constructs a new BookUninstallValidator. | |
| * | |
| * @param \Drupal\book\BookOutlineStorageInterface $book_outline_storage | |
| * The book outline storage. | |
| * @param \Drupal\Core\Entity\Query\QueryFactory $query_factory | |
| * The entity query factory. | |
| * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation | |
| * The string translation service. | |
| */ | |
| public function __construct(BookOutlineStorageInterface $book_outline_storage, QueryFactory $query_factory, TranslationInterface $string_translation) { | |
| $this->bookOutlineStorage = $book_outline_storage; | |
| $this->entityQuery = $query_factory->get('node'); | |
| $this->stringTranslation = $string_translation; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validate($module) { | |
| $reasons = []; | |
| if ($module == 'book') { | |
| if ($this->hasBookOutlines()) { | |
| $reasons[] = $this->t('To uninstall Book, delete all content that is part of a book'); | |
| } | |
| else { | |
| // The book node type is provided by the Book module. Prevent uninstall | |
| // if there are any nodes of that type. | |
| if ($this->hasBookNodes()) { | |
| $reasons[] = $this->t('To uninstall Book, delete all content that has the Book content type'); | |
| } | |
| } | |
| } | |
| return $reasons; | |
| } | |
| /** | |
| * Checks if there are any books in an outline. | |
| * | |
| * @return bool | |
| * TRUE if there are books, FALSE if not. | |
| */ | |
| protected function hasBookOutlines() { | |
| return $this->bookOutlineStorage->hasBooks(); | |
| } | |
| /** | |
| * Determines if there is any book nodes or not. | |
| * | |
| * @return bool | |
| * TRUE if there are book nodes, FALSE otherwise. | |
| */ | |
| protected function hasBookNodes() { | |
| $nodes = $this->entityQuery | |
| ->condition('type', 'book') | |
| ->accessCheck(FALSE) | |
| ->range(0, 1) | |
| ->execute(); | |
| return !empty($nodes); | |
| } | |
| } |