Нема описа

sdk_resolver.php 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. if (!function_exists('analyst_resolve_sdk')) {
  3. /**
  4. * Resolve supported sdk versions and load latest supported one
  5. * also bootstrap sdk with autoloader
  6. *
  7. * @since 1.1.3
  8. *
  9. * @param null $thisPluginPath
  10. * @return void
  11. * @throws Exception
  12. */
  13. function analyst_resolve_sdk($thisPluginPath = null) {
  14. static $loaded = false;
  15. // Exit if we already resolved SDK
  16. if ($loaded) return;
  17. $plugins = get_option('active_plugins');
  18. if ($thisPluginPath) {
  19. array_push($plugins, plugin_basename($thisPluginPath));
  20. }
  21. $pluginsFolder = WP_PLUGIN_DIR;
  22. $possibleSDKs = array_map(function ($path) use ($pluginsFolder) {
  23. $sdkFolder = sprintf('%s/%s/analyst/', $pluginsFolder, dirname($path));
  24. $sdkFolder = str_replace('\\', '/', $sdkFolder);
  25. $versionPath = $sdkFolder . 'version.php';
  26. if (file_exists($versionPath)) {
  27. return require $versionPath;
  28. }
  29. return false;
  30. }, $plugins);
  31. global $wp_version;
  32. // Filter out plugins which has no SDK
  33. $SDKs = array_filter($possibleSDKs, function ($s) {return is_array($s);});
  34. // Filter SDKs which is supported by PHP and WP
  35. $supported = array_values(array_filter($SDKs, function ($sdk) use($wp_version) {
  36. $phpSupported = version_compare(PHP_VERSION, $sdk['php']) >= 0;
  37. $wpSupported = version_compare($wp_version, $sdk['wp']) >= 0;
  38. return $phpSupported && $wpSupported;
  39. }));
  40. // Sort SDK by version in descending order
  41. uasort($supported, function ($x, $y) {
  42. return version_compare($y['sdk'], $x['sdk']);
  43. });
  44. // Reset sorted values keys
  45. $supported = array_values($supported);
  46. if (!isset($supported[0])) {
  47. throw new Exception('There is no SDK which is support current PHP version and WP version');
  48. }
  49. // Autoload files for supported SDK
  50. $autoloaderPath = str_replace(
  51. '\\',
  52. '/',
  53. sprintf('%s/autoload.php', $supported[0]['path'])
  54. );
  55. require_once $autoloaderPath;
  56. $loaded = true;
  57. }
  58. }