cloud-8.x-2.0-beta1/modules/cloud_service_providers/k8s/src/Service/CostFieldsRenderer.php
modules/cloud_service_providers/k8s/src/Service/CostFieldsRenderer.php
<?php
namespace Drupal\k8s\Service;
use Drupal\Core\Extension\ModuleHandlerInterface;
/**
* Cost fields renderer service.
*/
class CostFieldsRenderer implements CostFieldsRendererInterface {
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* Constructs a new CostFieldsRenderer object.
*
* @param \Drupal\Core\Extension\ModuleHandlerInterface
* The module handler.
*/
public function __construct(ModuleHandlerInterface $module_handler) {
$this->moduleHandler = $module_handler;
}
/**
* {@inheritdoc}
*/
public function render(
$region,
array $instance_types
) {
$build = [];
if (empty($instance_types)
|| empty($region)
|| !$this->moduleHandler->moduleExists('aws_cloud')) {
return $build;
}
$price_date_provider = \Drupal::service('aws_cloud.instance_type_price_data_provider');
$fields = $price_date_provider->getFields();
$price_data = $price_date_provider->getDataByRegion($region);
$price_info = [];
foreach ($instance_types as $instance_type) {
foreach ($price_data as $item) {
if ($item['instance_type'] == $instance_type) {
foreach ($item as $name => $price) {
if ($name == 'instance_type') {
continue;
}
if (empty($price_info[$name])) {
$price_info[$name] = $price;
}
else {
$price_info[$name] += $price;
}
}
break;
}
}
}
if (empty($price_info)) {
return $build;
}
unset($fields['instance_type']);
foreach ($fields as $name => $label) {
$label = str_replace('<br>', ' ', $label->render());
$value = $price_info[$name];
// Use html similar to a real field.
$markup = <<<EOS
<div class="field field--label-inline">
<div class="field--label">$label</div>
<div class="field--item">$value</div>
</div>
EOS;
$build[] = [
'#markup' => $markup,
];
}
return $build;
}
}
