HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.2.34
System: Linux atalantini.com 3.10.0-1127.13.1.el7.x86_64 #1 SMP Tue Jun 23 15:46:38 UTC 2020 x86_64
User: root (0)
PHP: 7.2.34
Disabled: NONE
Upload Files
File: //opt/sg-cachepress/core/Install_Service/Install_Service.php
<?php

namespace SiteGround_Optimizer\Install_Service;

use SiteGround_Optimizer\Install_Service\Install_5_0_0;
use SiteGround_Optimizer\Install_Service\Install_5_0_5;
use SiteGround_Optimizer\Install_Service\Install_5_0_6;
use SiteGround_Optimizer\Install_Service\Install_5_0_8;
use SiteGround_Optimizer\Install_Service\Install_5_0_9;
use SiteGround_Optimizer\Install_Service\Install_5_0_10;
use SiteGround_Optimizer\Install_Service\Install_5_0_12;
use SiteGround_Optimizer\Install_Service\Install_5_0_13;
use SiteGround_Optimizer\Install_Service\Install_5_2_0;
use SiteGround_Optimizer\Install_Service\Install_5_2_5;
use SiteGround_Optimizer\Install_Service\Install_5_3_0;
use SiteGround_Optimizer\Install_Service\Install_5_3_1;
use SiteGround_Optimizer\Install_Service\Install_5_3_2;
use SiteGround_Optimizer\Install_Service\Install_5_3_4;
use SiteGround_Optimizer\Install_Service\Install_5_3_6;
use SiteGround_Optimizer\Install_Service\Install_5_3_10;
use SiteGround_Optimizer\Install_Service\Install_5_4_0;
use SiteGround_Optimizer\Install_Service\Install_5_4_3;
use SiteGround_Optimizer\Install_Service\Install_5_5_0;
use SiteGround_Optimizer\Install_Service\Install_5_5_2;
use SiteGround_Optimizer\Install_Service\Install_5_5_4;
use SiteGround_Optimizer\Install_Service\Install_5_6_3;
use SiteGround_Optimizer\Install_Service\Install_5_6_7;
use SiteGround_Optimizer\Install_Service\Install_5_7_0;
use SiteGround_Optimizer\Install_Service\Install_5_7_4;
use SiteGround_Optimizer\Install_Service\Install_Cleanup;
use SiteGround_Optimizer\Supercacher\Supercacher;

/**
 * Define the Install interface.
 *
 * @since  5.0.0
 */
class Install_Service {

	public function __construct() {
		// Get the install services.
		$this->installs = array(
			new Install_5_0_0(),
			new Install_5_0_5(),
			new Install_5_0_6(),
			new Install_5_0_8(),
			new Install_5_0_9(),
			new Install_5_0_10(),
			new Install_5_0_12(),
			new Install_5_0_13(),
			new Install_5_2_0(),
			new Install_5_2_5(),
			new Install_5_3_0(),
			new Install_5_3_1(),
			new Install_5_3_2(),
			new Install_5_3_4(),
			new Install_5_3_6(),
			new Install_5_3_10(),
			new Install_5_4_0(),
			new Install_5_4_3(),
			new Install_5_5_0(),
			new Install_5_5_2(),
			new Install_5_5_4(),
			new Install_5_6_3(),
			new Install_5_6_7(),
			new Install_5_7_0(),
			new Install_5_7_4(),
		);

		add_action( 'upgrader_process_complete', array( $this, 'install' ) );
	}

	/**
	 * Loop through all versions and install the updates.
	 *
	 * @since 5.0.0
	 *
	 * @return void
	 */
	public function install() {
		// Use a transient to avoid concurrent installation calls.
		if ( $this->install_required() && false === get_transient( '_siteground_optimizer_installing' ) ) {
			set_transient( '_siteground_optimizer_installing', true, 5 * MINUTE_IN_SECONDS );

			// Do the install.
			$this->do_install();

			// Delete the transient after the install.
			delete_transient( '_siteground_optimizer_installing' );
		}

		Install_Cleanup::cleanup();
	}

	/**
	 * Perform the actual installation.
	 *
	 * @since 5.0.0
	 */
	private function do_install() {

		$version = null;

		foreach ( $this->installs as $install ) {
			// Get the install version.
			$version = $install->get_version();

			if ( version_compare( $version, $this->get_current_version(), '>' ) ) {
				// Install version.
				$install->install();

				// Bump the version.
				update_option( 'siteground_optimizer_version', $version );

				update_option( 'siteground_optimizer_update_timestamp', time() );

				// Flush dynamic and memcache.
				Supercacher::purge_cache();
				Supercacher::flush_memcache();
			}
		}
	}

	/**
	 * Retrieve the current version.
	 *
	 * @return type
	 */
	private function get_current_version() {
		return get_option( 'siteground_optimizer_version', '0.0.0' );
	}

	/**
	 * Checks whether update is required.
	 *
	 * @since  5.4.7
	 *
	 * @return bool True/false/
	 */
	private function install_required() {
		foreach ( $this->installs as $install ) {
			// Get the install version.
			$version = $install->get_version();

			if ( version_compare( $version, $this->get_current_version(), '>' ) ) {
				return true;
			}
		}

		return false;
	}
}