80 lines
2.2 KiB
PHP
80 lines
2.2 KiB
PHP
<?php
|
|
/**
|
|
* Apply Avada patches.
|
|
*
|
|
* @author ThemeFusion
|
|
* @copyright (c) Copyright by ThemeFusion
|
|
* @link https://avada.com
|
|
* @package Avada
|
|
* @subpackage CLI
|
|
* @since 7.3
|
|
*
|
|
* @usage: wp fusion patch apply
|
|
* @todo: make possible to apply only specific patch
|
|
*/
|
|
|
|
$fusion_apply_patches_cmd = function( $args, $assoc_args ) {
|
|
|
|
$patches = Fusion_Patcher_Client::get_patches( [] );
|
|
|
|
// Make sure we have a unique array.
|
|
$available_patches = array_keys( $patches );
|
|
// Sort the array by value (lowest to highest) and re-index the keys.
|
|
sort( $available_patches );
|
|
|
|
foreach ( $available_patches as $key => $patch_id ) {
|
|
|
|
// Get an array of the already applied patches.
|
|
$applied_patches = get_site_option( 'fusion_applied_patches', [] );
|
|
|
|
// Get an array of patches that failed to be applied.
|
|
$failed_patches = get_site_option( 'fusion_failed_patches', [] );
|
|
|
|
// Do not allow applying the patch initially.
|
|
// We'll have to check if they can later.
|
|
$can_apply = false;
|
|
|
|
/**
|
|
* Make sure the patch exists.
|
|
* if ( ! array_key_exists( $patch_id, $patches ) ) {
|
|
* continue;
|
|
* }
|
|
*/
|
|
|
|
// Get the patch arguments.
|
|
$patch_args = $patches[ $patch_id ];
|
|
|
|
// Has the patch been applied?
|
|
$patch_applied = ( in_array( $patch_id, $applied_patches, true ) );
|
|
|
|
// Has the patch failed?
|
|
$patch_failed = ( in_array( $patch_id, $failed_patches, true ) );
|
|
|
|
// If there is no previous patch, we can apply it.
|
|
if ( ! isset( $available_patches[ $key - 1 ] ) ) {
|
|
$can_apply = true;
|
|
}
|
|
|
|
// If the previous patch exists and has already been applied,
|
|
// then we can apply this one.
|
|
if ( isset( $available_patches[ $key - 1 ] ) ) {
|
|
if ( in_array( $available_patches[ $key - 1 ], $applied_patches, true ) ) {
|
|
$can_apply = true;
|
|
}
|
|
}
|
|
|
|
if ( $can_apply && ! $patch_applied ) {
|
|
Fusion_Patcher_Apply_Patch::apply_patch_from_args( $patch_id, Fusion_Patcher_Apply_Patch::format_patch( $patch_args ) );
|
|
WP_CLI::success( '#' . $patch_id . ' patch applied.' );
|
|
} else {
|
|
WP_CLI::log( 'Skip the patch: ' . $patch_id );
|
|
}
|
|
}
|
|
};
|
|
|
|
if ( class_exists( 'WP_CLI' ) ) {
|
|
WP_CLI::add_command( 'fusion patch apply', $fusion_apply_patches_cmd );
|
|
}
|
|
|
|
/* Omit closing PHP tag to avoid "Headers already sent" issues. */
|