HEX
Server: LiteSpeed
System: Linux dune179.sitesanctuary.org 5.14.0-427.40.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Oct 16 07:08:17 EDT 2024 x86_64
User: h278792 (1197)
PHP: 8.1.29
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/h278792/www/wp-content/plugins/learnpress/inc/admin/class-lp-updater.php
<?php

/**
 * Class LP_Updater
 *
 * Update helper class providing update functions
 *
 * @author  ThimPress
 * @package LearnPress/Classes
 * @version 3.0.0
 */
class LP_Updater {
	/**
	 * Map version upgrade.
	 *
	 * @var array|mixed|void .
	 */
	public $db_map_version = array();
	/**
	 * Array of update patches.
	 *
	 * @var array
	 */
	protected $_update_files = array();

	/**
	 * LP_Updater constructor.
	 */
	protected function __construct() {
		/**
		 * When modify or create new Tables, need change version.
		 * Ex: 5.x.x => 6.0.0
		 */
		//      $this->db_map_version = apply_filters(
		//          'lp/upgrade/db/map_version',
		//          array(
		//              '4' => '3', // 4.0.0 <=> 3.x.x
		//              '5' => '4', // 5.0.0 <=> 4.x.x
		//          )
		//      );

		$this->db_map_version = apply_filters(
			'lp/upgrade/db/map_version',
			array(
				'3' => 4, // DB v3 need up DB v4
				'4' => 5, // DB v4 need up DB v5
			)
		);
		//      add_action( 'admin_init', array( $this, 'do_update' ) );
		add_action( 'admin_notices', array( $this, 'check_update_database_message' ), 0 );

		//      if ( 'yes' === get_option( 'do-update-learnpress' ) ) {
		//          add_action( 'admin_notices', array( $this, 'update_message' ) );
		//      }

		//LP_Request::register_ajax( 'check-updated', array( $this, 'check_updated' ) );

		//add_action( 'wp_ajax_lp_update_database', array( $this, 'update_database_ajax' ) );
	}

	/*public function update_database_ajax() {
		$this->_do_update();

		$db_version     = get_option( 'learnpress_db_version' );
		$latest_version = $this->get_latest_version();
		$response       = array();

		if ( version_compare( $db_version, $latest_version, '>=' ) ) {
			$response['status']  = 'success';
			$response['message'] = esc_html__( 'LearnPress has just updated to latest version.', 'learnpress' );
		} else {
			$response['status'] = 'error';
		}

		wp_send_json( $response );
		die();
	}*/

	//  public function check_updated() {
	//      $this->do_update();
	//
	//      $db_version     = get_option( 'learnpress_db_version' );
	//      $latest_version = $this->get_latest_version();
	//      $response       = array();
	//      $next_step      = get_option( 'learnpress_updater_step' );
	//
	//      if ( version_compare( $db_version, $latest_version, '>=' ) ) {
	//          $response['result']  = 'success';
	//          $response['message'] = learn_press_admin_view_content( 'updates/html-updated-latest-message' );
	//      } else {
	//          $response['step'] = $next_step;
	//      }
	//
	//      learn_press_send_json( $response );
	//
	//      die();
	//  }

	//  public function update_message() {
	//      learn_press_admin_view( 'updates/html-updating-message' );
	//  }

	/*public function do_update() {
		if ( 'yes' === get_option( 'do-update-learnpress' ) ) {
			return $this->_do_update();
		}

		if ( 'yes' !== LP_Request::get_string( 'do-update-learnpress' ) ) {
			return false;
		}

		update_option( 'do-update-learnpress', 'yes', 'yes' );

		if ( ! learn_press_message_count() ) {
			$this->update_message();
		} else {
			learn_press_print_messages();
		}

		wp_die();
	}*/

	/*protected function _do_update() {
		try {
			$db_version     = get_option( 'learnpress_db_version' );
			$latest_version = true;

			foreach ( $this->get_update_files() as $version => $file ) {

				if ( $db_version && version_compare( $db_version, $version, '>=' ) ) {
					continue;
				}

				include_once LP_PLUGIN_PATH . '/inc/updates/' . $file;

				update_option( 'learnpress_updater', $version, 'yes' );

				$latest_version = false;

				break;
			}

			if ( $latest_version ) {
				delete_option( 'do-update-learnpress' );
				delete_option( 'learnpress_updater' );
				LP_Install::update_version();
				remove_action( 'admin_notices', array( $this, 'update_message' ), 10 );
				LP()->session->set( 'do-update-learnpress', 'yes' );
			}
		} catch ( Exception $ex ) {
			learn_press_add_message( $ex->getMessage(), 'error' );
		}

		return true;
	}*/

	/**
	 * Includes all update patches by version priority.
	 */
	//  public function include_update() {
	//      if ( ! $this->get_update_files() ) {
	//          return;
	//      }
	//
	//      $versions       = array_keys( $this->_update_files );
	//      $latest_version = end( $versions );
	//
	//      if ( version_compare( learn_press_get_current_version(), $latest_version, '=' ) ) {
	//          learn_press_include( 'updates/' . $this->_update_files[ $latest_version ] );
	//      }
	//  }

	/**
	 * Get latest version from updates
	 *
	 * @return bool|mixed
	 */
	/*public function get_latest_version() {
		if ( ! $this->get_update_files() ) {
			return false;
		}

		$versions       = array_keys( $this->_update_files );
		$latest_version = end( $versions );

		return $latest_version;
	}*/

	/**
	 * Scan folder updates to get update patches.
	 */
	//  public function get_update_files() {
	//      if ( ! $this->_update_files ) {
	//          require_once ABSPATH . 'wp-admin/includes/file.php';
	//
	//          if ( WP_Filesystem() ) {
	//              global $wp_filesystem;
	//
	//              $files = $wp_filesystem->dirlist( LP_PLUGIN_PATH . 'inc/updates' );
	//              if ( $files ) {
	//                  foreach ( $files as $file ) {
	//                      if ( preg_match( '!learnpress-update-([0-9.]+).php!', $file['name'], $matches ) ) {
	//                          $this->_update_files [ $matches[1] ] = $file['name'];
	//                      }
	//                  }
	//              }
	//          }
	//
	//          /**
	//           * Sort files by version
	//           */
	//          if ( $this->_update_files ) {
	//              ksort( $this->_update_files );
	//          }
	//      }
	//
	//      return $this->_update_files;
	//  }

	/**
	 * Check LP Database need upgrade.
	 *
	 * @return bool|int
	 * @author tungnx
	 * @version 1.0.1
	 * @since 4.0.0
	 */
	public function check_lp_db_need_upgrade() {
		if ( ! current_user_can( 'administrator' ) ) {
			return false;
		}

		$db_current_version = (int) get_option( 'learnpress_db_version' );
		$lp_version         = (int) LP()->version;

		if ( array_key_exists( $db_current_version, $this->db_map_version )
			 && $this->db_map_version[ $db_current_version ] === $lp_version ) {
			return $this->db_map_version[ $db_current_version ];
		}

		/**
		 * For case not have key "learnpress_db_version" on DB, still have columns of learnpress.
		 * After along time, need remove fix fast
		 */
		$lp_db                                = LP_Database::getInstance();
		$check_tb_lp_order_items_exists       = $lp_db->check_table_exists( $lp_db->tb_lp_order_items );
		$check_tb_lp_user_item_results_exists = $lp_db->check_table_exists( $lp_db->tb_lp_user_item_results );
		$check_col_item_id_on_lp_order_items  = $lp_db->check_col_table( $lp_db->tb_lp_order_items, 'item_id' );

		if ( $check_tb_lp_order_items_exists && ( ! $check_tb_lp_user_item_results_exists || ! $check_col_item_id_on_lp_order_items ) ) {
			update_option( 'learnpress_db_version', 3 );

			return $this->db_map_version['3'];
		}

		// End.

		return false;
	}

	/**
	 * Load file upgrade database.
	 *
	 * @return null|object
	 * @author tungnx
	 * @version 1.0.1
	 * @since 4.0.0
	 */
	public function load_file_version_upgrade_db() {
		$class_handle = null;

		$db_version_up_to = get_option( 'lp_db_need_upgrade' );

		if ( ! $db_version_up_to && $this->check_lp_db_need_upgrade() ) {
			$db_version_up_to = $this->check_lp_db_need_upgrade();
		}

		if ( $db_version_up_to ) {
			$file_update = LP_PLUGIN_PATH . 'inc/updates/learnpress-upgrade-' . $db_version_up_to . '.php';

			if ( file_exists( $file_update ) ) {
				include_once $file_update;
				$name_class_handle_upgrade = 'LP_Upgrade_' . $db_version_up_to;

				if ( class_exists( $name_class_handle_upgrade )
					 && is_callable( array( $name_class_handle_upgrade, 'get_instance' ) ) ) {
					$class_handle = $name_class_handle_upgrade::get_instance();
				}
			}
		}

		//      if ( $this->check_lp_db_need_upgrade() ) {
		//          $file_plugin_version = $this->check_lp_db_need_upgrade();
		//
		//          $file_update = LP_PLUGIN_PATH . 'inc/updates/learnpress-upgrade-' . $file_plugin_version . '.php';
		//
		//          if ( file_exists( $file_update ) ) {
		//              include_once $file_update;
		//              $name_class_handle_upgrade = 'LP_Upgrade_' . $file_plugin_version;
		//
		//              if ( class_exists( $name_class_handle_upgrade )
		//                   && is_callable( array( $name_class_handle_upgrade, 'get_instance' ) ) ) {
		//                  $class_handle = $name_class_handle_upgrade::get_instance();
		//              }
		//          }
		//      }

		return $class_handle;
	}

	/**
	 * Show message needs upgrades database compatible with LP version current.
	 */
	public function check_update_database_message() {
		if ( ! $this->check_lp_db_need_upgrade() ) {
			return;
		}

		learn_press_admin_view( 'updates/html-update-message' );
	}

	/**
	 * Get singleton instance of the class.
	 *
	 * @return bool|LP_Updater
	 */
	public static function instance() {
		static $instance = false;

		if ( ! $instance ) {
			$instance = new self();
		}

		return $instance;
	}
}

return LP_Updater::instance();