Files
homeproz/wp-content/plugins/webp-converter-for-media/src/Service/DeactivationModalLoader.php
T

236 lines
8.0 KiB
PHP
Executable File

<?php
namespace WebpConverter\Service;
use WebpConverter\Error\Notice\LibsNotInstalledNotice;
use WebpConverter\Error\Notice\LibsWithoutWebpSupportNotice;
use WebpConverter\HookableInterface;
use WebpConverter\PluginData;
use WebpConverter\PluginInfo;
use WebpConverter\Settings\Page\AdvancedSettingsPage;
use WebpConverter\Settings\Page\PageIntegrator;
use WebpConverterVendor\MattPlugins\DeactivationModal;
/**
* Initiates the popup displayed when the plugin is deactivated.
*/
class DeactivationModalLoader implements HookableInterface {
const API_URL = 'https://data.mattplugins.com/deactivations/%s';
/**
* @var PluginInfo
*/
private $plugin_info;
/**
* @var PluginData
*/
private $plugin_data;
/**
* @var StatsManager
*/
private $stats_manager;
public function __construct(
PluginInfo $plugin_info,
PluginData $plugin_data,
?StatsManager $stats_manager = null
) {
$this->plugin_info = $plugin_info;
$this->plugin_data = $plugin_data;
$this->stats_manager = $stats_manager ?: new StatsManager();
}
/**
* {@inheritdoc}
*/
public function init_hooks() {
add_action( 'load-plugins.php', [ $this, 'load_modal' ] );
}
/**
* @return void
* @throws DeactivationModal\Exception\DuplicatedFormOptionKeyException
* @throws DeactivationModal\Exception\DuplicatedFormValueKeyException
* @internal
*/
public function load_modal() {
new DeactivationModal\Modal(
$this->plugin_info->get_plugin_slug(),
new DeactivationModal\Model\FormTemplate(
sprintf( self::API_URL, $this->plugin_info->get_plugin_slug() ),
sprintf(
/* translators: %s: plugin name */
__( 'We are sorry that you are leaving our %s plugin', 'webp-converter-for-media' ),
'Converter for Media'
),
__( 'Can you, please, take a moment to tell us why you are deactivating this plugin (anonymous answer)?', 'webp-converter-for-media' ),
__( 'Submit and Deactivate', 'webp-converter-for-media' ),
__( 'Skip and Deactivate', 'webp-converter-for-media' ),
$this->load_notice_message()
),
( new DeactivationModal\Model\FormOptions() )
->set_option(
new DeactivationModal\Model\FormOption(
'server_config',
10,
sprintf(
/* translators: %s: notice title */
__( 'I have the %s notice in the plugin settings', 'webp-converter-for-media' ),
__( 'Server configuration error', 'webp-converter-for-media' )
),
function () {
$errors = apply_filters( 'webpc_server_errors', [] );
if ( ! in_array(
$errors,
[ [ LibsWithoutWebpSupportNotice::ERROR_KEY ], [ LibsNotInstalledNotice::ERROR_KEY ] ]
) ) {
return null;
}
return sprintf(
/* translators: %1$s: open anchor tag, %2$s: close anchor tag */
__( 'If your server does not meet the technical requirements, you can use "Remote server" as "Conversion method", in %1$sthe plugin settings%2$s.', 'webp-converter-for-media' ),
'<a href="' . esc_url( PageIntegrator::get_settings_page_url() ) . '">',
'</a>'
);
},
__( 'What is your error? Have you been looking for a solution to this issue?', 'webp-converter-for-media' )
)
)
->set_option(
new DeactivationModal\Model\FormOption(
'misunderstanding',
20,
__( 'Images are not displayed in the WebP format', 'webp-converter-for-media' ),
function () {
return sprintf(
/* translators: %1$s: open anchor tag, %2$s: close anchor tag */
__( 'Check out %1$sour instructions%2$s and see how to check if the plugin is working properly.', 'webp-converter-for-media' ),
'<a href="https://url.mattplugins.com/converter-deactivation-misunderstanding-instruction" target="_blank">',
'</a>'
);
},
__( 'Did you check the operation of the plugin in accordance with the instructions?', 'webp-converter-for-media' )
)
)
->set_option(
new DeactivationModal\Model\FormOption(
'website_broken',
30,
__( 'This plugin broke my website', 'webp-converter-for-media' ),
function () {
return sprintf(
/* translators: %1$s: option label, %2$s: open anchor tag, %3$s: close anchor tag */
__( 'Check the %1$s option in %2$sthe plugin settings%3$s - this should solve the problem.', 'webp-converter-for-media' ),
__( 'Disable rewrite inheritance in .htaccess files', 'webp-converter-for-media' ),
'<a href="' . esc_url( PageIntegrator::get_settings_page_url( AdvancedSettingsPage::PAGE_SLUG ) ) . '">',
'</a>'
);
},
__( 'What exactly happened?', 'webp-converter-for-media' )
)
)
->set_option(
new DeactivationModal\Model\FormOption(
'better_plugin',
40,
__( 'I found a better plugin', 'webp-converter-for-media' ),
null,
__( 'What is the name of this plugin? Why is it better?', 'webp-converter-for-media' )
)
)
->set_option(
new DeactivationModal\Model\FormOption(
'temporary_deactivation',
50,
__( 'This is a temporary deactivation', 'webp-converter-for-media' ),
null,
null
)
)
->set_option(
new DeactivationModal\Model\FormOption(
'other',
60,
__( 'Other reason', 'webp-converter-for-media' ),
null,
__( 'What is the reason? What can we improve for you?', 'webp-converter-for-media' )
)
),
( new DeactivationModal\Model\FormValues() )
->set_value(
new DeactivationModal\Model\FormValue(
'request_error_codes',
function () {
return implode( ',', apply_filters( 'webpc_server_errors', [] ) );
}
)
)
->set_value(
new DeactivationModal\Model\FormValue(
'request_plugin_settings',
function () {
$settings_json = json_encode( $this->plugin_data->get_plugin_settings_public() );
return base64_encode( $settings_json ?: '' ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions
}
)
)
->set_value(
new DeactivationModal\Model\FormValue(
'request_plugin_stats',
function () {
$stats_data = [
'usage_time' => $this->stats_manager->get_plugin_usage_time(),
'first_version' => $this->stats_manager->get_plugin_first_version(),
'regeneration_images' => $this->stats_manager->get_regeneration_images(),
'webp_all' => $this->stats_manager->get_images_webp_all(),
'webp_unconverted' => $this->stats_manager->get_images_webp_unconverted(),
'avif_all' => $this->stats_manager->get_images_avif_all(),
'avif_unconverted' => $this->stats_manager->get_images_avif_unconverted(),
'rewrite_root' => PathsGenerator::get_rewrite_root(),
'rewrite_path' => PathsGenerator::get_rewrite_path(),
];
$stats_json = json_encode( $stats_data );
return base64_encode( $stats_json ?: '' ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions
}
)
)
->set_value(
new DeactivationModal\Model\FormValue(
'request_plugin_version',
function () {
return $this->plugin_info->get_plugin_version();
}
)
)
);
}
/**
* @return string|null
*/
private function load_notice_message(): ?string {
if ( ( apply_filters( 'webpc_server_errors', [] ) !== [] ) || is_multisite() ) {
return null;
}
$images_all = $this->stats_manager->get_images_webp_all() ?: 0;
$images_left = $this->stats_manager->get_images_webp_unconverted() ?: 0;
if ( ( $images_all === 0 ) || ( $images_left === 0 ) ) {
return null;
}
return sprintf(
/* translators: %1$s: button label, %2$s: open anchor tag, %3$s: close anchor tag */
__( 'You have unconverted images on your website - click the %1$s button in %2$sthe plugin settings%3$s. This is all you need to do after installing the plugin.', 'webp-converter-for-media' ),
'"' . __( 'Start Bulk Optimization', 'webp-converter-for-media' ) . '"',
'<a href="' . esc_url( admin_url( 'upload.php?page=' . PageIntegrator::UPLOAD_MENU_PAGE ) ) . '">',
'</a>'
);
}
}