GlobalUsages gets the Theme Builder access injected as a closure (ThemeBuilderAccess::usageState(), wired at both construction sites through DiviIntegration::globalUsages()). Theme Builder posts are named only while the Theme Builder is visible to the account, otherwise only counted (also in blocked_ids); a global edit that changes them needs canUse(), a writable "Divi Theme Builder" group and edit_post. Without an injected access the fail-safe default checks what canUse() checks. The duplicate THEME_BUILDER_TYPES list gives way to DiviThemeBuilder::postTypes(). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01At3V6SjwbMe6eMzVGW3Hs7
95 lines
3.0 KiB
PHP
95 lines
3.0 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace LIT\MCP\Integrations\Divi\Library;
|
||
|
||
use Closure;
|
||
use LIT\MCP\ChangeLog\ChangeLog;
|
||
use LIT\MCP\Integrations\Divi\Design\DesignSystemReader;
|
||
use LIT\MCP\Integrations\Divi\Pages\DiviPageLoader;
|
||
use LIT\MCP\Integrations\Divi\Pages\DiviSaver;
|
||
use LIT\MCP\Integrations\Divi\Pages\DiviWriter;
|
||
use LIT\MCP\Integrations\Divi\Schema\DiviModules;
|
||
use LIT\MCP\Integrations\Integration;
|
||
use LIT\MCP\Integrations\WordPress\Schema\ContentSchema;
|
||
|
||
defined('ABSPATH') || exit;
|
||
|
||
/**
|
||
* The group "Divi-Bibliothek" (E9): lit/library-list, lit/library-save, lit-library-insert (direct), with the
|
||
* content schema lit/library-find-similar (E11), and lit/library-make-global (E10).
|
||
* Built by DiviIntegration::library() so it shares the library access (rights, Tools-tab gates –
|
||
* its id LibraryAccess::GROUP is what the P9 hiding and the write gate ask). Available with the
|
||
* Divi 5 builder, like the Divi group.
|
||
*/
|
||
final class LibraryIntegration implements Integration
|
||
{
|
||
/**
|
||
* @param (Closure(): bool)|null $diviWritable Whether lit/divi-insert is enabled (audit M2); null = always.
|
||
* @param GlobalUsages|null $usages The usages with the Theme Builder access (DiviIntegration::globalUsages(),
|
||
* review I-2); null = GlobalUsages' own fail-safe Theme Builder check.
|
||
*/
|
||
public function __construct(
|
||
private LibraryAccess $access,
|
||
private DiviPageLoader $loader,
|
||
private DesignSystemReader $design,
|
||
private DiviWriter $writer,
|
||
private DiviSaver $saver,
|
||
private ChangeLog $log,
|
||
private DiviModules $modules,
|
||
private ?Closure $diviWritable = null,
|
||
private ?ContentSchema $schema = null,
|
||
private ?GlobalUsages $usages = null
|
||
) {
|
||
}
|
||
|
||
public function id(): string
|
||
{
|
||
return LibraryAccess::GROUP;
|
||
}
|
||
|
||
public function label(): string
|
||
{
|
||
return __('Divi-Bibliothek', 'wp-lit-mcp');
|
||
}
|
||
|
||
public function isAvailable(): bool
|
||
{
|
||
return DiviModules::isAvailable();
|
||
}
|
||
|
||
public function abilities(): array
|
||
{
|
||
$abilities = [
|
||
new LibraryListAbility(
|
||
$this->access,
|
||
$this->loader,
|
||
$this->design,
|
||
$this->usages ?? new GlobalUsages(null, $this->access->roles())
|
||
),
|
||
new LibrarySaveAbility(
|
||
$this->access,
|
||
$this->loader,
|
||
$this->writer,
|
||
$this->saver,
|
||
$this->log,
|
||
$this->modules
|
||
),
|
||
new LibraryInsertAbility($this->writer, $this->access, $this->diviWritable),
|
||
];
|
||
if ($this->schema !== null) {
|
||
$abilities[] = new LibraryFindSimilarAbility($this->access, $this->loader, $this->schema);
|
||
}
|
||
$abilities[] = new LibraryMakeGlobalAbility(
|
||
$this->access,
|
||
$this->writer,
|
||
new NewLibraryEntry($this->access, $this->saver, $this->modules),
|
||
$this->log,
|
||
$this->diviWritable
|
||
);
|
||
|
||
return $abilities;
|
||
}
|
||
}
|