You are here

protected function SyncHealth::countStaleEntities in CMS Content Sync 2.1.x

Same name and namespace in other branches
  1. 8 modules/cms_content_sync_health/src/Controller/SyncHealth.php \Drupal\cms_content_sync_health\Controller\SyncHealth::countStaleEntities()
  2. 2.0.x modules/cms_content_sync_health/src/Controller/SyncHealth.php \Drupal\cms_content_sync_health\Controller\SyncHealth::countStaleEntities()
1 call to SyncHealth::countStaleEntities()
SyncHealth::pushing in modules/cms_content_sync_health/src/Controller/SyncHealth.php
Render the overview page.

File

modules/cms_content_sync_health/src/Controller/SyncHealth.php, line 362

Class

SyncHealth
Provides a listing of Flow.

Namespace

Drupal\cms_content_sync_health\Controller

Code

protected function countStaleEntities() {
  $checked = [];
  $count = 0;
  foreach (Flow::getAll() as $flow) {
    foreach ($flow
      ->getController()
      ->getEntityTypeConfig(NULL, NULL, TRUE) as $type_name => $bundles) {
      foreach ($bundles as $bundle_name => $config) {
        $id = $type_name . "\n" . $bundle_name;
        if (in_array($id, $checked)) {
          continue;
        }
        if ($config['export'] != PushIntent::PUSH_AUTOMATICALLY) {
          continue;
        }
        if (!in_array(Pool::POOL_USAGE_FORCE, array_values($config['export_pools']))) {
          continue;
        }
        $checked[] = $id;

        /**
         * @var \Drupal\Core\Entity\EntityTypeManager $entityTypeManager
         */
        $entityTypeManager = $this->entityTypeManager;
        $type = $entityTypeManager
          ->getDefinition($type_name);
        $query = $this->database
          ->select($type
          ->getBaseTable(), 'e');
        $query
          ->leftJoin('cms_content_sync_entity_status', 's', 'e.uuid=s.entity_uuid AND s.entity_type=:type', [
          ':type' => $type_name,
        ]);
        $query = $query
          ->isNull('s.id');

        // Some entity types don't store their bundle information in their table if they don't actually have multiple
        // bundles.
        if (!in_array($type_name, [
          'bibcite_contributor',
          'bibcite_keyword',
        ])) {
          $query = $query
            ->condition('e.' . $type
            ->getKey('bundle'), $bundle_name);
        }
        $result = $query
          ->countQuery()
          ->execute();
        $count += (int) $result
          ->fetchField();
      }
    }
  }
  return $count;
}