FontAwesome->getClass('minus'); } elseif ($variation > 0) { $variationIcon = 'trends-arrow-up-white fs-6'; $variationClass = 'bg-success'; } else { $variationIcon = 'trends-arrow-up-white fs-6 fa-rotate-180 fa-flip-vertical'; $variationClass = 'bg-danger'; } } $series = []; $statistics_day_number = ''; if (!empty($timeline['created']['timeline'])) { $statistics_day_number = $timeline['created']['days']; $i = count($series); $series[$i]['name'] = __('Created'); $series[$i]['type'] = !empty($chartType) ? $chartType : 'column'; foreach ($timeline['created']['timeline'] as $entry) { $series[$i]['data'][] = ['x' => $entry['time'], 'y' => $entry['count']]; } } if (!empty($timeline['modified']['timeline'])) { $statistics_day_number = empty($statistics_day_number) ? $timeline['modified']['days'] : $statistics_day_number; $i = count($series); $series[$i]['name'] = __('Modified'); $series[$i]['type'] = !empty($chartType) ? $chartType : 'line'; foreach ($timeline['modified']['timeline'] as $entry) { $series[$i]['data'][] = ['x' => $entry['time'], 'y' => $entry['count']]; } } $variationHtml = ''; if (!empty($variation)) { $variationHtml = sprintf( '
%s
', $variationClass, $variationIcon, !empty($variation) ? h($variation) : '' ); } $titleHtml = isset($title) ? h($title) : ($titleHtml ?? ''); $leftContent = sprintf( '
%s
<%s class="%s">%s %s%s%s', $titleHtml, (!empty($condensed) ? 'h3' : 'h2'), (!empty($condensed) ? 'my-1' : 'my-2'), h($number ?? ''), __('Past {0} days', $statistics_day_number), empty($allowConfiguration) ? '' : $this->Bootstrap->button([ 'variant' => 'link', 'icon' => 'cog', 'size' => 'xs', 'nodeType' => 'a', 'onclick' => '', 'class' => ['btn-statistics-days-configurator-' . $seed], 'params' => [ 'data-bs-toggle' => 'popover', 'data-bs-title' => __('Set statistics spanning days'), ] ]), (!empty($condensed) ? 'h3' : 'h2'), $variationHtml ); $rightContent = sprintf('
%s
', $this->element('charts/bar', [ 'series' => $series, 'chartOptions' => array_merge( [ 'chart' => [ 'height' => '90px', ], 'stroke' => [ 'width' => [0, 2], 'curve' => 'smooth', ], ], !empty($chartOptions) ? $chartOptions : [] ) ])); $cardContent = sprintf('
%s
%s
', $panelClasses ?? '', (!empty($condensed) ? 'max-height: 100px' : ''), $panelStyle ?? '', $leftContent, (!empty($condensed) ? 'p-2' : ''), $rightContent); echo $this->Bootstrap->card([ 'variant' => 'secondary', 'bodyHTML' => $cardContent, 'bodyClass' => (!empty($condensed) ? 'py-1 px-2' : 'p-3'), 'class' => ['shadow-sm', (empty($panelNoGrow) ? 'grow-on-hover' : '')] ]); ?>