| @@ -1,10 +1,10 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | if (!defined('ABSPATH')) exit; |
| 4 | -if (!class_exists('BVInfoCallback')) : | |
| 4 | +if (!class_exists('WPRInfoCallback')) : | |
| 5 | 5 | |
| 6 | -class BVInfoCallback extends BVCallbackBase { | |
| 6 | +class WPRInfoCallback extends WPRCallbackBase { | |
| 7 | 7 | public $db; |
| 8 | 8 | public $settings; |
| 9 | 9 | public $siteinfo; |
| 10 | 10 | public $bvinfo; |
| @@ -9,9 +9,9 @@ | ||
| 9 | 9 | public $siteinfo; |
| 10 | 10 | public $bvinfo; |
| 11 | 11 | public $bvapi; |
| 12 | 12 | |
| 13 | - const INFO_WING_VERSION = 1.8; | |
| 13 | + const INFO_WING_VERSION = 2.7; | |
| 14 | 14 | |
| 15 | 15 | public function __construct($callback_handler) { |
| 16 | 16 | $this->db = $callback_handler->db; |
| 17 | 17 | $this->siteinfo = $callback_handler->siteinfo; |
| @@ -44,32 +44,22 @@ | ||
| 44 | 44 | "comments" => get_object_vars(wp_count_comments()) |
| 45 | 45 | ); |
| 46 | 46 | } |
| 47 | 47 | |
| 48 | - public function getLatestWooCommerceDB() { | |
| 49 | - $version = false; | |
| 50 | - | |
| 51 | - if (defined('WC_ABSPATH') && file_exists(WC_ABSPATH . 'includes/class-wc-install.php')) { | |
| 52 | - include_once WC_ABSPATH . 'includes/class-wc-install.php'; | |
| 53 | - } | |
| 54 | - | |
| 55 | - if (class_exists('WC_Install')) { | |
| 56 | - $update_versions = array_keys(WC_Install::get_db_update_callbacks()); | |
| 57 | - usort($update_versions, 'version_compare'); | |
| 58 | - if (!empty($update_versions)) { | |
| 59 | - $version = end($update_versions); | |
| 60 | - } | |
| 61 | - } | |
| 62 | - | |
| 63 | - return $version; | |
| 64 | - } | |
| 65 | - | |
| 66 | 48 | public function addDBInfoToPlugin($pdata, $plugin_file) { |
| 67 | 49 | switch ($plugin_file) { |
| 68 | 50 | case "woocommerce/woocommerce.php": |
| 69 | 51 | $pdata['current_db_version'] = $this->settings->getOption('woocommerce_db_version'); |
| 70 | - $pdata['latest_db_version'] = $this->getLatestWooCommerceDB(); | |
| 52 | + $pdata['latest_db_version'] = $this->bvinfo->getLatestWooCommerceDBVersion(); | |
| 71 | 53 | break; |
| 54 | + case "elementor/elementor.php": | |
| 55 | + $pdata['current_db_version'] = $this->settings->getOption('elementor_version'); | |
| 56 | + $pdata['latest_db_version'] = $this->bvinfo->getLatestElementorDBVersion($plugin_file); | |
| 57 | + break; | |
| 58 | + case "elementor-pro/elementor-pro.php": | |
| 59 | + $pdata['current_db_version'] = $this->settings->getOption('elementor_pro_version'); | |
| 60 | + $pdata['latest_db_version'] = $this->bvinfo->getLatestElementorDBVersion($plugin_file); | |
| 61 | + break; | |
| 72 | 62 | } |
| 73 | 63 | |
| 74 | 64 | return $pdata; |
| 75 | 65 | } |
| @@ -85,9 +75,13 @@ | ||
| 85 | 75 | 'file' => $plugin_file, |
| 86 | 76 | 'title' => $plugin_data['Title'], |
| 87 | 77 | 'version' => $plugin_data['Version'], |
| 88 | 78 | 'active' => is_plugin_active($plugin_file), |
| 89 | - 'network' => $plugin_data['Network'] | |
| 79 | + 'network' => $plugin_data['Network'], | |
| 80 | + "plugin_uri" => $plugin_data["PluginURI"], | |
| 81 | + "update_uri" => $plugin_data["UpdateURI"], | |
| 82 | + "author_uri" => $plugin_data["AuthorURI"], | |
| 83 | + "author" => $plugin_data["AuthorName"], | |
| 90 | 84 | ); |
| 91 | 85 | $pdata = $this->addDBInfoToPlugin($pdata, $plugin_file); |
| 92 | 86 | $result["plugins"][] = $pdata; |
| 93 | 87 | } |
| @@ -100,9 +94,13 @@ | ||
| 100 | 94 | 'name' => $theme->Name, |
| 101 | 95 | 'title' => $theme->Title, |
| 102 | 96 | 'stylesheet' => $theme->get_stylesheet(), |
| 103 | 97 | 'template' => $theme->Template, |
| 104 | - 'version' => $theme->Version | |
| 98 | + 'version' => $theme->Version, | |
| 99 | + 'theme_uri' => $theme->get('ThemeURI'), | |
| 100 | + 'author' => $theme->get('Author'), | |
| 101 | + 'author_uri' => $theme->get('AuthorURI'), | |
| 102 | + 'update_uri' => $theme->get('UpdateURI'), | |
| 105 | 103 | ); |
| 106 | 104 | } else { |
| 107 | 105 | $pdata = array( |
| 108 | 106 | 'name' => $theme["Name"], |
| @@ -108,9 +106,11 @@ | ||
| 108 | 106 | 'name' => $theme["Name"], |
| 109 | 107 | 'title' => $theme["Title"], |
| 110 | 108 | 'stylesheet' => $theme["Stylesheet"], |
| 111 | 109 | 'template' => $theme["Template"], |
| 112 | - 'version' => $theme["Version"] | |
| 110 | + 'version' => $theme["Version"], | |
| 111 | + 'author' => $theme['Author'], | |
| 112 | + 'author_uri' => $theme['Author URI'], | |
| 113 | 113 | ); |
| 114 | 114 | } |
| 115 | 115 | return $pdata; |
| 116 | 116 | } |
| @@ -116,15 +116,14 @@ | ||
| 116 | 116 | } |
| 117 | 117 | |
| 118 | 118 | public function getThemes() { |
| 119 | 119 | $result = array(); |
| 120 | - $themes = function_exists('wp_get_themes') ? wp_get_themes() : get_themes(); | |
| 120 | + $themes = wp_get_themes(); | |
| 121 | 121 | foreach($themes as $theme) { |
| 122 | 122 | $pdata = $this->themeToArray($theme); |
| 123 | 123 | $result["themes"][] = $pdata; |
| 124 | 124 | } |
| 125 | - $theme = function_exists('wp_get_theme') ? wp_get_theme() : get_current_theme(); | |
| 126 | - $pdata = $this->themeToArray($theme); | |
| 125 | + $pdata = $this->themeToArray(wp_get_theme()); | |
| 127 | 126 | $result["currenttheme"] = $pdata; |
| 128 | 127 | return $result; |
| 129 | 128 | } |
| 130 | 129 | |
| @@ -129,14 +128,14 @@ | ||
| 129 | 128 | } |
| 130 | 129 | |
| 131 | 130 | public function getSystemInfo() { |
| 132 | 131 | $sys_info = array( |
| 133 | - 'host' => $_SERVER['HTTP_HOST'], | |
| 132 | + 'host' => WPRHelper::getRawParam('SERVER', 'HTTP_HOST'), | |
| 134 | 133 | 'phpversion' => phpversion(), |
| 135 | 134 | 'AF_INET6' => defined('AF_INET6') |
| 136 | 135 | ); |
| 137 | 136 | if (array_key_exists('SERVER_ADDR', $_SERVER)) { |
| 138 | - $sys_info['serverip'] = $_SERVER['SERVER_ADDR']; | |
| 137 | + $sys_info['serverip'] = WPRHelper::getRawParam('SERVER', 'SERVER_ADDR'); | |
| 139 | 138 | } |
| 140 | 139 | if (function_exists('get_current_user')) { |
| 141 | 140 | $sys_info['user'] = get_current_user(); |
| 142 | 141 | } |
| @@ -177,8 +176,10 @@ | ||
| 177 | 176 | 'uploaddir' => wp_upload_dir(), |
| 178 | 177 | 'contentdir' => defined('WP_CONTENT_DIR') ? WP_CONTENT_DIR : null, |
| 179 | 178 | 'contenturl' => defined('WP_CONTENT_URL') ? WP_CONTENT_URL : null, |
| 180 | 179 | 'plugindir' => defined('WP_PLUGIN_DIR') ? WP_PLUGIN_DIR : null, |
| 180 | + 'themedir' => get_stylesheet_directory(), | |
| 181 | + 'templatedir' => get_template_directory(), | |
| 181 | 182 | 'dbcharset' => defined('DB_CHARSET') ? DB_CHARSET : null, |
| 182 | 183 | 'disallow_file_edit' => defined('DISALLOW_FILE_EDIT'), |
| 183 | 184 | 'disallow_file_mods' => defined('DISALLOW_FILE_MODS'), |
| 184 | 185 | 'custom_users' => defined('CUSTOM_USER_TABLE') ? CUSTOM_USER_TABLE : null, |
| @@ -184,9 +185,11 @@ | ||
| 184 | 185 | 'custom_users' => defined('CUSTOM_USER_TABLE') ? CUSTOM_USER_TABLE : null, |
| 185 | 186 | 'custom_usermeta' => defined('CUSTOM_USERMETA_TABLE') ? CUSTOM_USERMETA_TABLE : null, |
| 186 | 187 | 'locale' => get_locale(), |
| 187 | 188 | 'wp_local_string' => $wp_local_package, |
| 188 | - 'charset_collate' => $db->getCharsetCollate() | |
| 189 | + 'charset_collate' => $db->getCharsetCollate(), | |
| 190 | + 'allowed_paths' => ini_get('open_basedir'), | |
| 191 | + 'path_seprator' => PATH_SEPARATOR | |
| 189 | 192 | ); |
| 190 | 193 | return $wp_info; |
| 191 | 194 | } |
| 192 | 195 | |
| @@ -225,8 +228,14 @@ | ||
| 225 | 228 | } |
| 226 | 229 | if (function_exists('openssl_public_decrypt')) { |
| 227 | 230 | $info['openssl_public_decrypt'] = "1"; |
| 228 | 231 | } |
| 232 | + if (function_exists('openssl_encrypt')) { | |
| 233 | + $info['openssl_encrypt'] = "1"; | |
| 234 | + } | |
| 235 | + if (function_exists('openssl_decrypt')) { | |
| 236 | + $info['openssl_decrypt'] = "1"; | |
| 237 | + } | |
| 229 | 238 | $info['sha1'] = "1"; |
| 230 | 239 | $info['apissl'] = "1"; |
| 231 | 240 | if (function_exists('base64_encode')) { |
| 232 | 241 | $info['b64encode'] = true; |
| @@ -273,9 +282,16 @@ | ||
| 273 | 282 | } |
| 274 | 283 | |
| 275 | 284 | public function getHostInfo() { |
| 276 | 285 | $host_info = $_SERVER; |
| 277 | - $host_info['PHP_SERVER_NAME'] = php_uname('\n'); | |
| 286 | + if (function_exists('php_uname')) { | |
| 287 | + $host_info['PHP_SERVER_NAME'] = php_uname(); | |
| 288 | + } | |
| 289 | + | |
| 290 | + if (isset($_SERVER['SERVER_ADDR']) && function_exists('gethostbyaddr')) { | |
| 291 | + $host_info['HOST_FROM_IP'] = gethostbyaddr(WPRHelper::getRawParam('SERVER', 'SERVER_ADDR')); | |
| 292 | + } | |
| 293 | + | |
| 278 | 294 | if (array_key_exists('IS_PRESSABLE', get_defined_constants())) { |
| 279 | 295 | $host_info['IS_PRESSABLE'] = true; |
| 280 | 296 | } |
| 281 | 297 | |
| @@ -286,14 +302,18 @@ | ||
| 286 | 302 | if (defined('WPE_APIKEY')) { |
| 287 | 303 | $host_info['WPE_APIKEY'] = WPE_APIKEY; |
| 288 | 304 | } |
| 289 | 305 | |
| 306 | + if (defined('IS_ATOMIC')) { | |
| 307 | + $host_info['IS_ATOMIC'] = IS_ATOMIC; | |
| 308 | + } | |
| 309 | + | |
| 290 | 310 | return $host_info; |
| 291 | 311 | } |
| 292 | 312 | |
| 293 | 313 | public function serverConfig() { |
| 294 | 314 | return array( |
| 295 | - 'software' => $_SERVER['SERVER_SOFTWARE'], | |
| 315 | + 'software' => WPRHelper::getRawParam('SERVER', 'SERVER_SOFTWARE'), | |
| 296 | 316 | 'sapi' => (function_exists('php_sapi_name')) ? php_sapi_name() : false, |
| 297 | 317 | 'has_apache_get_modules' => function_exists('apache_get_modules'), |
| 298 | 318 | 'posix_getuid' => (function_exists('posix_getuid')) ? posix_getuid() : null, |
| 299 | 319 | 'uid' => (function_exists('getmyuid')) ? getmyuid() : null, |
| @@ -392,13 +412,14 @@ | ||
| 392 | 412 | return $result; |
| 393 | 413 | } |
| 394 | 414 | |
| 395 | 415 | function getCoreHandler() { |
| 396 | - global $wp_db_version; | |
| 416 | + global $wp_db_version, $wp_version; | |
| 397 | 417 | |
| 398 | 418 | $result = $this->getTransient('update_core'); |
| 399 | 419 | $result['current_db_version'] = $this->settings->getOption('db_version'); |
| 400 | 420 | $result['latest_db_version'] = $wp_db_version; |
| 421 | + $result['wp_version'] = $wp_version; | |
| 401 | 422 | |
| 402 | 423 | return $result; |
| 403 | 424 | } |
| 404 | 425 | |
| @@ -485,8 +506,31 @@ | ||
| 485 | 506 | |
| 486 | 507 | return $result; |
| 487 | 508 | } |
| 488 | 509 | |
| 510 | + function getPluginFileData($plugin_file) { | |
| 511 | + $result = array(); | |
| 512 | + | |
| 513 | + if (!function_exists('get_plugin_data')) { | |
| 514 | + require_once ABSPATH . 'wp-admin/includes/plugin.php'; | |
| 515 | + } | |
| 516 | + $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file); | |
| 517 | + if ($plugin_data && isset($plugin_data['Version'])) { | |
| 518 | + $result['version'] = $plugin_data['Version']; | |
| 519 | + } | |
| 520 | + | |
| 521 | + return $result; | |
| 522 | + } | |
| 523 | + | |
| 524 | + function fetchPluginApiData($slug, $action) { | |
| 525 | + $args = array('slug' => wp_unslash($slug)); | |
| 526 | + $args = (object) $args; | |
| 527 | + $args = apply_filters('plugins_api_args', $args, $action); | |
| 528 | + $data = apply_filters('plugins_api', false, $action, $args); | |
| 529 | + | |
| 530 | + return $data; | |
| 531 | + } | |
| 532 | + | |
| 489 | 533 | public function process($request) { |
| 490 | 534 | $db = $this->db; |
| 491 | 535 | $params = $request->params; |
| 492 | 536 | switch ($request->method) { |
| @@ -505,9 +549,9 @@ | ||
| 505 | 549 | case "gtsts": |
| 506 | 550 | $resp = $this->getStats(); |
| 507 | 551 | break; |
| 508 | 552 | case "gtdbvariables": |
| 509 | - $variable = (array_key_exists('variable', $params)) ? $variable : ""; | |
| 553 | + $variable = (array_key_exists('variable', $params)) ? $params['variable'] : ""; | |
| 510 | 554 | $resp = $this->db->showDbVariables($variable); |
| 511 | 555 | break; |
| 512 | 556 | case "gtplgs": |
| 513 | 557 | $resp = $this->getPlugins(); |
| @@ -542,16 +586,22 @@ | ||
| 542 | 586 | break; |
| 543 | 587 | case "gthost": |
| 544 | 588 | $resp = array('host_info' => $this->getHostInfo()); |
| 545 | 589 | break; |
| 590 | + case "gtplsinfo": | |
| 591 | + $resp = array("plugins_info" => array()); | |
| 592 | + $file_by_slug = $params["file_by_slug"]; | |
| 593 | + foreach ($params['slugs'] as $slug) { | |
| 594 | + $data = $this->fetchPluginApiData($slug, $params['action']); | |
| 595 | + if (is_object($data) && !property_exists($data, 'version') && isset($file_by_slug[$slug])) { | |
| 596 | + $plugin_data = $this->getPluginFileData($file_by_slug[$slug]); | |
| 597 | + $data->version = $plugin_data['version']; | |
| 598 | + } | |
| 599 | + $resp['plugins_info'][$slug] = $data; | |
| 600 | + } | |
| 601 | + break; | |
| 546 | 602 | case "gtplinfo": |
| 547 | - $args = array( | |
| 548 | - 'slug' => wp_unslash($params['slug']) | |
| 549 | - ); | |
| 550 | - $action = $params['action']; | |
| 551 | - $args = (object) $args; | |
| 552 | - $args = apply_filters('plugins_api_args', $args, $action); | |
| 553 | - $data = apply_filters('plugins_api', false, $action, $args); | |
| 603 | + $data = $this->fetchPluginApiData($params['slug'], $params['action']); | |
| 554 | 604 | $resp = array("plugins_info" => $data); |
| 555 | 605 | break; |
| 556 | 606 | case "gtpostactinfo": |
| 557 | 607 | $resp = $this->getPostActivateInfo($params); |