selectedFamilies($build); if ($families === []) { $this->error('No valid sitemap families selected.'); return self::INVALID; } $diskName = (string) ($this->option('disk') ?: config('sitemaps.static_publish.disk', 'sitemaps_public')); $disk = Storage::disk($diskName); $written = 0; $failed = 0; $this->info('Disk: ' . $diskName); $this->info('Families: ' . implode(', ', $families)); $this->newLine(); // ── Root sitemap index ──────────────────────────────────────────── $t = microtime(true); $index = $build->buildIndex(force: true, persist: false, families: $families); $disk->put('sitemap.xml', $index['content']); $written++; $this->line(sprintf( ' sitemap.xml %d entries %.3fs', $index['url_count'], microtime(true) - $t, )); // ── Per-family documents ────────────────────────────────────────── foreach ($families as $family) { $familyStart = microtime(true); $names = $build->canonicalDocumentNamesForFamily($family); $this->newLine(); $this->line(sprintf(' %s (%d document(s))', $family, count($names))); foreach ($names as $documentName) { $t = microtime(true); $built = $build->buildNamed($documentName, force: true, persist: false); if ($built === null) { $this->line(sprintf(' %s SKIPPED (builder returned null)', $documentName)); $failed++; continue; } $path = 'sitemaps/' . $documentName . '.xml'; $disk->put($path, $built['content']); $written++; $this->line(sprintf( ' %s %d URLs %.3fs', $documentName . '.xml', $built['url_count'] ?? 0, microtime(true) - $t, )); } $this->line(sprintf( ' %s done %.3fs', $family, microtime(true) - $familyStart, )); } // ── Summary ─────────────────────────────────────────────────────── $this->newLine(); $this->info(sprintf( 'Done: %d file(s) written, %d failed total %.3fs', $written, $failed, microtime(true) - $totalStart, )); return $failed > 0 ? self::FAILURE : self::SUCCESS; } /** @return list */ private function selectedFamilies(SitemapBuildService $build): array { $only = []; foreach ((array) $this->option('only') as $value) { foreach (explode(',', (string) $value) as $family) { $normalized = trim($family); if ($normalized !== '') { $only[] = $normalized; } } } $enabled = $build->enabledFamilies(); if ($only === []) { return $enabled; } return array_values(array_filter($enabled, fn (string $f): bool => in_array($f, $only, true))); } }