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