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\SiteAuditCheckCode
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;
}