You are here

public function ContentFieldInstances::calculateScore in Site Audit 8.3

.

Overrides SiteAuditCheckBase::calculateScore

File

src/Plugin/SiteAuditCheck/ContentFieldInstances.php, line 74

Class

ContentFieldInstances
Provides the ContentFieldInstances Check.

Namespace

Drupal\site_audit\Plugin\SiteAuditCheck

Code

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

    // We need to calculate, so call the class that does it.
    $this
      ->checkInvokeCalculateScore('content_field_count');
  }
  $map = \Drupal::service('entity_field.manager')
    ->getFieldMap();
  $this->registry->field_instance_counts = [];
  foreach ($map as $entity => $fields) {
    $bundle_column_name = \Drupal::service('entity_type.manager')
      ->getDefinition($entity)
      ->getKey('bundle');
    foreach ($fields as $field => $description) {
      if (!in_array($field, array_keys($this->registry->fields))) {
        continue;
      }
      foreach ($description['bundles'] as $bundle) {
        if ($description['type'] == 'address') {

          // Directly query tables for Address fields.
          $database = \Drupal\Core\Database\Database::getConnection();
          $table = $entity . '__' . $field;
          $query = $database
            ->select($table);

          // Address fields are configured by country code.
          $query
            ->condition($field . '_country_code', NULL, 'IS NOT NULL')
            ->condition('bundle', $bundle);
          $field_count = $query
            ->countQuery()
            ->execute()
            ->fetchField();
        }
        else {
          $query = \Drupal::entityQuery($entity);
          if (!empty($bundle_column_name)) {
            $query
              ->condition($bundle_column_name, $bundle);
          }
          $query
            ->exists($field)
            ->count();
          $field_count = $query
            ->execute();
        }
        $this->registry->field_instance_counts[$bundle][$entity][$field] = $field_count;
      }
    }
  }
  return SiteAuditCheckBase::AUDIT_CHECK_SCORE_INFO;
}