shell bypass 403

GrazzMean Shell

: /proc/thread-self/root/proc/self/cwd/ [ drwxr-xr-x ]
Uname: Linux web3.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Fri Sep 13 12:28:44 UTC 2024 x86_64
Software: Apache
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.210.96.117
Your Ip: 3.138.100.186
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : editors.zip
PK)^FZ]E�^^"framework/readability-analysis.phpnu�[���<?php

namespace Yoast\WP\SEO\Editors\Framework;

use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Feature_Interface;
use Yoast\WP\SEO\Helpers\Options_Helper;

/**
 * This class describes the Readability analysis feature.
 */
class Readability_Analysis implements Analysis_Feature_Interface {
	public const NAME = 'readabilityAnalysis';

	/**
	 * The options helper.
	 *
	 * @var Options_Helper
	 */
	private $options_helper;

	/**
	 * The constructor.
	 *
	 * @param Options_Helper $options_helper The options helper.
	 */
	public function __construct( Options_Helper $options_helper ) {
		$this->options_helper = $options_helper;
	}

	/**
	 * If this analysis is enabled.
	 *
	 * @return bool If this analysis is enabled.
	 */
	public function is_enabled(): bool {
		return $this->is_globally_enabled() && $this->is_user_enabled();
	}

	/**
	 * If this analysis is enabled by the user.
	 *
	 * @return bool If this analysis is enabled by the user.
	 */
	private function is_user_enabled(): bool {
		return ! \get_user_meta( \get_current_user_id(), 'wpseo_content_analysis_disable', true );
	}

	/**
	 * If this analysis is enabled globally.
	 *
	 * @return bool If this analysis is enabled globally.
	 */
	private function is_globally_enabled(): bool {
		return (bool) $this->options_helper->get( 'content_analysis_active', true );
	}

	/**
	 * Gets the name.
	 *
	 * @return string The name.
	 */
	public function get_name(): string {
		return self::NAME;
	}

	/**
	 * Gets the legacy key.
	 *
	 * @return string The legacy key.
	 */
	public function get_legacy_key(): string {
		return 'contentAnalysisActive';
	}
}
PK)^FZ�s<�;;0framework/seo/social-data-provider-interface.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Framework\Seo;

interface Social_Data_Provider_Interface {

	/**
	 * Gets the image URL for the post's social preview.
	 *
	 * @return string|null The image URL for the social preview.
	 */
	public function get_image_url(): ?string;

	/**
	 * Retrieves the social title template.
	 *
	 * @return string The social title template.
	 */
	public function get_social_title_template(): string;

	/**
	 * Retrieves the social description template.
	 *
	 * @return string The social description template.
	 */
	public function get_social_description_template(): string;

	/**
	 * Retrieves the social image template.
	 *
	 * @return string The social description template.
	 */
	public function get_social_image_template(): string;
}
PK)^FZ&L�}��5framework/seo/description-data-provider-interface.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Framework\Seo;

interface Description_Data_Provider_Interface {

	/**
	 * Retrieves the description template.
	 *
	 * @return string The description template.
	 */
	public function get_description_template(): string;

	/**
	 * Determines the date to be displayed in the snippet preview.
	 *
	 * @return string
	 */
	public function get_description_date(): string;
}
PK)^FZ�[��%framework/seo/keyphrase-interface.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Framework\Seo;

interface Keyphrase_Interface {

	/**
	 * Counts the number of given keyphrase used for other posts other than the given post_id.
	 *
	 * @return array<string> The keyphrase and the associated posts that use it.
	 */
	public function get_focus_keyphrase_usage(): array;
}
PK)^FZGz�I8	8	1framework/seo/posts/description-data-provider.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Posts;

use Yoast\WP\SEO\Editors\Domain\Seo\Description;
use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;
use Yoast\WP\SEO\Editors\Framework\Seo\Description_Data_Provider_Interface;
use Yoast\WP\SEO\Helpers\Date_Helper;
use Yoast\WP\SEO\Helpers\Options_Helper;

/**
 * Describes if the description SEO data.
 */
class Description_Data_Provider extends Abstract_Post_Seo_Data_Provider implements Description_Data_Provider_Interface {

	/**
	 * The date helper.
	 *
	 * @var Date_Helper $date_helper
	 */
	private $date_helper;

	/**
	 * The options helper.
	 *
	 * @var Options_Helper $options_helper
	 */
	private $options_helper;

	/**
	 * The constructor.
	 *
	 * @param Date_Helper    $date_helper    The date helper.
	 * @param Options_Helper $options_helper The options helper.
	 */
	public function __construct( Date_Helper $date_helper, Options_Helper $options_helper ) {
		$this->date_helper    = $date_helper;
		$this->options_helper = $options_helper;
	}

	/**
	 * Retrieves the description template.
	 *
	 * @return string The description template.
	 */
	public function get_description_template(): string {
		return $this->get_template( 'metadesc' );
	}

	/**
	 * Determines the date to be displayed in the snippet preview.
	 *
	 * @return string
	 */
	public function get_description_date(): string {
		return $this->date_helper->format_translated( $this->post->post_date, 'M j, Y' );
	}

	/**
	 * Retrieves a template.
	 *
	 * @param string $template_option_name The name of the option in which the template you want to get is saved.
	 *
	 * @return string
	 */
	private function get_template( string $template_option_name ): string {
		$needed_option = $template_option_name . '-' . $this->post->post_type;

		if ( $this->options_helper->get( $needed_option, '' ) !== '' ) {
			return $this->options_helper->get( $needed_option );
		}

		return '';
	}

	/**
	 * Method to return the Description domain object with SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	public function get_data(): Seo_Plugin_Data_Interface {
		return new Description( $this->get_description_date(), $this->get_description_template() );
	}
}
PK)^FZ�zh+framework/seo/posts/title-data-provider.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Posts;

use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;
use Yoast\WP\SEO\Editors\Domain\Seo\Title;
use Yoast\WP\SEO\Editors\Framework\Seo\Title_Data_Provider_Interface;
use Yoast\WP\SEO\Helpers\Options_Helper;

/**
 * Describes if the title SEO data.
 */
class Title_Data_Provider extends Abstract_Post_Seo_Data_Provider implements Title_Data_Provider_Interface {

	/**
	 * The options helper.
	 *
	 * @var Options_Helper $options_helper
	 */
	private $options_helper;

	/**
	 * The constructor.
	 *
	 * @param Options_Helper $options_helper The options helper.
	 */
	public function __construct( Options_Helper $options_helper ) {
		$this->options_helper = $options_helper;
	}

	/**
	 * Retrieves the title template.
	 *
	 * @param bool $fallback Whether to return the hardcoded fallback if the template value is empty.
	 *
	 * @return string The title template.
	 */
	public function get_title_template( bool $fallback = true ): string {
		$title = $this->get_template( 'title' );

		if ( $title === '' && $fallback === true ) {
			return '%%title%% %%page%% %%sep%% %%sitename%%';
		}

		return $title;
	}

	/**
	 * Retrieves a template.
	 *
	 * @param string $template_option_name The name of the option in which the template you want to get is saved.
	 *
	 * @return string
	 */
	private function get_template( string $template_option_name ): string {
		$needed_option = $template_option_name . '-' . $this->post->post_type;

		if ( $this->options_helper->get( $needed_option, '' ) !== '' ) {
			return $this->options_helper->get( $needed_option );
		}

		return '';
	}

	/**
	 * Method to return the Title domain object with SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	public function get_data(): Seo_Plugin_Data_Interface {
		return new Title( $this->get_title_template(), $this->get_title_template( false ) );
	}
}
PK)^FZ��o]],framework/seo/posts/social-data-provider.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Posts;

use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;
use Yoast\WP\SEO\Editors\Domain\Seo\Social;
use Yoast\WP\SEO\Editors\Framework\Seo\Social_Data_Provider_Interface;
use Yoast\WP\SEO\Helpers\Image_Helper;
use Yoast\WP\SEO\Helpers\Options_Helper;

/**
 * Describes if the social SEO data.
 */
class Social_Data_Provider extends Abstract_Post_Seo_Data_Provider implements Social_Data_Provider_Interface {

	/**
	 * The image helper.
	 *
	 * @var Image_Helper
	 */
	private $image_helper;

	/**
	 * Whether we must return social templates values.
	 *
	 * @var bool
	 */
	private $use_social_templates = false;

	/**
	 * The options helper.
	 *
	 * @var Options_Helper $options_helper
	 */
	private $options_helper;

	/**
	 * The constructor.
	 *
	 * @param Options_Helper $options_helper The options helper.
	 * @param Image_Helper   $image_helper   The image helper.
	 */
	public function __construct( Options_Helper $options_helper, Image_Helper $image_helper ) {
		$this->options_helper       = $options_helper;
		$this->use_social_templates = $this->use_social_templates();
		$this->image_helper         = $image_helper;
	}

	/**
	 * Determines whether the social templates should be used.
	 *
	 * @return bool Whether the social templates should be used.
	 */
	private function use_social_templates(): bool {
		return $this->options_helper->get( 'opengraph', false ) === true;
	}

	/**
	 * Gets the image url.
	 *
	 * @return string|null
	 */
	public function get_image_url(): ?string {
		return $this->image_helper->get_post_content_image( $this->post->ID );
	}

	/**
	 * Retrieves the social title template.
	 *
	 * @return string The social title template.
	 */
	public function get_social_title_template(): string {
		if ( $this->use_social_templates ) {
			return $this->get_social_template( 'title' );
		}

		return '';
	}

	/**
	 * Retrieves the social description template.
	 *
	 * @return string The social description template.
	 */
	public function get_social_description_template(): string {
		if ( $this->use_social_templates ) {
			return $this->get_social_template( 'description' );
		}

		return '';
	}

	/**
	 * Retrieves the social image template.
	 *
	 * @return string The social description template.
	 */
	public function get_social_image_template(): string {
		if ( $this->use_social_templates ) {
			return $this->get_social_template( 'image-url' );
		}

		return '';
	}

	/**
	 * Retrieves a social template.
	 *
	 * @param string $template_option_name The name of the option in which the template you want to get is saved.
	 *
	 * @return string
	 */
	private function get_social_template( $template_option_name ) {
		/**
		 * Filters the social template value for a given post type.
		 *
		 * @param string $template             The social template value, defaults to empty string.
		 * @param string $template_option_name The subname of the option in which the template you want to get is saved.
		 * @param string $post_type            The name of the post type.
		 */
		return \apply_filters( 'wpseo_social_template_post_type', '', $template_option_name, $this->post->post_type );
	}

	/**
	 * Method to return the Social domain object with SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	public function get_data(): Seo_Plugin_Data_Interface {
		return new Social( $this->get_social_title_template(), $this->get_social_description_template(), $this->get_social_image_template(), $this->get_image_url() );
	}
}
PK)^FZT����7framework/seo/posts/abstract-post-seo-data-provider.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Posts;

use WP_Post;
use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;

/**
 * Abstract class for all post data providers.
 */
abstract class Abstract_Post_Seo_Data_Provider {

	/**
	 * Holds the WordPress Post.
	 *
	 * @var WP_Post
	 */
	protected $post;

	/**
	 * The post.
	 *
	 * @param WP_Post $post The post.
	 *
	 * @return void
	 */
	public function set_post( WP_Post $post ): void {
		$this->post = $post;
	}

	/**
	 * Method to return the compiled SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	abstract public function get_data(): Seo_Plugin_Data_Interface;
}
PK)^FZ~��8/framework/seo/posts/keyphrase-data-provider.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Posts;

use WPSEO_Meta;
use Yoast\WP\SEO\Editors\Domain\Seo\Keyphrase;
use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;
use Yoast\WP\SEO\Editors\Framework\Seo\Keyphrase_Interface;
use Yoast\WP\SEO\Helpers\Meta_Helper;

/**
 * Describes if the keyphrase SEO data.
 */
class Keyphrase_Data_Provider extends Abstract_Post_Seo_Data_Provider implements Keyphrase_Interface {

	/**
	 *  The meta helper.
	 *
	 * @var Meta_Helper $meta_helper
	 */
	private $meta_helper;

	/**
	 * The constructor.
	 *
	 * @param Meta_Helper $meta_helper The meta helper.
	 */
	public function __construct( Meta_Helper $meta_helper ) {
		$this->meta_helper = $meta_helper;
	}

	/**
	 * Counts the number of given Keyphrase used for other posts other than the given post_id.
	 *
	 * @return array<string> The keyphrase and the associated posts that use it.
	 */
	public function get_focus_keyphrase_usage(): array {
		$keyphrase = $this->meta_helper->get_value( 'focuskw', $this->post->ID );
		$usage     = [ $keyphrase => $this->get_keyphrase_usage_for_current_post( $keyphrase ) ];

		/**
		 * Allows enhancing the array of posts' that share their focus Keyphrase with the post's related Keyphrase.
		 *
		 * @param array<string> $usage   The array of posts' ids that share their focus Keyphrase with the post.
		 * @param int           $post_id The id of the post we're finding the usage of related Keyphrase for.
		 */
		return \apply_filters( 'wpseo_posts_for_related_keywords', $usage, $this->post->ID );
	}

	/**
	 * Retrieves the post types for the given post IDs.
	 *
	 * @param array<string|array<string>> $post_ids_per_keyphrase An associative array with keyphrase as keys and an array of post ids where those keyphrases are used.
	 *
	 * @return array<string|array<string>> The post types for the given post IDs.
	 */
	public function get_post_types_for_all_ids( array $post_ids_per_keyphrase ): array {
		$post_type_per_keyphrase_result = [];
		foreach ( $post_ids_per_keyphrase as $keyphrase => $post_ids ) {
			$post_type_per_keyphrase_result[ $keyphrase ] = WPSEO_Meta::post_types_for_ids( $post_ids );
		}

		return $post_type_per_keyphrase_result;
	}

	/**
	 * Gets the keyphrase usage for the current post and the specified keyphrase.
	 *
	 * @param string $keyphrase The keyphrase to check the usage of.
	 *
	 * @return array<string> The post IDs which use the passed keyphrase.
	 */
	private function get_keyphrase_usage_for_current_post( string $keyphrase ): array {
		return WPSEO_Meta::keyword_usage( $keyphrase, $this->post->ID );
	}

	/**
	 * Method to return the keyphrase domain object with SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	public function get_data(): Seo_Plugin_Data_Interface {
		$keyphrase_usage = $this->get_focus_keyphrase_usage();

		return new Keyphrase( $keyphrase_usage, $this->get_post_types_for_all_ids( $keyphrase_usage ) );
	}
}
PK)^FZ���Ż�1framework/seo/terms/description-data-provider.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Terms;

use Yoast\WP\SEO\Editors\Domain\Seo\Description;
use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;
use Yoast\WP\SEO\Editors\Framework\Seo\Description_Data_Provider_Interface;
/**
 * Describes if the description SEO data.
 */
class Description_Data_Provider extends Abstract_Term_Seo_Data_Provider implements Description_Data_Provider_Interface {

	/**
	 * Retrieves the description template.
	 *
	 * @return string The description template.
	 */
	public function get_description_template(): string {
		return $this->get_template( 'metadesc' );
	}

	/**
	 * Determines the date to be displayed in the snippet preview.
	 *
	 * @return string
	 */
	public function get_description_date(): string {
		return '';
	}

	/**
	 * Method to return the Description domain object with SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	public function get_data(): Seo_Plugin_Data_Interface {
		return new Description( $this->get_description_date(), $this->get_description_template() );
	}
}
PK)^FZͽP��/framework/seo/terms/keyphrase-data-provider.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Terms;

use WPSEO_Taxonomy_Meta;
use Yoast\WP\SEO\Editors\Domain\Seo\Keyphrase;
use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;
use Yoast\WP\SEO\Editors\Framework\Seo\Keyphrase_Interface;

/**
 * Describes if the keyphrase SEO data.
 */
class Keyphrase_Data_Provider extends Abstract_Term_Seo_Data_Provider implements Keyphrase_Interface {

	/**
	 * Counting the number of given keyphrase used for other term than given term_id.
	 *
	 * @return array<string>
	 */
	public function get_focus_keyphrase_usage(): array {
		$focuskp = WPSEO_Taxonomy_Meta::get_term_meta( $this->term, $this->term->taxonomy, 'focuskw' );

		return WPSEO_Taxonomy_Meta::get_keyword_usage( $focuskp, $this->term->term_id, $this->term->taxonomy );
	}

	/**
	 * Method to return the keyphrase domain object with SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	public function get_data(): Seo_Plugin_Data_Interface {
		$keyphrase_usage = $this->get_focus_keyphrase_usage();
		return new Keyphrase( $keyphrase_usage, [] );
	}
}
PK)^FZ��{{7framework/seo/terms/abstract-term-seo-data-provider.phpnu�[���<?php
//phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Terms;

use WP_Term;
use WPSEO_Options;
use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;

/**
 * Abstract class for all term data providers.
 */
abstract class Abstract_Term_Seo_Data_Provider {

	/**
	 * The term the metabox formatter is for.
	 *
	 * @var WP_Term
	 */
	protected $term;

	/**
	 * The term.
	 *
	 * @param WP_Term $term The term.
	 *
	 * @return void
	 */
	public function set_term( WP_Term $term ): void {
		$this->term = $term;
	}

	/**
	 * Retrieves a template.
	 *
	 * @param string $template_option_name The name of the option in which the template you want to get is saved.
	 *
	 * @return string
	 */
	protected function get_template( string $template_option_name ): string {
		$needed_option = $template_option_name . '-tax-' . $this->term->taxonomy;
		return WPSEO_Options::get( $needed_option, '' );
	}

	/**
	 * Method to return the compiled SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	abstract public function get_data(): Seo_Plugin_Data_Interface;
}
PK)^FZM;R�11+framework/seo/terms/title-data-provider.phpnu�[���<?php

// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Terms;

use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;
use Yoast\WP\SEO\Editors\Domain\Seo\Title;
use Yoast\WP\SEO\Editors\Framework\Seo\Title_Data_Provider_Interface;
/**
 * Describes if the title SEO data.
 */
class Title_Data_Provider extends Abstract_Term_Seo_Data_Provider implements Title_Data_Provider_Interface {

	/**
	 * Retrieves the title template.
	 *
	 * @param bool $fallback Whether to return the hardcoded fallback if the template value is empty.
	 *
	 * @return string The title template.
	 */
	public function get_title_template( bool $fallback = true ): string {
		$title = $this->get_template( 'title' );

		if ( $title === '' && $fallback === true ) {
			/* translators: %s expands to the variable used for term title. */
			$archives = \sprintf( \__( '%s Archives', 'wordpress-seo' ), '%%term_title%%' );
			return $archives . ' %%page%% %%sep%% %%sitename%%';
		}

		return $title;
	}

	/**
	 * Method to return the Title domain object with SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	public function get_data(): Seo_Plugin_Data_Interface {
		return new Title( $this->get_title_template(), $this->get_title_template( false ) );
	}
}
PK)^FZ�f��MM,framework/seo/terms/social-data-provider.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
// phpcs:disable Yoast.NamingConventions.NamespaceName.MaxExceeded
namespace Yoast\WP\SEO\Editors\Framework\Seo\Terms;

use Yoast\WP\SEO\Editors\Domain\Seo\Seo_Plugin_Data_Interface;
use Yoast\WP\SEO\Editors\Domain\Seo\Social;
use Yoast\WP\SEO\Editors\Framework\Seo\Social_Data_Provider_Interface;
use Yoast\WP\SEO\Helpers\Image_Helper;
use Yoast\WP\SEO\Helpers\Options_Helper;

/**
 * Describes if the social SEO data.
 */
class Social_Data_Provider extends Abstract_Term_Seo_Data_Provider implements Social_Data_Provider_Interface {

	/**
	 * The options helper.
	 *
	 * @var Options_Helper
	 */
	private $options_helper;

	/**
	 * The image helper.
	 *
	 * @var Image_Helper
	 */
	private $image_helper;

	/**
	 * Whether we must return social templates values.
	 *
	 * @var bool
	 */
	private $use_social_templates = false;

	/**
	 * The constructor.
	 *
	 * @param Options_Helper $options_helper The options helper.
	 * @param Image_Helper   $image_helper   The image helper.
	 */
	public function __construct( Options_Helper $options_helper, Image_Helper $image_helper ) {
		$this->options_helper       = $options_helper;
		$this->image_helper         = $image_helper;
		$this->use_social_templates = $this->use_social_templates();
	}

	/**
	 * Determines whether the social templates should be used.
	 *
	 * @return bool Whether the social templates should be used.
	 */
	public function use_social_templates(): bool {
		return $this->options_helper->get( 'opengraph', false ) === true;
	}

	/**
	 * Gets the image url.
	 *
	 * @return string|null
	 */
	public function get_image_url(): ?string {
		return $this->image_helper->get_term_content_image( $this->term->term_id );
	}

	/**
	 * Retrieves the social title template.
	 *
	 * @return string The social title template.
	 */
	public function get_social_title_template(): string {
		if ( $this->use_social_templates ) {
			return $this->get_social_template( 'title' );
		}

		return '';
	}

	/**
	 * Retrieves the social description template.
	 *
	 * @return string The social description template.
	 */
	public function get_social_description_template(): string {
		if ( $this->use_social_templates ) {
			return $this->get_social_template( 'description' );
		}

		return '';
	}

	/**
	 * Retrieves the social image template.
	 *
	 * @return string The social description template.
	 */
	public function get_social_image_template(): string {
		if ( $this->use_social_templates ) {
			return $this->get_social_template( 'image-url' );
		}

		return '';
	}

	/**
	 * Retrieves a social template.
	 *
	 * @param string $template_option_name The name of the option in which the template you want to get is saved.
	 *
	 * @return string
	 */
	private function get_social_template( $template_option_name ) {
		/**
		 * Filters the social template value for a given taxonomy.
		 *
		 * @param string $template             The social template value, defaults to empty string.
		 * @param string $template_option_name The subname of the option in which the template you want to get is saved.
		 * @param string $taxonomy             The name of the taxonomy.
		 */
		return \apply_filters( 'wpseo_social_template_taxonomy', '', $template_option_name, $this->term->taxonomy );
	}

	/**
	 * Method to return the Social domain object with SEO data.
	 *
	 * @return Seo_Plugin_Data_Interface The specific seo data.
	 */
	public function get_data(): Seo_Plugin_Data_Interface {
		return new Social( $this->get_social_title_template(), $this->get_social_description_template(), $this->get_social_image_template(), $this->get_image_url() );
	}
}
PK)^FZ€���/framework/seo/title-data-provider-interface.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Framework\Seo;

interface Title_Data_Provider_Interface {

	/**
	 * Retrieves the title template.
	 *
	 * @param bool $fallback Whether to return the hardcoded fallback if the template value is empty. Default true.
	 *
	 * @return string The title template.
	 */
	public function get_title_template( bool $fallback = true ): string;
}
PK)^FZ-�i��)framework/inclusive-language-analysis.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Framework;

use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Feature_Interface;
use Yoast\WP\SEO\Helpers\Language_Helper;
use Yoast\WP\SEO\Helpers\Options_Helper;
use Yoast\WP\SEO\Helpers\Product_Helper;

/**
 * Describes the inclusive language analysis feature.
 */
class Inclusive_Language_Analysis implements Analysis_Feature_Interface {

	public const NAME = 'inclusiveLanguageAnalysis';

	/**
	 * The options helper.
	 *
	 * @var Options_Helper
	 */
	private $options_helper;

	/**
	 * The language helper.
	 *
	 * @var Language_Helper
	 */
	private $language_helper;

	/**
	 * The product helper.
	 *
	 * @var Product_Helper
	 */
	private $product_helper;

	/**
	 * The constructor.
	 *
	 * @param Options_Helper  $options_helper  The options helper.
	 * @param Language_Helper $language_helper The language helper.
	 * @param Product_Helper  $product_helper  The product helper.
	 */
	public function __construct(
		Options_Helper $options_helper,
		Language_Helper $language_helper,
		Product_Helper $product_helper
	) {
		$this->options_helper  = $options_helper;
		$this->language_helper = $language_helper;
		$this->product_helper  = $product_helper;
	}

	/**
	 * If this analysis is enabled.
	 *
	 * @return bool If this analysis is enabled.
	 */
	public function is_enabled(): bool {
		return $this->is_globally_enabled() && $this->is_user_enabled() && $this->is_current_version_supported()
				&& $this->language_helper->has_inclusive_language_support( $this->language_helper->get_language() );
	}

	/**
	 * If this analysis is enabled by the user.
	 *
	 * @return bool If this analysis is enabled by the user.
	 */
	private function is_user_enabled(): bool {
		return ! \get_user_meta( \get_current_user_id(), 'wpseo_inclusive_language_analysis_disable', true );
	}

	/**
	 * If this analysis is enabled globally.
	 *
	 * @return bool If this analysis is enabled globally.
	 */
	private function is_globally_enabled(): bool {
		return (bool) $this->options_helper->get( 'inclusive_language_analysis_active', false );
	}

	/**
	 * If the inclusive language analysis should be loaded in Free.
	 *
	 * It should always be loaded when Premium is not active. If Premium is active, it depends on the version. Some
	 * Premium versions also have inclusive language code (when it was still a Premium only feature) which would result
	 * in rendering the analysis twice. In those cases, the analysis should be only loaded from the Premium side.
	 *
	 * @return bool If the inclusive language analysis should be loaded.
	 */
	private function is_current_version_supported(): bool {
		$is_premium      = $this->product_helper->is_premium();
		$premium_version = $this->product_helper->get_premium_version();

		return ! $is_premium
				|| \version_compare( $premium_version, '19.6-RC0', '>=' )
				|| \version_compare( $premium_version, '19.2', '==' );
	}

	/**
	 * Gets the name.
	 *
	 * @return string The name.
	 */
	public function get_name(): string {
		return self::NAME;
	}

	/**
	 * Gets the legacy key.
	 *
	 * @return string The legacy key.
	 */
	public function get_legacy_key(): string {
		return 'inclusiveLanguageAnalysisActive';
	}
}
PK)^FZ������'framework/integrations/multilingual.phpnu�[���<?php
// @phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- This namespace should reflect the namespace of the original class.
namespace Yoast\WP\SEO\Editors\Framework\Integrations;

use Yoast\WP\SEO\Conditionals\Third_Party\Polylang_Conditional;
use Yoast\WP\SEO\Conditionals\Third_Party\TranslatePress_Conditional;
use Yoast\WP\SEO\Conditionals\Third_Party\WPML_Conditional;
use Yoast\WP\SEO\Editors\Domain\Integrations\Integration_Data_Provider_Interface;

/**
 * Describes if the Multilingual integration is enabled.
 */
class Multilingual implements Integration_Data_Provider_Interface {

	/**
	 * The WPML conditional.
	 *
	 * @var WPML_Conditional $wpml_conditional
	 */
	private $wpml_conditional;

	/**
	 * The Polylang conditional.
	 *
	 * @var Polylang_Conditional $polylang_conditional
	 */
	private $polylang_conditional;

	/**
	 * The TranslatePress conditional.
	 *
	 * @var TranslatePress_Conditional $translate_press_conditional
	 */
	private $translate_press_conditional;

	/**
	 * The constructor.
	 *
	 * @param WPML_Conditional           $wpml_conditional            The wpml conditional.
	 * @param Polylang_Conditional       $polylang_conditional        The polylang conditional.
	 * @param TranslatePress_Conditional $translate_press_conditional The translate press conditional.
	 */
	public function __construct( WPML_Conditional $wpml_conditional, Polylang_Conditional $polylang_conditional, TranslatePress_Conditional $translate_press_conditional ) {
		$this->wpml_conditional            = $wpml_conditional;
		$this->polylang_conditional        = $polylang_conditional;
		$this->translate_press_conditional = $translate_press_conditional;
	}

	/**
	 * If the integration is activated.
	 *
	 * @return bool If the integration is activated.
	 */
	public function is_enabled(): bool {
		return $this->multilingual_plugin_active();
	}

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the feature is enabled.
	 */
	public function to_array(): array {
		return [ 'isMultilingualActive' => $this->is_enabled() ];
	}

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array {
		return [ 'multilingualPluginActive' => $this->is_enabled() ];
	}

	/**
	 * Checks whether a multilingual plugin is currently active. Currently, we only check the following plugins:
	 * WPML, Polylang, and TranslatePress.
	 *
	 * @return bool Whether a multilingual plugin is currently active.
	 */
	private function multilingual_plugin_active() {
		$wpml_active           = $this->wpml_conditional->is_met();
		$polylang_active       = $this->polylang_conditional->is_met();
		$translatepress_active = $this->translate_press_conditional->is_met();

		return ( $wpml_active || $polylang_active || $translatepress_active );
	}
}
PK)^FZڙ�ҳ�+framework/integrations/jetpack-markdown.phpnu�[���<?php

// @phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- This namespace should reflect the namespace of the original class.
namespace Yoast\WP\SEO\Editors\Framework\Integrations;

use Jetpack;
use Yoast\WP\SEO\Editors\Domain\Integrations\Integration_Data_Provider_Interface;

/**
 * Describes if the Jetpack markdown integration is enabled.
 */
class Jetpack_Markdown implements Integration_Data_Provider_Interface {

	/**
	 * If the integration is activated.
	 *
	 * @return bool If the integration is activated.
	 */
	public function is_enabled(): bool {
		return $this->is_markdown_enabled();
	}

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the feature is enabled.
	 */
	public function to_array(): array {
		return [
			'markdownEnabled' => $this->is_enabled(),
		];
	}

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array {
		return [
			'markdownEnabled' => $this->is_enabled(),
		];
	}

	/**
	 * Checks if Jetpack's markdown module is enabled.
	 * Can be extended to work with other plugins that parse markdown in the content.
	 *
	 * @return bool
	 */
	private function is_markdown_enabled() {
		$is_markdown = false;

		if ( \class_exists( 'Jetpack' ) && \method_exists( 'Jetpack', 'get_active_modules' ) ) {
			$active_modules = Jetpack::get_active_modules();

			// First at all, check if Jetpack's markdown module is active.
			$is_markdown = \in_array( 'markdown', $active_modules, true );
		}

		/**
		 * Filters whether markdown support is active in the readability- and seo-analysis.
		 *
		 * @since 11.3
		 *
		 * @param array $is_markdown Is markdown support for Yoast SEO active.
		 */
		return \apply_filters( 'wpseo_is_markdown_enabled', $is_markdown );
	}
}
PK)^FZ��>4*framework/integrations/woocommerce-seo.phpnu�[���<?php
// @phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- This namespace should reflect the namespace of the original class.
namespace Yoast\WP\SEO\Editors\Framework\Integrations;

use WPSEO_Addon_Manager;
use Yoast\WP\SEO\Editors\Domain\Integrations\Integration_Data_Provider_Interface;

/**
 * Describes if the Woocommerce SEO addon is enabled.
 */
class WooCommerce_SEO implements Integration_Data_Provider_Interface {

	/**
	 * The addon manager.
	 *
	 * @var WPSEO_Addon_Manager
	 */
	private $addon_manager;

	/**
	 * The constructor.
	 *
	 * @param WPSEO_Addon_Manager $addon_manager The addon manager.
	 */
	public function __construct( WPSEO_Addon_Manager $addon_manager ) {
		$this->addon_manager = $addon_manager;
	}

	/**
	 * If the plugin is activated.
	 *
	 * @return bool If the plugin is activated.
	 */
	public function is_enabled(): bool {
		return \is_plugin_active( $this->addon_manager->get_plugin_file( WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ) );
	}

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the addon is enabled.
	 */
	public function to_array(): array {
		return [ 'isWooCommerceSeoActive' => $this->is_enabled() ];
	}

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array {
		return [ 'isWooCommerceSeoActive' => $this->is_enabled() ];
	}
}
PK)^FZ8[p33"framework/integrations/semrush.phpnu�[���<?php
// @phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- This namespace should reflect the namespace of the original class.
namespace Yoast\WP\SEO\Editors\Framework\Integrations;

use Yoast\WP\SEO\Config\SEMrush_Client;
use Yoast\WP\SEO\Editors\Domain\Integrations\Integration_Data_Provider_Interface;
use Yoast\WP\SEO\Exceptions\OAuth\Authentication_Failed_Exception;
use Yoast\WP\SEO\Exceptions\OAuth\Tokens\Empty_Property_Exception;
use Yoast\WP\SEO\Exceptions\OAuth\Tokens\Empty_Token_Exception;
use Yoast\WP\SEO\Helpers\Options_Helper;

/**
 * Describes if the Semrush integration is enabled.
 */
class Semrush implements Integration_Data_Provider_Interface {

	/**
	 * The options helper.
	 *
	 * @var Options_Helper
	 */
	private $options_helper;

	/**
	 * The constructor.
	 *
	 * @param Options_Helper $options_helper The options helper.
	 */
	public function __construct( Options_Helper $options_helper ) {
		$this->options_helper = $options_helper;
	}

	/**
	 * If the integration is activated.
	 *
	 * @return bool If the integration is activated.
	 */
	public function is_enabled(): bool {
		return (bool) $this->options_helper->get( 'semrush_integration_active', true );
	}

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the feature is enabled.
	 */
	public function to_array(): array {
		return [
			'active'      => $this->is_enabled(),
			'countryCode' => $this->options_helper->get( 'semrush_country_code', false ),
			'loginStatus' => $this->options_helper->get( 'semrush_integration_active', true ) && $this->get_semrush_login_status(),
		];
	}

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array {
		return [
			'semrushIntegrationActive' => $this->is_enabled(),
			'countryCode'              => $this->options_helper->get( 'semrush_country_code', false ),
			'SEMrushLoginStatus'       => $this->options_helper->get( 'semrush_integration_active', true ) && $this->get_semrush_login_status(),
		];
	}

	/**
	 * Checks if the user is logged in to SEMrush.
	 *
	 * @return bool The SEMrush login status.
	 */
	private function get_semrush_login_status() {
		try {
			// Do this just in time to handle constructor exception.
			$semrush_client = \YoastSEO()->classes->get( SEMrush_Client::class );
		} catch ( Empty_Property_Exception $e ) {
			// Return false if token is malformed (empty property).
			return false;
		}
		// Get token (and refresh it if it's expired).
		try {
			$semrush_client->get_tokens();
		} catch ( Authentication_Failed_Exception | Empty_Token_Exception $e ) {
			return false;
		}

		return $semrush_client->has_valid_tokens();
	}
}
PK)^FZrd�c��#framework/integrations/news-seo.phpnu�[���<?php
// @phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- This namespace should reflect the namespace of the original class.
namespace Yoast\WP\SEO\Editors\Framework\Integrations;

use WPSEO_Addon_Manager;
use Yoast\WP\SEO\Editors\Domain\Integrations\Integration_Data_Provider_Interface;

/**
 * Describes if the News SEO plugin is enabled.
 */
class News_SEO implements Integration_Data_Provider_Interface {

	/**
	 * The addon manager.
	 *
	 * @var WPSEO_Addon_Manager
	 */
	private $addon_manager;

	/**
	 * The constructor.
	 *
	 * @param WPSEO_Addon_Manager $addon_manager The addon manager.
	 */
	public function __construct( WPSEO_Addon_Manager $addon_manager ) {
		$this->addon_manager = $addon_manager;
	}

	/**
	 * If the plugin is activated.
	 *
	 * @return bool If the plugin is activated.
	 */
	public function is_enabled(): bool {
		return \is_plugin_active( $this->addon_manager->get_plugin_file( WPSEO_Addon_Manager::NEWS_SLUG ) );
	}

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the feature is enabled.
	 */
	public function to_array(): array {
		return [ 'isNewsSeoActive' => $this->is_enabled() ];
	}

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array {
		return [ 'isNewsSeoActive' => $this->is_enabled() ];
	}
}
PK)^FZn�'	'	"framework/integrations/wincher.phpnu�[���<?php
// @phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- This namespace should reflect the namespace of the original class.
namespace Yoast\WP\SEO\Editors\Framework\Integrations;

use Yoast\WP\SEO\Editors\Domain\Integrations\Integration_Data_Provider_Interface;
use Yoast\WP\SEO\Helpers\Options_Helper;
use Yoast\WP\SEO\Helpers\Wincher_Helper;

/**
 * Describes if the Wincher integration is enabled.
 */
class Wincher implements Integration_Data_Provider_Interface {

	/**
	 * The Wincher helper.
	 *
	 * @var Wincher_Helper
	 */
	private $wincher_helper;

	/**
	 * The options helper.
	 *
	 * @var Options_Helper
	 */
	private $options_helper;

	/**
	 * The constructor.
	 *
	 * @param Wincher_Helper $wincher_helper The Wincher helper.
	 * @param Options_Helper $options_helper The options helper.
	 */
	public function __construct( Wincher_Helper $wincher_helper, Options_Helper $options_helper ) {
		$this->wincher_helper = $wincher_helper;
		$this->options_helper = $options_helper;
	}

	/**
	 * If the integration is activated.
	 *
	 * @return bool If the integration is activated.
	 */
	public function is_enabled(): bool {
		return $this->wincher_helper->is_active();
	}

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the feature is enabled.
	 */
	public function to_array(): array {
		return [
			'active'            => $this->is_enabled(),
			'loginStatus'       => $this->is_enabled() && $this->wincher_helper->login_status(),
			'websiteId'         => $this->options_helper->get( 'wincher_website_id', '' ),
			'autoAddKeyphrases' => $this->options_helper->get( 'wincher_automatically_add_keyphrases', false ),
		];
	}

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array {
		return [
			'wincherIntegrationActive' => $this->is_enabled(),
			'wincherLoginStatus'       => $this->is_enabled() && $this->wincher_helper->login_status(),
			'wincherWebsiteId'         => $this->options_helper->get( 'wincher_website_id', '' ),
			'wincherAutoAddKeyphrases' => $this->options_helper->get( 'wincher_automatically_add_keyphrases', false ),
		];
	}
}
PK)^FZ*�9�VV&framework/integrations/woocommerce.phpnu�[���<?php
// @phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- This namespace should reflect the namespace of the original class.
namespace Yoast\WP\SEO\Editors\Framework\Integrations;

use Yoast\WP\SEO\Conditionals\WooCommerce_Conditional;
use Yoast\WP\SEO\Editors\Domain\Integrations\Integration_Data_Provider_Interface;

/**
 * Describes if the Woocommerce plugin is enabled.
 */
class WooCommerce implements Integration_Data_Provider_Interface {

	/**
	 * The WooCommerce conditional.
	 *
	 * @var WooCommerce_Conditional $woocommerce_conditional
	 */
	private $woocommerce_conditional;

	/**
	 * The constructor.
	 *
	 * @param WooCommerce_Conditional $woocommerce_conditional The WooCommerce conditional.
	 */
	public function __construct( WooCommerce_Conditional $woocommerce_conditional ) {
		$this->woocommerce_conditional = $woocommerce_conditional;
	}

	/**
	 * If the plugin is activated.
	 *
	 * @return bool If the plugin is activated.
	 */
	public function is_enabled(): bool {
		return $this->woocommerce_conditional->is_met();
	}

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the feature is enabled.
	 */
	public function to_array(): array {
		return [ 'isWooCommerceActive' => $this->is_enabled() ];
	}

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array {
		return [ 'isWooCommerceActive' => $this->is_enabled() ];
	}
}
PK)^FZ��ii framework/keyphrase-analysis.phpnu�[���<?php

namespace Yoast\WP\SEO\Editors\Framework;

use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Feature_Interface;
use Yoast\WP\SEO\Helpers\Options_Helper;

/**
 * Describes how it is determined if the Keyphrase analysis is turned on.
 */
class Keyphrase_Analysis implements Analysis_Feature_Interface {

	public const NAME = 'keyphraseAnalysis';

	/**
	 * The options helper.
	 *
	 * @var Options_Helper
	 */
	private $options_helper;

	/**
	 * The constructor.
	 *
	 * @param Options_Helper $options_helper The options helper.
	 */
	public function __construct( Options_Helper $options_helper ) {
		$this->options_helper = $options_helper;
	}

	/**
	 * If this analysis is enabled.
	 *
	 * @return bool If this analysis is enabled.
	 */
	public function is_enabled(): bool {
		return $this->is_globally_enabled() && $this->is_user_enabled();
	}

	/**
	 * If this analysis is enabled by the user.
	 *
	 * @return bool If this analysis is enabled by the user.
	 */
	public function is_user_enabled(): bool {
		return ! \get_user_meta( \get_current_user_id(), 'wpseo_keyword_analysis_disable', true );
	}

	/**
	 * If this analysis is enabled globally.
	 *
	 * @return bool If this analysis is enabled globally.
	 */
	public function is_globally_enabled(): bool {
		return (bool) $this->options_helper->get( 'keyword_analysis_active', true );
	}

	/**
	 * Gets the name.
	 *
	 * @return string The name.
	 */
	public function get_name(): string {
		return self::NAME;
	}

	/**
	 * Gets the legacy key.
	 *
	 * @return string The legacy key.
	 */
	public function get_legacy_key(): string {
		return 'keywordAnalysisActive';
	}
}
PK)^FZ�ƙ�'framework/previously-used-keyphrase.phpnu�[���<?php

namespace Yoast\WP\SEO\Editors\Framework;

use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Feature_Interface;

/**
 * Describes if the previously used keyword feature should be enabled.
 */
class Previously_Used_Keyphrase implements Analysis_Feature_Interface {

	public const NAME = 'previouslyUsedKeyphrase';

	/**
	 * If this analysis is enabled.
	 *
	 * @return bool If this analysis is enabled.
	 */
	public function is_enabled(): bool {
		/**
		 * Filter to determine If the PreviouslyUsedKeyphrase assessment should run.
		 *
		 * @param bool $previouslyUsedKeyphraseActive If the PreviouslyUsedKeyphrase assessment should run.
		 */
		return (bool) \apply_filters( 'wpseo_previously_used_keyword_active', true );
	}

	/**
	 * Returns the name of the object.
	 *
	 * @return string
	 */
	public function get_name(): string {
		return self::NAME;
	}

	/**
	 * Gets the legacy key.
	 *
	 * @return string The legacy key.
	 */
	public function get_legacy_key(): string {
		return 'previouslyUsedKeywordActive';
	}
}
PK)^FZ,����#framework/word-form-recognition.phpnu�[���<?php

namespace Yoast\WP\SEO\Editors\Framework;

use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Feature_Interface;
use Yoast\WP\SEO\Helpers\Language_Helper;

/**
 * Describes if the word for recognition analysis is enabled
 */
class Word_Form_Recognition implements Analysis_Feature_Interface {

	public const NAME = 'wordFormRecognition';

	/**
	 * The language helper.
	 *
	 * @var Language_Helper
	 */
	private $language_helper;

	/**
	 * The constructor.
	 *
	 * @param Language_Helper $language_helper The language helper.
	 */
	public function __construct( Language_Helper $language_helper ) {
		$this->language_helper = $language_helper;
	}

	/**
	 * If this analysis is enabled.
	 *
	 * @return bool If this analysis is enabled.
	 */
	public function is_enabled(): bool {
		return $this->language_helper->is_word_form_recognition_active( $this->language_helper->get_language() );
	}

	/**
	 * Returns the name of the object.
	 *
	 * @return string
	 */
	public function get_name(): string {
		return self::NAME;
	}

	/**
	 * Gets the legacy key.
	 *
	 * @return string The legacy key.
	 */
	public function get_legacy_key(): string {
		return 'wordFormRecognitionActive';
	}
}
PK)^FZ35tt!framework/cornerstone-content.phpnu�[���<?php

namespace Yoast\WP\SEO\Editors\Framework;

use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Feature_Interface;
use Yoast\WP\SEO\Helpers\Options_Helper;

/**
 * Describes if the Cornerstone content features is enabled.
 */
class Cornerstone_Content implements Analysis_Feature_Interface {

	public const NAME = 'cornerstoneContent';

	/**
	 * The options helper.
	 *
	 * @var Options_Helper
	 */
	private $options_helper;

	/**
	 * The constructor.
	 *
	 * @param Options_Helper $options_helper The options helper.
	 */
	public function __construct( Options_Helper $options_helper ) {
		$this->options_helper = $options_helper;
	}

	/**
	 * If cornerstone is enabled.
	 *
	 * @return bool If cornerstone is enabled.
	 */
	public function is_enabled(): bool {
		return (bool) $this->options_helper->get( 'enable_cornerstone_content', false );
	}

	/**
	 * Gets the name.
	 *
	 * @return string The name.
	 */
	public function get_name(): string {
		return self::NAME;
	}

	/**
	 * Gets the legacy key.
	 *
	 * @return string The legacy key.
	 */
	public function get_legacy_key(): string {
		return 'cornerstoneActive';
	}
}
PK)^FZ.b�ww(framework/site/post-site-information.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Framework\Site;

use Yoast\WP\SEO\Actions\Alert_Dismissal_Action;
use Yoast\WP\SEO\Helpers\Options_Helper;
use Yoast\WP\SEO\Helpers\Product_Helper;
use Yoast\WP\SEO\Helpers\Short_Link_Helper;
use Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository;
use Yoast\WP\SEO\Promotions\Application\Promotion_Manager;
use Yoast\WP\SEO\Surfaces\Meta_Surface;

/**
 * The Post_Site_Information class.
 */
class Post_Site_Information extends Base_Site_Information {

	/**
	 * The permalink.
	 *
	 * @var string $permalink
	 */
	private $permalink;

	/**
	 * The alert dismissal action.
	 *
	 * @var Alert_Dismissal_Action $alert_dismissal_action
	 */
	private $alert_dismissal_action;

	/**
	 * Constructs the class.
	 *
	 * @param Short_Link_Helper                  $short_link_helper                  The short link helper.
	 * @param Wistia_Embed_Permission_Repository $wistia_embed_permission_repository The wistia embed permission
	 *                                                                               repository.
	 * @param Meta_Surface                       $meta                               The meta surface.
	 * @param Product_Helper                     $product_helper                     The product helper.
	 * @param Alert_Dismissal_Action             $alert_dismissal_action             The alert dismissal action.
	 * @param Options_Helper                     $options_helper                     The options helper.
	 * @param Promotion_Manager                  $promotion_manager                  The promotion manager.
	 *
	 * @return void
	 */
	public function __construct(
		Short_Link_Helper $short_link_helper,
		Wistia_Embed_Permission_Repository $wistia_embed_permission_repository,
		Meta_Surface $meta,
		Product_Helper $product_helper,
		Alert_Dismissal_Action $alert_dismissal_action,
		Options_Helper $options_helper,
		Promotion_Manager $promotion_manager
	) {
		parent::__construct( $short_link_helper, $wistia_embed_permission_repository, $meta, $product_helper, $options_helper, $promotion_manager );
		$this->alert_dismissal_action = $alert_dismissal_action;
	}

	/**
	 * Sets the permalink.
	 *
	 * @param string $permalink The permalink.
	 *
	 * @return void
	 */
	public function set_permalink( string $permalink ): void {
		$this->permalink = $permalink;
	}

	/**
	 * Returns post specific site information together with the generic site information.
	 *
	 * @return array<string|string,string[]>
	 */
	public function get_legacy_site_information(): array {
		$dismissed_alerts = $this->alert_dismissal_action->all_dismissed();

		$data = [
			'dismissedAlerts'            => $dismissed_alerts,
			'webinarIntroBlockEditorUrl' => $this->short_link_helper->get( 'https://yoa.st/webinar-intro-block-editor' ),
			'metabox'                    => [
				'search_url'    => $this->search_url(),
				'post_edit_url' => $this->edit_url(),
				'base_url'      => $this->base_url_for_js(),
			],
		];

		return \array_merge_recursive( $data, parent::get_legacy_site_information() );
	}

	/**
	 * Returns post specific site information together with the generic site information.
	 *
	 * @return array<string|string,string[]>
	 */
	public function get_site_information(): array {
		$dismissed_alerts = $this->alert_dismissal_action->all_dismissed();

		$data = [
			'dismissedAlerts'            => $dismissed_alerts,
			'webinarIntroBlockEditorUrl' => $this->short_link_helper->get( 'https://yoa.st/webinar-intro-block-editor' ),
			'search_url'                 => $this->search_url(),
			'post_edit_url'              => $this->edit_url(),
			'base_url'                   => $this->base_url_for_js(),
		];

		return \array_merge( $data, parent::get_site_information() );
	}

	/**
	 * Returns the url to search for keyword for the post.
	 *
	 * @return string
	 */
	private function search_url(): string {
		return \admin_url( 'edit.php?seo_kw_filter={keyword}' );
	}

	/**
	 * Returns the url to edit the taxonomy.
	 *
	 * @return string
	 */
	private function edit_url(): string {
		return \admin_url( 'post.php?post={id}&action=edit' );
	}

	/**
	 * Returns a base URL for use in the JS, takes permalink structure into account.
	 *
	 * @return string
	 */
	private function base_url_for_js(): string {
		global $pagenow;

		// The default base is the home_url.
		$base_url = \home_url( '/', null );

		if ( $pagenow === 'post-new.php' ) {
			return $base_url;
		}

		// If %postname% is the last tag, just strip it and use that as a base.
		if ( \preg_match( '#%postname%/?$#', $this->permalink ) === 1 ) {
			$base_url = \preg_replace( '#%postname%/?$#', '', $this->permalink );
		}

		// If %pagename% is the last tag, just strip it and use that as a base.
		if ( \preg_match( '#%pagename%/?$#', $this->permalink ) === 1 ) {
			$base_url = \preg_replace( '#%pagename%/?$#', '', $this->permalink );
		}

		return $base_url;
	}
}
PK)^FZm�iBB(framework/site/base-site-information.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Framework\Site;

use Exception;
use Yoast\WP\SEO\Helpers\Options_Helper;
use Yoast\WP\SEO\Helpers\Product_Helper;
use Yoast\WP\SEO\Helpers\Short_Link_Helper;
use Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository;
use Yoast\WP\SEO\Promotions\Application\Promotion_Manager;
use Yoast\WP\SEO\Surfaces\Meta_Surface;

/**
 * The Base_Site_Information class.
 */
abstract class Base_Site_Information {

	/**
	 * The short link helper.
	 *
	 * @var Short_Link_Helper $shortlink_helper
	 */
	protected $short_link_helper;

	/**
	 * The wistia embed permission repository.
	 *
	 * @var Wistia_Embed_Permission_Repository $wistia_embed_permission_repository
	 */
	protected $wistia_embed_permission_repository;

	/**
	 * The meta surface.
	 *
	 * @var Meta_Surface $meta
	 */
	protected $meta;

	/**
	 * The product helper.
	 *
	 * @var Product_Helper $product_helper
	 */
	protected $product_helper;

	/**
	 * The options helper.
	 *
	 * @var Options_Helper $options_helper
	 */
	protected $options_helper;

	/**
	 * The promotion manager.
	 *
	 * @var Promotion_Manager $promotion_manager
	 */
	protected $promotion_manager;

	/**
	 * The constructor.
	 *
	 * @param Short_Link_Helper                  $short_link_helper                  The short link helper.
	 * @param Wistia_Embed_Permission_Repository $wistia_embed_permission_repository The wistia embed permission
	 *                                                                               repository.
	 * @param Meta_Surface                       $meta                               The meta surface.
	 * @param Product_Helper                     $product_helper                     The product helper.
	 * @param Options_Helper                     $options_helper                     The options helper.
	 * @param Promotion_Manager                  $promotion_manager                  The promotion manager.
	 */
	public function __construct(
		Short_Link_Helper $short_link_helper,
		Wistia_Embed_Permission_Repository $wistia_embed_permission_repository,
		Meta_Surface $meta,
		Product_Helper $product_helper,
		Options_Helper $options_helper,
		Promotion_Manager $promotion_manager
	) {
		$this->short_link_helper                  = $short_link_helper;
		$this->wistia_embed_permission_repository = $wistia_embed_permission_repository;
		$this->meta                               = $meta;
		$this->product_helper                     = $product_helper;
		$this->options_helper                     = $options_helper;
		$this->promotion_manager                  = $promotion_manager;
	}

	/**
	 * Returns site information that is the
	 *
	 * @throws Exception If an invalid user ID is supplied to the wistia repository.
	 * @return array<string|string,string[]>
	 */
	public function get_site_information(): array {
		return [
			'adminUrl'                  => \admin_url( 'admin.php' ),
			'linkParams'                => $this->short_link_helper->get_query_params(),
			'pluginUrl'                 => \plugins_url( '', \WPSEO_FILE ),
			'wistiaEmbedPermission'     => $this->wistia_embed_permission_repository->get_value_for_user( \get_current_user_id() ),
			'site_name'                 => $this->meta->for_current_page()->site_name,
			'contentLocale'             => \get_locale(),
			'userLocale'                => \get_user_locale(),
			'isRtl'                     => \is_rtl(),
			'isPremium'                 => $this->product_helper->is_premium(),
			'siteIconUrl'               => \get_site_icon_url(),
			'showSocial'                => [
				'facebook' => $this->options_helper->get( 'opengraph', false ),
				'twitter'  => $this->options_helper->get( 'twitter', false ),
			],
			'sitewideSocialImage'       => $this->options_helper->get( 'og_default_image' ),
			// phpcs:ignore Generic.ControlStructures.DisallowYodaConditions -- Bug: squizlabs/PHP_CodeSniffer#2962.
			'isPrivateBlog'             => ( (string) \get_option( 'blog_public' ) ) === '0',
			'currentPromotions'         => $this->promotion_manager->get_current_promotions(),
			'blackFridayBlockEditorUrl' => ( $this->promotion_manager->is( 'black-friday-2023-checklist' ) ) ? $this->short_link_helper->get( 'https://yoa.st/black-friday-checklist' ) : '',
		];
	}

	/**
	 * Returns site information that is the
	 *
	 * @throws Exception If an invalid user ID is supplied to the wistia repository.
	 * @return array<string|string,string[]>
	 */
	public function get_legacy_site_information(): array {
		return [
			'adminUrl'                  => \admin_url( 'admin.php' ),
			'linkParams'                => $this->short_link_helper->get_query_params(),
			'pluginUrl'                 => \plugins_url( '', \WPSEO_FILE ),
			'wistiaEmbedPermission'     => $this->wistia_embed_permission_repository->get_value_for_user( \get_current_user_id() ),
			'sitewideSocialImage'       => $this->options_helper->get( 'og_default_image' ),
			// phpcs:ignore Generic.ControlStructures.DisallowYodaConditions -- Bug: squizlabs/PHP_CodeSniffer#2962.
			'isPrivateBlog'             => ( (string) \get_option( 'blog_public' ) ) === '0',
			'currentPromotions'         => $this->promotion_manager->get_current_promotions(),
			'blackFridayBlockEditorUrl' => ( $this->promotion_manager->is( 'black-friday-2023-checklist' ) ) ? $this->short_link_helper->get( 'https://yoa.st/black-friday-checklist' ) : '',
			'metabox'                   => [
				'site_name'     => $this->meta->for_current_page()->site_name,
				'contentLocale' => \get_locale(),
				'userLocale'    => \get_user_locale(),
				'isRtl'         => \is_rtl(),
				'isPremium'     => $this->product_helper->is_premium(),
				'siteIconUrl'   => \get_site_icon_url(),
				'showSocial'    => [
					'facebook' => $this->options_helper->get( 'opengraph', false ),
					'twitter'  => $this->options_helper->get( 'twitter', false ),
				],
			],
		];
	}
}
PK)^FZ��M�	�	(framework/site/term-site-information.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Framework\Site;

use WP_Taxonomy;
use WP_Term;

/**
 * The Term_Site_Information class.
 */
class Term_Site_Information extends Base_Site_Information {

	/**
	 * The taxonomy.
	 *
	 * @var WP_Taxonomy|false
	 */
	private $taxonomy;

	/**
	 * The term.
	 *
	 * @var WP_Term|string|false
	 */
	private $term;

	/**
	 *  Sets the term for the information object and retrieves its taxonomy.
	 *
	 * @param WP_Term|string|false $term The term.
	 *
	 * @return void
	 */
	public function set_term( $term ) {
		$this->term     = $term;
		$this->taxonomy = \get_taxonomy( $term->taxonomy );
	}

	/**
	 * Returns term specific site information together with the generic site information.
	 *
	 * @return array<string|string,string[]>
	 */
	public function get_site_information(): array {
		$data = [
			'search_url'    => $this->search_url(),
			'post_edit_url' => $this->edit_url(),
			'base_url'      => $this->base_url_for_js(),
		];

		return \array_merge_recursive( $data, parent::get_site_information() );
	}

	/**
	 * Returns term specific site information together with the generic site information.
	 *
	 * @return array<string|string,string[]>
	 */
	public function get_legacy_site_information(): array {
		$data = [
			'metabox' => [
				'search_url'    => $this->search_url(),
				'post_edit_url' => $this->edit_url(),
				'base_url'      => $this->base_url_for_js(),
			],
		];

		return \array_merge_recursive( $data, parent::get_legacy_site_information() );
	}

	/**
	 * Returns the url to search for keyword for the taxonomy.
	 *
	 * @return string
	 */
	private function search_url(): string {
		return \admin_url( 'edit-tags.php?taxonomy=' . $this->term->taxonomy . '&seo_kw_filter={keyword}' );
	}

	/**
	 * Returns the url to edit the taxonomy.
	 *
	 * @return string
	 */
	private function edit_url(): string {
		return \admin_url( 'term.php?action=edit&taxonomy=' . $this->term->taxonomy . '&tag_ID={id}' );
	}

	/**
	 * Returns a base URL for use in the JS, takes permalink structure into account.
	 *
	 * @return string
	 */
	private function base_url_for_js(): string {
		$base_url = \home_url( '/', null );
		if ( ! $this->options_helper->get( 'stripcategorybase', false ) ) {
			if ( $this->taxonomy->rewrite ) {
				$base_url = \trailingslashit( $base_url . $this->taxonomy->rewrite['slug'] );
			}
		}

		return $base_url;
	}
}
PK)^FZ0+gnn;domain/integrations/integration-data-provider-interface.phpnu�[���<?php

// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.
namespace Yoast\WP\SEO\Editors\Domain\Integrations;

/**
 * Describes the interface for integration domain objects which can be enabled or not
 */
interface Integration_Data_Provider_Interface {

	/**
	 * If the integration is activated.
	 *
	 * @return bool If the integration is activated.
	 */
	public function is_enabled(): bool;

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the feature is enabled.
	 */
	public function to_array(): array;

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array;
}
PK)^FZ)�̠��7domain/analysis-features/analysis-feature-interface.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.
namespace Yoast\WP\SEO\Editors\Domain\Analysis_Features;

/**
 * This interface describes an Analysis feature implementation.
 */
interface Analysis_Feature_Interface {

	/**
	 * Returns If the analysis is enabled.
	 *
	 * @return bool
	 */
	public function is_enabled(): bool;

	/**
	 * Returns the name of the object.
	 *
	 * @return string
	 */
	public function get_name(): string;

	/**
	 * Returns the legacy key used in the front-end to determine if the feature is enabled.
	 *
	 * @return string
	 */
	public function get_legacy_key(): string;
}
PK)^FZk]ԛ3domain/analysis-features/analysis-features-list.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.
namespace Yoast\WP\SEO\Editors\Domain\Analysis_Features;

/**
 * This class describes a list of analysis features.
 */
class Analysis_Features_List {

	/**
	 * The features.
	 *
	 * @var array<Analysis_Feature>
	 */
	private $features = [];

	/**
	 * Adds an analysis feature to the list.
	 *
	 * @param Analysis_Feature $feature The analysis feature to add.
	 *
	 * @return void
	 */
	public function add_feature( Analysis_Feature $feature ): void {
		$this->features[] = $feature;
	}

	/**
	 * Parses the feature list to a legacy ready array representation.
	 *
	 * @return array<string,bool> The list presented as a key value representation.
	 */
	public function parse_to_legacy_array(): array {
		$array = [];
		foreach ( $this->features as $feature ) {
			$array = \array_merge( $array, $feature->to_legacy_array() );
		}

		return $array;
	}

	/**
	 * Parses the feature list to an array representation.
	 *
	 * @return array<string,bool> The list presented as a key value representation.
	 */
	public function to_array(): array {
		$array = [];
		foreach ( $this->features as $feature ) {
			$array = \array_merge( $array, $feature->to_array() );
		}

		return $array;
	}
}
PK)^FZF(�)++-domain/analysis-features/analysis-feature.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong -- Needed in the folder structure.
namespace Yoast\WP\SEO\Editors\Domain\Analysis_Features;

/**
 * This class describes a single Analysis feature and if it is enabled.
 */
class Analysis_Feature {

	/**
	 * If the feature is enabled.
	 *
	 * @var bool
	 */
	private $is_enabled;

	/**
	 * What the identifier of the feature is.
	 *
	 * @var string
	 */
	private $name;

	/**
	 * What the identifier is for the old script data array.
	 *
	 * @var string
	 */
	private $legacy_key;

	/**
	 * The constructor.
	 *
	 * @param bool   $is_enabled If the feature is enabled.
	 * @param string $name       What the identifier of the feature is.
	 * @param string $legacy_key What the identifier is for the old script data array.
	 */
	public function __construct( bool $is_enabled, string $name, string $legacy_key ) {
		$this->is_enabled = $is_enabled;
		$this->name       = $name;
		$this->legacy_key = $legacy_key;
	}

	/**
	 * If the feature is enabled.
	 *
	 * @return bool If the feature is enabled.
	 */
	public function is_enabled(): bool {
		return $this->is_enabled;
	}

	/**
	 * Gets the identifier.
	 *
	 * @return string The feature identifier.
	 */
	public function get_name(): string {
		return $this->name;
	}

	/**
	 * Return this object represented by a key value array.
	 *
	 * @return array<string,bool> Returns the name and if the feature is enabled.
	 */
	public function to_array(): array {
		return [ $this->name => $this->is_enabled ];
	}

	/**
	 * Returns this object represented by a key value structure that is compliant with the script data array.
	 *
	 * @return array<string,bool> Returns the legacy key and if the feature is enabled.
	 */
	public function to_legacy_array(): array {
		return [ $this->legacy_key => $this->is_enabled ];
	}
}
PK)^FZ��J��domain/seo/keyphrase.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Domain\Seo;

/**
 * This class describes the keyphrase SEO data.
 */
class Keyphrase implements Seo_Plugin_Data_Interface {

	/**
	 * The keyphrase and the associated posts that use it.
	 *
	 * @var array<string> $keyword_usage_count
	 */
	private $keyphrase_usage_count;

	/**
	 * The post types for the given post IDs.
	 *
	 * @var array<string> $keyword_usage_per_type
	 */
	private $keyphrase_usage_per_type;

	/**
	 * The constructor.
	 *
	 * @param array<string> $keyphrase_usage_count    The keyphrase and the associated posts that use it.
	 * @param array<string> $keyphrase_usage_per_type The post types for the given post IDs.
	 */
	public function __construct( array $keyphrase_usage_count, array $keyphrase_usage_per_type ) {
		$this->keyphrase_usage_count    = $keyphrase_usage_count;
		$this->keyphrase_usage_per_type = $keyphrase_usage_per_type;
	}

	/**
	 * Returns the data as an array format.
	 *
	 * @return array<string>
	 */
	public function to_array(): array {
		return [
			'keyphrase_usage'          => $this->keyphrase_usage_count,
			'keyphrase_usage_per_type' => $this->keyphrase_usage_per_type,
		];
	}

	/**
	 * Returns the data as an array format meant for legacy use.
	 *
	 * @return array<string>
	 */
	public function to_legacy_array(): array {
		return [
			'keyword_usage'            => $this->keyphrase_usage_count,
			'keyword_usage_post_types' => $this->keyphrase_usage_per_type,
		];
	}
}
PK)^FZZ���domain/seo/title.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Domain\Seo;

/**
 * This class describes the title SEO data.
 */
class Title implements Seo_Plugin_Data_Interface {

	/**
	 * The title template.
	 *
	 * @var string $title_template
	 */
	private $title_template;

	/**
	 * The title template without the fallback.
	 *
	 * @var string $title_template_no_fallback
	 */
	private $title_template_no_fallback;

	/**
	 * The constructor.
	 *
	 * @param string $title_template             The title template.
	 * @param string $title_template_no_fallback The title template without the fallback.
	 */
	public function __construct( string $title_template, string $title_template_no_fallback ) {
		$this->title_template             = $title_template;
		$this->title_template_no_fallback = $title_template_no_fallback;
	}

	/**
	 * Returns the data as an array format.
	 *
	 * @return array<string>
	 */
	public function to_array(): array {
		return [
			'title_template'             => $this->title_template,
			'title_template_no_fallback' => $this->title_template_no_fallback,
		];
	}

	/**
	 * Returns the data as an array format meant for legacy use.
	 *
	 * @return array<string>
	 */
	public function to_legacy_array(): array {
		return [
			'title_template'             => $this->title_template,
			'title_template_no_fallback' => $this->title_template_no_fallback,
		];
	}
}
PK)^FZ��1R��(domain/seo/seo-plugin-data-interface.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Domain\Seo;

/**
 * This class describes the SEO data interface.
 */
interface Seo_Plugin_Data_Interface {

	/**
	 * Returns the data as an array format.
	 *
	 * @return array<string>
	 */
	public function to_array(): array;

	/**
	 * Returns the data as an array format meant for legacy use.
	 *
	 * @return array<string>
	 */
	public function to_legacy_array(): array;
}
PK)^FZ��e�BBdomain/seo/description.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Domain\Seo;

/**
 * This class describes the description SEO data.
 */
class Description implements Seo_Plugin_Data_Interface {

	/**
	 * The formatted description date.
	 *
	 * @var string $description_date
	 */
	private $description_date;

	/**
	 * The description template.
	 *
	 * @var string $description_template
	 */
	private $description_template;

	/**
	 * The constructor.
	 *
	 * @param string $description_date     The description date.
	 * @param string $description_template The description template.
	 */
	public function __construct( string $description_date, string $description_template ) {
		$this->description_date     = $description_date;
		$this->description_template = $description_template;
	}

	/**
	 * Returns the data as an array format.
	 *
	 * @return array<string>
	 */
	public function to_array(): array {
		return [
			'description_template' => $this->description_template,
			'description_date'     => $this->description_date,
		];
	}

	/**
	 * Returns the data as an array format meant for legacy use.
	 *
	 * @return array<string>
	 */
	public function to_legacy_array(): array {
		return [
			'metadesc_template'   => $this->description_template,
			'metaDescriptionDate' => $this->description_date,
		];
	}
}
PK)^FZ�&��y	y	domain/seo/social.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Domain\Seo;

/**
 * This class describes the social SEO data.
 */
class Social implements Seo_Plugin_Data_Interface {

	/**
	 * The Social title template.
	 *
	 * @var string $social_title_template
	 */
	private $social_title_template;

	/**
	 * The Social description template.
	 *
	 * @var string $social_description_template
	 */
	private $social_description_template;

	/**
	 * The Social image template.
	 *
	 * @var string $social_image_template
	 */
	private $social_image_template;

	/**
	 * The first content image for the social preview.
	 *
	 * @var string $social_first_content_image
	 */
	private $social_first_content_image;

	/**
	 * The constructor.
	 *
	 * @param string $social_title_template       The Social title template.
	 * @param string $social_description_template The Social description template.
	 * @param string $social_image_template       The Social image template.
	 * @param string $social_first_content_image  The first content image for the social preview.
	 */
	public function __construct(
		string $social_title_template,
		string $social_description_template,
		string $social_image_template,
		string $social_first_content_image
	) {
		$this->social_title_template       = $social_title_template;
		$this->social_description_template = $social_description_template;
		$this->social_image_template       = $social_image_template;
		$this->social_first_content_image  = $social_first_content_image;
	}

	/**
	 * Returns the data as an array format.
	 *
	 * @return array<string>
	 */
	public function to_array(): array {
		return [
			'social_title_template'              => $this->social_title_template,
			'social_description_template'        => $this->social_description_template,
			'social_image_template'              => $this->social_image_template,
			'first_content_image_social_preview' => $this->social_first_content_image,
		];
	}

	/**
	 * Returns the data as an array format meant for legacy use.
	 *
	 * @return array<string>
	 */
	public function to_legacy_array(): array {
		return [
			'social_title_template'       => $this->social_title_template,
			'social_description_template' => $this->social_description_template,
			'social_image_template'       => $this->social_image_template,
			'first_content_image'         => $this->social_first_content_image,
		];
	}
}
PK)^FZm��++?application/integrations/integration-information-repository.phpnu�[���<?php

// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Application\Integrations;

use Yoast\WP\SEO\Editors\Domain\Integrations\Integration_Data_Provider_Interface;

/**
 * The repository to get all enabled integrations.
 *
 * @makePublic
 */
class Integration_Information_Repository {

	/**
	 * All plugin integrations.
	 *
	 * @var Integration_Data_Provider_Interface[] $plugin_integrations
	 */
	private $plugin_integrations;

	/**
	 * The constructor.
	 *
	 * @param Integration_Data_Provider_Interface ...$plugin_integrations All integrations.
	 */
	public function __construct( Integration_Data_Provider_Interface ...$plugin_integrations ) {
		$this->plugin_integrations = $plugin_integrations;
	}

	/**
	 * Returns the analysis list.
	 *
	 * @return array<array<string,bool>> The parsed list.
	 */
	public function get_integration_information(): array {
		$array = [];
		foreach ( $this->plugin_integrations as $feature ) {
			$array = \array_merge( $array, $feature->to_legacy_array() );
		}
		return $array;
	}
}
PK)^FZ���##3application/seo/post-seo-information-repository.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Application\Seo;

use WP_Post;
use Yoast\WP\SEO\Editors\Framework\Seo\Posts\Abstract_Post_Seo_Data_Provider;

/**
 * The repository to get post related SEO data.
 *
 * @makePublic
 */
class Post_Seo_Information_Repository {

	/**
	 * The post.
	 *
	 * @var WP_Post $post
	 */
	private $post;

	/**
	 * The data providers.
	 *
	 * @var Abstract_Post_Seo_Data_Provider $seo_data_providers
	 */
	private $seo_data_providers;

	/**
	 * The constructor.
	 *
	 * @param Abstract_Post_Seo_Data_Provider ...$seo_data_providers The providers.
	 */
	public function __construct( Abstract_Post_Seo_Data_Provider ...$seo_data_providers ) {
		$this->seo_data_providers = $seo_data_providers;
	}

	/**
	 * The post.
	 *
	 * @param WP_Post $post The post.
	 *
	 * @return void
	 */
	public function set_post( WP_Post $post ) {
		$this->post = $post;
	}

	/**
	 * Method to return the compiled SEO data.
	 *
	 * @return array<string> The specific seo data.
	 */
	public function get_seo_data(): array {
		$array = [];
		foreach ( $this->seo_data_providers as $data_provider ) {
			$data_provider->set_post( $this->post );
			$array = \array_merge( $array, $data_provider->get_data()->to_legacy_array() );
		}
		return $array;
	}
}
PK)^FZŠ~�**3application/seo/term-seo-information-repository.phpnu�[���<?php
// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Application\Seo;

use WP_Term;
use Yoast\WP\SEO\Editors\Framework\Seo\Terms\Abstract_Term_Seo_Data_Provider;

/**
 * The repository to get term related SEO data.
 *
 * @makePublic
 */
class Term_Seo_Information_Repository {

	/**
	 * The term.
	 *
	 * @var WP_Term $term
	 */
	private $term;

	/**
	 * The data providers.
	 *
	 * @var Abstract_Term_Seo_Data_Provider $seo_data_providers
	 */
	private $seo_data_providers;

	/**
	 * The constructor.
	 *
	 * @param Abstract_Term_Seo_Data_Provider ...$seo_data_providers The providers.
	 */
	public function __construct( Abstract_Term_Seo_Data_Provider ...$seo_data_providers ) {
		$this->seo_data_providers = $seo_data_providers;
	}

	/**
	 * The term.
	 *
	 * @param WP_Term $term The term.
	 *
	 * @return void
	 */
	public function set_term( WP_Term $term ): void {
		$this->term = $term;
	}

	/**
	 * Method to return the compiled SEO data.
	 *
	 * @return array<string> The specific seo data.
	 */
	public function get_seo_data(): array {
		$array = [];
		foreach ( $this->seo_data_providers as $data_provider ) {
			$data_provider->set_term( $this->term );
			$array = \array_merge( $array, $data_provider->get_data()->to_legacy_array() );
		}

		return $array;
	}
}
PK)^FZS�4�!	!	Fapplication/analysis-features/enabled-analysis-features-repository.phpnu�[���<?php

// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Application\Analysis_Features;

use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Feature;
use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Feature_Interface;
use Yoast\WP\SEO\Editors\Domain\Analysis_Features\Analysis_Features_List;

/**
 * The repository to get all enabled features.
 *
 * @makePublic
 */
class Enabled_Analysis_Features_Repository {

	/**
	 * All plugin features.
	 *
	 * @var Analysis_Feature_Interface[]
	 */
	private $plugin_features;

	/**
	 * The list of analysis features.
	 *
	 * @var Analysis_Features_List
	 */
	private $enabled_analysis_features;

	/**
	 * The constructor.
	 *
	 * @param Analysis_Feature_Interface ...$plugin_features All analysis objects.
	 */
	public function __construct( Analysis_Feature_Interface ...$plugin_features ) {
		$this->enabled_analysis_features = new Analysis_Features_List();
		$this->plugin_features           = $plugin_features;
	}

	/**
	 * Returns the analysis list.
	 *
	 * @return Analysis_Features_List The analysis list.
	 */
	public function get_enabled_features(): Analysis_Features_List {
		if ( \count( $this->enabled_analysis_features->parse_to_legacy_array() ) === 0 ) {
			foreach ( $this->plugin_features as $plugin_feature ) {
				$analysis_feature = new Analysis_Feature( $plugin_feature->is_enabled(), $plugin_feature->get_name(), $plugin_feature->get_legacy_key() );
				$this->enabled_analysis_features->add_feature( $analysis_feature );
			}
		}

		return $this->enabled_analysis_features;
	}

	/**
	 * Returns the analysis list for the given names.
	 *
	 * @param array<string> $feature_names The feature names to include.
	 *
	 * @return Analysis_Features_List The analysis list.
	 */
	public function get_features_by_keys( array $feature_names ): Analysis_Features_List {
		$enabled_analysis_features = new Analysis_Features_List();

		foreach ( $this->plugin_features as $plugin_feature ) {
			if ( \in_array( $plugin_feature->get_name(), $feature_names, true ) ) {
				$analysis_feature = new Analysis_Feature( $plugin_feature->is_enabled(), $plugin_feature->get_name(), $plugin_feature->get_legacy_key() );
				$enabled_analysis_features->add_feature( $analysis_feature );
			}
		}

		return $enabled_analysis_features;
	}
}
PK)^FZ�N�`��3application/site/website-information-repository.phpnu�[���<?php

// phpcs:disable Yoast.NamingConventions.NamespaceName.TooLong
namespace Yoast\WP\SEO\Editors\Application\Site;

use Yoast\WP\SEO\Editors\Framework\Site\Post_Site_Information;
use Yoast\WP\SEO\Editors\Framework\Site\Term_Site_Information;

/**
 * This class manages getting the two site information wrappers.
 *
 * @makePublic
 */
class Website_Information_Repository {

	/**
	 * The post site information wrapper.
	 *
	 * @var Post_Site_Information $post_site_information
	 */
	private $post_site_information;

	/**
	 * The term site information wrapper.
	 *
	 * @var Term_Site_Information $term_site_information
	 */
	private $term_site_information;

	/**
	 * The constructor.
	 *
	 * @param Post_Site_Information $post_site_information The post specific wrapper.
	 * @param Term_Site_Information $term_site_information The term specific wrapper.
	 */
	public function __construct(
		Post_Site_Information $post_site_information,
		Term_Site_Information $term_site_information
	) {
		$this->post_site_information = $post_site_information;
		$this->term_site_information = $term_site_information;
	}

	/**
	 * Returns the Post Site Information container.
	 *
	 * @return Post_Site_Information
	 */
	public function get_post_site_information(): Post_Site_Information {
		return $this->post_site_information;
	}

	/**
	 * Returns the Term Site Information container.
	 *
	 * @return Term_Site_Information
	 */
	public function get_term_site_information(): Term_Site_Information {
		return $this->term_site_information;
	}
}
PK)^FZ]E�^^"framework/readability-analysis.phpnu�[���PK)^FZ�s<�;;0�framework/seo/social-data-provider-interface.phpnu�[���PK)^FZ&L�}��5K
framework/seo/description-data-provider-interface.phpnu�[���PK)^FZ�[��%�framework/seo/keyphrase-interface.phpnu�[���PK)^FZGz�I8	8	1[framework/seo/posts/description-data-provider.phpnu�[���PK)^FZ�zh+�framework/seo/posts/title-data-provider.phpnu�[���PK)^FZ��o]],W framework/seo/posts/social-data-provider.phpnu�[���PK)^FZT����7/framework/seo/posts/abstract-post-seo-data-provider.phpnu�[���PK)^FZ~��8/W2framework/seo/posts/keyphrase-data-provider.phpnu�[���PK)^FZ���Ż�1�>framework/seo/terms/description-data-provider.phpnu�[���PK)^FZͽP��/�Cframework/seo/terms/keyphrase-data-provider.phpnu�[���PK)^FZ��{{7Iframework/seo/terms/abstract-term-seo-data-provider.phpnu�[���PK)^FZM;R�11+�Mframework/seo/terms/title-data-provider.phpnu�[���PK)^FZ�f��MM,|Sframework/seo/terms/social-data-provider.phpnu�[���PK)^FZ€���/%bframework/seo/title-data-provider-interface.phpnu�[���PK)^FZ-�i��)7dframework/inclusive-language-analysis.phpnu�[���PK)^FZ������'Oqframework/integrations/multilingual.phpnu�[���PK)^FZڙ�ҳ�+a}framework/integrations/jetpack-markdown.phpnu�[���PK)^FZ��>4*o�framework/integrations/woocommerce-seo.phpnu�[���PK)^FZ8[p33"܋framework/integrations/semrush.phpnu�[���PK)^FZrd�c��#a�framework/integrations/news-seo.phpnu�[���PK)^FZn�'	'	"��framework/integrations/wincher.phpnu�[���PK)^FZ*�9�VV& �framework/integrations/woocommerce.phpnu�[���PK)^FZ��ii ̭framework/keyphrase-analysis.phpnu�[���PK)^FZ�ƙ�'��framework/previously-used-keyphrase.phpnu�[���PK)^FZ,����#�framework/word-form-recognition.phpnu�[���PK)^FZ35tt!�framework/cornerstone-content.phpnu�[���PK)^FZ.b�ww(��framework/site/post-site-information.phpnu�[���PK)^FZm�iBB(�framework/site/base-site-information.phpnu�[���PK)^FZ��M�	�	(�framework/site/term-site-information.phpnu�[���PK)^FZ0+gnn;�domain/integrations/integration-data-provider-interface.phpnu�[���PK)^FZ)�̠��7�domain/analysis-features/analysis-feature-interface.phpnu�[���PK)^FZk]ԛ3�domain/analysis-features/analysis-features-list.phpnu�[���PK)^FZF(�)++-;domain/analysis-features/analysis-feature.phpnu�[���PK)^FZ��J���domain/seo/keyphrase.phpnu�[���PK)^FZZ���domain/seo/title.phpnu�[���PK)^FZ��1R��(�domain/seo/seo-plugin-data-interface.phpnu�[���PK)^FZ��e�BBdomain/seo/description.phpnu�[���PK)^FZ�&��y	y	�domain/seo/social.phpnu�[���PK)^FZm��++?R)application/integrations/integration-information-repository.phpnu�[���PK)^FZ���##3�-application/seo/post-seo-information-repository.phpnu�[���PK)^FZŠ~�**3r3application/seo/term-seo-information-repository.phpnu�[���PK)^FZS�4�!	!	F�8application/analysis-features/enabled-analysis-features-repository.phpnu�[���PK)^FZ�N�`��3�Bapplication/site/website-information-repository.phpnu�[���PK,,_�H
© 2025 GrazzMean