<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.
namespace Yoast\WP\SEO\Schema_Aggregator\Application;
use Yoast\WP\SEO\Helpers\Indexable_Helper;
use Yoast\WP\SEO\Schema_Aggregator\Application\Schema_Map\Schema_Map_Builder;
use Yoast\WP\SEO\Schema_Aggregator\Application\Schema_Map\Schema_Map_Xml_Renderer;
use Yoast\WP\SEO\Schema_Aggregator\Infrastructure\Schema_Map\Schema_Map_Repository_Factory;
/**
* Class that handles the command to aggregate site schema map.
*
* @phpcs:disable Yoast.NamingConventions.ObjectNameDepth.MaxExceeded
*/
class Aggregate_Site_Schema_Map_Command_Handler {
/**
* The schema map factory.
*
* @var Schema_Map_Repository_Factory
*/
private $schema_map_repository_factory;
/**
* The schema map builder.
*
* @var Schema_Map_Builder
*/
private $schema_map_builder;
/**
* The schema map XML renderer.
*
* @var Schema_Map_Xml_Renderer
*/
private $schema_map_xml_renderer;
/**
* The indexable helper.
*
* @var Indexable_Helper
*/
private $indexable_helper;
/**
* Aggregate_Site_Schema_Map_Command_Handler constructor.
*
* @param Schema_Map_Repository_Factory $schema_map_repository_factory The schema map factory.
* @param Schema_Map_Builder $schema_map_builder The schema map builder.
* @param Schema_Map_Xml_Renderer $schema_map_xml_renderer The schema map XML renderer.
* @param Indexable_Helper $indexable_helper The indexable helper.
*/
public function __construct( Schema_Map_Repository_Factory $schema_map_repository_factory, Schema_Map_Builder $schema_map_builder, Schema_Map_Xml_Renderer $schema_map_xml_renderer, Indexable_Helper $indexable_helper ) {
$this->schema_map_repository_factory = $schema_map_repository_factory;
$this->schema_map_builder = $schema_map_builder;
$this->schema_map_xml_renderer = $schema_map_xml_renderer;
$this->indexable_helper = $indexable_helper;
}
/**
* Handles the Aggregate_Site_Schema_Map_Command.
*
* @param Aggregate_Site_Schema_Map_Command $command The command.
*
* @return string The schema map xml.
*/
public function handle( Aggregate_Site_Schema_Map_Command $command ): string {
$schema_map_repository = $this->schema_map_repository_factory->get_repository( $this->indexable_helper->should_index_indexables() );
$indexable_counts = $schema_map_repository->get_indexable_count_per_post_type( $command->get_post_types() );
$schema_map = $this->schema_map_builder
->with_repository( $schema_map_repository )
->build( $indexable_counts );
return $this->schema_map_xml_renderer->render( $schema_map );
}
}