Нет описания

Installer.php 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace MailPoet\Config;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Services\Bridge;
  5. use MailPoet\Services\Release\API;
  6. use MailPoet\Settings\SettingsController;
  7. use MailPoet\Util\License\License;
  8. use MailPoet\WP\Functions as WPFunctions;
  9. class Installer {
  10. const PREMIUM_PLUGIN_SLUG = 'mailpoet-premium';
  11. private $slug;
  12. /** @var SettingsController */
  13. private $settings;
  14. public function __construct(
  15. $slug
  16. ) {
  17. $this->slug = $slug;
  18. $this->settings = SettingsController::getInstance();
  19. }
  20. public function init() {
  21. WPFunctions::get()->addFilter('plugins_api', [$this, 'getPluginInformation'], 10, 3);
  22. }
  23. public function getPluginInformation($data, $action = '', $args = null) {
  24. if ($action === 'plugin_information'
  25. && isset($args->slug)
  26. && $args->slug === $this->slug
  27. ) {
  28. $data = $this->retrievePluginInformation();
  29. }
  30. return $data;
  31. }
  32. public static function getPremiumStatus() {
  33. $slug = self::PREMIUM_PLUGIN_SLUG;
  34. $premiumPluginActive = License::getLicense();
  35. $premiumPluginInstalled = $premiumPluginActive || self::isPluginInstalled($slug);
  36. $premiumPluginInitialized = defined('MAILPOET_PREMIUM_INITIALIZED') && MAILPOET_PREMIUM_INITIALIZED;
  37. $installer = new Installer(self::PREMIUM_PLUGIN_SLUG);
  38. $pluginInformation = $installer->retrievePluginInformation();
  39. return [
  40. 'premium_plugin_active' => $premiumPluginActive,
  41. 'premium_plugin_installed' => $premiumPluginInstalled,
  42. 'premium_plugin_initialized' => $premiumPluginInitialized,
  43. 'premium_plugin_info' => $pluginInformation,
  44. ];
  45. }
  46. public static function isPluginInstalled($slug) {
  47. $installedPlugin = self::getInstalledPlugin($slug);
  48. return !empty($installedPlugin);
  49. }
  50. private static function getInstalledPlugin($slug) {
  51. $installedPlugin = [];
  52. if (is_dir(WP_PLUGIN_DIR . '/' . $slug)) {
  53. $installedPlugin = WPFunctions::get()->getPlugins('/' . $slug);
  54. }
  55. return $installedPlugin;
  56. }
  57. public static function getPluginFile($slug) {
  58. $pluginFile = false;
  59. $installedPlugin = self::getInstalledPlugin($slug);
  60. if (!empty($installedPlugin)) {
  61. $pluginFile = $slug . '/' . key($installedPlugin);
  62. }
  63. return $pluginFile;
  64. }
  65. public function retrievePluginInformation() {
  66. $key = $this->settings->get(Bridge::PREMIUM_KEY_SETTING_NAME);
  67. $api = new API($key);
  68. $info = $api->getPluginInformation($this->slug);
  69. $info = $this->formatInformation($info);
  70. return $info;
  71. }
  72. private function formatInformation($info) {
  73. // cast sections object to array for WP to understand
  74. if (isset($info->sections)) {
  75. $info->sections = (array)$info->sections;
  76. }
  77. return $info;
  78. }
  79. }