2019-11-02 10:38:58 +01:00
< ? php
/**
* Upgrader API : Bulk_Upgrader_Skin class
*
* @ package WordPress
* @ subpackage Upgrader
* @ since 4.6 . 0
*/
/**
* Generic Bulk Upgrader Skin for WordPress Upgrades .
*
* @ since 3.0 . 0
* @ since 4.6 . 0 Moved to its own file from wp - admin / includes / class - wp - upgrader - skins . php .
*
* @ see WP_Upgrader_Skin
*/
class Bulk_Upgrader_Skin extends WP_Upgrader_Skin {
2025-02-28 08:42:11 +01:00
/**
* Whether the bulk update process has started .
*
* @ since 3.0 . 0
* @ var bool
*/
2019-11-02 10:38:58 +01:00
public $in_loop = false ;
2025-02-28 08:42:11 +01:00
2019-11-02 10:38:58 +01:00
/**
2025-02-28 08:42:11 +01:00
* Stores an error message about the update .
*
* @ since 3.0 . 0
2019-11-02 10:38:58 +01:00
* @ var string | false
*/
public $error = false ;
/**
2025-02-28 08:42:11 +01:00
* Constructor .
*
* Sets up the generic skin for the Bulk Upgrader classes .
*
* @ since 3.0 . 0
*
2019-11-02 10:38:58 +01:00
* @ param array $args
*/
public function __construct ( $args = array () ) {
$defaults = array (
'url' => '' ,
'nonce' => '' ,
);
$args = wp_parse_args ( $args , $defaults );
parent :: __construct ( $args );
}
/**
2025-02-28 08:42:11 +01:00
* Sets up the strings used in the update process .
*
* @ since 3.0 . 0
2019-11-02 10:38:58 +01:00
*/
public function add_strings () {
$this -> upgrader -> strings [ 'skin_upgrade_start' ] = __ ( 'The update process is starting. This process may take a while on some hosts, so please be patient.' );
2019-11-15 22:59:44 +01:00
/* translators: 1: Title of an update, 2: Error message. */
2019-11-02 10:38:58 +01:00
$this -> upgrader -> strings [ 'skin_update_failed_error' ] = __ ( 'An error occurred while updating %1$s: %2$s' );
2019-11-15 22:59:44 +01:00
/* translators: %s: Title of an update. */
2019-11-02 10:38:58 +01:00
$this -> upgrader -> strings [ 'skin_update_failed' ] = __ ( 'The update of %s failed.' );
2019-11-15 22:59:44 +01:00
/* translators: %s: Title of an update. */
2019-11-02 10:38:58 +01:00
$this -> upgrader -> strings [ 'skin_update_successful' ] = __ ( '%s updated successfully.' );
$this -> upgrader -> strings [ 'skin_upgrade_end' ] = __ ( 'All updates have been completed.' );
}
/**
2025-02-28 08:42:11 +01:00
* Displays a message about the update .
*
* @ since 3.0 . 0
2022-04-02 10:26:41 +02:00
* @ since 5.9 . 0 Renamed `$string` ( a PHP reserved keyword ) to `$feedback` for PHP 8 named parameter support .
*
* @ param string $feedback Message data .
* @ param mixed ... $args Optional text replacements .
2019-11-02 10:38:58 +01:00
*/
2022-04-02 10:26:41 +02:00
public function feedback ( $feedback , ... $args ) {
if ( isset ( $this -> upgrader -> strings [ $feedback ] ) ) {
$feedback = $this -> upgrader -> strings [ $feedback ];
2019-11-02 10:38:58 +01:00
}
2023-09-26 10:33:34 +02:00
if ( str_contains ( $feedback , '%' ) ) {
2019-11-02 10:38:58 +01:00
if ( $args ) {
2022-04-02 10:26:41 +02:00
$args = array_map ( 'strip_tags' , $args );
$args = array_map ( 'esc_html' , $args );
$feedback = vsprintf ( $feedback , $args );
2019-11-02 10:38:58 +01:00
}
}
2022-04-02 10:26:41 +02:00
if ( empty ( $feedback ) ) {
2019-11-02 10:38:58 +01:00
return ;
}
if ( $this -> in_loop ) {
2022-04-02 10:26:41 +02:00
echo " $feedback <br /> \n " ;
2019-11-02 10:38:58 +01:00
} else {
2022-04-02 10:26:41 +02:00
echo " <p> $feedback </p> \n " ;
2019-11-02 10:38:58 +01:00
}
}
/**
2025-02-28 08:42:11 +01:00
* Displays the header before the update process .
*
* @ since 3.0 . 0
2019-11-02 10:38:58 +01:00
*/
public function header () {
2023-09-26 10:33:34 +02:00
// Nothing. This will be displayed within an iframe.
2019-11-02 10:38:58 +01:00
}
/**
2025-02-28 08:42:11 +01:00
* Displays the footer following the update process .
*
* @ since 3.0 . 0
2019-11-02 10:38:58 +01:00
*/
public function footer () {
2023-09-26 10:33:34 +02:00
// Nothing. This will be displayed within an iframe.
2019-11-02 10:38:58 +01:00
}
/**
2025-02-28 08:42:11 +01:00
* Displays an error message about the update .
*
* @ since 3.0 . 0
2022-04-02 10:26:41 +02:00
* @ since 5.9 . 0 Renamed `$error` to `$errors` for PHP 8 named parameter support .
*
* @ param string | WP_Error $errors Errors .
2019-11-02 10:38:58 +01:00
*/
2022-04-02 10:26:41 +02:00
public function error ( $errors ) {
if ( is_string ( $errors ) && isset ( $this -> upgrader -> strings [ $errors ] ) ) {
$this -> error = $this -> upgrader -> strings [ $errors ];
2019-11-02 10:38:58 +01:00
}
2022-04-02 10:26:41 +02:00
if ( is_wp_error ( $errors ) ) {
2019-11-02 10:38:58 +01:00
$messages = array ();
2022-04-02 10:26:41 +02:00
foreach ( $errors -> get_error_messages () as $emessage ) {
if ( $errors -> get_error_data () && is_string ( $errors -> get_error_data () ) ) {
$messages [] = $emessage . ' ' . esc_html ( strip_tags ( $errors -> get_error_data () ) );
2019-11-02 10:38:58 +01:00
} else {
$messages [] = $emessage ;
}
}
$this -> error = implode ( ', ' , $messages );
}
echo '<script type="text/javascript">jQuery(\'.waiting-' . esc_js ( $this -> upgrader -> update_current ) . '\').hide();</script>' ;
}
/**
2025-02-28 08:42:11 +01:00
* Displays the header before the bulk update process .
*
* @ since 3.0 . 0
2019-11-02 10:38:58 +01:00
*/
public function bulk_header () {
$this -> feedback ( 'skin_upgrade_start' );
}
/**
2025-02-28 08:42:11 +01:00
* Displays the footer following the bulk update process .
*
* @ since 3.0 . 0
2019-11-02 10:38:58 +01:00
*/
public function bulk_footer () {
$this -> feedback ( 'skin_upgrade_end' );
}
/**
2025-02-28 08:42:11 +01:00
* Performs an action before a bulk update .
*
* @ since 3.0 . 0
*
2019-11-02 10:38:58 +01:00
* @ param string $title
*/
public function before ( $title = '' ) {
$this -> in_loop = true ;
printf ( '<h2>' . $this -> upgrader -> strings [ 'skin_before_update_header' ] . ' <span class="spinner waiting-' . $this -> upgrader -> update_current . '"></span></h2>' , $title , $this -> upgrader -> update_current , $this -> upgrader -> update_count );
echo '<script type="text/javascript">jQuery(\'.waiting-' . esc_js ( $this -> upgrader -> update_current ) . '\').css("display", "inline-block");</script>' ;
2023-09-26 10:33:34 +02:00
// This progress messages div gets moved via JavaScript when clicking on "More details.".
2019-11-02 10:38:58 +01:00
echo '<div class="update-messages hide-if-js" id="progress-' . esc_attr ( $this -> upgrader -> update_current ) . '"><p>' ;
$this -> flush_output ();
}
/**
2025-02-28 08:42:11 +01:00
* Performs an action following a bulk update .
*
* @ since 3.0 . 0
*
2019-11-02 10:38:58 +01:00
* @ param string $title
*/
public function after ( $title = '' ) {
echo '</p></div>' ;
if ( $this -> error || ! $this -> result ) {
if ( $this -> error ) {
2023-12-07 09:44:11 +01:00
$after_error_message = sprintf ( $this -> upgrader -> strings [ 'skin_update_failed_error' ], $title , '<strong>' . $this -> error . '</strong>' );
2019-11-02 10:38:58 +01:00
} else {
2023-12-07 09:44:11 +01:00
$after_error_message = sprintf ( $this -> upgrader -> strings [ 'skin_update_failed' ], $title );
2019-11-02 10:38:58 +01:00
}
2023-12-07 09:44:11 +01:00
wp_admin_notice (
$after_error_message ,
array (
'additional_classes' => array ( 'error' ),
)
);
2019-11-02 10:38:58 +01:00
echo '<script type="text/javascript">jQuery(\'#progress-' . esc_js ( $this -> upgrader -> update_current ) . '\').show();</script>' ;
}
if ( $this -> result && ! is_wp_error ( $this -> result ) ) {
if ( ! $this -> error ) {
echo '<div class="updated js-update-details" data-update-details="progress-' . esc_attr ( $this -> upgrader -> update_current ) . '">' .
'<p>' . sprintf ( $this -> upgrader -> strings [ 'skin_update_successful' ], $title ) .
2023-09-26 10:33:34 +02:00
' <button type="button" class="hide-if-no-js button-link js-update-details-toggle" aria-expanded="false">' . __ ( 'More details.' ) . '<span class="dashicons dashicons-arrow-down" aria-hidden="true"></span></button>' .
2019-11-02 10:38:58 +01:00
'</p></div>' ;
}
echo '<script type="text/javascript">jQuery(\'.waiting-' . esc_js ( $this -> upgrader -> update_current ) . '\').hide();</script>' ;
}
$this -> reset ();
$this -> flush_output ();
}
/**
2025-02-28 08:42:11 +01:00
* Resets the properties used in the update process .
*
* @ since 3.0 . 0
2019-11-02 10:38:58 +01:00
*/
public function reset () {
$this -> in_loop = false ;
$this -> error = false ;
}
/**
2025-02-28 08:42:11 +01:00
* Flushes all output buffers .
*
* @ since 3.0 . 0
2019-11-02 10:38:58 +01:00
*/
public function flush_output () {
wp_ob_end_flush_all ();
flush ();
}
}