feat(compat): Profile, Gates und Pods über den Kompatibilitätskern

Neu: Tier, Profile, Compatibility, CapabilityLocked, CapabilityGate, CompatibilityComponent, ProvidesCompatibility, DiviProfile sowie PodsFeature, PodsCompatibility und PodsIntegration. Das CapabilityGate sperrt gesperrte und unbekannte Fähigkeits-IDs (übernimmt die Sperre unbekannter IDs vom DiviFeatureGate) und delegiert nur Divi ausdrücklich. Pods-Schema, -Lesen, -Schreiben und -Feldrechte laufen über usable(PodsFeature::…); Schreiben verlangt FieldRead und FieldWrite, damit ein Rollback keine Werte verliert. lit-site-status meldet Pods über die CompatibilityComponent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jan-Niclas Loosen
2026-11-06 12:26:54 +01:00
co-authored by Claude Opus 5.5
parent b511ef6348
commit c85131603b
38 changed files with 2259 additions and 135 deletions
+49
View File
@@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
namespace LIT\MCP\Integrations\Pods;
use LIT\MCP\Compatibility\Call;
use LIT\MCP\Compatibility\ConstantRequirement;
use LIT\MCP\Compatibility\Manifest;
use LIT\MCP\Compatibility\Profile;
use LIT\MCP\Compatibility\Tier;
defined('ABSPATH') || exit;
/**
* Pods as a compatibility profile: the calls PodsFieldSource makes, checked against Pods 3.3.9.2. Argument counts
* are those PodsFieldSource passes. A hard problem (missing function or constant, Pods below 2.8) locks the
* affected capabilities; Pods has no per-version release.
*/
final class PodsCompatibility
{
public static function profile(): Profile
{
$all = PodsFeature::cases();
return new Profile(
'pods',
'Pods',
Tier::LockOnFailure,
$all,
[new Manifest(
'Pods',
[
new Call('pods_api', 0, [PodsFeature::SchemaRead]),
new Call('PodsAPI::load_pod', 1, [PodsFeature::SchemaRead]),
new Call('pods', 2, [PodsFeature::FieldRead, PodsFeature::FieldWrite]),
new Call('Pods::field', 1, [PodsFeature::FieldRead]),
new Call('Pods::save', 4, [PodsFeature::FieldWrite]),
new Call('pods_has_permissions', 1, [PodsFeature::FieldPermissions]),
new Call('pods_permission', 1, [PodsFeature::FieldPermissions]),
],
[new ConstantRequirement('PODS_VERSION', $all)]
)],
static fn (): bool => defined('PODS_VERSION'),
static fn (): ?string => defined('PODS_VERSION') ? (string) PODS_VERSION : null,
'2.8'
);
}
}