*/ class ServicegroupRenderer implements ItemTableRenderer { use Translation; use BaseFilter; public function assembleAttributes($item, Attributes $attributes, string $layout): void { $attributes->get('class')->addValue('servicegroup'); } public function assembleVisual($item, HtmlDocument $visual, string $layout): void { } public function assembleTitle($item, HtmlDocument $title, string $layout): void { if ($layout === 'header') { $title->addHtml(new HtmlElement( 'span', Attributes::create(['class' => 'subject']), Text::create($item->display_name) )); } else { $link = new Link( $item->display_name, Links::servicegroup($item), [ 'class' => 'subject', 'title' => sprintf( $this->translate('List all services in the group "%s"'), $item->display_name ) ] ); if ($this->hasBaseFilter()) { $link->getUrl()->setFilter($this->getBaseFilter()); } $title->addHtml($link); } } public function assembleCaption($item, HtmlDocument $caption, string $layout): void { $caption->addHtml(Text::create($item->name)); } public function assembleExtendedInfo($item, HtmlDocument $info, string $layout): void { // assembleExtendedInfo() is only called when $layout == header $info->addHtml($this->createStatistics($item)); } public function assembleFooter($item, HtmlDocument $footer, string $layout): void { } public function assemble($item, string $name, HtmlDocument $element, string $layout): bool { return false; // no custom sections } public function assembleColumns($item, HtmlDocument $columns, string $layout): void { $serviceStats = $this->createStatistics($item); if ($this->hasBaseFilter()) { $serviceStats->setBaseFilter(Filter::all($serviceStats->getBaseFilter(), $this->getBaseFilter())); } $columns->addHtml($serviceStats); } /** * Create statistics for the given item * * @param ServicegroupSummary $item * * @return ServiceStatistics */ protected function createStatistics(ServicegroupSummary $item): ServiceStatistics { return (new ServiceStatistics($item)) ->setBaseFilter(Filter::equal('servicegroup.name', $item->name)); } }