PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 3.0.2
AI Engine – The Chatbot, AI Framework & MCP for WordPress v3.0.2
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 / common / admin.php
ai-engine / common Last commit date
admin.php 11 months ago helpers.php 11 months ago issues.php 11 months ago news.php 11 months ago ratings.php 11 months ago releases.txt 2 years ago rest.php 11 months ago
admin.php
218 lines
1 <?php
2
3 if ( !class_exists( 'MeowCommon_Admin' ) ) {
4
5 class MeowCommon_Admin {
6 public static $loaded = false;
7 public static $version = '4.0';
8 public static $admin_version = '4.0';
9
10 public $prefix; // prefix used for actions, filters (mfrh)
11 public $mainfile; // plugin main file (media-file-renamer.php)
12 public $domain; // domain used for translation (media-file-renamer)
13 public $isPro = false;
14
15 public static $logo = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAxNDM0IDk0NyI+CiAgPHBhdGggZmlsbD0iIzAwMCIgZD0iTTgwNSA3NzdhNzkyIDc5MiAwIDAgMS0yNjItNDMgODExIDgxMSAwIDAgMS0yODYtMTY0QTk1OSA5NTkgMCAwIDEgNiAyMDAgMTU4IDE1OCAwIDAgMSAzMDQgOTdjNDEgOTYgOTQgMTc1IDE1OSAyMzNhNDk3IDQ5NyAwIDAgMCAzNzYgMTI5IDYwIDYwIDAgMCAxIDY3IDYwbDI3IDE4NmM0IDMzLTE4IDYzLTUxIDY4LTYgMC0zNCA0LTc3IDRaTTEyMiAxNjhsMiA1YTg0MSA4NDEgMCAwIDAgMjEyIDMwNyA2OTIgNjkyIDAgMCAwIDQ2OSAxNzdsLTExLTc2YTYxNiA2MTYgMCAwIDEtNDEyLTE2MiA3NjkgNzY5IDAgMCAxLTE4OC0yNzYgMzggMzggMCAwIDAtNTAtMjBjLTE4IDctMjcgMjctMjIgNDVaIi8+CiAgPHBhdGggZmlsbD0iI0ZEQTk2MCIgZD0ibTY0IDE4NCA0IDEyYTkwMCA5MDAgMCAwIDAgMjI4IDMyOSA3NTIgNzUyIDAgMCAwIDU3NyAxODhsLTI3LTE5NGE1NjMgNTYzIDAgMCAxLTQyMy0xNDQgNzA5IDcwOSAwIDAgMS0xNzQtMjU1IDk4IDk4IDAgMCAwLTE4NSA2NFoiLz4KICA8bWFzayBpZD0iYSIgd2lkdGg9IjgxNCIgaGVpZ2h0PSI2NTciIHg9IjYwIiB5PSI2MCIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgc3R5bGU9Im1hc2stdHlwZTpsdW1pbmFuY2UiPgogICAgPHBhdGggZmlsbD0iI2ZmZiIgZD0ibTY0IDE4NCA0IDEyYTkwMCA5MDAgMCAwIDAgMjI4IDMyOSA3NTIgNzUyIDAgMCAwIDU3NyAxODhsLTI3LTE5NGE1NjMgNTYzIDAgMCAxLTQyMy0xNDQgNzA5IDcwOSAwIDAgMS0xNzQtMjU1IDk4IDk4IDAgMCAwLTE4NSA2NFoiLz4KICA8L21hc2s+CiAgPGcgbWFzaz0idXJsKCNhKSI+CiAgICA8cGF0aCBmaWxsPSIjODA0NjI1IiBkPSJNMTIwIDUzMmMtNDEgMC04NC01LTEzMC0xNWwzMS0xNDVjMTAxIDIxIDE4MCAxMiAyMzMtMjcgNzAtNTEgODAtMTQxIDgwLTE0MmwxNDkgMTNhMzYzIDM2MyAwIDAgMS0xMzkgMjQ4IDM1MSAzNTEgMCAwIDEtMjI0IDY4Wm0zNjkgMTc1YzQ3LTMxIDg0LTcxIDExMC0xMTYgMzItNTYgNDYtMTIzIDQyLTE5Mi0zLTUxLTE1LTg3LTE2LTkxbC0xNDEgNDhhMjI1IDIyNSAwIDAgMS0xNSAxNjFjLTMzIDU4LTEwMSA5OS0yMDMgMTIwbDMwIDE0NmM3Ni0xNiAxNDEtNDEgMTkzLTc2Wk02MiAyNjljNjQtNCAxMjItMjIgMTc0LTUzQTQxMyA0MTMgMCAwIDAgNDIxLTQ3TDE4NC05MnYtMXMtMTYgNzEtNzMgMTAzQzkyIDIxIDcwIDI3IDQ0IDI5IDcgMzEtMzcgMjQtODYgOGwtNzQgMjI5YTYyMyA2MjMgMCAwIDAgMjIyIDMyWiIvPgogIDwvZz4KICA8cGF0aCBmaWxsPSIjMDAwIiBkPSJNMTM3MyA5NDdoLTExMGMtMzMgMC02MC0yNy02MC02MHYtOTdsLTM2IDg3YTYyIDYyIDAgMCAxLTU2IDM3aC03OWMtMjUgMC00Ni0xNC01Ni0zN2wtMzYtODd2OTdjMCAzMy0yNyA2MC02MCA2MEg3NjljLTMzIDAtNjAtMjctNjAtNjBWMzE2YzAtMzMgMjctNjAgNjAtNjBoMTQxYzI0IDAgNDYgMTUgNTUgMzdsMTA2IDI1OCAxMDctMjU4YzktMjIgMzEtMzcgNTUtMzdoMTQwYzM0IDAgNjAgMjcgNjAgNjB2NTcxYzAgMzMtMjYgNjAtNjAgNjBabS0zMTYtMTg4IDE0IDM0IDE1LTM0LTExIDFoLTdsLTExLTFabTE5OS0zMTRoN2MyMSAwIDQwIDExIDUwIDI4di05N2gtNDBsLTI5IDcwIDEyLTFabS00MjctNjl2OTdjMTEtMTcgMjktMjggNTEtMjhoNmwxMyAxLTI5LTcwaC00MVoiLz4KICA8cGF0aCBmaWxsPSIjZmZmIiBkPSJNNzY5IDg4N1YzMTZoMTQxbDE1OCAzODRoN2wxNTgtMzg0aDE0MHY1NzFoLTExMFY1MDVoLTdsLTE0NSAzNDloLTc5TDg4NiA1MDVoLTZ2MzgySDc2OVoiLz4KPC9zdmc+Cg==';
16
17 public function __construct( $prefix, $mainfile, $domain, $isPro = false, $disableReview = false, $freeOnly = false ) {
18
19 if ( !MeowCommon_Admin::$loaded ) {
20 if ( is_admin() ) {
21
22 if ( MeowCommon_Helpers::is_asynchronous_request() ) {
23 return;
24 }
25
26 // Check potential issues with this WordPress install, other plugins, etc.
27 new MeowCommon_Issues( $prefix, $mainfile, $domain );
28
29 // Create the Meow Apps Menu (priority 5 to ensure it's created early)
30 add_action( 'admin_menu', [ $this, 'admin_menu_start' ], 5 );
31 $page = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : null;
32 if ( $page === 'meowapps-main-menu' ) {
33 add_filter( 'admin_footer_text', [ $this, 'admin_footer_text' ], 100000, 1 );
34 }
35 }
36 MeowCommon_Admin::$loaded = true;
37 }
38
39 // Variables for this plugin
40 $this->prefix = $prefix;
41 $this->mainfile = $mainfile;
42 $this->domain = $domain;
43 $this->isPro = $isPro;
44
45 // If there is no mainfile, it's either a Pro only Plugin (with no Free version available) or a Theme.
46
47 if ( is_admin() ) {
48 $license = get_option( $this->prefix . '_license', '' );
49 if ( !empty( $license ) && !$this->isPro ) {
50 add_action( 'admin_notices', [ $this, 'admin_notices_licensed_free' ] );
51 }
52 if ( $this->is_user_admin() ) {
53 if ( !$disableReview ) {
54 new MeowCommon_Ratings( $prefix, $mainfile, $domain );
55 }
56 new MeowCommon_News( $domain );
57 }
58 }
59 add_filter( 'plugin_row_meta', [ $this, 'custom_plugin_row_meta' ], 10, 2 );
60 add_filter( 'edd_sl_api_request_verify_ssl', [ $this, 'request_verify_ssl' ], 10, 0 );
61 }
62
63 public function is_user_admin() {
64 if ( !function_exists( 'current_user_can' ) || !function_exists( 'wp_get_current_user' ) ) {
65 error_log( 'MeowCommon_Admin is called too early. Please make sure it is called after the plugins_loaded filter.' );
66 return false;
67 }
68 return current_user_can( 'manage_options' );
69 }
70
71 public function custom_plugin_row_meta( $links, $file ) {
72 $path = pathinfo( $file );
73 $pathName = basename( $path['dirname'] );
74 $thisPath = pathinfo( $this->mainfile );
75 $thisPathName = basename( $thisPath['dirname'] );
76 $isActive = is_plugin_active( $file );
77 if ( !$isActive ) {
78 return $links;
79 }
80 $isIssue = $this->isPro && !$this->is_registered();
81 if ( strpos( $pathName, $thisPathName ) !== false ) {
82 $new_links = [
83 'settings' =>
84 sprintf( __( '<a href="admin.php?page=%s_settings">Settings</a>', $this->domain ), $this->prefix ),
85 'license' =>
86 $this->is_registered() ?
87 ( '<span style="color: #a75bd6;">' . __( 'Pro Version', $this->domain ) . '</span>' ) :
88 ( $isIssue ? ( sprintf( '<span style="color: #ff3434;">' . __( 'License Issue', $this->domain ), $this->prefix ) . '</span>' ) : ( sprintf( '<span>' . __( '<a target="_blank" href="https://meowapps.com">Get the <u>Pro Version</u></a>', $this->domain ), $this->prefix ) . '</span>' ) ),
89 ];
90 $links = array_merge( $new_links, $links );
91 }
92 return $links;
93 }
94
95 public function request_verify_ssl() {
96 return get_option( 'force_sslverify', false );
97 }
98
99 public function nice_name_from_file( $file ) {
100 $info = pathinfo( $file );
101 if ( !empty( $info ) ) {
102 if ( $info['filename'] == 'wplr-sync' ) {
103 return 'WP/LR Sync';
104 }
105 $info['filename'] = str_replace( '-', ' ', $info['filename'] );
106 $file = ucwords( $info['filename'] );
107 }
108 return $file;
109 }
110
111 public function admin_notices_licensed_free() {
112 if ( isset( $_POST[$this->prefix . '_reset_sub'] ) ) {
113 delete_option( $this->prefix . '_pro_serial' );
114 delete_option( $this->prefix . '_license' );
115 return;
116 }
117 $html = '<div class="notice notice-error">';
118 $html .= sprintf(
119 __( '<p>It looks like you are using the free version of the plugin (<b>%s</b>) but a license for the Pro version was also found. The Pro version might have been replaced by the Free version during an update (might be caused by a temporarily issue). If it is the case, <b>please download it again</b> from the <a target="_blank" href="https://meowapps.com">Meow Store</a>. If you wish to continue using the free version and clear this message, click on this button.', $this->domain ),
120 $this->nice_name_from_file( $this->mainfile )
121 );
122 $html .= '<p>
123 <form method="post" action="">
124 <input type="hidden" name="' . $this->prefix . '_reset_sub" value="true">
125 <input type="submit" name="submit" id="submit" class="button" value="'
126 . __( 'Remove the license', $this->domain ) . '">
127 </form>
128 </p>';
129 $html .= '</div>';
130 wp_kses_post( $html );
131 }
132
133 public function admin_menu_start() {
134 // Hide the admin if user doesn't like Meow much
135 if ( get_option( 'meowapps_hide_meowapps', false ) ) {
136 register_setting( 'general', 'meowapps_hide_meowapps' );
137 add_settings_field( 'meowapps_hide_ads', 'Meow Apps Menu', [ $this, 'meowapps_hide_dashboard_callback' ], 'general' );
138 return;
139 }
140
141 // Create standard menu if it does not already exist
142 global $submenu;
143 if ( !isset( $submenu[ 'meowapps-main-menu' ] ) ) {
144 add_menu_page(
145 'Meow Apps',
146 '<img alt="Meow Apps" style="width: 22px; margin-left: -30px; position: absolute; margin-top: -0px;" src="' . MeowCommon_Admin::$logo . '" />Meow Apps',
147 'manage_options',
148 'meowapps-main-menu',
149 [ $this, 'admin_meow_apps' ],
150 '',
151 82
152 );
153 add_submenu_page(
154 'meowapps-main-menu',
155 __( 'Dashboard', $this->domain ),
156 __( 'Dashboard', $this->domain ),
157 'manage_options',
158 'meowapps-main-menu',
159 [ $this, 'admin_meow_apps' ]
160 );
161 }
162
163 // Add CSS to hide the default icon
164 add_action( 'admin_head', function () {
165 echo '<style>
166 #toplevel_page_meowapps-main-menu .wp-menu-image {
167 display: none;
168 }
169 </style>';
170 } );
171 }
172
173 public function meowapps_hide_dashboard_callback() {
174 $html = '<input type="checkbox" id="meowapps_hide_meowapps" name="meowapps_hide_meowapps" value="1" ' .
175 checked( 1, get_option( 'meowapps_hide_meowapps' ), false ) . '/>';
176 $html .= __( '<label>Hide <b>Meow Apps</b> Menu</label><br /><small>Hide Meow Apps menu and all its components, for a cleaner admin. This option will be reset if a new Meow Apps plugin is installed.<br /><b>Once activated, an option will be added in your General settings to display it again.</b></small>', $this->domain );
177 echo MeowCommon_Helpers::wp_kses( $html );
178 }
179
180 public function is_registered() {
181 $is_registered = apply_filters( $this->prefix . '_meowapps_is_registered', false, $this->prefix );
182 return $is_registered;
183 }
184
185 public function get_phpinfo() {
186 if ( !$this->is_user_admin() || !function_exists( 'phpinfo' ) ) {
187 return;
188 }
189 ob_start();
190 // phpcs:disable WordPress.PHP.DevelopmentFunctions
191 phpinfo( INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES );
192 // phpcs:enable
193 $html = ob_get_contents();
194 ob_end_clean();
195 $html = preg_replace( '%^.*<body>(.*)</body>.*$%ms', '$1', $html );
196 return $html;
197 }
198
199 public function admin_meow_apps() {
200 $html = "<div id='meow-common-dashboard'></div>";
201 $html .= "<div style='height: 0; width: 0; overflow: hidden;' id='meow-common-phpinfo'>";
202 $html .= $this->get_phpinfo();
203 $html .= '</div>';
204 $html = preg_replace( "/<img[^>]+\>/i", '', $html );
205 echo wp_kses_post( $html );
206 }
207
208 public function admin_footer_text( $current ) {
209 return sprintf(
210 // translators: %1$s is the version of the interface; %2$s is a file path.
211 __( 'Thanks for using <a href="https://meowapps.com">Meow Apps</a>! This is the Meow Admin %1$s <br /><i>Loaded from %2$s </i>', $this->domain ),
212 MeowCommon_Admin::$version,
213 __FILE__
214 );
215 }
216 }
217 }
218