2020-04-14 00:54:43 +00:00
< ? php
/**
2020-09-16 21:45:16 +00:00
* WooCommerce Admin Add Install Jetpack and WooCommerce Shipping & Tax Plugin Note Provider .
2020-04-14 00:54:43 +00:00
*
* Adds a note to the merchant ' s inbox prompting them to install the Jetpack
2020-09-16 21:45:16 +00:00
* and WooCommerce Shipping & Tax plugins after it fails to install during
2020-04-14 00:54:43 +00:00
* WooCommerce setup .
*/
namespace Automattic\WooCommerce\Admin\Notes ;
defined ( 'ABSPATH' ) || exit ;
use \Automattic\WooCommerce\Admin\PluginsHelper ;
/**
2020-09-28 04:35:10 +00:00
* Install_JP_And_WCS_Plugins
2020-04-14 00:54:43 +00:00
*/
2020-10-28 17:12:14 +00:00
class InstallJPAndWCSPlugins {
2020-05-22 13:48:40 +00:00
/**
* Note traits .
*/
use NoteTraits ;
/**
* Name of the note for use in the database .
*/
2020-04-14 00:54:43 +00:00
const NOTE_NAME = 'wc-admin-install-jp-and-wcs-plugins' ;
/**
* Constructor .
*/
public function __construct () {
add_action ( 'woocommerce_note_action_install-jp-and-wcs-plugins' , array ( $this , 'install_jp_and_wcs_plugins' ) );
add_action ( 'activated_plugin' , array ( $this , 'action_note' ) );
}
/**
2020-05-22 13:48:40 +00:00
* Get the note .
2020-09-28 04:35:10 +00:00
*
* @ return Note
2020-04-14 00:54:43 +00:00
*/
2020-05-22 13:48:40 +00:00
public static function get_note () {
2020-09-16 21:45:16 +00:00
$content = __ ( 'We noticed that there was a problem during the Jetpack and WooCommerce Shipping & Tax install. Please try again and enjoy all the advantages of having the plugins connected to your store! Sorry for the inconvenience. The "Jetpack" and "WooCommerce Shipping & Tax" plugins will be installed & activated for free.' , 'woocommerce-admin' );
2020-04-14 00:54:43 +00:00
2020-09-28 04:35:10 +00:00
$note = new Note ();
2020-09-16 21:45:16 +00:00
$note -> set_title ( __ ( 'Uh oh... There was a problem during the Jetpack and WooCommerce Shipping & Tax install. Please try again.' , 'woocommerce-admin' ) );
2020-04-14 00:54:43 +00:00
$note -> set_content ( $content );
$note -> set_content_data ( ( object ) array () );
2020-09-28 04:35:10 +00:00
$note -> set_type ( Note :: E_WC_ADMIN_NOTE_INFORMATIONAL );
2020-04-14 00:54:43 +00:00
$note -> set_name ( self :: NOTE_NAME );
$note -> set_source ( 'woocommerce-admin' );
$note -> add_action (
'install-jp-and-wcs-plugins' ,
__ ( 'Install plugins' , 'woocommerce-admin' ),
false ,
2020-09-28 04:35:10 +00:00
Note :: E_WC_ADMIN_NOTE_ACTIONED ,
2020-04-14 00:54:43 +00:00
true
);
2020-05-22 13:48:40 +00:00
return $note ;
2020-04-14 00:54:43 +00:00
}
/**
2020-09-16 21:45:16 +00:00
* Action the Install Jetpack and WooCommerce Shipping & Tax note , if any exists ,
* and as long as both the Jetpack and WooCommerce Shipping & Tax plugins have been
2020-04-14 00:54:43 +00:00
* activated .
*/
public static function action_note () {
// Make sure that both plugins are active before actioning the note.
$active_plugin_slugs = PluginsHelper :: get_active_plugin_slugs ();
$jp_active = in_array ( 'jetpack' , $active_plugin_slugs , true );
$wcs_active = in_array ( 'woocommerce-services' , $active_plugin_slugs , true );
if ( ! $jp_active || ! $wcs_active ) {
return ;
}
// Action any notes with a matching name.
2021-04-26 21:57:39 +00:00
$data_store = Notes :: load_data_store ();
2020-04-14 00:54:43 +00:00
$note_ids = $data_store -> get_notes_with_name ( self :: NOTE_NAME );
foreach ( $note_ids as $note_id ) {
2020-09-28 04:35:10 +00:00
$note = Notes :: get_note ( $note_id );
2020-04-14 00:54:43 +00:00
2020-07-20 18:28:00 +00:00
if ( $note ) {
2020-09-28 04:35:10 +00:00
$note -> set_status ( Note :: E_WC_ADMIN_NOTE_ACTIONED );
2020-07-20 18:28:00 +00:00
$note -> save ();
}
2020-04-14 00:54:43 +00:00
}
}
/**
2020-09-16 21:45:16 +00:00
* Install the Jetpack and WooCommerce Shipping & Tax plugins in response to the action
2020-04-14 00:54:43 +00:00
* being clicked in the admin note .
*
2020-09-28 04:35:10 +00:00
* @ param Note $note The note being actioned .
2020-04-14 00:54:43 +00:00
*/
public function install_jp_and_wcs_plugins ( $note ) {
if ( self :: NOTE_NAME !== $note -> get_name () ) {
return ;
}
$this -> install_and_activate_plugin ( 'jetpack' );
$this -> install_and_activate_plugin ( 'woocommerce-services' );
}
/**
* Installs and activates the specified plugin .
*
* @ param string $plugin The plugin slug .
*/
private function install_and_activate_plugin ( $plugin ) {
$install_request = array ( 'plugin' => $plugin );
$installer = new \Automattic\WooCommerce\Admin\API\OnboardingPlugins ();
$result = $installer -> install_plugin ( $install_request );
// @todo Use the error statuses to decide whether or not to action the note.
if ( is_wp_error ( $result ) ) {
return ;
}
$activate_request = array ( 'plugins' => $plugin );
$installer -> activate_plugins ( $activate_request );
}
}