PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.0.4
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.0.4
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 1 year ago engines 10 months ago exceptions 1 year ago modules 10 months ago query 10 months ago rest 10 months ago services 10 months ago admin.php 10 months ago api.php 10 months ago core.php 10 months ago discussion.php 1 year ago event.php 1 year ago init.php 1 year ago logging.php 1 year ago reply.php 10 months ago rest.php 10 months ago
admin.php
317 lines
1 <?php
2
3 class Meow_MWAI_Admin extends MeowCommon_Admin {
4 public $core;
5 public $contentGeneratorEnabled;
6 public $imagesGeneratorEnabled;
7 public $playgroundEnabled;
8 public $suggestionsEnabled;
9
10 public function __construct( $core ) {
11 $this->core = $core;
12 parent::__construct( MWAI_PREFIX, MWAI_ENTRY, MWAI_DOMAIN, class_exists( 'MeowPro_MWAI_Core' ) );
13 if ( is_admin() ) {
14 $this->contentGeneratorEnabled = $this->core->get_option( 'module_generator_content' );
15 $this->imagesGeneratorEnabled = $this->core->get_option( 'module_generator_images' );
16 $this->playgroundEnabled = $this->core->get_option( 'module_playground' );
17 $can_access_settings = $this->core->can_access_settings();
18 $can_access_features = $this->core->can_access_features();
19
20 if ( $can_access_settings || $can_access_features ) {
21 add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] );
22 }
23
24 if ( $can_access_settings ) {
25 add_action( 'admin_menu', [ $this, 'app_menu' ] );
26 }
27
28 if ( $can_access_features ) {
29 add_action( 'admin_menu', [ $this, 'admin_menu' ] );
30
31 // Only if the Suggestions are enabled.
32 $this->suggestionsEnabled = $this->core->get_option( 'module_suggestions' );
33 if ( $this->suggestionsEnabled ) {
34 add_filter( 'post_row_actions', [ $this, 'post_row_actions' ], 10, 2 );
35 add_filter( 'page_row_actions', [ $this, 'post_row_actions' ], 10, 2 );
36 }
37
38 if ( $this->imagesGeneratorEnabled ) {
39 add_filter( 'media_row_actions', [ $this, 'media_row_actions' ], 10, 2 );
40 }
41
42 add_action( 'admin_footer', [ $this, 'admin_footer' ] );
43 }
44 }
45 }
46
47 public function admin_menu() {
48
49 // Generate New (under Posts)
50 if ( $this->contentGeneratorEnabled ) {
51 add_submenu_page(
52 'edit.php',
53 'Generate New',
54 'Generate New',
55 'read',
56 'mwai_content_generator',
57 [ $this, 'ai_content_generator' ],
58 2
59 );
60 }
61
62 // In Tools
63 if ( $this->playgroundEnabled ) {
64 add_management_page(
65 'Playground',
66 __( 'Playground', 'ai-engine' ),
67 'read',
68 'mwai_dashboard',
69 [ $this, 'ai_playground' ]
70 );
71 }
72 if ( $this->contentGeneratorEnabled ) {
73 add_management_page(
74 'Generate Content',
75 'Generate Content',
76 'read',
77 'mwai_content_generator',
78 [ $this, 'ai_content_generator' ]
79 );
80 }
81 if ( $this->imagesGeneratorEnabled ) {
82 add_management_page(
83 'Generate Images',
84 'Generate Images',
85 'read',
86 'mwai_images_generator',
87 [ $this, 'ai_image_generator' ]
88 );
89 }
90
91 // In the Admin Bar:
92 add_action( 'admin_bar_menu', [ $this, 'admin_bar_menu' ], 100 );
93 }
94
95 public function admin_bar_menu( $wp_admin_bar ) {
96
97 $admin_bar = $this->core->get_option( 'admin_bar' );
98 $settings = isset( $admin_bar['settings'] ) && $admin_bar['settings'];
99 $playground = isset( $admin_bar['playground'] ) && $admin_bar['playground'];
100 $content_generator = isset( $admin_bar['content_generator'] ) && $admin_bar['content_generator'];
101 $images_generator = isset( $admin_bar['images_generator'] ) && $admin_bar['images_generator'];
102
103 if ( $settings ) {
104 $wp_admin_bar->add_node( [
105 'id' => 'mwai-settings',
106 'title' => '<span class="ab-icon dashicons-before dashicons-admin-settings" style="top: 2px;"></span>' . __( 'AI Engine', 'ai-engine' ),
107 'href' => admin_url( 'admin.php?page=mwai_settings' ),
108 'meta' => [ 'class' => 'mwai-settings' ],
109 ] );
110 }
111
112 if ( $content_generator ) {
113 $wp_admin_bar->add_node( [
114 'id' => 'mwai-content-generator',
115 'title' => MWAI_IMG_WAND_HTML . __( 'Content', 'ai-engine' ),
116 'href' => admin_url( 'tools.php?page=mwai_content_generator' ),
117 'meta' => [ 'class' => 'mwai-content-generator' ],
118 ] );
119 }
120 if ( $images_generator ) {
121 $wp_admin_bar->add_node( [
122 'id' => 'mwai-image-generator',
123 'title' => MWAI_IMG_WAND_HTML . __( 'Images', 'ai-engine' ),
124 'href' => admin_url( 'tools.php?page=mwai_images_generator' ),
125 'meta' => [ 'class' => 'mwai-images-generator' ],
126 ] );
127 }
128
129 // The Global Magic Wand
130 // if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
131 // $wp_admin_bar->add_node( array(
132 // 'id' => 'mwai-debug',
133 // 'title' => MWAI_IMG_WAND_HTML . __( 'Magic Wand', 'ai-engine' ),
134 // //'href' => admin_url( 'tools.php?page=mwai_debug' ),
135 // 'meta' => array( 'class' => 'mwai-debug' ),
136 // ) );
137 // }
138
139 if ( $playground ) {
140 $wp_admin_bar->add_node( [
141 'id' => 'mwai-playground',
142 'title' => MWAI_IMG_WAND_HTML . __( 'Playground', 'ai-engine' ),
143 'href' => admin_url( 'tools.php?page=mwai_dashboard' ),
144 'meta' => [ 'class' => 'mwai-playground' ],
145 ] );
146 }
147 }
148
149 public function ai_playground() {
150 echo '<div id="mwai-playground"></div>';
151 }
152
153 public function ai_content_generator() {
154 echo '<div id="mwai-content-generator"></div>';
155 }
156
157 public function ai_image_generator() {
158 echo '<div id="mwai-image-generator"></div>';
159 }
160
161 public function post_row_actions( $actions, $post ) {
162 $actions['ai_titles'] = '<a class="mwai-link-title" href="#" data-id="' .
163 $post->ID . '" data-title="' . $post->post_title . '">
164 ' . MWAI_IMG_WAND_HTML_XS . ' Title</a>';
165 $actions['ai_excerpts'] = '<a class="mwai-link-excerpt" href="#" data-id="' .
166 $post->ID . '" data-title="' . $post->post_title . '">
167 ' . MWAI_IMG_WAND_HTML_XS . ' Excerpt</a>';
168 return $actions;
169 }
170
171 public function media_row_actions( $actions, $post ) {
172 if ( strpos( $post->post_mime_type, 'image/' ) === 0 ) {
173 $url = admin_url( 'tools.php?page=mwai_images_generator&editId=' . $post->ID );
174 $actions['mwai_remix'] = '<a href="' . $url . '">' . MWAI_IMG_WAND_HTML_XS . ' ' . __( 'Edit', 'ai-engine' ) . '</a>';
175 }
176 return $actions;
177 }
178
179 public function admin_footer() {
180 // Don't add our admin footer div on the Site Editor
181 $current_screen = get_current_screen();
182 if ( $current_screen && $current_screen->base === 'site-editor' ) {
183 return;
184 }
185 echo '<div id="mwai-admin-postsList"></div>';
186 }
187
188 public function admin_enqueue_scripts() {
189 // Don't load our scripts on the Site Editor to avoid conflicts
190 $current_screen = get_current_screen();
191 if ( $current_screen && $current_screen->base === 'site-editor' ) {
192 return;
193 }
194
195 $physical_file = MWAI_PATH . '/app/index.js';
196 $cache_buster = file_exists( $physical_file ) ? filemtime( $physical_file ) : MWAI_VERSION;
197 wp_register_script( 'mwai-vendor', MWAI_URL . 'app/vendor.js', null, $cache_buster );
198
199 // Base dependencies
200 $deps = [ 'mwai-vendor', 'wp-element', 'wp-components', 'wp-plugins', 'wp-i18n' ];
201
202 // Check if we're on AI Engine admin pages
203 // Debug: Log the current screen ID to help identify the correct page
204 if ( $current_screen && $this->core->get_option( 'server_debug_mode' ) ) {
205 error_log( '[AI Engine] Current screen ID: ' . $current_screen->id . ', Base: ' . $current_screen->base );
206 }
207
208 $is_ai_engine_page = $current_screen && (
209 strpos( $current_screen->id, 'mwai_settings' ) !== false ||
210 strpos( $current_screen->id, 'meowapps_page_mwai' ) !== false ||
211 $current_screen->id === 'meowapps_page_mwai_settings' ||
212 $current_screen->id === 'meowapps_page_mwai-ui' ||
213 strpos( $current_screen->id, 'meowapps' ) !== false && strpos( $_GET['page'] ?? '', 'mwai' ) !== false
214 );
215
216 // Only add wp-edit-post on actual post/page editor screens, not on AI Engine admin pages
217 $is_post_editor = $current_screen && in_array( $current_screen->base, [ 'post', 'page' ] );
218 if ( $is_post_editor ) {
219 $deps[] = 'wp-edit-post';
220 }
221
222 // Load block editor deps if:
223 // 1. We're on AI Engine admin pages (Forms.js component is always imported by Settings.js) OR
224 // 2. We are on a block editor screen (Edit Post)
225 $forms_module_enabled = $this->core->get_option( 'module_forms' );
226 $load_forms_editor = $forms_module_enabled && $this->core->get_option( 'forms_editor' );
227 $on_block_editor = function_exists( 'wp_should_load_block_editor_scripts_and_styles' ) && wp_should_load_block_editor_scripts_and_styles();
228
229 // Always load block editor deps on AI Engine admin pages because Forms.js is always imported
230 if ( $is_ai_engine_page || $on_block_editor ) {
231 $deps = array_merge( $deps, [ 'wp-blocks', 'wp-block-editor', 'wp-format-library', 'wp-block-library', 'wp-editor' ] );
232 }
233
234 wp_register_script( 'mwai', MWAI_URL . 'app/index.js', $deps, $cache_buster );
235 wp_enqueue_script( 'mwai' );
236
237 // Ensure core editor styles are available for embedded block editor UIs
238 // This helps Popovers, Inspector, and toolbars match Gutenberg styling
239 if ( function_exists( 'wp_enqueue_style' ) ) {
240 // Only load wp-edit-post styles on actual post/page editor screens
241 if ( $is_post_editor ) {
242 @wp_enqueue_style( 'wp-edit-post' );
243 }
244 @wp_enqueue_style( 'wp-components' );
245
246 // Load block editor styles if we're on AI Engine pages or on block editor
247 if ( $is_ai_engine_page || $on_block_editor ) {
248 @wp_enqueue_style( 'wp-block-editor' );
249 @wp_enqueue_style( 'wp-block-library' );
250 }
251 }
252 // Make sure core blocks and format tools are registered/available
253 if ( function_exists( 'wp_enqueue_script' ) ) {
254 if ( $is_ai_engine_page || $on_block_editor ) {
255 @wp_enqueue_script( 'wp-format-library' );
256 @wp_enqueue_script( 'wp-block-library' );
257 @wp_enqueue_script( 'wp-editor' );
258 }
259 }
260
261 // The MD5 of the translation file built by WP uses app/i18n.js instead of app/index.js
262 add_filter( 'load_script_translation_file', function ( $file, $handle, $domain ) {
263 if ( $domain !== 'ai-engine' ) {
264 return $file;
265 }
266 $file = str_replace( md5( 'app/index.js' ), md5( 'app/i18n.js' ), $file );
267 return $file;
268 }, 10, 3 );
269
270 // This is useless for AI Engine, but it avoids issues when themes and plugin calls
271 // wp_enqueue_media too late (usually, they call it in the footer). Until someone
272 // figures out what the issue is, let's load it here.
273 wp_enqueue_media();
274
275 wp_set_script_translations( 'mwai', 'ai-engine' );
276
277 // Prepare localization data
278 $localize_data = [
279 'api_url' => get_rest_url( null, 'mwai/v1' ),
280 'rest_url' => get_rest_url(),
281 'plugin_url' => MWAI_URL,
282 'user_data' => $this->core->get_user_data(),
283 'prefix' => MWAI_PREFIX,
284 'domain' => MWAI_DOMAIN,
285 'is_pro' => class_exists( 'MeowPro_MWAI_Core' ),
286 'is_registered' => !!$this->is_registered(),
287 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
288 'session' => $this->core->get_session_id(),
289 'options' => $this->core->get_all_options(),
290 'chatbots' => $this->core->get_chatbots(),
291 'themes' => $this->core->get_themes(),
292 'stream' => $this->core->get_option( 'ai_streaming' ),
293 ];
294
295 wp_localize_script( 'mwai', 'mwai', $localize_data );
296 }
297
298 public function is_registered() {
299 return apply_filters( MWAI_PREFIX . '_meowapps_is_registered', false, MWAI_PREFIX );
300 }
301
302 public function app_menu() {
303 add_submenu_page(
304 'meowapps-main-menu',
305 'AI Engine',
306 'AI Engine',
307 'manage_options',
308 'mwai_settings',
309 [ $this, 'admin_settings' ]
310 );
311 }
312
313 public function admin_settings() {
314 echo '<div id="mwai-admin-settings"></div>';
315 }
316 }
317