build((bool) $this->option('fresh')); if ($this->option('json')) { $this->line((string) json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); return self::SUCCESS; } $period = $data['period']; $this->info(sprintf( 'Wachstum — Zeitraum %s bis %s, Zwischenblick %s, %d %% der Zeit vergangen', $period['start']->format('d.m.Y'), $period['end']->format('d.m.Y'), $period['review']->format('d.m.Y'), (int) round($period['elapsed_share'] * 100), )); foreach ($data['blocks'] as $block) { $this->newLine(); $this->line("{$block['title']}"); $this->table( ['Bedingung', 'Ist', 'Soll heute', 'Schwelle', 'Status'], array_map(static fn (array $criterion): array => [ $criterion['label'], $criterion['actual'] ?? '–', $criterion['expected'] ?? '–', $criterion['threshold'], GrowthReport::statusLabel($criterion['status']), ], $block['criteria']), ); foreach ($block['criteria'] as $criterion) { if ($criterion['note'] !== null) { $this->line(' '.$criterion['note']); } } $this->line(' '.$block['consequence']); } if ($data['pages'] !== []) { $this->newLine(); $this->line('Transparenzseiten, letzte 30 Tage (Umami)'); $this->table( ['Portal', 'Seite', 'Aufrufe', 'aus der Suche'], array_map(static fn (array $row): array => [$row['brand'], $row['page'], $row['views'], $row['search_views']], $data['pages']), ); } return self::SUCCESS; } }