2018-06-06 10:58:57 +00:00
< ? php
/**
* Beta Tester plugin Version Picker class
*
* @ package WC_Beta_Tester
*/
defined ( 'ABSPATH' ) || exit ;
/**
* Settings Class .
*/
class WC_Beta_Tester_Version_Picker {
/**
2018-06-06 12:30:25 +00:00
* Currently installed version of WooCommerce plugin .
*
* @ var string
2018-06-06 10:58:57 +00:00
*/
2018-06-06 12:30:25 +00:00
protected $current_version = '' ;
2018-06-06 10:58:57 +00:00
/**
* Constructor
*/
public function __construct () {
add_action ( 'admin_menu' , array ( $this , 'add_to_menus' ) );
2018-06-08 10:31:40 +00:00
add_action ( 'admin_init' , array ( $this , 'handle_version_switch' ) );
}
/**
* Handler for the version switch button .
*/
public function handle_version_switch () {
if ( empty ( $_GET [ 'wcbt_switch_to_version' ] ) ) {
return ;
}
if ( ! wp_verify_nonce ( $_GET [ '_wpnonce' ], 'wcbt_switch_version_nonce' ) ) {
wp_die ( __ ( 'Action failed. Please refresh the page and retry.' , 'woocommerce-beta-tester' ) );
}
2018-06-08 15:35:16 +00:00
include dirname ( __FILE__ ) . '/class-wc-beta-tester-plugin-upgrader.php' ;
$plugin_name = 'woocommerce' ;
$plugin = 'woocommerce/woocommerce.php' ;
2018-06-08 16:26:56 +00:00
$version = $_GET [ 'wcbt_switch_to_version' ];
2018-06-08 15:35:16 +00:00
$skin_args = array (
'type' => 'web' ,
'url' => 'tools.php?page=wc-beta-tester-version-picker' ,
'title' => 'Version switch result' ,
'plugin' => $plugin_name ,
2018-06-08 16:26:56 +00:00
'version' => $version ,
2018-06-08 15:35:16 +00:00
'nonce' => $_GET [ '_wpnonce' ],
);
$skin = new Automatic_Upgrader_Skin ( $skin_args );
$upgrader = new WC_Beta_Tester_Plugin_Upgrader ( $skin );
$result = $upgrader -> switch_version ( $plugin );
if ( $result ) {
// Activate plugin.
2018-06-08 16:26:56 +00:00
activate_plugin ( $plugin , '' , is_network_admin (), true );
wp_redirect ( admin_url ( 'tools.php?page=wc-beta-tester-version-picker&switched=' . $version ) );
2018-06-08 15:35:16 +00:00
} else {
// TODO: fail more gracefully.
print_r ( $skin -> get_upgrade_messages () );
}
2018-06-06 10:58:57 +00:00
}
/**
2018-06-06 12:30:25 +00:00
* Add options page to menu .
2018-06-06 10:58:57 +00:00
*
* @ return void
*/
public function add_to_menus () {
add_submenu_page ( 'tools.php' ,
__ ( 'WooCommerce Beta Tester Version Switch' , 'woocommerce-beta-tester' ),
__ ( 'WooCommerce Beta Tester Version Switch' , 'woocommerce-beta-tester' ),
'install_plugins' ,
'wc-beta-tester-version-picker' ,
array ( $this , 'select_versions_form_html' ) );
}
/**
* Return HTML code representation of list of WooCommerce versions for the selected channel .
*
* @ param string $channel Filter versions by channel : all | beta | rc | stable .
* @ return string
*/
public function get_versions_html ( $channel ) {
$tags = WC_Beta_Tester :: instance () -> get_tags ( $channel );
if ( ! $tags ) {
return '' ;
}
usort ( $tags , 'version_compare' );
$tags = array_reverse ( $tags );
2018-06-08 10:31:40 +00:00
$versions_html = '' ;
if ( ! empty ( $_GET [ 'switched' ] ) ) {
2018-06-08 16:26:56 +00:00
$versions_html .= sprintf ( __ ( '<h2>Successfully switched version to %s.</h2>' , 'woocommerce-beta-tester' ), $_GET [ 'switched' ] );
2018-06-08 10:31:40 +00:00
}
$versions_html .= '<ul class="wcbt-version-list">' ;
2018-06-06 10:58:57 +00:00
$plugin_data = WC_Beta_Tester :: instance () -> get_plugin_data ();
$this -> current_version = $plugin_data [ 'Version' ];
// Loop through versions and output in a radio list.
foreach ( $tags as $tag_version ) {
$versions_html .= '<li class="wcbt-version-li">' ;
2018-06-06 16:26:48 +00:00
$versions_html .= '<label><input type="radio" value="' . esc_attr ( $tag_version ) . '" name="wcbt_switch_to_version">' . $tag_version ;
2018-06-06 10:58:57 +00:00
// Is this the current version?
if ( $tag_version === $this -> current_version ) {
2018-06-07 11:12:53 +00:00
$versions_html .= '<span class="wcbt-current-version">' . esc_html__ ( ' Installed Version' , 'woocommerce-beta-tester' ) . '</span>' ;
2018-06-06 10:58:57 +00:00
}
$versions_html .= '</label>' ;
$versions_html .= '</li>' ;
}
$versions_html .= '</ul>' ;
return $versions_html ;
}
/**
* Echo HTML form to switch WooCommerce versions , filtered for the selected channel .
*/
public function select_versions_form_html () {
if ( ! current_user_can ( 'install_plugins' ) ) {
return ;
}
2018-06-06 21:20:40 +00:00
$settings = WC_Beta_Tester :: get_settings ();
2018-06-08 15:35:16 +00:00
$channel = $settings -> channel ;
2018-06-06 10:58:57 +00:00
?>
< div class = " wrap " >
< div class = " wcbt-content-wrap " >
< h1 >< ? php esc_html_e ( 'Available WooCommerce versions' , 'woocommerce-beta-tester' ); ?> </h1>
2018-06-08 15:35:16 +00:00
< form name = " wcbt-select-version " class = " wcbt-select-version-form " action = " <?php echo esc_attr( admin_url( '/tools.php' ) ); ?> " >
2018-06-06 10:58:57 +00:00
< div class = " wcbt-versions-wrap " >
< ? php echo $this -> get_versions_html ( $channel ); // WPCS: XSS ok. ?>
</ div >
< div class = " wcbt-submit-wrap " >
2018-06-06 16:26:48 +00:00
< a href = " #wcbt-modal-version-switch-confirm " class = " button-primary " id = " wcbt-modal-version-switch-confirm " >< ? php esc_html_e ( 'Switch version' , 'woocommerce-beta-tester' ); ?> </a>
2018-06-06 10:58:57 +00:00
</ div >
< ? php wp_nonce_field ( 'wcbt_switch_version_nonce' ); ?>
2018-06-08 15:35:16 +00:00
< input type = " hidden " name = " noheader " value = " 1 " >
< input type = " hidden " name = " page " value = " wc-beta-tester-version-picker " >
2018-06-06 10:58:57 +00:00
2018-06-06 16:26:48 +00:00
< script type = " text/template " id = " tmpl-wcbt-version-switch-confirm " >
2018-06-06 13:52:26 +00:00
< div class = " wc-backbone-modal wc-backbone-modal-beta-tester-version-info " >
< div class = " wc-backbone-modal-content " >
< section class = " wc-backbone-modal-main " role = " main " >
< header class = " wc-backbone-modal-header " >
< h1 >
< ? php
esc_html_e ( 'Are you sure you want to switch the version of WooCommerce plugin?' , 'woocommerce-beta-tester' );
?>
</ h1 >
< button class = " modal-close modal-close-link dashicons dashicons-no-alt " >
< span class = " screen-reader-text " >< ? php esc_html_e ( 'Close modal panel' , 'woocommerce-beta-tester' ); ?> </span>
</ button >
</ header >
< article >
< table class = " wcbt-widefat " >
< tbody >
< tr class = " alternate " >
< td class = " row-title " >
< label for = " tablecell " >< ? php esc_html_e ( 'Installed Version:' , 'woocommerce-beta-tester' ); ?> </label>
</ td >
< td >< span class = " wcbt-installed-version " >< ? php echo esc_html ( $this -> current_version ); ?> </span></td>
</ tr >
< tr >
< td class = " row-title " >
< label for = " tablecell " >< ? php esc_html_e ( 'New Version:' , 'woocommerce-beta-tester' ); ?> </label>
</ td >
< td >< span class = " wcbt-new-version " > {{ data . new_version }} </ span ></ td >
</ tr >
</ tbody >
</ table >
< div class = " wcbt-notice " >
< p >< ? php esc_html_e ( 'Notice: We strongly recommend you perform the test on a staging site and create a complete backup of your WordPress files and database prior to performing a version switch. We are not responsible for any misuse, deletions, white screens, fatal errors, or any other issue arising from using this plugin.' , 'woocommerce-beta-tester' ); ?> </p>
</ div >
2018-06-07 11:12:53 +00:00
</ article >
< footer >
2018-06-08 15:35:16 +00:00
< input type = " submit " value = " <?php esc_attr_e( 'Switch version', 'woocommerce-beta-tester' ); ?> " class = " button-primary wcbt-go " id = " wcbt-submit-version-switch " />
2018-06-06 13:52:26 +00:00
< a href = " # " class = " modal-close modal-close-link " >< ? php esc_attr_e ( 'Cancel' , 'woocommerce-beta-tester' ); ?> </a>
2018-06-07 11:12:53 +00:00
</ footer >
2018-06-06 13:52:26 +00:00
</ section >
2018-06-06 10:58:57 +00:00
</ div >
</ div >
2018-06-06 13:52:26 +00:00
< div class = " wc-backbone-modal-backdrop modal-close " ></ div >
</ script >
2018-06-06 10:58:57 +00:00
</ form >
</ div >
</ div >
< ? php
}
}
new WC_Beta_Tester_Version_Picker ();