feat: Divi-Adapter sperren je Fähigkeit – ReleaseGate::feature/assertFeature(s), DiviLocked und Ablehnung nennen die betroffenen Fähigkeiten (D6), DiviSaver prüft Seiten schreiben und die Fähigkeit des Speicherbereichs (D5), DesignArea::feature; Test-Standard alle Fähigkeiten freigegeben
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c4efeb3ba4
commit
e387d8d29e
@@ -149,12 +149,12 @@ class DiviThemeBuilder implements DiviAdapter
|
||||
/**
|
||||
* The live Theme Builder post (publish, no library TB); $create makes it like Divi's first save. 0 = none.
|
||||
*
|
||||
* @throws DiviLocked When $create and Divi is not released (spec §5.5) – before anything is written.
|
||||
* @throws DiviLocked When $create and tb-write is not released (spec §5.5) – before anything is written.
|
||||
*/
|
||||
public function liveId(bool $create = false): int
|
||||
{
|
||||
if ($create) {
|
||||
ReleaseGate::assertWritable();
|
||||
ReleaseGate::assertFeature(DiviFeature::ThemeBuilderWrite);
|
||||
}
|
||||
|
||||
return function_exists('et_theme_builder_get_theme_builder_post_id')
|
||||
@@ -261,11 +261,11 @@ class DiviThemeBuilder implements DiviAdapter
|
||||
|
||||
/**
|
||||
* @throws RuntimeException
|
||||
* @throws DiviLocked When Divi is not released (spec §5.5) – before anything is written.
|
||||
* @throws DiviLocked When tb-write is not released (spec §5.5) – before anything is written.
|
||||
*/
|
||||
public function insertLayout(string $area, string $title): int
|
||||
{
|
||||
ReleaseGate::assertWritable();
|
||||
ReleaseGate::assertFeature(DiviFeature::ThemeBuilderWrite);
|
||||
$type = self::LAYOUT_TYPES[$area] ?? throw new RuntimeException('unknown Theme Builder area ' . $area);
|
||||
$this->assertCanWrite('et_theme_builder_insert_layout');
|
||||
$id = $this->guarded(
|
||||
@@ -287,11 +287,11 @@ class DiviThemeBuilder implements DiviAdapter
|
||||
* @param array{title: string, layouts: array<string, array{id: int, enabled: bool}>, use_on: list<string>,
|
||||
* exclude_from: list<string>} $template
|
||||
* @throws RuntimeException
|
||||
* @throws DiviLocked When Divi is not released (spec §5.5) – before anything is written.
|
||||
* @throws DiviLocked When tb-write is not released (spec §5.5) – before anything is written.
|
||||
*/
|
||||
public function storeTemplate(int $themeBuilderId, array $template): int
|
||||
{
|
||||
ReleaseGate::assertWritable();
|
||||
ReleaseGate::assertFeature(DiviFeature::ThemeBuilderWrite);
|
||||
$this->assertCanWrite('et_theme_builder_store_template', 'et_');
|
||||
$payload = [
|
||||
'title' => $template['title'],
|
||||
@@ -321,11 +321,11 @@ class DiviThemeBuilder implements DiviAdapter
|
||||
* template unused (stage3b README finding 10) – detachedIds() finds it, callers unmarkUnused() on reattach.
|
||||
*
|
||||
* @throws RuntimeException
|
||||
* @throws DiviLocked When Divi is not released (spec §5.5) – before anything is written.
|
||||
* @throws DiviLocked When tb-write is not released (spec §5.5) – before anything is written.
|
||||
*/
|
||||
public function attach(int $themeBuilderId, int $templateId): void
|
||||
{
|
||||
ReleaseGate::assertWritable();
|
||||
ReleaseGate::assertFeature(DiviFeature::ThemeBuilderWrite);
|
||||
$existing = get_post_meta($themeBuilderId, self::TEMPLATE_LIST, false);
|
||||
if (is_array($existing) && in_array((string) $templateId, array_map('strval', $existing), true)) {
|
||||
return;
|
||||
@@ -342,10 +342,10 @@ class DiviThemeBuilder implements DiviAdapter
|
||||
}
|
||||
}
|
||||
|
||||
/** @throws DiviLocked When Divi is not released (spec §5.5) – before anything is written. */
|
||||
/** @throws DiviLocked When tb-write is not released (spec §5.5) – before anything is written. */
|
||||
public function detach(int $themeBuilderId, int $templateId): void
|
||||
{
|
||||
ReleaseGate::assertWritable();
|
||||
ReleaseGate::assertFeature(DiviFeature::ThemeBuilderWrite);
|
||||
delete_post_meta($themeBuilderId, self::TEMPLATE_LIST, (string) $templateId);
|
||||
}
|
||||
|
||||
@@ -356,11 +356,11 @@ class DiviThemeBuilder implements DiviAdapter
|
||||
* @param list<string> $useOn
|
||||
* @param list<string> $excludeFrom
|
||||
* @throws RuntimeException
|
||||
* @throws DiviLocked When Divi is not released (spec §5.5) – before anything is written.
|
||||
* @throws DiviLocked When tb-write is not released (spec §5.5) – before anything is written.
|
||||
*/
|
||||
public function setConditions(int $templateId, array $useOn, array $excludeFrom): void
|
||||
{
|
||||
ReleaseGate::assertWritable();
|
||||
ReleaseGate::assertFeature(DiviFeature::ThemeBuilderWrite);
|
||||
foreach ([self::USE_ON => $useOn, self::EXCLUDE_FROM => $excludeFrom] as $key => $conditions) {
|
||||
delete_post_meta($templateId, $key);
|
||||
foreach (array_values(array_unique($conditions)) as $condition) {
|
||||
@@ -373,11 +373,11 @@ class DiviThemeBuilder implements DiviAdapter
|
||||
|
||||
/**
|
||||
* @throws RuntimeException
|
||||
* @throws DiviLocked When Divi is not released (spec §5.5) – before anything is written.
|
||||
* @throws DiviLocked When tb-write is not released (spec §5.5) – before anything is written.
|
||||
*/
|
||||
public function setEnabled(int $templateId, bool $enabled): void
|
||||
{
|
||||
ReleaseGate::assertWritable();
|
||||
ReleaseGate::assertFeature(DiviFeature::ThemeBuilderWrite);
|
||||
$value = $enabled ? '1' : '0';
|
||||
update_post_meta($templateId, self::ENABLED, $value);
|
||||
if ((string) get_post_meta($templateId, self::ENABLED, true) !== $value) {
|
||||
@@ -388,11 +388,11 @@ class DiviThemeBuilder implements DiviAdapter
|
||||
/**
|
||||
* Removes Divi's "unused" mark (F19), as Divi's own save does for every listed post.
|
||||
*
|
||||
* @throws DiviLocked When Divi is not released (spec §5.5) – before anything is written.
|
||||
* @throws DiviLocked When tb-write is not released (spec §5.5) – before anything is written.
|
||||
*/
|
||||
public function unmarkUnused(int $postId): void
|
||||
{
|
||||
ReleaseGate::assertWritable();
|
||||
ReleaseGate::assertFeature(DiviFeature::ThemeBuilderWrite);
|
||||
delete_post_meta($postId, self::UNUSED);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user