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