beta-testers.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace Elementor;
  3. if ( ! defined( 'ABSPATH' ) ) {
  4. exit; // Exit if accessed directly.
  5. }
  6. /**
  7. * Elementor beta testers.
  8. *
  9. * Elementor beta testers handler class is responsible for the Beta Testers
  10. * feature that allows developers to test Elementor beta versions.
  11. *
  12. * @since 1.5.0
  13. */
  14. class Beta_Testers {
  15. /**
  16. * Transient key.
  17. *
  18. * Holds the Elementor beta testers transient key.
  19. *
  20. * @since 1.5.0
  21. * @access private
  22. * @static
  23. *
  24. * @var string Transient key.
  25. */
  26. private $transient_key;
  27. /**
  28. * Get beta version.
  29. *
  30. * Retrieve Elementor beta version from wp.org plugin repository.
  31. *
  32. * @since 1.5.0
  33. * @access private
  34. *
  35. * @return string|false Beta version or false.
  36. */
  37. private function get_beta_version() {
  38. $beta_version = get_site_transient( $this->transient_key );
  39. if ( false === $beta_version ) {
  40. $beta_version = 'false';
  41. $response = wp_remote_get( 'https://plugins.svn.wordpress.org/elementor/trunk/readme.txt' );
  42. if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) ) {
  43. preg_match( '/Beta tag: (.*)/i', $response['body'], $matches );
  44. if ( isset( $matches[1] ) ) {
  45. $beta_version = $matches[1];
  46. }
  47. }
  48. set_site_transient( $this->transient_key, $beta_version, 6 * HOUR_IN_SECONDS );
  49. }
  50. return $beta_version;
  51. }
  52. /**
  53. * Check version.
  54. *
  55. * Checks whether a beta version exist, and retrieve the version data.
  56. *
  57. * Fired by `pre_set_site_transient_update_plugins` filter, before WordPress
  58. * runs the plugin update checker.
  59. *
  60. * @since 1.5.0
  61. * @access public
  62. *
  63. * @param array $transient Plugin version data.
  64. *
  65. * @return array Plugin version data.
  66. */
  67. public function check_version( $transient ) {
  68. if ( empty( $transient->checked ) ) {
  69. return $transient;
  70. }
  71. delete_site_transient( $this->transient_key );
  72. $plugin_slug = basename( ELEMENTOR__FILE__, '.php' );
  73. $beta_version = $this->get_beta_version();
  74. if ( 'false' !== $beta_version && version_compare( $beta_version, ELEMENTOR_VERSION, '>' ) ) {
  75. $response = new \stdClass();
  76. $response->plugin = $plugin_slug;
  77. $response->slug = $plugin_slug;
  78. $response->new_version = $beta_version;
  79. $response->url = 'https://elementor.com/';
  80. $response->package = sprintf( 'https://downloads.wordpress.org/plugin/elementor.%s.zip', $beta_version );
  81. $transient->response[ ELEMENTOR_PLUGIN_BASE ] = $response;
  82. }
  83. return $transient;
  84. }
  85. /**
  86. * Beta testers constructor.
  87. *
  88. * Initializing Elementor beta testers.
  89. *
  90. * @since 1.5.0
  91. * @access public
  92. */
  93. public function __construct() {
  94. if ( 'yes' !== get_option( 'elementor_beta', 'no' ) ) {
  95. return;
  96. }
  97. $this->transient_key = md5( 'elementor_beta_testers_response_key' );
  98. add_filter( 'pre_set_site_transient_update_plugins', [ $this, 'check_version' ] );
  99. }
  100. }