PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.0.3
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.0.3
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 11 months ago logging.php 1 year ago reply.php 10 months ago rest.php 10 months ago
admin.php
315 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 );
213
214 // Only add wp-edit-post on actual post/page editor screens, not on AI Engine admin pages
215 $is_post_editor = $current_screen && in_array( $current_screen->base, [ 'post', 'page' ] );
216 if ( $is_post_editor ) {
217 $deps[] = 'wp-edit-post';
218 }
219
220 // Load block editor deps if:
221 // 1. We're on AI Engine admin pages (Forms.js component is always imported by Settings.js) OR
222 // 2. We are on a block editor screen (Edit Post)
223 $forms_module_enabled = $this->core->get_option( 'module_forms' );
224 $load_forms_editor = $forms_module_enabled && $this->core->get_option( 'forms_editor' );
225 $on_block_editor = function_exists( 'wp_should_load_block_editor_scripts_and_styles' ) && wp_should_load_block_editor_scripts_and_styles();
226
227 // Always load block editor deps on AI Engine admin pages because Forms.js is always imported
228 if ( $is_ai_engine_page || $on_block_editor ) {
229 $deps = array_merge( $deps, [ 'wp-blocks', 'wp-block-editor', 'wp-format-library', 'wp-block-library', 'wp-editor' ] );
230 }
231
232 wp_register_script( 'mwai', MWAI_URL . 'app/index.js', $deps, $cache_buster );
233 wp_enqueue_script( 'mwai' );
234
235 // Ensure core editor styles are available for embedded block editor UIs
236 // This helps Popovers, Inspector, and toolbars match Gutenberg styling
237 if ( function_exists( 'wp_enqueue_style' ) ) {
238 // Only load wp-edit-post styles on actual post/page editor screens
239 if ( $is_post_editor ) {
240 @wp_enqueue_style( 'wp-edit-post' );
241 }
242 @wp_enqueue_style( 'wp-components' );
243
244 // Load block editor styles if we're on AI Engine pages or on block editor
245 if ( $is_ai_engine_page || $on_block_editor ) {
246 @wp_enqueue_style( 'wp-block-editor' );
247 @wp_enqueue_style( 'wp-block-library' );
248 }
249 }
250 // Make sure core blocks and format tools are registered/available
251 if ( function_exists( 'wp_enqueue_script' ) ) {
252 if ( $is_ai_engine_page || $on_block_editor ) {
253 @wp_enqueue_script( 'wp-format-library' );
254 @wp_enqueue_script( 'wp-block-library' );
255 @wp_enqueue_script( 'wp-editor' );
256 }
257 }
258
259 // The MD5 of the translation file built by WP uses app/i18n.js instead of app/index.js
260 add_filter( 'load_script_translation_file', function ( $file, $handle, $domain ) {
261 if ( $domain !== 'ai-engine' ) {
262 return $file;
263 }
264 $file = str_replace( md5( 'app/index.js' ), md5( 'app/i18n.js' ), $file );
265 return $file;
266 }, 10, 3 );
267
268 // This is useless for AI Engine, but it avoids issues when themes and plugin calls
269 // wp_enqueue_media too late (usually, they call it in the footer). Until someone
270 // figures out what the issue is, let's load it here.
271 wp_enqueue_media();
272
273 wp_set_script_translations( 'mwai', 'ai-engine' );
274
275 // Prepare localization data
276 $localize_data = [
277 'api_url' => get_rest_url( null, 'mwai/v1' ),
278 'rest_url' => get_rest_url(),
279 'plugin_url' => MWAI_URL,
280 'user_data' => $this->core->get_user_data(),
281 'prefix' => MWAI_PREFIX,
282 'domain' => MWAI_DOMAIN,
283 'is_pro' => class_exists( 'MeowPro_MWAI_Core' ),
284 'is_registered' => !!$this->is_registered(),
285 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
286 'session' => $this->core->get_session_id(),
287 'options' => $this->core->get_all_options(),
288 'chatbots' => $this->core->get_chatbots(),
289 'themes' => $this->core->get_themes(),
290 'stream' => $this->core->get_option( 'ai_streaming' ),
291 ];
292
293 wp_localize_script( 'mwai', 'mwai', $localize_data );
294 }
295
296 public function is_registered() {
297 return apply_filters( MWAI_PREFIX . '_meowapps_is_registered', false, MWAI_PREFIX );
298 }
299
300 public function app_menu() {
301 add_submenu_page(
302 'meowapps-main-menu',
303 'AI Engine',
304 'AI Engine',
305 'manage_options',
306 'mwai_settings',
307 [ $this, 'admin_settings' ]
308 );
309 }
310
311 public function admin_settings() {
312 echo '<div id="mwai-admin-settings"></div>';
313 }
314 }
315