Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
20.00% |
1 / 5 |
CRAP | |
40.62% |
13 / 32 |
| ForumUninstallValidator | |
0.00% |
0 / 1 |
|
20.00% |
1 / 5 |
25.95 | |
40.62% |
13 / 32 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| validate | |
100.00% |
1 / 1 |
5 | |
100.00% |
13 / 13 |
|||
| hasForumNodes | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| hasTermsForVocabulary | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| getForumVocabulary | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\forum\ForumUninstallValidator. | |
| */ | |
| namespace Drupal\forum; | |
| use Drupal\Core\Config\ConfigFactoryInterface; | |
| use Drupal\Core\Entity\EntityManagerInterface; | |
| use Drupal\Core\Entity\Query\QueryFactory; | |
| use Drupal\Core\Extension\ModuleUninstallValidatorInterface; | |
| use Drupal\Core\StringTranslation\StringTranslationTrait; | |
| use Drupal\Core\StringTranslation\TranslationInterface; | |
| use Drupal\taxonomy\VocabularyInterface; | |
| /** | |
| * Prevents forum module from being uninstalled whilst any forum nodes exist | |
| * or there are any terms in the forum vocabulary. | |
| */ | |
| class ForumUninstallValidator implements ModuleUninstallValidatorInterface { | |
| use StringTranslationTrait; | |
| /** | |
| * The field storage config storage. | |
| * | |
| * @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface | |
| */ | |
| protected $vocabularyStorage; | |
| /** | |
| * The entity query factory. | |
| * | |
| * @var \Drupal\Core\Entity\Query\QueryFactory | |
| */ | |
| protected $queryFactory; | |
| /** | |
| * The config factory. | |
| * | |
| * @var \Drupal\Core\Config\ConfigFactoryInterface | |
| */ | |
| protected $configFactory; | |
| /** | |
| * Constructs a new ForumUninstallValidator. | |
| * | |
| * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager | |
| * The entity manager. | |
| * @param \Drupal\Core\Entity\Query\QueryFactory $query_factory | |
| * The entity query factory. | |
| * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
| * The config factory. | |
| * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation | |
| * The string translation service. | |
| */ | |
| public function __construct(EntityManagerInterface $entity_manager, QueryFactory $query_factory, ConfigFactoryInterface $config_factory, TranslationInterface $string_translation) { | |
| $this->vocabularyStorage = $entity_manager->getStorage('taxonomy_vocabulary'); | |
| $this->queryFactory = $query_factory; | |
| $this->configFactory = $config_factory; | |
| $this->stringTranslation = $string_translation; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validate($module) { | |
| $reasons = []; | |
| if ($module == 'forum') { | |
| if ($this->hasForumNodes()) { | |
| $reasons[] = $this->t('To uninstall Forum, first delete all <em>Forum</em> content'); | |
| } | |
| $vocabulary = $this->getForumVocabulary(); | |
| if ($this->hasTermsForVocabulary($vocabulary)) { | |
| if ($vocabulary->access('view')) { | |
| $reasons[] = $this->t('To uninstall Forum, first delete all <a href=":url">%vocabulary</a> terms', [ | |
| '%vocabulary' => $vocabulary->label(), | |
| ':url' => $vocabulary->url('overview-form'), | |
| ]); | |
| } | |
| else { | |
| $reasons[] = $this->t('To uninstall Forum, first delete all %vocabulary terms', [ | |
| '%vocabulary' => $vocabulary->label() | |
| ]); | |
| } | |
| } | |
| } | |
| return $reasons; | |
| } | |
| /** | |
| * Determines if there are any forum nodes or not. | |
| * | |
| * @return bool | |
| * TRUE if there are forum nodes, FALSE otherwise. | |
| */ | |
| protected function hasForumNodes() { | |
| $nodes = $this->queryFactory->get('node') | |
| ->condition('type', 'forum') | |
| ->accessCheck(FALSE) | |
| ->range(0, 1) | |
| ->execute(); | |
| return !empty($nodes); | |
| } | |
| /** | |
| * Determines if there are any taxonomy terms for a specified vocabulary. | |
| * | |
| * @param \Drupal\taxonomy\VocabularyInterface $vocabulary | |
| * The vocabulary to check for terms. | |
| * | |
| * @return bool | |
| * TRUE if there are terms for this vocabulary, FALSE otherwise. | |
| */ | |
| protected function hasTermsForVocabulary(VocabularyInterface $vocabulary) { | |
| $terms = $this->queryFactory->get('taxonomy_term') | |
| ->condition('vid', $vocabulary->id()) | |
| ->accessCheck(FALSE) | |
| ->range(0, 1) | |
| ->execute(); | |
| return !empty($terms); | |
| } | |
| /** | |
| * Returns the vocabulary configured for forums. | |
| * | |
| * @return \Drupal\taxonomy\VocabularyInterface | |
| * The vocabulary entity for forums. | |
| */ | |
| protected function getForumVocabulary() { | |
| $vid = $this->configFactory->get('forum.settings')->get('vocabulary'); | |
| return $this->vocabularyStorage->load($vid); | |
| } | |
| } |