| @@ -11,8 +11,9 @@ | ||
| 11 | 11 | use Extendify\Agent\Controllers\ChatHistoryController; |
| 12 | 12 | use Extendify\Agent\Controllers\TourController; |
| 13 | 13 | use Extendify\Config; |
| 14 | 14 | use Extendify\Constants; |
| 15 | +use Extendify\Mcp\Profile as McpProfile; | |
| 15 | 16 | use Extendify\Shared\Services\Escaper; |
| 16 | 17 | use Extendify\Shared\Services\HttpClient; |
| 17 | 18 | use Extendify\Agent\TagBlocks; |
| 18 | 19 | use Extendify\Agent\TagTemplateParts; |
| @@ -17,11 +18,11 @@ | ||
| 17 | 18 | use Extendify\Agent\TagBlocks; |
| 18 | 19 | use Extendify\Agent\TagTemplateParts; |
| 19 | 20 | use Extendify\Agent\WooProductImages; |
| 20 | 21 | use Extendify\Agent\AbilitiesDiscovery; |
| 21 | -use Extendify\Agent\Controllers\SiteNavigationController; | |
| 22 | 22 | use Extendify\PartnerData; |
| 23 | 23 | use Extendify\Shared\DataProvider\ProductsData; |
| 24 | +use Extendify\SiteVisibility; | |
| 24 | 25 | |
| 25 | 26 | /** |
| 26 | 27 | * This class handles any file loading for the admin area. |
| 27 | 28 | */ |
| @@ -41,11 +42,8 @@ | ||
| 41 | 42 | // Tag blocks so we can identify them later |
| 42 | 43 | TagBlocks::init(); |
| 43 | 44 | TagTemplateParts::init(); |
| 44 | 45 | |
| 45 | - // Add the site navigation ids to the navigation blocks | |
| 46 | - SiteNavigationController::init(); | |
| 47 | - | |
| 48 | 46 | Skeleton::init(); |
| 49 | 47 | |
| 50 | 48 | WooProductImages::init(); |
| 51 | 49 | |
| @@ -74,9 +72,9 @@ | ||
| 74 | 72 | public function loadScriptsAndStyles() |
| 75 | 73 | { |
| 76 | 74 | // The Customizer preview iframe is a front-end render, so this fires |
| 77 | 75 | // there too — but the Agent only belongs on the live, top-level page. |
| 78 | - if (is_customize_preview()) { | |
| 76 | + if (is_customize_preview() || McpProfile::isOwnScreen()) { | |
| 79 | 77 | return; |
| 80 | 78 | } |
| 81 | 79 | |
| 82 | 80 | $version = constant('EXTENDIFY_DEVMODE') ? uniqid() : Config::$version; |
| @@ -118,11 +116,11 @@ | ||
| 118 | 116 | (bool) use_block_editor_for_post($this->getCurrentPostId()) : |
| 119 | 117 | false, |
| 120 | 118 | 'isOnEditorOrFSE' => $this->isGutenbergOrFse(), |
| 121 | 119 | 'activePlugins' => array_values(\get_option('active_plugins', [])), |
| 122 | - // Whether the user is using the vibes experience or not. | |
| 123 | - 'isUsingVibes' => (bool) file_exists(EXTENDIFY_PATH . 'src/Launch/_data/block-style-variations.json') && | |
| 124 | - version_compare(wp_get_theme("extendable")->get('Version'), '2.0.32', '>='), | |
| 120 | + // The accessor also reads a key set by the IMAGIFY_API_KEY constant. | |
| 121 | + 'hasImagifyApiKey' => function_exists('get_imagify_option') && (bool) \get_imagify_option('api_key'), | |
| 122 | + 'isUsingVibes' => version_compare((string) wp_get_theme('extendable')->get('Version'), '2.0.32', '>='), | |
| 125 | 123 | 'siteTitle' => \esc_attr(\get_bloginfo('name')), |
| 126 | 124 | 'siteDescription' => \esc_attr(\get_bloginfo('description')), |
| 127 | 125 | 'themePresets' => $this->getThemePresets(), |
| 128 | 126 | 'presetSlugs' => $this->getPresetSlugs(), |
| @@ -141,8 +139,10 @@ | ||
| 141 | 139 | }, $pluginRecommendations)); |
| 142 | 140 | $agentContext = [ |
| 143 | 141 | 'availableAdminPages' => get_option('_transient_extendify_admin_pages_menu', []), |
| 144 | 142 | 'pluginRecommendations' => $mappedPluginRecommendations, |
| 143 | + 'sitePublished' => SiteVisibility::isPublished(), | |
| 144 | + 'comingSoonEnabled' => (bool) PartnerData::setting('useComingSoon'), | |
| 145 | 145 | ]; |
| 146 | 146 | $abilities = [ |
| 147 | 147 | 'canEditPost' => (bool) \current_user_can('edit_post', \get_queried_object_id()), |
| 148 | 148 | // TODO: this may be true for a user, while they still can't edit every post |
| @@ -175,10 +175,9 @@ | ||
| 175 | 175 | // For example, we could check whether their theme has variations. |
| 176 | 176 | 'abilities' => $abilities, |
| 177 | 177 | // Registered WordPress Abilities (6.9+) this user may run. |
| 178 | 178 | 'wpAbilities' => AbilitiesDiscovery::discover(), |
| 179 | - // List of suggestions the AI can make for this user. | |
| 180 | - // For example, we could check whether they need to set up a specific plugin. | |
| 179 | + // The domain card reads only the register-domain record. | |
| 181 | 180 | 'suggestions' => $this->getSuggestions(), |
| 182 | 181 | 'domainsSuggestionSettings' => [ |
| 183 | 182 | 'showPrimary' => (bool) PartnerData::setting('showPrimaryDomainRecommendationAgent'), |
| 184 | 183 | 'showSecondary' => (bool) PartnerData::setting('showSecondaryDomainRecommendationAgent'), |
| @@ -313,12 +312,39 @@ | ||
| 313 | 312 | $typography = \wp_get_global_settings(['typography']); |
| 314 | 313 | |
| 315 | 314 | return [ |
| 316 | 315 | 'color' => $this->originSlugs($color, 'palette', 'defaultPalette'), |
| 316 | + 'colorValues' => $this->originValues($color, 'palette', 'defaultPalette', 'color'), | |
| 317 | 317 | 'gradient' => $this->originSlugs($color, 'gradients', 'defaultGradients'), |
| 318 | 318 | 'fontSize' => $this->originSlugs($typography, 'fontSizes', 'defaultFontSizes'), |
| 319 | 319 | 'fontFamily' => $this->originSlugs($typography, 'fontFamilies', 'defaultFontFamilies'), |
| 320 | 320 | ]; |
| 321 | + } | |
| 322 | + | |
| 323 | + /** | |
| 324 | + * Slug => value, so a colour written as its own hex finds the token naming it. | |
| 325 | + * | |
| 326 | + * @return array<string, string> | |
| 327 | + */ | |
| 328 | + private function originValues($node, $listKey, $defaultKey, $valueKey) | |
| 329 | + { | |
| 330 | + $list = $node[$listKey] ?? []; | |
| 331 | + | |
| 332 | + $origins = ['custom', 'theme']; | |
| 333 | + if (($node[$defaultKey] ?? true) !== false) { | |
| 334 | + $origins[] = 'default'; | |
| 335 | + } | |
| 336 | + | |
| 337 | + $values = []; | |
| 338 | + foreach ($origins as $origin) { | |
| 339 | + foreach ($list[$origin] ?? [] as $item) { | |
| 340 | + if (isset($item['slug'], $item[$valueKey])) { | |
| 341 | + $values[(string) $item['slug']] = (string) $item[$valueKey]; | |
| 342 | + } | |
| 343 | + } | |
| 344 | + } | |
| 345 | + | |
| 346 | + return $values; | |
| 321 | 347 | } |
| 322 | 348 | |
| 323 | 349 | /** |
| 324 | 350 | * Preset slugs from a settings node's origin buckets; drops the `default` |