View source
<?php
namespace Drupal\farm_ui_metrics\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Link;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class FarmMetricsBlock extends BlockBase implements ContainerFactoryPluginInterface {
protected $entityTypeManager;
protected $bundleInfo;
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $bundle_info) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->bundleInfo = $bundle_info;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_type.manager'), $container
->get('entity_type.bundle.info'));
}
public function build() {
$output = [];
$output['asset'] = [
'#markup' => '<strong>' . Link::createFromRoute('Assets', 'view.farm_asset.page')
->toString() . '</strong>',
'metrics' => [
'#type' => 'container',
'#attributes' => [
'class' => 'assets metrics-container',
],
],
];
$metrics = $this
->getEntityMetrics('asset');
foreach ($metrics as $metric) {
$output['asset']['metrics'][] = [
'#markup' => $metric,
];
}
if (empty($metrics)) {
$output['asset']['metrics']['empty']['#markup'] = '<p>' . $this
->t('No assets found.') . '</p>';
}
$output['#cache']['tags'][] = 'asset_list';
$output['#cache']['tags'][] = 'config:asset_type_list';
$output['log'] = [
'#markup' => '<strong>' . Link::createFromRoute('Logs', 'view.farm_log.page')
->toString() . '</strong>',
'metrics' => [
'#type' => 'container',
'#attributes' => [
'class' => 'logs metrics-container',
],
],
];
$metrics = $this
->getEntityMetrics('log');
foreach ($metrics as $metric) {
$output['log']['metrics'][] = [
'#markup' => $metric,
];
}
if (empty($metrics)) {
$output['log']['metrics']['empty']['#markup'] = '<p>' . $this
->t('No logs found.') . '</p>';
}
$output['#cache']['tags'][] = 'log_list';
$output['#cache']['tags'][] = 'config:log_type_list';
$output['#attached']['library'][] = 'farm_ui_metrics/metrics_block';
return $output;
}
protected function getEntityMetrics($entity_type) {
$metrics = [];
$bundles = $this->bundleInfo
->getBundleInfo($entity_type);
foreach ($bundles as $bundle => $bundle_info) {
$count = $this->entityTypeManager
->getStorage($entity_type)
->getAggregateQuery()
->accessCheck(TRUE)
->condition('type', $bundle)
->count()
->execute();
$route_name = "view.farm_{$entity_type}.page_type";
$metrics[] = Link::createFromRoute($bundle_info['label'] . ': ' . $count, $route_name, [
'arg_0' => $bundle,
], [
'attributes' => [
'class' => [
'metric',
'button',
],
],
])
->toString();
}
return $metrics;
}
}