PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.5.6
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.5.6
3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.9 3.4.8 3.4.7 0.2.1 1.6.91 0.2.2 1.6.92 0.2.3 1.6.93 0.2.4 1.6.94 0.2.5 1.6.95 0.2.6 1.6.96 0.2.7 1.6.97 0.2.8 1.6.98 0.2.9 1.6.99 0.3.0 1.7.0 0.3.1 1.7.1 0.3.2 1.7.2 0.3.3 1.7.3 0.3.4 1.7.4 0.3.5 1.7.5 0.3.6 1.7.6 0.4.0 1.7.7 0.4.1 1.7.8 0.4.2 1.7.9 0.4.3 1.8.0 0.4.4 1.8.1 0.4.5 1.8.2 0.4.6 1.8.3 0.4.7 1.8.4 0.4.8 1.8.5 0.4.9 1.8.6 0.5.0 1.8.7 0.5.1 1.8.8 0.5.2 1.8.9 0.5.3 1.9.0 0.5.4 1.9.1 0.5.5 1.9.2 0.5.6 1.9.3 0.5.7 1.9.4 0.5.8 1.9.5 0.5.9 1.9.6 0.6.0 1.9.7 0.6.1 1.9.8 0.6.2 1.9.81 0.6.3 1.9.82 0.6.4 1.9.83 0.6.5 1.9.84 0.6.6 1.9.85 0.6.7 1.9.86 0.6.8 1.9.87 0.6.9 1.9.88 0.7.0 1.9.89 0.7.1 1.9.90 0.7.2 1.9.91 0.7.3 1.9.92 0.7.4 1.9.93 0.7.5 1.9.94 0.7.6 1.9.95 0.7.7 1.9.96 0.7.8 1.9.97 0.7.9 1.9.98 0.8.0 1.9.99 0.8.1 2.0.0 0.8.2 2.0.1 0.8.3 2.0.2 0.8.4 2.0.3 0.8.5 2.0.4 0.8.6 2.0.5 0.8.7 2.0.6 0.8.8 2.0.7 0.8.9 2.0.8 0.9.0 2.0.9 0.9.2 2.1.0 0.9.3 2.1.1 0.9.4 2.1.2 0.9.5 2.1.3 0.9.6 2.1.4 0.9.7 2.1.5 0.9.8 2.1.6 0.9.81 2.1.7 0.9.82 2.1.8 0.9.83 2.1.9 0.9.84 2.2.0 0.9.85 2.2.1 0.9.86 2.2.2 0.9.87 2.2.3 0.9.88 2.2.4 0.9.89 2.2.5 0.9.9 2.2.51 0.9.91 2.2.52 0.9.92 2.2.53 0.9.93 2.2.54 0.9.94 2.2.56 0.9.95 2.2.57 0.9.96 2.2.6 0.9.97 2.2.60 0.9.98 2.2.61 0.9.99 2.2.62 1.0.0 2.2.63 1.0.01 2.2.70 1.0.1 2.2.80 1.0.2 2.2.81 1.0.3 2.2.90 1.0.4 2.2.91 1.0.5 2.2.92 1.0.6 2.2.93 1.0.7 2.2.94 1.0.8 2.2.95 1.0.9 2.3.0 1.1.0 2.3.1 1.1.1 2.3.2 1.1.2 2.3.3 1.1.3 2.3.4 1.1.4 2.3.5 1.1.5 2.3.6 1.1.6 2.3.7 1.1.7 2.3.8 1.1.8 2.3.9 1.1.9 2.4.0 1.2.0 2.4.1 1.2.1 2.4.2 1.2.2 2.4.3 1.2.21 2.4.4 1.2.3 2.4.5 1.2.30 2.4.6 1.3.0 2.4.7 1.3.1 2.4.8 1.3.2 2.4.9 1.3.3 2.5.0 1.3.31 2.5.1 1.3.32 2.5.2 1.3.33 2.5.3 1.3.34 2.5.4 1.3.35 2.5.5 1.3.36 2.5.6 1.3.37 2.5.7 1.3.38 2.5.8 1.3.39 2.5.9 1.3.40 2.6.0 1.3.41 2.6.1 1.3.42 2.6.2 1.3.43 2.6.3 1.3.44 2.6.5 1.3.45 2.6.6 1.3.46 2.6.7 1.3.47 2.6.8 1.3.48 2.6.9 1.3.49 2.7.0 1.3.50 2.7.1 1.3.51 2.7.2 1.3.52 2.7.3 1.3.53 2.7.4 1.3.54 2.7.5 1.3.56 2.7.6 1.3.57 2.7.7 1.3.58 2.7.8 1.3.59 2.7.9 1.3.60 2.8.0 1.3.61 2.8.1 1.3.62 2.8.2 1.3.63 2.8.3 1.3.64 2.8.4 1.3.65 2.8.5 1.3.66 2.8.6 1.3.67 2.8.7 1.3.68 2.8.8 1.3.69 2.8.9 1.3.70 2.9.0 1.3.71 2.9.1 1.3.72 2.9.2 1.3.73 2.9.3 1.3.74 2.9.4 1.3.75 2.9.5 1.3.76 2.9.6 1.3.77 2.9.7 1.3.78 2.9.8 1.3.79 2.9.9 1.3.80 3.0.0 1.3.81 3.0.1 1.3.82 3.0.2 1.3.83 3.0.3 1.3.84 3.0.4 1.3.85 3.0.5 1.3.86 3.0.6 1.3.87 3.0.7 1.3.88 3.0.8 1.3.89 3.0.9 1.3.90 3.1.0 1.3.91 3.1.1 1.3.92 3.1.2 1.3.93 3.1.3 1.3.94 3.1.4 1.3.95 3.1.5 1.3.96 3.1.6 1.3.97 3.1.7 1.3.98 3.1.8 1.3.99 3.1.9 1.4.0 3.2.0 1.4.1 3.2.1 1.4.2 3.2.2 1.4.3 3.2.3 1.4.4 3.2.4 1.4.5 3.2.5 1.4.6 3.2.6 1.4.7 3.2.7 1.4.8 3.2.8 1.4.9 3.2.9 1.5.0 3.3.0 1.5.1 3.3.1 1.5.2 3.3.2 1.5.3 3.3.3 1.5.4 3.3.4 1.5.5 3.3.5 1.5.6 3.3.6 1.5.7 3.3.7 1.5.8 3.3.8 1.5.9 3.3.9 1.6.0 3.4.0 1.6.1 3.4.1 1.6.2 3.4.2 1.6.3 3.4.3 1.6.5 3.4.4 1.6.51 3.4.5 1.6.52 3.4.6 1.6.53 1.6.54 1.6.55 1.6.56 1.6.57 1.6.58 1.6.59 1.6.60 1.6.61 1.6.62 1.6.63 1.6.64 1.6.65 1.6.66 1.6.67 1.6.68 trunk 1.6.69 0.0.1 1.6.70 0.0.2 1.6.71 0.0.3 1.6.72 0.0.4 1.6.73 0.0.5 1.6.74 0.0.6 1.6.75 0.0.7 1.6.76 0.0.8 1.6.77 0.0.9 1.6.78 0.1.0 1.6.79 0.1.1 1.6.81 0.1.2 1.6.82 0.1.3 1.6.83 0.1.4 1.6.84 0.1.5 1.6.85 0.1.6 1.6.86 0.1.7 1.6.87 0.1.8 1.6.88 0.1.9 1.6.89 0.2.0 1.6.90
ai-engine / classes / admin.php
ai-engine / classes Last commit date
data 11 months ago engines 6 days ago exceptions 11 months ago modules 1 week ago query 1 week ago rest 1 month ago services 1 week ago admin.php 1 month ago api.php 1 month ago core.php 6 days ago discussion.php 11 months ago event.php 11 months ago init.php 7 months ago logging.php 11 months ago reply.php 3 weeks ago rest.php 1 month ago
admin.php
435 lines
1 <?php
2
3 class Meow_MWAI_Admin extends MeowKit_MWAI_Admin {
4 public $core;
5 public $contentGeneratorEnabled;
6 public $imagesGeneratorEnabled;
7 public $videosGeneratorEnabled;
8 public $playgroundEnabled;
9 public $suggestionsEnabled;
10
11 public function __construct( $core ) {
12 $this->core = $core;
13 parent::__construct( MWAI_PREFIX, MWAI_ENTRY, MWAI_DOMAIN, class_exists( 'MeowPro_MWAI_Core' ) );
14 if ( is_admin() ) {
15 $this->contentGeneratorEnabled = $this->core->get_option( 'module_generator_content' );
16 $this->imagesGeneratorEnabled = $this->core->get_option( 'module_generator_images' );
17 $this->videosGeneratorEnabled = $this->core->get_option( 'module_generator_videos' );
18 $this->playgroundEnabled = $this->core->get_option( 'module_playground' );
19 $can_access_settings = $this->core->can_access_settings();
20 $can_access_features = $this->core->can_access_features();
21
22 if ( $can_access_settings || $can_access_features ) {
23 add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] );
24 }
25
26 if ( $can_access_settings ) {
27 add_action( 'admin_menu', [ $this, 'app_menu' ] );
28 }
29
30 if ( $can_access_features ) {
31 add_action( 'admin_menu', [ $this, 'admin_menu' ] );
32
33 // Only if the Suggestions are enabled.
34 $this->suggestionsEnabled = $this->core->get_option( 'module_suggestions' );
35 if ( $this->suggestionsEnabled ) {
36 add_filter( 'post_row_actions', [ $this, 'post_row_actions' ], 10, 2 );
37 add_filter( 'page_row_actions', [ $this, 'post_row_actions' ], 10, 2 );
38 }
39
40 if ( $this->imagesGeneratorEnabled ) {
41 add_filter( 'media_row_actions', [ $this, 'media_row_actions' ], 10, 2 );
42 }
43
44 add_action( 'admin_footer', [ $this, 'admin_footer' ] );
45 }
46 }
47 }
48
49 public function admin_menu() {
50
51 // Generate New (under Posts)
52 if ( $this->contentGeneratorEnabled ) {
53 add_submenu_page(
54 'edit.php',
55 'Generate New',
56 'Generate New',
57 'read',
58 'mwai_content_generator',
59 [ $this, 'ai_content_generator' ],
60 2
61 );
62 }
63
64 // In Tools
65 if ( $this->playgroundEnabled ) {
66 add_management_page(
67 'Playground',
68 __( 'Playground', 'ai-engine' ),
69 'read',
70 'mwai_dashboard',
71 [ $this, 'ai_playground' ]
72 );
73 }
74 if ( $this->contentGeneratorEnabled ) {
75 add_management_page(
76 'Generate Content',
77 'Generate Content',
78 'read',
79 'mwai_content_generator',
80 [ $this, 'ai_content_generator' ]
81 );
82 }
83 if ( $this->imagesGeneratorEnabled ) {
84 add_management_page(
85 'Generate Images',
86 'Generate Images',
87 'read',
88 'mwai_images_generator',
89 [ $this, 'ai_image_generator' ]
90 );
91 }
92 if ( $this->videosGeneratorEnabled ) {
93 add_management_page(
94 'Generate Videos',
95 'Generate Videos',
96 'read',
97 'mwai_videos_generator',
98 [ $this, 'ai_video_generator' ]
99 );
100 }
101
102 // In the Admin Bar:
103 add_action( 'admin_bar_menu', [ $this, 'admin_bar_menu' ], 100 );
104 }
105
106 public function admin_bar_menu( $wp_admin_bar ) {
107
108 $admin_bar = $this->core->get_option( 'admin_bar' );
109 $settings = isset( $admin_bar['settings'] ) && $admin_bar['settings'];
110 $playground = isset( $admin_bar['playground'] ) && $admin_bar['playground'];
111 $content_generator = isset( $admin_bar['content_generator'] ) && $admin_bar['content_generator'];
112 $images_generator = isset( $admin_bar['images_generator'] ) && $admin_bar['images_generator'];
113 $videos_generator = isset( $admin_bar['videos_generator'] ) && $admin_bar['videos_generator'];
114
115 if ( $settings ) {
116 $wp_admin_bar->add_node( [
117 'id' => 'mwai-settings',
118 'title' => '<span class="ab-icon dashicons-before dashicons-admin-settings" style="top: 2px;"></span>' . __( 'AI Engine', 'ai-engine' ),
119 'href' => admin_url( 'admin.php?page=mwai_settings' ),
120 'meta' => [ 'class' => 'mwai-settings' ],
121 ] );
122 }
123
124 if ( $content_generator ) {
125 $wp_admin_bar->add_node( [
126 'id' => 'mwai-content-generator',
127 'title' => MWAI_IMG_WAND_HTML . __( 'Content', 'ai-engine' ),
128 'href' => admin_url( 'tools.php?page=mwai_content_generator' ),
129 'meta' => [ 'class' => 'mwai-content-generator' ],
130 ] );
131 }
132 if ( $images_generator ) {
133 $wp_admin_bar->add_node( [
134 'id' => 'mwai-image-generator',
135 'title' => MWAI_IMG_WAND_HTML . __( 'Images', 'ai-engine' ),
136 'href' => admin_url( 'tools.php?page=mwai_images_generator' ),
137 'meta' => [ 'class' => 'mwai-images-generator' ],
138 ] );
139 }
140 if ( $videos_generator ) {
141 $wp_admin_bar->add_node( [
142 'id' => 'mwai-video-generator',
143 'title' => MWAI_IMG_WAND_HTML . __( 'Videos', 'ai-engine' ),
144 'href' => admin_url( 'tools.php?page=mwai_videos_generator' ),
145 'meta' => [ 'class' => 'mwai-videos-generator' ],
146 ] );
147 }
148
149 // The Global Magic Wand
150 // if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
151 // $wp_admin_bar->add_node( array(
152 // 'id' => 'mwai-debug',
153 // 'title' => MWAI_IMG_WAND_HTML . __( 'Magic Wand', 'ai-engine' ),
154 // //'href' => admin_url( 'tools.php?page=mwai_debug' ),
155 // 'meta' => array( 'class' => 'mwai-debug' ),
156 // ) );
157 // }
158
159 if ( $playground ) {
160 $wp_admin_bar->add_node( [
161 'id' => 'mwai-playground',
162 'title' => MWAI_IMG_WAND_HTML . __( 'Playground', 'ai-engine' ),
163 'href' => admin_url( 'tools.php?page=mwai_dashboard' ),
164 'meta' => [ 'class' => 'mwai-playground' ],
165 ] );
166 }
167 }
168
169 public function ai_playground() {
170 echo '<div id="mwai-playground"></div>';
171 }
172
173 public function ai_content_generator() {
174 echo '<div id="mwai-content-generator"></div>';
175 }
176
177 public function ai_image_generator() {
178 echo '<div id="mwai-image-generator"></div>';
179 }
180
181 public function ai_video_generator() {
182 echo '<div id="mwai-video-generator"></div>';
183 }
184
185 public function post_row_actions( $actions, $post ) {
186 $actions['ai_magic_wand'] = '<span class="mwai-magic-wand-action" data-id="' . $post->ID . '" data-title="' . esc_attr( $post->post_title ) . '">
187 <a href="#" class="mwai-magic-wand-trigger">' . MWAI_IMG_WAND_HTML_XS . ' ' . __( 'Magic Wand', 'ai-engine' ) . '</a>
188 <div class="mwai-magic-wand-dropdown" style="display: none;">
189 <a class="mwai-link-title" href="#" data-id="' . $post->ID . '" data-title="' . esc_attr( $post->post_title ) . '">
190 <span class="dashicons dashicons-edit" style="font-size: 14px; line-height: 1.4; margin-right: 4px; pointer-events: none;"></span>' . __( 'Generate Title', 'ai-engine' ) . '
191 </a>
192 <a class="mwai-link-excerpt" href="#" data-id="' . $post->ID . '" data-title="' . esc_attr( $post->post_title ) . '">
193 <span class="dashicons dashicons-text" style="font-size: 14px; line-height: 1.4; margin-right: 4px; pointer-events: none;"></span>' . __( 'Generate Excerpt', 'ai-engine' ) . '
194 </a>
195 </div>
196 </span>';
197 return $actions;
198 }
199
200 public function media_row_actions( $actions, $post ) {
201 if ( strpos( $post->post_mime_type, 'image/' ) === 0 ) {
202 $url = admin_url( 'tools.php?page=mwai_images_generator&editId=' . $post->ID );
203 $actions['mwai_remix'] = '<a href="' . $url . '">' . MWAI_IMG_WAND_HTML_XS . ' ' . __( 'Edit', 'ai-engine' ) . '</a>';
204 }
205 return $actions;
206 }
207
208 public function admin_footer() {
209 // Don't add our admin footer div on the Site Editor
210 $current_screen = get_current_screen();
211 if ( $current_screen && $current_screen->base === 'site-editor' ) {
212 return;
213 }
214 echo '<div id="mwai-admin-postsList"></div>';
215
216 // Add CSS for Magic Wand dropdown
217 ?>
218 <style>
219 .mwai-magic-wand-action {
220 position: relative;
221 display: inline-block;
222 }
223
224 .mwai-magic-wand-trigger {
225 text-decoration: none;
226 }
227
228 .mwai-magic-wand-dropdown {
229 position: absolute;
230 top: 100%;
231 left: 0;
232 background: #fff;
233 border: 1px solid #c3c4c7;
234 border-radius: 4px;
235 box-shadow: 0 2px 5px rgba(0,0,0,0.15);
236 min-width: 150px;
237 z-index: 1000;
238 margin-top: 4px;
239 }
240
241 .mwai-magic-wand-dropdown a {
242 display: flex;
243 align-items: center;
244 padding: 8px 12px;
245 text-decoration: none;
246 color: #2271b1;
247 border-bottom: 1px solid #f0f0f1;
248 white-space: nowrap;
249 }
250
251 .mwai-magic-wand-dropdown a .dashicons {
252 width: 16px;
253 height: 16px;
254 font-size: 14px;
255 }
256
257 .mwai-magic-wand-dropdown a:last-child {
258 border-bottom: none;
259 }
260
261 .mwai-magic-wand-dropdown a:hover {
262 background: #f0f6fc;
263 color: #135e96;
264 }
265
266 /* Ensure dropdown stays visible when hovering over it */
267 .mwai-magic-wand-action:hover .mwai-magic-wand-dropdown {
268 display: block !important;
269 }
270 </style>
271 <?php
272 }
273
274 public function admin_enqueue_scripts() {
275 // Previously bailed entirely on the Site Editor to avoid conflicts, but that left
276 // our block types unregistered there - patterns created via Appearance > Editor saved
277 // broken "Unsupported" placeholders for every AI Form/Chatbot block. The conditional
278 // dependency logic below already keeps wp-edit-post out of the Site Editor dep list,
279 // so the bundle can safely load here for block registration while the admin UI
280 // render targets (mwai-admin-settings, etc.) simply don't exist.
281 $current_screen = get_current_screen();
282
283 $physical_file = MWAI_PATH . '/app/index.js';
284 $cache_buster = file_exists( $physical_file ) ? filemtime( $physical_file ) : MWAI_VERSION;
285
286 // Cache override: Force cache refresh when ?mwai_cache=1 is in URL
287 if ( isset( $_GET['mwai_cache'] ) ) {
288 $cache_buster = time(); // Use current timestamp for guaranteed cache bust
289 }
290
291 wp_register_script( 'mwai-vendor', MWAI_URL . 'app/vendor.js', null, $cache_buster );
292
293 // Base dependencies
294 $deps = [ 'mwai-vendor', 'wp-element', 'wp-components', 'wp-plugins', 'wp-i18n' ];
295
296 // Check if we're on AI Engine admin pages
297 $is_ai_engine_page = $current_screen && (
298 strpos( $current_screen->id, 'mwai_settings' ) !== false ||
299 strpos( $current_screen->id, 'meowapps_page_mwai' ) !== false ||
300 $current_screen->id === 'meowapps_page_mwai_settings' ||
301 $current_screen->id === 'meowapps_page_mwai-ui' ||
302 strpos( $current_screen->id, 'meowapps' ) !== false && strpos( $_GET['page'] ?? '', 'mwai' ) !== false
303 );
304
305 // Only add wp-edit-post on actual post/page editor screens, not on AI Engine admin pages
306 $is_post_editor = $current_screen && in_array( $current_screen->base, [ 'post', 'page' ] );
307 if ( $is_post_editor ) {
308 $deps[] = 'wp-edit-post';
309 }
310
311 // Load block editor deps if:
312 // 1. We're on AI Engine admin pages (Forms.js component is always imported by Settings.js) OR
313 // 2. We are on a block editor screen (Edit Post)
314 $forms_module_enabled = $this->core->get_option( 'module_forms' );
315 $load_forms_editor = $forms_module_enabled && $this->core->get_option( 'forms_editor' );
316 $on_block_editor = function_exists( 'wp_should_load_block_editor_scripts_and_styles' ) && wp_should_load_block_editor_scripts_and_styles();
317
318 // Always load block editor deps on AI Engine admin pages because Forms.js is always imported
319 if ( $is_ai_engine_page || $on_block_editor ) {
320 $deps = array_merge( $deps, [ 'wp-blocks', 'wp-block-editor', 'wp-format-library', 'wp-block-library', 'wp-editor' ] );
321 }
322
323 wp_register_script( 'mwai', MWAI_URL . 'app/index.js', $deps, $cache_buster );
324 wp_enqueue_script( 'mwai' );
325
326 // Ensure core editor styles are available for embedded block editor UIs
327 // This helps Popovers, Inspector, and toolbars match Gutenberg styling
328 if ( function_exists( 'wp_enqueue_style' ) ) {
329 // Only load wp-edit-post styles on actual post/page editor screens
330 if ( $is_post_editor ) {
331 @wp_enqueue_style( 'wp-edit-post' );
332 }
333 @wp_enqueue_style( 'wp-components' );
334
335 // Load block editor styles if we're on AI Engine pages or on block editor
336 if ( $is_ai_engine_page || $on_block_editor ) {
337 @wp_enqueue_style( 'wp-block-editor' );
338 @wp_enqueue_style( 'wp-block-library' );
339 }
340 }
341 // Make sure core blocks and format tools are registered/available
342 if ( function_exists( 'wp_enqueue_script' ) ) {
343 if ( $is_ai_engine_page || $on_block_editor ) {
344 @wp_enqueue_script( 'wp-format-library' );
345 @wp_enqueue_script( 'wp-block-library' );
346 @wp_enqueue_script( 'wp-editor' );
347 }
348 }
349
350 // The MD5 of the translation file built by WP uses app/i18n.js instead of app/index.js
351 add_filter( 'load_script_translation_file', function ( $file, $handle, $domain ) {
352 if ( $domain !== 'ai-engine' ) {
353 return $file;
354 }
355 $file = str_replace( md5( 'app/index.js' ), md5( 'app/i18n.js' ), $file );
356 return $file;
357 }, 10, 3 );
358
359 // This is useless for AI Engine, but it avoids issues when themes and plugin calls
360 // wp_enqueue_media too late (usually, they call it in the footer). Until someone
361 // figures out what the issue is, let's load it here.
362 wp_enqueue_media();
363
364 wp_set_script_translations( 'mwai', 'ai-engine' );
365
366 // Prepare localization data
367 // Get build reference for asset management
368 $build_ref = null;
369 if ( class_exists( 'MeowKitPro_MWAI_Integrity' ) ) {
370 $integrity = new MeowKitPro_MWAI_Integrity( MWAI_PREFIX, MWAI_PATH );
371 $build_ref = $integrity->get_build_ref( MWAI_VERSION );
372 }
373
374 $localize_data = [
375 'api_url' => get_rest_url( null, 'mwai/v1' ),
376 'rest_url' => get_rest_url(),
377 'plugin_url' => MWAI_URL,
378 'user_data' => $this->core->get_user_data(),
379 'prefix' => MWAI_PREFIX,
380 'domain' => MWAI_DOMAIN,
381 'is_pro' => class_exists( 'MeowPro_MWAI_Core' ),
382 'is_registered' => !!$this->is_registered(),
383 'build_ref' => $build_ref,
384 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
385 'session' => $this->core->get_session_id(),
386 'options' => $this->core->get_all_options(),
387 'chatbots' => $this->core->get_chatbots(),
388 'themes' => $this->core->get_themes(),
389 'stream' => $this->core->get_option( 'ai_streaming' ),
390 'cache_buster' => $cache_buster, // Pass cache buster for lazy-loaded chunks
391 'fallback_models' => [
392 'default' => MWAI_FALLBACK_MODEL,
393 'fast' => MWAI_FALLBACK_MODEL_FAST,
394 'vision' => MWAI_FALLBACK_MODEL_VISION,
395 'json' => MWAI_FALLBACK_MODEL_JSON,
396 'images' => MWAI_FALLBACK_MODEL_IMAGES,
397 'audio' => MWAI_FALLBACK_MODEL_AUDIO,
398 'embeddings' => MWAI_FALLBACK_MODEL_EMBEDDINGS,
399 ],
400 'integrations' => [
401 'polylang' => function_exists( 'pll_get_post_language' ),
402 'woocommerce' => class_exists( 'WooCommerce' ),
403 ],
404 ];
405
406 wp_localize_script( 'mwai', 'mwai', $localize_data );
407 }
408
409 public function is_registered() {
410 return apply_filters( MWAI_PREFIX . '_meowapps_is_registered', false, MWAI_PREFIX );
411 }
412
413 public function app_menu() {
414 // The menu is only registered when can_access_settings() passed (see __construct).
415 // Pass a low cap here so WordPress doesn't hide the submenu from filter-approved
416 // users who don't have manage_options. The page callback re-checks access for
417 // defense in depth.
418 add_submenu_page(
419 'meowapps-main-menu',
420 'AI Engine',
421 'AI Engine',
422 'read',
423 'mwai_settings',
424 [ $this, 'admin_settings' ]
425 );
426 }
427
428 public function admin_settings() {
429 if ( !$this->core->can_access_settings() ) {
430 wp_die( __( 'Sorry, you are not allowed to access this page.', 'ai-engine' ), 403 );
431 }
432 echo '<div id="mwai-admin-settings"></div>';
433 }
434 }
435