Files
szkoleniauryzaj.pl/wp-content/plugins/youtube-feed-pro/inc/Services/Admin/Settings/SetupPage.php
2026-04-26 23:47:49 +02:00

289 lines
6.8 KiB
PHP

<?php
namespace SmashBalloon\YouTubeFeed\Services\Admin\Settings;
use Smashballoon\Customizer\Container;
use Smashballoon\Customizer\Feed_Builder;
use SmashBalloon\YouTubeFeed\Services\AdminAjaxService;
use SmashBalloon\YouTubeFeed\Helpers\Util;
class SetupPage extends BaseSettingPage
{
protected $menu_slug = 'setup';
protected $menu_title = 'Setup';
protected $page_title = 'Setup';
protected $has_menu = true;
protected $template_file = 'settings.index';
protected $has_assets = true;
protected $menu_position = 0;
protected $menu_position_free_version = 0;
static $plugin_name = 'youtube';
static $statues_name = 'sby_statuses';
/**
* Filter settings object
*
* @since 2.2.4
*
* @return void
*/
public function register()
{
if(! sby_is_pro() && self::should_init_wizard() ) {
parent::register();
add_action( 'wp_ajax_sby_process_wizard', [ $this, 'ajax_process_wizard' ] );
add_action( 'wp_ajax_sby_dismiss_wizard', [ $this, 'ajax_dismiss_wizard' ] );
add_filter('sby_localized_settings', [$this, 'filter_settings_object']);
}
}
/**
* Filter settings object
*
* @param array $settings
*
* @since 2.2.4
*
* @return array
*/
public function filter_settings_object($settings)
{
$settings['onboardWizardYoutubeAccountConnectURL'] = Feed_Builder::oauth_connet_url(admin_url('admin.php?page=youtube-feed-setup&step=2'));
return $settings;
}
/**
* Check if we need to Init the Onboarding wizard
*
* @since 2.2.4
*
* @return bool
*/
public static function should_init_wizard() {
$statues = get_option( self::$statues_name, array() );
if(!isset($statues['wizard_dismissed']) || $statues['wizard_dismissed'] === false ){
return true;
}
return false;
}
/**
* Install Plugin
*
* @param string $plugin_url
*
* @since 2.2.4
*
* @return void
*/
public static function install_single_plugin( $plugin_url ){
if( !$plugin_url || !current_user_can('install_plugins') ){
return false;
}
set_current_screen( 'youtube-feed-setup' );
// Prepare variables.
$url = esc_url_raw(
add_query_arg(
array(
'page' => 'youtube-feed-setup',
),
admin_url( 'admin.php' )
)
);
$creds = request_filesystem_credentials( $url, '', false, false, null );
// Check for file system permissions.
if ( false === $creds ) {
wp_send_json_error( $error );
}
if ( ! WP_Filesystem( $creds ) ) {
wp_send_json_error( $error );
}
/*
* We do not need any extra credentials if we have gotten this far, so let's install the plugin.
*/
require_once SBY_PLUGIN_DIR . 'inc/class-install-skin.php';
// Do not allow WordPress to search/download translations, as this will break JS output.
remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
// Create the plugin upgrader with our custom skin.
$installer = new \SmashBalloon\YouTubeFeed\PluginSilentUpgrader( new \SmashBalloon\YouTubeFeed\SBY_Install_Skin() );
// Error check.
if ( ! method_exists( $installer, 'install' ) || empty( $plugin_url ) ) {
wp_send_json_error( $error );
}
$installer->install( esc_url_raw( wp_unslash( $plugin_url ) ) );
// Flush the cache and return the newly installed plugin basename.
wp_cache_flush();
$plugin_basename = $installer->plugin_info();
if ( $plugin_basename ) {
activate_plugin( $plugin_basename );
}
}
/**
* Process Wizard Data
* Save Settings, Install Plugins and more
*
* @since 2.2.4
*
* @return void
*/
public function ajax_process_wizard(){
Util::ajaxPreflightChecks();
if( ! isset( $_POST['data'] ) ){
wp_send_json_error();
}
// If in the future we need to support settings.
// $sby_settings = get_option( 'sby_settings', array() );
$onboarding_data = sanitize_text_field( stripslashes( $_POST['data'] ) );
$onboarding_data = json_decode( $onboarding_data, true);
foreach (array_keys($onboarding_data) as $key) {
// If in the future we need to support settings.
// if( !empty($key) && 'settings' === $key ){
// }
if( $key && 'plugins' === $key && !empty($onboarding_data[$key]) && current_user_can( 'install_plugins' ) ){
foreach ($onboarding_data[$key] as $single) {
if(!empty($single['url']) && !empty($single['slug'])) {
@self::install_single_plugin($single['url']);
$this->disable_installed_plugins_redirect($single['slug']);
}
}
}
}
// If in the future we need to support settings.
//update_option( 'sby_settings', $sby_settings );
}
/**
* Dismiss Onboarding Wizard
*
* @since 2.2.4
*
* @return void
*/
public function ajax_dismiss_wizard(){
Util::ajaxPreflightChecks();
$sby_statuses_option = get_option( 'sby_statuses', array() );
$sby_statuses_option['wizard_dismissed'] = true;
update_option( 'sby_statuses', $sby_statuses_option );
wp_send_json_error();
}
/**
* Disable Installed Plugins Redirect
*
* @param string $plugin_slug
*
* @since 2.2.4
*
* @return void
*/
public function disable_installed_plugins_redirect($plugin_slug){
//Monster Insight
if( 'monsterinsights' === $plugin_slug ) {
delete_transient( '_monsterinsights_activation_redirect' );
}
//All in one SEO
if( 'aioseo' === $plugin_slug ) {
update_option( 'aioseo_activation_redirect', true );
}
//WPForms
if( 'wpforms' === $plugin_slug ) {
update_option( 'wpforms_activation_redirect', true );
}
//Optin Monster
if( 'optinmonster' === $plugin_slug ) {
delete_transient( 'optin_monster_api_activation_redirect' );
update_option( 'optin_monster_api_activation_redirect_disabled', true );
}
//Seed PROD
if( 'seedprod' === $plugin_slug ) {
update_option( 'seedprod_dismiss_setup_wizard', true );
}
//PushEngage
if( 'pushengage' === $plugin_slug ) {
delete_transient( 'pushengage_activation_redirect' );
}
//WP SMTP
if( 'wp_mail_smtp' === $plugin_slug ) {
delete_transient( 'wp_mail_smtp_activation_redirect' );
}
//Rafflepress
if( 'rafflepress' === $plugin_slug ) {
delete_transient( '_rafflepress_welcome_screen_activation_redirect' );
}
//Smash Plugin redirect remove
$this->disable_smash_installed_plugins_redirect($plugin_slug);
}
/**
* Disable Smash Balloon Plugins Redirect
*
* @param string $plugin_slug
*
* @since 2.2.4
*
* @return void
*/
public function disable_smash_installed_plugins_redirect($plugin_slug)
{
$smash_list = [
'facebook' => 'cff_plugin_do_activation_redirect',
'instagram' => 'sbi_plugin_do_activation_redirect',
'youtube' => 'sby_plugin_do_activation_redirect',
'twitter' => 'ctf_plugin_do_activation_redirect',
'reviews' => 'sbr_plugin_do_activation_redirect',
];
if(!empty($smash_list[self::$plugin_name])){
unset($smash_list[self::$plugin_name]);
}
if (!empty($smash_list[$plugin_slug])) {
delete_option($smash_list[$plugin_slug]);
}
}
}