| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- <?php
- if ( ! defined( 'ABSPATH' ) ) {
- die( '-1' );
- }
- /**
- * WPBakery WPBakery Page Builder updater
- *
- * @package WPBakeryPageBuilder
- *
- */
- /**
- * Vc updating manager.
- */
- class Vc_Updater {
- /**
- * @var string
- */
- protected $version_url = 'http://updates.wpbakery.com/';
- /**
- * Proxy URL that returns real download link
- *
- * @var string
- */
- protected $download_link_url = 'http://support.wpbakery.com/updates/download-link';
- /**
- * @var string
- */
- public $title = 'WPBakery Page Builder';
- /**
- * @var bool
- */
- protected $auto_updater;
- public function init() {
- add_filter( 'upgrader_pre_download', array(
- $this,
- 'preUpgradeFilter',
- ), 10, 4 );
- }
- /**
- * Setter for manager updater.
- *
- * @param Vc_Updating_Manager $updater
- */
- public function setUpdateManager( Vc_Updating_Manager $updater ) {
- $this->auto_updater = $updater;
- }
- /**
- * Getter for manager updater.
- *
- * @return Vc_Updating_Manager|bool
- */
- public function updateManager() {
- return $this->auto_updater;
- }
- /**
- * Get url for version validation
- * @return string
- */
- public function versionUrl() {
- return $this->version_url;
- }
- /**
- * Get unique, short-lived download link
- *
- * @return array|boolean JSON response or false if request failed
- */
- public function getDownloadUrl() {
- $url = $this->getUrl();
- // FIX SSL SNI
- $filter_add = true;
- if ( function_exists( 'curl_version' ) ) {
- $version = curl_version();
- if ( version_compare( $version['version'], '7.18', '>=' ) ) {
- $filter_add = false;
- }
- }
- if ( $filter_add ) {
- add_filter( 'https_ssl_verify', '__return_false' );
- }
- $response = wp_remote_get( $url, array( 'timeout' => 30 ) );
- if ( $filter_add ) {
- remove_filter( 'https_ssl_verify', '__return_false' );
- }
- if ( is_wp_error( $response ) ) {
- return false;
- }
- return json_decode( $response['body'], true );
- }
- /**
- * @return string
- */
- protected function getUrl() {
- $host = esc_url( vc_license()->getSiteUrl() );
- $key = rawurlencode( vc_license()->getLicenseKey() );
- $url = $this->download_link_url . '?product=vc&url=' . $host . '&key=' . $key . '&version=' . WPB_VC_VERSION;
- return $url;
- }
- /**
- * @return string|void
- */
- public static function getUpdaterUrl() {
- return vc_is_network_plugin() ? network_admin_url( 'admin.php?page=vc-updater' ) : admin_url( 'admin.php?page=vc-updater' );
- }
- /**
- * Get link to newest VC
- *
- * @param $reply
- * @param $package
- * @param WP_Upgrader $updater
- *
- * @return mixed|string|WP_Error
- */
- public function preUpgradeFilter( $reply, $package, $updater ) {
- $condition1 = isset( $updater->skin->plugin ) && vc_plugin_name() === $updater->skin->plugin;
- $condition2 = isset( $updater->skin->plugin_info ) && $updater->skin->plugin_info['Name'] === $this->title;
- if ( ! $condition1 && ! $condition2 ) {
- return $reply;
- }
- $res = $updater->fs_connect( array( WP_CONTENT_DIR ) );
- if ( ! $res ) {
- return new WP_Error( 'no_credentials', esc_html__( "Error! Can't connect to filesystem", 'js_composer' ) );
- }
- if ( ! vc_license()->isActivated() ) {
- if ( vc_is_as_theme() && vc_get_param( 'action' ) !== 'update-selected' ) {
- return false;
- }
- $url = self::getUpdaterUrl();
- return new WP_Error( 'no_credentials', sprintf( esc_html__( 'To receive automatic updates license activation is required. Please visit %sSettings%s to activate your WPBakery Page Builder.', 'js_composer' ), '<a href="' . esc_url( $url ) . '" target="_blank">', '</a>' ) . ' ' . sprintf( ' <a href="https://go.wpbakery.com/faq-update-in-theme" target="_blank">%s</a>', esc_html__( 'Got WPBakery Page Builder in theme?', 'js_composer' ) ) );
- }
- $updater->strings['downloading_package_url'] = esc_html__( 'Getting download link...', 'js_composer' );
- $updater->skin->feedback( 'downloading_package_url' );
- $response = $this->getDownloadUrl();
- if ( ! $response ) {
- return new WP_Error( 'no_credentials', esc_html__( 'Download link could not be retrieved', 'js_composer' ) );
- }
- if ( ! $response['status'] ) {
- return new WP_Error( 'no_credentials', $response['error'] );
- }
- $updater->strings['downloading_package'] = esc_html__( 'Downloading package...', 'js_composer' );
- $updater->skin->feedback( 'downloading_package' );
- $downloaded_archive = download_url( $response['url'] );
- if ( is_wp_error( $downloaded_archive ) ) {
- return $downloaded_archive;
- }
- $plugin_directory_name = dirname( vc_plugin_name() );
- // WP will use same name for plugin directory as archive name, so we have to rename it
- if ( basename( $downloaded_archive, '.zip' ) !== $plugin_directory_name ) {
- $new_archive_name = dirname( $downloaded_archive ) . '/' . $plugin_directory_name . time() . '.zip';
- if ( rename( $downloaded_archive, $new_archive_name ) ) {
- $downloaded_archive = $new_archive_name;
- }
- }
- return $downloaded_archive;
- }
- }
|