Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../themes/Divi/core/componen...
File: VersionRollback.php
<?php
[0] Fix | Delete
[1] Fix | Delete
if ( ! class_exists( 'ET_Core_VersionRollback' ) ):
[2] Fix | Delete
/**
[3] Fix | Delete
* Handles version rollback.
[4] Fix | Delete
*
[5] Fix | Delete
* @since 3.10
[6] Fix | Delete
*
[7] Fix | Delete
* @private
[8] Fix | Delete
*
[9] Fix | Delete
* @package ET\Core\VersionRollback
[10] Fix | Delete
*/
[11] Fix | Delete
class ET_Core_VersionRollback {
[12] Fix | Delete
/**
[13] Fix | Delete
* Product name.
[14] Fix | Delete
*
[15] Fix | Delete
* @var string
[16] Fix | Delete
*/
[17] Fix | Delete
protected $product_name = '';
[18] Fix | Delete
[19] Fix | Delete
/**
[20] Fix | Delete
* Product shortname.
[21] Fix | Delete
*
[22] Fix | Delete
* @var string
[23] Fix | Delete
*/
[24] Fix | Delete
protected $product_shortname = '';
[25] Fix | Delete
[26] Fix | Delete
/**
[27] Fix | Delete
* Current product version.
[28] Fix | Delete
*
[29] Fix | Delete
* @var string
[30] Fix | Delete
*/
[31] Fix | Delete
protected $product_version = '';
[32] Fix | Delete
[33] Fix | Delete
/**
[34] Fix | Delete
* Is rollback service enabled.
[35] Fix | Delete
*
[36] Fix | Delete
* @var bool
[37] Fix | Delete
*/
[38] Fix | Delete
protected $enabled = false;
[39] Fix | Delete
[40] Fix | Delete
/**
[41] Fix | Delete
* API Username.
[42] Fix | Delete
*
[43] Fix | Delete
* @var string
[44] Fix | Delete
*/
[45] Fix | Delete
protected $api_username = '';
[46] Fix | Delete
[47] Fix | Delete
/**
[48] Fix | Delete
* API Key.
[49] Fix | Delete
*
[50] Fix | Delete
* @var string
[51] Fix | Delete
*/
[52] Fix | Delete
protected $api_key = '';
[53] Fix | Delete
[54] Fix | Delete
/**
[55] Fix | Delete
* ET_Core_VersionRollback constructor.
[56] Fix | Delete
*
[57] Fix | Delete
* @since 3.10
[58] Fix | Delete
*
[59] Fix | Delete
* @param string $product_name
[60] Fix | Delete
* @param string $product_shortname
[61] Fix | Delete
* @param string $product_version
[62] Fix | Delete
*/
[63] Fix | Delete
public function __construct( $product_name, $product_shortname, $product_version ) {
[64] Fix | Delete
$this->product_name = sanitize_text_field( $product_name );
[65] Fix | Delete
$this->product_shortname = sanitize_text_field( $product_shortname );
[66] Fix | Delete
$this->product_version = sanitize_text_field( $product_version );
[67] Fix | Delete
[68] Fix | Delete
if ( ! $options = get_site_option( 'et_automatic_updates_options' ) ) {
[69] Fix | Delete
$options = get_option( 'et_automatic_updates_options' );
[70] Fix | Delete
}
[71] Fix | Delete
[72] Fix | Delete
$this->api_username = isset( $options['username'] ) ? sanitize_text_field( $options['username'] ) : '';
[73] Fix | Delete
$this->api_key = isset( $options['api_key'] ) ? sanitize_text_field( $options['api_key'] ) : '';
[74] Fix | Delete
}
[75] Fix | Delete
[76] Fix | Delete
/**
[77] Fix | Delete
* Enqueue assets.
[78] Fix | Delete
*
[79] Fix | Delete
* @since 3.10
[80] Fix | Delete
*/
[81] Fix | Delete
public function assets() {
[82] Fix | Delete
wp_enqueue_style( 'et-core-version-rollback', ET_CORE_URL . 'admin/css/version-rollback.css', array(
[83] Fix | Delete
'et-core-admin',
[84] Fix | Delete
), ET_CORE_VERSION );
[85] Fix | Delete
[86] Fix | Delete
wp_enqueue_script( 'et-core-version-rollback', ET_CORE_URL . 'admin/js/version-rollback.js', array(
[87] Fix | Delete
'jquery',
[88] Fix | Delete
'jquery-ui-tabs',
[89] Fix | Delete
'jquery-form',
[90] Fix | Delete
'et-core-admin',
[91] Fix | Delete
), ET_CORE_VERSION );
[92] Fix | Delete
[93] Fix | Delete
wp_localize_script( 'et-core-version-rollback', 'etCoreVersionRollbackI18n', array(
[94] Fix | Delete
'unknownError' => esc_html__( 'An unknown error has occurred. Please try again later.', 'et-core' ),
[95] Fix | Delete
) );
[96] Fix | Delete
}
[97] Fix | Delete
[98] Fix | Delete
/**
[99] Fix | Delete
* Get previous installed version, if any.
[100] Fix | Delete
*
[101] Fix | Delete
* @since 3.10
[102] Fix | Delete
*
[103] Fix | Delete
* @return string
[104] Fix | Delete
*/
[105] Fix | Delete
protected function _get_previous_installed_version() {
[106] Fix | Delete
return et_get_option( "{$this->product_shortname}_previous_installed_version", '' );
[107] Fix | Delete
}
[108] Fix | Delete
[109] Fix | Delete
/**
[110] Fix | Delete
* Set previous installed version.
[111] Fix | Delete
*
[112] Fix | Delete
* @since 3.10
[113] Fix | Delete
*
[114] Fix | Delete
* @param string $version
[115] Fix | Delete
*
[116] Fix | Delete
* @return void
[117] Fix | Delete
*/
[118] Fix | Delete
protected function _set_previous_installed_version( $version ) {
[119] Fix | Delete
et_update_option( "{$this->product_shortname}_previous_installed_version", sanitize_text_field( $version ) );
[120] Fix | Delete
}
[121] Fix | Delete
[122] Fix | Delete
/**
[123] Fix | Delete
* Get latest installed version, if any.
[124] Fix | Delete
*
[125] Fix | Delete
* @since 3.10
[126] Fix | Delete
*
[127] Fix | Delete
* @return string
[128] Fix | Delete
*/
[129] Fix | Delete
protected function _get_latest_installed_version() {
[130] Fix | Delete
return et_get_option( "{$this->product_shortname}_latest_installed_version", '' );
[131] Fix | Delete
}
[132] Fix | Delete
[133] Fix | Delete
/**
[134] Fix | Delete
* Set latest installed version.
[135] Fix | Delete
*
[136] Fix | Delete
* @since 3.10
[137] Fix | Delete
*
[138] Fix | Delete
* @param string $version
[139] Fix | Delete
*
[140] Fix | Delete
* @return void
[141] Fix | Delete
*/
[142] Fix | Delete
protected function _set_latest_installed_version( $version ) {
[143] Fix | Delete
et_update_option( "{$this->product_shortname}_latest_installed_version", sanitize_text_field( $version ) );
[144] Fix | Delete
}
[145] Fix | Delete
[146] Fix | Delete
/**
[147] Fix | Delete
* Check if the product has already been rolled back.
[148] Fix | Delete
*
[149] Fix | Delete
* @since 3.10
[150] Fix | Delete
*
[151] Fix | Delete
* @return bool
[152] Fix | Delete
*/
[153] Fix | Delete
protected function _is_rolled_back() {
[154] Fix | Delete
return version_compare( $this->_get_latest_installed_version(), $this->_get_previous_installed_version(), '<=' );
[155] Fix | Delete
}
[156] Fix | Delete
[157] Fix | Delete
/**
[158] Fix | Delete
* Get unique ajax action.
[159] Fix | Delete
*
[160] Fix | Delete
* @since 3.10
[161] Fix | Delete
*
[162] Fix | Delete
* @return string
[163] Fix | Delete
*/
[164] Fix | Delete
protected function _get_ajax_action() {
[165] Fix | Delete
return 'et_core_version_rollback';
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
/**
[169] Fix | Delete
* Enable update rollback.
[170] Fix | Delete
*
[171] Fix | Delete
* @since 3.10
[172] Fix | Delete
*
[173] Fix | Delete
* @return void
[174] Fix | Delete
*/
[175] Fix | Delete
public function enable() {
[176] Fix | Delete
if ( $this->enabled ) {
[177] Fix | Delete
return;
[178] Fix | Delete
}
[179] Fix | Delete
[180] Fix | Delete
$this->enabled = true;
[181] Fix | Delete
[182] Fix | Delete
add_action( 'admin_enqueue_scripts', array( $this, 'assets' ) );
[183] Fix | Delete
add_action( 'wp_ajax_' . $this->_get_ajax_action(), array( $this, 'ajax_rollback' ) );
[184] Fix | Delete
// Update version number when theme is manually replaced.
[185] Fix | Delete
add_action( 'admin_init', array( $this, 'store_previous_version_number' ) );
[186] Fix | Delete
// Update version number when theme is activated.
[187] Fix | Delete
add_action( 'after_switch_theme', array( $this, 'store_previous_version_number' ) );
[188] Fix | Delete
// Update version number when theme is updated.
[189] Fix | Delete
add_action( 'upgrader_process_complete', array( $this, 'store_previous_version_number' ), 10, 0 );
[190] Fix | Delete
}
[191] Fix | Delete
[192] Fix | Delete
/**
[193] Fix | Delete
* Handle REST API requests to rollback.
[194] Fix | Delete
*
[195] Fix | Delete
* @since 3.10
[196] Fix | Delete
*
[197] Fix | Delete
* @return void
[198] Fix | Delete
*/
[199] Fix | Delete
public function ajax_rollback() {
[200] Fix | Delete
if ( ! isset( $_GET['nonce'] ) || ! wp_verify_nonce( $_GET['nonce'], $this->_get_ajax_action() ) ) {
[201] Fix | Delete
wp_send_json_error( array(
[202] Fix | Delete
'errorCode' => 'et_unknown',
[203] Fix | Delete
'error' => esc_html__( 'Security check failed. Please refresh and try again.', 'et-core' ),
[204] Fix | Delete
), 400 );
[205] Fix | Delete
}
[206] Fix | Delete
[207] Fix | Delete
if ( ! current_user_can( 'install_themes' ) ) {
[208] Fix | Delete
wp_send_json_error( array(
[209] Fix | Delete
'errorCode' => 'et_unknown',
[210] Fix | Delete
'error' => esc_html__( 'You don\'t have sufficient permissions to access this page.', 'et-core' ),
[211] Fix | Delete
), 400 );
[212] Fix | Delete
}
[213] Fix | Delete
[214] Fix | Delete
if ( $this->_is_rolled_back() ) {
[215] Fix | Delete
$error = '
[216] Fix | Delete
<p>
[217] Fix | Delete
' . et_get_safe_localization( sprintf(
[218] Fix | Delete
__( 'You\'re currently rolled back to <strong>Version %1$s</strong> from <strong>Version %2$s</strong>.', 'et-core' ),
[219] Fix | Delete
esc_html( $this->_get_latest_installed_version() ),
[220] Fix | Delete
esc_html( $this->_get_previous_installed_version() )
[221] Fix | Delete
) ) . '
[222] Fix | Delete
</p>
[223] Fix | Delete
<p>
[224] Fix | Delete
' . et_get_safe_localization( sprintf(
[225] Fix | Delete
__( 'Update to the latest version to unlock the full power of %1$s. <a href="%2$s" target="_blank">Learn more here</a>.', 'et-core' ),
[226] Fix | Delete
esc_html( $this->product_name ),
[227] Fix | Delete
esc_url( $this->_get_update_documentation_url() )
[228] Fix | Delete
) ) . '
[229] Fix | Delete
</p>
[230] Fix | Delete
';
[231] Fix | Delete
[232] Fix | Delete
wp_send_json_error( array(
[233] Fix | Delete
'errorCode' => 'et_unknown',
[234] Fix | Delete
'error' => $error,
[235] Fix | Delete
), 400 );
[236] Fix | Delete
}
[237] Fix | Delete
[238] Fix | Delete
$success = $this->rollback();
[239] Fix | Delete
[240] Fix | Delete
if ( is_wp_error( $success ) ) {
[241] Fix | Delete
$error = $success->get_error_message();
[242] Fix | Delete
if ( $success->get_error_code() === 'et_version_rollback_blocklisted' ) {
[243] Fix | Delete
$error = '
[244] Fix | Delete
<p>
[245] Fix | Delete
' . et_get_safe_localization( sprintf(
[246] Fix | Delete
__( 'For privacy and security reasons, you cannot rollback to <strong>Version %1$s</strong>.', 'et-core' ),
[247] Fix | Delete
esc_html( $this->_get_previous_installed_version() )
[248] Fix | Delete
) ) . '
[249] Fix | Delete
</p>
[250] Fix | Delete
<p>
[251] Fix | Delete
<a href="' . esc_url( $this->_get_update_documentation_url() ) . '" target="_blank">
[252] Fix | Delete
' . esc_html__( 'Learn more here.', 'et-core' ) . '
[253] Fix | Delete
</a>
[254] Fix | Delete
</p>
[255] Fix | Delete
';
[256] Fix | Delete
}
[257] Fix | Delete
[258] Fix | Delete
wp_send_json_error( array(
[259] Fix | Delete
'errorIsUnrecoverable' => in_array( $success->get_error_code(), array( 'et_version_rollback_not_available', 'et_version_rollback_blocklisted' ) ),
[260] Fix | Delete
'errorCode' => $success->get_error_code(),
[261] Fix | Delete
'error' => $error,
[262] Fix | Delete
), 400 );
[263] Fix | Delete
}
[264] Fix | Delete
[265] Fix | Delete
wp_send_json_success();
[266] Fix | Delete
}
[267] Fix | Delete
[268] Fix | Delete
/**
[269] Fix | Delete
* Execute a version rollback.
[270] Fix | Delete
*
[271] Fix | Delete
* @since 3.10
[272] Fix | Delete
*
[273] Fix | Delete
* @return bool|WP_Error
[274] Fix | Delete
*/
[275] Fix | Delete
public function rollback() {
[276] Fix | Delete
// Load versions before rollback so they are not affected.
[277] Fix | Delete
$previous_version = $this->_get_previous_installed_version();
[278] Fix | Delete
$latest_version = $this->_get_latest_installed_version();
[279] Fix | Delete
[280] Fix | Delete
$api = new ET_Core_API_ElegantThemes( $this->api_username, $this->api_key );
[281] Fix | Delete
$available = $api->is_product_available( $this->product_name, $previous_version );
[282] Fix | Delete
[283] Fix | Delete
if ( is_wp_error( $available ) ) {
[284] Fix | Delete
$major_minor = implode( '.', array_slice( explode( '.', $previous_version ), 0, 2 ) );
[285] Fix | Delete
[286] Fix | Delete
if ( $major_minor . '.0' === $previous_version ) {
[287] Fix | Delete
// Skip the trailing 0 in the version number and retry.
[288] Fix | Delete
$previous_version = $major_minor;
[289] Fix | Delete
$available = $api->is_product_available( $this->product_name, $previous_version );
[290] Fix | Delete
}
[291] Fix | Delete
[292] Fix | Delete
if ( is_wp_error( $available ) ) {
[293] Fix | Delete
return $available;
[294] Fix | Delete
}
[295] Fix | Delete
}
[296] Fix | Delete
[297] Fix | Delete
$download_url = $api->get_download_url( $this->product_name, $previous_version );
[298] Fix | Delete
[299] Fix | Delete
// Buffer and discard output as upgrader classes still output content even if the upgrader skin is silent.
[300] Fix | Delete
$buffer_started = ob_start();
[301] Fix | Delete
$result = $this->_install_theme( $download_url );
[302] Fix | Delete
if ( $buffer_started ) {
[303] Fix | Delete
ob_end_clean();
[304] Fix | Delete
}
[305] Fix | Delete
[306] Fix | Delete
if ( is_wp_error( $result ) ) {
[307] Fix | Delete
return $result;
[308] Fix | Delete
}
[309] Fix | Delete
[310] Fix | Delete
if ( true !== $result ) {
[311] Fix | Delete
return new WP_Error( 'et_unknown', esc_html__( 'An unknown error has occurred. Please try again later.', 'et-core' ) );
[312] Fix | Delete
}
[313] Fix | Delete
[314] Fix | Delete
/**
[315] Fix | Delete
* Fires after successful product version rollback.
[316] Fix | Delete
*
[317] Fix | Delete
* @since 3.26
[318] Fix | Delete
*
[319] Fix | Delete
* @param string $product_short_name - The short name of the product rolling back.
[320] Fix | Delete
* @param string $rollback_from_version - The product version rolling back from.
[321] Fix | Delete
* @param string $rollback_to_version - The product version rolling back to.
[322] Fix | Delete
*/
[323] Fix | Delete
do_action( 'et_after_version_rollback', $this->product_shortname, $latest_version, $previous_version );
[324] Fix | Delete
[325] Fix | Delete
// Swap version numbers after a successful rollback.
[326] Fix | Delete
$this->_set_previous_installed_version( $latest_version );
[327] Fix | Delete
$this->_set_latest_installed_version( $previous_version );
[328] Fix | Delete
}
[329] Fix | Delete
[330] Fix | Delete
/**
[331] Fix | Delete
* Install a theme overwriting it if it already exists.
[332] Fix | Delete
* Copied from Theme_Upgrader::install() due to lack of control over the clear_desination argument.
[333] Fix | Delete
*
[334] Fix | Delete
* @see Theme_Upgrader::install() @ WordPress 4.9.4
[335] Fix | Delete
*
[336] Fix | Delete
* @since 3.10
[337] Fix | Delete
*
[338] Fix | Delete
* @param string $package
[339] Fix | Delete
*
[340] Fix | Delete
* @return bool|WP_Error
[341] Fix | Delete
*/
[342] Fix | Delete
protected function _install_theme( $package ) {
[343] Fix | Delete
require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
[344] Fix | Delete
$upgrader = new Theme_Upgrader( new ET_Core_LIB_SilentThemeUpgraderSkin() );
[345] Fix | Delete
[346] Fix | Delete
$defaults = array(
[347] Fix | Delete
'clear_update_cache' => true,
[348] Fix | Delete
);
[349] Fix | Delete
$parsed_args = wp_parse_args( array(), $defaults );
[350] Fix | Delete
[351] Fix | Delete
$upgrader->init();
[352] Fix | Delete
$upgrader->install_strings();
[353] Fix | Delete
[354] Fix | Delete
add_filter('upgrader_source_selection', array( $upgrader, 'check_package' ) );
[355] Fix | Delete
add_filter('upgrader_post_install', array( $upgrader, 'check_parent_theme_filter' ), 10, 3 );
[356] Fix | Delete
if ( $parsed_args['clear_update_cache'] ) {
[357] Fix | Delete
// Clear cache so wp_update_themes() knows about the new theme.
[358] Fix | Delete
add_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9, 0 );
[359] Fix | Delete
}
[360] Fix | Delete
[361] Fix | Delete
$upgrader->run( array(
[362] Fix | Delete
'package' => $package,
[363] Fix | Delete
'destination' => get_theme_root(),
[364] Fix | Delete
'clear_destination' => true, // Overwrite theme.
[365] Fix | Delete
'clear_working' => true,
[366] Fix | Delete
'hook_extra' => array(
[367] Fix | Delete
'type' => 'theme',
[368] Fix | Delete
'action' => 'install',
[369] Fix | Delete
),
[370] Fix | Delete
) );
[371] Fix | Delete
[372] Fix | Delete
remove_action( 'upgrader_process_complete', 'wp_clean_themes_cache', 9 );
[373] Fix | Delete
remove_filter( 'upgrader_source_selection', array( $upgrader, 'check_package' ) );
[374] Fix | Delete
remove_filter( 'upgrader_post_install', array( $upgrader, 'check_parent_theme_filter' ) );
[375] Fix | Delete
[376] Fix | Delete
if ( ! $upgrader->result || is_wp_error( $upgrader->result ) ) {
[377] Fix | Delete
return $upgrader->result;
[378] Fix | Delete
}
[379] Fix | Delete
[380] Fix | Delete
// Refresh the Theme Update information.
[381] Fix | Delete
wp_clean_themes_cache( $parsed_args['clear_update_cache'] );
[382] Fix | Delete
[383] Fix | Delete
return true;
[384] Fix | Delete
}
[385] Fix | Delete
[386] Fix | Delete
/**
[387] Fix | Delete
* Get update documentation url for the product.
[388] Fix | Delete
*
[389] Fix | Delete
* @since 3.10
[390] Fix | Delete
*
[391] Fix | Delete
* @return string
[392] Fix | Delete
*/
[393] Fix | Delete
protected function _get_update_documentation_url() {
[394] Fix | Delete
return "https://www.elegantthemes.com/documentation/{$this->product_shortname}/update-{$this->product_shortname}/";
[395] Fix | Delete
}
[396] Fix | Delete
[397] Fix | Delete
/**
[398] Fix | Delete
* Return ePanel option.
[399] Fix | Delete
*
[400] Fix | Delete
* @since 3.10
[401] Fix | Delete
*
[402] Fix | Delete
* @return array
[403] Fix | Delete
*/
[404] Fix | Delete
public function get_epanel_option() {
[405] Fix | Delete
return array(
[406] Fix | Delete
'name' => esc_html__( 'Version Rollback', 'et-core' ),
[407] Fix | Delete
'id' => 'et_version_rollback',
[408] Fix | Delete
'type' => 'callback_function',
[409] Fix | Delete
'function_name' => array( $this, 'render_epanel_option' ),
[410] Fix | Delete
'desc' => et_get_safe_localization( __( '<em>Before you can receive product updates, you must first authenticate your Elegant Themes subscription. To do this, you need to enter both your Elegant Themes Username and your Elegant Themes API Key into the Updates Tab in your theme and plugin settings. To locate your API Key, <a href="https://www.elegantthemes.com/members-area/api/" target="_blank">log in</a> to your Elegant Themes account and navigate to the <strong>Account > API Key</strong> page. <a href="http://www.elegantthemes.com/gallery/divi/documentation/update/" target="_blank">Learn more here</a></em>. If you still get this message, please make sure that your Username and API Key have been entered correctly', 'et-core' ) ),
[411] Fix | Delete
);
[412] Fix | Delete
}
[413] Fix | Delete
[414] Fix | Delete
/**
[415] Fix | Delete
* Render ePanel option.
[416] Fix | Delete
*
[417] Fix | Delete
* @since 3.10
[418] Fix | Delete
*
[419] Fix | Delete
* @return void
[420] Fix | Delete
*/
[421] Fix | Delete
public function render_epanel_option() {
[422] Fix | Delete
$previous = $this->_get_previous_installed_version();
[423] Fix | Delete
$modal_renderer = array( $this, 'render_epanel_no_previous_version_modal' );
[424] Fix | Delete
[425] Fix | Delete
if ( ! empty( $previous ) ) {
[426] Fix | Delete
$modal_renderer = array( $this, 'render_epanel_confirm_rollback_modal' );
[427] Fix | Delete
[428] Fix | Delete
if ( $this->_is_rolled_back() ) {
[429] Fix | Delete
$modal_renderer = array( $this, 'render_epanel_already_rolled_back_modal' );
[430] Fix | Delete
}
[431] Fix | Delete
}
[432] Fix | Delete
[433] Fix | Delete
add_action( 'admin_footer', $modal_renderer );
[434] Fix | Delete
?>
[435] Fix | Delete
<button type="button" class="et-button et-button--simple" data-et-core-modal=".et-core-version-rollback-modal">
[436] Fix | Delete
<?php esc_html_e( 'Rollback to the previous version', 'et-core' ); ?>
[437] Fix | Delete
</button>
[438] Fix | Delete
<?php
[439] Fix | Delete
}
[440] Fix | Delete
[441] Fix | Delete
/**
[442] Fix | Delete
* Render ePanel warning modal when no previous supported version has been used.
[443] Fix | Delete
*
[444] Fix | Delete
* @since 3.10
[445] Fix | Delete
*
[446] Fix | Delete
* @return void
[447] Fix | Delete
*/
[448] Fix | Delete
public function render_epanel_no_previous_version_modal() {
[449] Fix | Delete
?>
[450] Fix | Delete
<div class="et-core-modal-overlay et-core-form et-core-version-rollback-modal et-core-modal-actionless">
[451] Fix | Delete
<div class="et-core-modal">
[452] Fix | Delete
<div class="et-core-modal-header">
[453] Fix | Delete
<h3 class="et-core-modal-title">
[454] Fix | Delete
<?php esc_html_e( 'Version Rollback', 'et-core' ); ?>
[455] Fix | Delete
</h3>
[456] Fix | Delete
<a href="#" class="et-core-modal-close" data-et-core-modal="close"></a>
[457] Fix | Delete
</div>
[458] Fix | Delete
<div id="et-core-version-rollback-modal-content">
[459] Fix | Delete
<div class="et-core-modal-content">
[460] Fix | Delete
<p>
[461] Fix | Delete
<?php
[462] Fix | Delete
printf(
[463] Fix | Delete
esc_html__( 'The previously used version of %1$s does not support version rollback.', 'et-core' ),
[464] Fix | Delete
esc_html( $this->product_name )
[465] Fix | Delete
);
[466] Fix | Delete
?>
[467] Fix | Delete
</p>
[468] Fix | Delete
</div>
[469] Fix | Delete
</div>
[470] Fix | Delete
</div>
[471] Fix | Delete
</div>
[472] Fix | Delete
<?php
[473] Fix | Delete
}
[474] Fix | Delete
[475] Fix | Delete
/**
[476] Fix | Delete
* Render ePanel confirmation modal for rollback.
[477] Fix | Delete
*
[478] Fix | Delete
* @since 3.10
[479] Fix | Delete
*
[480] Fix | Delete
* @return void
[481] Fix | Delete
*/
[482] Fix | Delete
public function render_epanel_confirm_rollback_modal() {
[483] Fix | Delete
$action = $this->_get_ajax_action();
[484] Fix | Delete
$url = add_query_arg( array(
[485] Fix | Delete
'action' => $action,
[486] Fix | Delete
'nonce' => wp_create_nonce( $action ),
[487] Fix | Delete
), admin_url( 'admin-ajax.php' ) );
[488] Fix | Delete
?>
[489] Fix | Delete
<div class="et-core-modal-overlay et-core-form et-core-version-rollback-modal">
[490] Fix | Delete
<div class="et-core-modal">
[491] Fix | Delete
<div class="et-core-modal-header">
[492] Fix | Delete
<h3 class="et-core-modal-title">
[493] Fix | Delete
<?php esc_html_e( 'Version Rollback', 'et-core' ); ?>
[494] Fix | Delete
</h3>
[495] Fix | Delete
<a href="#" class="et-core-modal-close" data-et-core-modal="close"></a>
[496] Fix | Delete
</div>
[497] Fix | Delete
<div id="et-core-version-rollback-modal-content">
[498] Fix | Delete
<div class="et-core-modal-content">
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function