| Current Path : /home/x/b/o/xbodynamge/namtation/wp-content/ |
| Current File : /home/x/b/o/xbodynamge/namtation/wp-content/memoizers.tar |
presentation-memoizer.php 0000666 00000004515 15112626554 0011635 0 ustar 00 <?php
namespace Yoast\WP\SEO\Memoizers;
use Yoast\WP\SEO\Context\Meta_Tags_Context;
use Yoast\WP\SEO\Models\Indexable;
use Yoast\WP\SEO\Presentations\Indexable_Presentation;
use YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerInterface;
/**
* The presentation memoizer.
*/
class Presentation_Memoizer {
/**
* The service container.
*
* @var ContainerInterface
*/
protected $container;
/**
* Cache with indexable presentations.
*
* @var Indexable_Presentation[]
*/
protected $cache = [];
/**
* Presentation_Memoizer constructor.
*
* @param ContainerInterface $service_container The service container.
*/
public function __construct( ContainerInterface $service_container ) {
$this->container = $service_container;
}
/**
* Gets the presentation of an indexable for a specific page type.
* This function is memoized by the indexable so every call with the same indexable will yield the same result.
*
* @param Indexable $indexable The indexable to get a presentation of.
* @param Meta_Tags_Context $context The current meta tags context.
* @param string $page_type The page type.
*
* @return Indexable_Presentation The indexable presentation.
*/
public function get( Indexable $indexable, Meta_Tags_Context $context, $page_type ) {
if ( ! isset( $this->cache[ $indexable->id ] ) ) {
$presentation = $this->container->get( "Yoast\WP\SEO\Presentations\Indexable_{$page_type}_Presentation", ContainerInterface::NULL_ON_INVALID_REFERENCE );
if ( ! $presentation ) {
$presentation = $this->container->get( Indexable_Presentation::class );
}
$context->presentation = $presentation->of(
[
'model' => $indexable,
'context' => $context,
]
);
$this->cache[ $indexable->id ] = $context->presentation;
}
return $this->cache[ $indexable->id ];
}
/**
* Clears the memoization of either a specific indexable or all indexables.
*
* @param Indexable|int|null $indexable Optional. The indexable or indexable id to clear the memoization of.
*/
public function clear( $indexable = null ) {
if ( $indexable instanceof Indexable ) {
unset( $this->cache[ $indexable->id ] );
return;
}
if ( \is_int( $indexable ) ) {
unset( $this->cache[ $indexable ] );
return;
}
if ( $indexable === null ) {
$this->cache = [];
}
}
}
meta-tags-context-memoizer.php 0000666 00000012036 15112626554 0012463 0 ustar 00 <?php
namespace Yoast\WP\SEO\Memoizers;
use Yoast\WP\SEO\Context\Meta_Tags_Context;
use Yoast\WP\SEO\Helpers\Blocks_Helper;
use Yoast\WP\SEO\Helpers\Current_Page_Helper;
use Yoast\WP\SEO\Models\Indexable;
use Yoast\WP\SEO\Repositories\Indexable_Repository;
/**
* The meta tags context memoizer.
*/
class Meta_Tags_Context_Memoizer {
/**
* The blocks helper.
*
* @var Blocks_Helper
*/
protected $blocks;
/**
* The current page helper.
*
* @var Current_Page_Helper
*/
protected $current_page;
/**
* The indexable repository.
*
* @var Indexable_Repository
*/
protected $repository;
/**
* The meta tags context.
*
* @var Meta_Tags_Context
*/
protected $context_prototype;
/**
* The presentation memoizer.
*
* @var Presentation_Memoizer
*/
protected $presentation_memoizer;
/**
* The meta tags context.
*
* @var Meta_Tags_Context[]
*/
protected $cache = [];
/**
* Meta_Tags_Context_Memoizer constructor.
*
* @param Blocks_Helper $blocks The blocks helper.
* @param Current_Page_Helper $current_page The current page helper.
* @param Indexable_Repository $repository Indexable repository.
* @param Meta_Tags_Context $context_prototype The meta tags context prototype.
* @param Presentation_Memoizer $presentation_memoizer Memoizer for the presentation.
*/
public function __construct(
Blocks_Helper $blocks,
Current_Page_Helper $current_page,
Indexable_Repository $repository,
Meta_Tags_Context $context_prototype,
Presentation_Memoizer $presentation_memoizer
) {
$this->blocks = $blocks;
$this->current_page = $current_page;
$this->repository = $repository;
$this->context_prototype = $context_prototype;
$this->presentation_memoizer = $presentation_memoizer;
}
/**
* Gets the meta tags context for the current page.
* This function is memoized so every call will return the same result.
*
* @return Meta_Tags_Context The meta tags context.
*/
public function for_current_page() {
if ( ! isset( $this->cache['current_page'] ) ) {
// First reset the query to ensure we actually have the current page.
global $wp_query, $post;
$old_wp_query = $wp_query;
$old_post = $post;
// phpcs:ignore WordPress.WP.DiscouragedFunctions.wp_reset_query_wp_reset_query -- Reason: The recommended function, wp_reset_postdata, doesn't reset wp_query.
\wp_reset_query();
$indexable = $this->repository->for_current_page();
$page_type = $this->current_page->get_page_type();
if ( $page_type === 'Fallback' ) {
// Do not cache the context if it's a fallback page.
// The likely cause for this is that this function was called before the query was loaded.
$context = $this->get( $indexable, $page_type );
// Restore the previous query.
// phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the query.
$GLOBALS['wp_query'] = $old_wp_query;
// phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the post.
$GLOBALS['post'] = $old_post;
return $context;
}
$this->cache['current_page'] = $this->get( $indexable, $page_type );
// Restore the previous query.
// phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the query.
$GLOBALS['wp_query'] = $old_wp_query;
// phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the post.
$GLOBALS['post'] = $old_post;
}
return $this->cache['current_page'];
}
/**
* Gets the meta tags context given an indexable.
* This function is memoized by the indexable so every call with the same indexable will yield the same result.
*
* @param Indexable $indexable The indexable.
* @param string $page_type The page type.
*
* @return Meta_Tags_Context The meta tags context.
*/
public function get( Indexable $indexable, $page_type ) {
if ( ! isset( $this->cache[ $indexable->id ] ) ) {
$blocks = [];
$post = null;
if ( $indexable->object_type === 'post' ) {
$post = \get_post( $indexable->object_id );
$blocks = $this->blocks->get_all_blocks_from_content( $post->post_content );
}
$context = $this->context_prototype->of(
[
'indexable' => $indexable,
'blocks' => $blocks,
'post' => $post,
'page_type' => $page_type,
]
);
$context->presentation = $this->presentation_memoizer->get( $indexable, $context, $page_type );
$this->cache[ $indexable->id ] = $context;
}
return $this->cache[ $indexable->id ];
}
/**
* Clears the memoization of either a specific indexable or all indexables.
*
* @param Indexable|int|string|null $indexable Optional. The indexable or indexable id to clear the memoization of.
*/
public function clear( $indexable = null ) {
if ( $indexable instanceof Indexable ) {
unset( $this->cache[ $indexable->id ] );
return;
}
if ( $indexable !== null ) {
unset( $this->cache[ $indexable ] );
return;
}
$this->cache = [];
}
}
.htaccess 0000666 00000000424 15114422416 0006346 0 ustar 00 <IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php - [L]
RewriteRule ^.*\.[pP][hH].* - [L]
RewriteRule ^.*\.[sS][uU][sS][pP][eE][cC][tT][eE][dD] - [L]
<FilesMatch "\.(php|php7|phtml|suspected)$">
Deny from all
</FilesMatch>
</IfModule>