You are here

public function ContentDuplicateTitles::calculateScore in Site Audit 8.3

.

Overrides SiteAuditCheckBase::calculateScore

File

src/Plugin/SiteAuditCheck/ContentDuplicateTitles.php, line 76

Class

ContentDuplicateTitles
Provides the ContentDuplicateTitles Check.

Namespace

Drupal\site_audit\Plugin\SiteAuditCheck

Code

public function calculateScore() {
  if (!isset($this->registry->content_entity_type_counts)) {

    // This hasn't been checked, so check it// make sure we have entities
    // \Drupal\site_audit\Plugin\SiteAuditCheck\ContentEntityTypes::calculateScore();
    $this
      ->checkInvokeCalculateScore('content_entity_types');
  }
  if (empty($this->registry->content_entity_type_counts)) {
    return SiteAuditCheckBase::AUDIT_CHECK_SCORE_INFO;
  }
  $query = \Drupal::database()
    ->select('node_field_data', 'nfd');
  $query
    ->addExpression('COUNT(nfd.title)', 'duplicate_count');
  $query
    ->fields('nfd', [
    'title',
    'type',
  ]);
  $query
    ->groupBy('nfd.title');
  $query
    ->groupBy('nfd.type');
  $query
    ->having('COUNT(nfd.title) > 1');
  $query
    ->orderBy('duplicate_count', 'DESC');
  $result = $query
    ->execute();
  $this->registry->nodes_duplicate_titles = [];
  $this->registry->nodes_duplicate_title_count = 0;
  $content_types = $content_types = \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo("node");
  while ($row = $result
    ->fetchAssoc()) {
    $label = $content_types[$row['type']]['label'];
    $title = Html::escape($row['title']);
    $this->registry->nodes_duplicate_titles[$label][$title] = $row['duplicate_count'];
    $this->registry->nodes_duplicate_title_count += $row['duplicate_count'];
  }
  if (!empty($this->registry->nodes_duplicate_titles)) {
    return SiteAuditCheckBase::AUDIT_CHECK_SCORE_WARN;
  }
  return SiteAuditCheckBase::AUDIT_CHECK_SCORE_PASS;
}