data
11 months ago
engines
10 months ago
exceptions
11 months ago
modules
10 months ago
query
10 months ago
rest
11 months ago
services
10 months ago
admin.php
11 months ago
api.php
10 months ago
core.php
10 months ago
discussion.php
11 months ago
event.php
11 months ago
init.php
11 months ago
logging.php
11 months ago
reply.php
10 months ago
rest.php
11 months ago
admin.php
249 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 | echo '<div id="mwai-admin-postsList"></div>'; |
| 181 | } |
| 182 | |
| 183 | public function admin_enqueue_scripts() { |
| 184 | $physical_file = MWAI_PATH . '/app/index.js'; |
| 185 | $cache_buster = file_exists( $physical_file ) ? filemtime( $physical_file ) : MWAI_VERSION; |
| 186 | wp_register_script( 'mwai-vendor', MWAI_URL . 'app/vendor.js', null, $cache_buster ); |
| 187 | wp_register_script( 'mwai', MWAI_URL . 'app/index.js', [ 'mwai-vendor', |
| 188 | 'wp-element', 'wp-components', 'wp-edit-post', 'wp-plugins', 'wp-i18n' |
| 189 | ], $cache_buster ); |
| 190 | wp_enqueue_script( 'mwai' ); |
| 191 | |
| 192 | // The MD5 of the translation file built by WP uses app/i18n.js instead of app/index.js |
| 193 | add_filter( 'load_script_translation_file', function ( $file, $handle, $domain ) { |
| 194 | if ( $domain !== 'ai-engine' ) { |
| 195 | return $file; |
| 196 | } |
| 197 | $file = str_replace( md5( 'app/index.js' ), md5( 'app/i18n.js' ), $file ); |
| 198 | return $file; |
| 199 | }, 10, 3 ); |
| 200 | |
| 201 | // This is useless for AI Engine, but it avoids issues when themes and plugin calls |
| 202 | // wp_enqueue_media too late (usually, they call it in the footer). Until someone |
| 203 | // figures out what the issue is, let's load it here. |
| 204 | wp_enqueue_media(); |
| 205 | |
| 206 | wp_set_script_translations( 'mwai', 'ai-engine' ); |
| 207 | |
| 208 | // Prepare localization data |
| 209 | $localize_data = [ |
| 210 | 'api_url' => get_rest_url( null, 'mwai/v1' ), |
| 211 | 'rest_url' => get_rest_url(), |
| 212 | 'plugin_url' => MWAI_URL, |
| 213 | 'user_data' => $this->core->get_user_data(), |
| 214 | 'prefix' => MWAI_PREFIX, |
| 215 | 'domain' => MWAI_DOMAIN, |
| 216 | 'is_pro' => class_exists( 'MeowPro_MWAI_Core' ), |
| 217 | 'is_registered' => !!$this->is_registered(), |
| 218 | 'rest_nonce' => wp_create_nonce( 'wp_rest' ), |
| 219 | 'session' => $this->core->get_session_id(), |
| 220 | 'options' => $this->core->get_all_options(), |
| 221 | 'chatbots' => $this->core->get_chatbots(), |
| 222 | 'themes' => $this->core->get_themes(), |
| 223 | 'stream' => $this->core->get_option( 'ai_streaming' ), |
| 224 | ]; |
| 225 | |
| 226 | |
| 227 | wp_localize_script( 'mwai', 'mwai', $localize_data ); |
| 228 | } |
| 229 | |
| 230 | public function is_registered() { |
| 231 | return apply_filters( MWAI_PREFIX . '_meowapps_is_registered', false, MWAI_PREFIX ); |
| 232 | } |
| 233 | |
| 234 | public function app_menu() { |
| 235 | add_submenu_page( |
| 236 | 'meowapps-main-menu', |
| 237 | 'AI Engine', |
| 238 | 'AI Engine', |
| 239 | 'manage_options', |
| 240 | 'mwai_settings', |
| 241 | [ $this, 'admin_settings' ] |
| 242 | ); |
| 243 | } |
| 244 | |
| 245 | public function admin_settings() { |
| 246 | echo '<div id="mwai-admin-settings"></div>'; |
| 247 | } |
| 248 | } |
| 249 |