Files
WP-LIT-MCP/src/Integrations/Divi/Pages/WpValueSanitizer.php
T
janniclas.loosenandClaude Opus 5.5 82ef69a99c fix: link targets never reveal library entries by type (ruling Q14)
WpLinkTargets answers the library, internal "_" types and every type
without a Divi post_link_url option like a missing ID; replace-text strips
library IDs only from global subtrees.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-27 15:13:40 +02:00

63 lines
1.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
namespace LIT\MCP\Integrations\Divi\Pages;
use LIT\MCP\Integrations\Divi\Compose\LinkTargets;
use LIT\MCP\Integrations\Divi\Compose\ValueSanitizer;
defined('ABSPATH') || exit;
/**
* WordPress sanitizing of Divi values (spec §5.6/§10). Because DiviSaver bypasses kses for the
* page as a whole (kses would re-serialize every untouched block, D7), every value this plugin
* writes goes through here instead – always via ValueCleaner::clean(), which also checks
* $variable(…)$ references before and after these sanitizers.
*
* Rich text and code depend on unfiltered_html like in core (ruling S4): administrators keep
* their embeds, forms and scripts; everybody else gets wp_kses_post.
*/
final class WpValueSanitizer implements ValueSanitizer
{
/** @param LinkTargets $links The {{link:}} targets post_link_url_* follow too (ruling P10). */
public function __construct(private LinkTargets $links = new WpLinkTargets())
{
}
public function text(string $value): string
{
return sanitize_text_field($value);
}
public function html(string $value): string
{
return $this->allowsUnfilteredHtml() ? $value : wp_kses_post($value);
}
public function code(string $value): string
{
return $this->allowsUnfilteredHtml() ? $value : wp_kses_post($value);
}
public function url(string $value): string
{
return esc_url_raw(trim($value));
}
public function allowsUnfilteredHtml(): bool
{
return current_user_can('unfiltered_html');
}
public function canReadPost(int $id): bool
{
return current_user_can('read_post', $id);
}
public function linkTargetType(int $id): ?string
{
return $this->links->postTypeOf($id);
}
}