PATH:
var
/
www
/
clients
/
client1
/
web1
/
web
/
wp-content
/
sitepress-multilingual-cms
/
classes
/
upgrade
<?php use WPML\Upgrade\CommandsStatus; class WPML_Upgrade { const SCOPE_ADMIN = 'admin'; const SCOPE_AJAX = 'ajax'; const SCOPE_FRONT_END = 'front-end'; /** @var array */ private $commands; const UPDATE_STATUSES_KEY = 'wpml_update_statuses'; /** @var SitePress */ private $sitepress; /** @var WPML_Upgrade_Command_Factory */ private $command_factory; /** @var CommandsStatus */ private $command_status; /** @var bool $upgrade_in_progress */ private $upgrade_in_progress; /** * WPML_Upgrade constructor. * * @param array $commands * @param SitePress $sitepress * @param WPML_Upgrade_Command_Factory $command_factory * @param CommandsStatus $command_status */ public function __construct( array $commands, SitePress $sitepress, WPML_Upgrade_Command_Factory $command_factory, CommandsStatus $command_status = null ) { $this->add_commands( $commands ); $this->sitepress = $sitepress; $this->command_factory = $command_factory; $this->command_status = $command_status ?: new CommandsStatus(); } /** * @param array $commands */ public function add_commands( array $commands ) { foreach ( $commands as $command ) { if ( $command instanceof WPML_Upgrade_Command_Definition ) { $this->commands[] = $command; } } } public function run() { $result = false; /** * Add commands to the upgrade logic. * * The filter must be added before the `wpml_loaded` action is fired (the action is fired on `plugins_loaded`). * * @param array $commands An empty array. * @param array $new_commands Array of classes created with \wpml_create_upgrade_command_definition. * * @since 4.1.0 * @see \wpml_create_upgrade_command_definition */ $new_commands = apply_filters( 'wpml_upgrade_commands', array() ); if ( $new_commands && is_array( $new_commands ) ) { $this->add_commands( $new_commands ); } if ( $this->sitepress->get_wp_api()->is_admin() ) { if ( $this->sitepress->get_wp_api()->is_ajax() ) { $result = $this->run_ajax(); } else { $result = $this->run_admin(); } } elseif ( $this->sitepress->get_wp_api()->is_front_end() ) { $result = $this->run_front_end(); } $this->set_upgrade_completed(); return $result; } private function get_commands_by_scope( $scope ) { $results = array(); /** @var WPML_Upgrade_Command_Definition $command */ foreach ( $this->commands as $command ) { if ( in_array( $scope, $command->get_scopes(), true ) ) { $results[] = $command; } } return $results; } private function get_admin_commands() { return $this->get_commands_by_scope( self::SCOPE_ADMIN ); } private function get_ajax_commands() { return $this->get_commands_by_scope( self::SCOPE_AJAX ); } private function get_front_end_commands() { return $this->get_commands_by_scope( self::SCOPE_FRONT_END ); } private function run_admin() { return $this->run_commands( $this->get_admin_commands(), 'maybe_run_admin' ); } private function run_ajax() { return $this->run_commands( $this->get_ajax_commands(), 'maybe_run_ajax' ); } private function run_front_end() { return $this->run_commands( $this->get_front_end_commands(), 'maybe_run_front_end' ); } private function run_commands( $commands, $default ) { $results = array(); /** @var WPML_Upgrade_Command_Definition $command */ foreach ( $commands as $command ) { $results[] = $this->run_command( $command, $default ); } return $results; } private function run_command( WPML_Upgrade_Command_Definition $command_definition, $default ) { $method = $default; if ( $command_definition->get_method() ) { $method = $command_definition->get_method(); } if ( ! $this->command_status->hasBeenExecuted( $command_definition->get_class_name() ) ) { $this->set_upgrade_in_progress(); $upgrade = $command_definition->create(); return $this->$method( $upgrade ); } return null; } /** @noinspection PhpUnusedPrivateMethodInspection * @param IWPML_Upgrade_Command $upgrade * * @return null */ private function maybe_run_admin( IWPML_Upgrade_Command $upgrade ) { if ( $upgrade->run_admin() ) { $this->mark_command_as_executed( $upgrade ); } return $upgrade->get_results(); } /** @noinspection PhpUnusedPrivateMethodInspection * @param IWPML_Upgrade_Command $upgrade * * @return null */ private function maybe_run_front_end( IWPML_Upgrade_Command $upgrade ) { if ( $upgrade->run_frontend() ) { $this->mark_command_as_executed( $upgrade ); } return $upgrade->get_results(); } /** @noinspection PhpUnusedPrivateMethodInspection * @param IWPML_Upgrade_Command $upgrade * * @return null */ private function maybe_run_ajax( IWPML_Upgrade_Command $upgrade ) { if ( $this->nonce_ok( $upgrade ) && $upgrade->run_ajax() ) { $this->mark_command_as_executed( $upgrade ); $this->sitepress->get_wp_api()->wp_send_json_success( '' ); } return $upgrade->get_results(); } private function nonce_ok( $class ) { $ok = false; $class_name = $this->get_command_id( get_class( $class ) ); if ( isset( $_POST['action'] ) && $_POST['action'] === $class_name ) { $nonce = filter_input( INPUT_POST, 'nonce', FILTER_SANITIZE_FULL_SPECIAL_CHARS ); if ( $this->sitepress->get_wp_api()->wp_verify_nonce( $nonce, $class_name . '-nonce' ) ) { $ok = true; } } return $ok; } /** * @param IWPML_Upgrade_Command $class */ public function mark_command_as_executed( IWPML_Upgrade_Command $class ) { $this->command_status->markAsExecuted( get_class( $class ) ); } /** * @param string $class_name * * @return string */ private function get_command_id( $class_name ) { return str_replace( '_', '-', strtolower( $class_name ) ); } private function set_upgrade_in_progress() { if ( ! $this->upgrade_in_progress ) { $this->upgrade_in_progress = true; set_transient( WPML_Upgrade_Loader::TRANSIENT_UPGRADE_IN_PROGRESS, true, MINUTE_IN_SECONDS ); } } private function set_upgrade_completed() { if ( $this->upgrade_in_progress ) { $this->upgrade_in_progress = false; delete_transient( WPML_Upgrade_Loader::TRANSIENT_UPGRADE_IN_PROGRESS ); } } }
[-] class-wpml-tm-upgrade-loader.php
[edit]
[-] class-wpml-upgrade-loader-factory.php
[edit]
[+]
commands
[-] class-wpml-upgrade.php
[edit]
[-] interface-iwpml-upgrade-command.php
[edit]
[-] class-wpml-tm-upgrade-loader-factory.php
[edit]
[-] class-wpml-upgrade-command-factory.php
[edit]
[-] class-wpml-upgrade-loader.php
[edit]
[-] class-wpml-upgrade-command-definition.php
[edit]
[-] class-wpml-upgrade-schema.php
[edit]
[+]
..
[-] class-wpml-upgrade-localizations-files.php
[edit]
[-] CommandsStatus.php
[edit]
[-] class-wpml-upgrade-run-all.php
[edit]