<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Dashboard\Application\Score_Results;
use Yoast\WP\SEO\Dashboard\Domain\Content_Types\Content_Type;
use Yoast\WP\SEO\Dashboard\Domain\Score_Groups\Score_Groups_Interface;
use Yoast\WP\SEO\Dashboard\Domain\Score_Results\Current_Score;
use Yoast\WP\SEO\Dashboard\Domain\Score_Results\Current_Scores_List;
use Yoast\WP\SEO\Dashboard\Domain\Taxonomies\Taxonomy;
use Yoast\WP\SEO\Dashboard\Infrastructure\Score_Groups\Score_Group_Link_Collector;
/**
* The current scores repository.
*/
class Current_Scores_Repository {
/**
* The score group link collector.
*
* @var Score_Group_Link_Collector
*/
protected $score_group_link_collector;
/**
* The constructor.
*
* @param Score_Group_Link_Collector $score_group_link_collector The score group link collector.
*/
public function __construct(
Score_Group_Link_Collector $score_group_link_collector
) {
$this->score_group_link_collector = $score_group_link_collector;
}
/**
* Returns the current results.
*
* @param Score_Groups_Interface[] $score_groups The score groups.
* @param array<string, string> $score_results The score results.
* @param Content_Type $content_type The content type.
* @param Taxonomy|null $taxonomy The taxonomy of the term we're filtering for.
* @param int|null $term_id The ID of the term we're filtering for.
*
* @return array<array<string, string|int|array<string, string>>> The current results.
*/
public function get_current_scores( array $score_groups, array $score_results, Content_Type $content_type, ?Taxonomy $taxonomy, ?int $term_id ): Current_Scores_List {
$current_scores_list = new Current_Scores_List();
foreach ( $score_groups as $score_group ) {
$score_name = $score_group->get_name();
$current_score_links = $this->get_current_score_links( $score_group, $content_type, $taxonomy, $term_id );
$score_amount = (int) $score_results['scores']->$score_name;
$score_ids = ( isset( $score_results['score_ids'] ) ) ? $score_results['score_ids']->$score_name : null;
$current_score = new Current_Score( $score_name, $score_amount, $score_ids, $current_score_links );
$current_scores_list->add( $current_score, $score_group->get_position() );
}
return $current_scores_list;
}
/**
* Returns the links for the current scores of a score group.
*
* @param Score_Groups_Interface $score_group The scoure group.
* @param Content_Type $content_type The content type.
* @param Taxonomy|null $taxonomy The taxonomy of the term we're filtering for.
* @param int|null $term_id The ID of the term we're filtering for.
*
* @return array<string,string> The current score links.
*/
protected function get_current_score_links( Score_Groups_Interface $score_group, Content_Type $content_type, ?Taxonomy $taxonomy, ?int $term_id ): array {
return [
'view' => $this->score_group_link_collector->get_view_link( $score_group, $content_type, $taxonomy, $term_id ),
];
}
}