plugin_name = $plugin_name;
$this->version = $version;
}
/**
* Enqueue scripts and styles
*
*/
public function enqueue_scripts_styles( $hook_suffix ) {
if ( $hook_suffix == 'toplevel_page_quickwebp-settings' || $hook_suffix == 'media_page_quickwebp-settings' ) {
$admin_main_settings_assets = include( QUICKWEBP_PLUGIN_PATH . 'public/assets/build/admin-main-settings.asset.php' );
wp_enqueue_style( 'quickwebpoi_admin_main_settings', QUICKWEBP_PLUGIN_URL . 'public/assets/build/admin-main-settings.css', array(), $admin_main_settings_assets['version'], 'all' );
wp_enqueue_script( 'quickwebpoi_admin_main_settings', QUICKWEBP_PLUGIN_URL . 'public/assets/build/admin-main-settings.js', $admin_main_settings_assets['dependencies'], $admin_main_settings_assets['version'], true );
wp_localize_script( 'quickwebpoi_admin_main_settings', 'QUICKWEBP_ADMIN_SETTINGS', array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'image_optimize_nonce' ),
'preview_image_data' => $this->get_preview_image_data(),
'default_image_url' => QUICKWEBP_PLUGIN_URL . 'public/assets/img/preview.jpg',
));
}
}
/**
* add_settings_menu
*
* @return void
*/
public function add_settings_menu() {
add_submenu_page(
'upload.php',
__('QuickWebP Settings', 'quickwebp'),
__('QuickWebP', 'quickwebp'),
'manage_options',
'quickwebp-settings',
array( $this, 'render_settings_page' )
);
}
/**
* render_settings_page
*
* @return void
*/
public function render_settings_page() {
global $is_nginx, $quickwebp_surecart_client;
$php_version_valid = version_compare( PHP_VERSION, '8.1', '>=' );
$license_valid = false;
if ( $quickwebp_surecart_client ) {
$license_valid = $quickwebp_surecart_client->license()->is_valid();
}
//phpcs:ignore WordPress.Security.NonceVerification.Missing
if ( isset( $_POST['quickwebp_settings_conversion'] ) ) {
update_option( 'quickwebp_settings_onboarding_completed', '1' );
}
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
$wpmtk_is_active = in_array( 'wpmastertoolkit/wp-mastertoolkit.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) );
$show_onboarding = '1' !== (string) get_option( 'quickwebp_settings_onboarding_completed', '0' );
$conversion = get_option( 'quickwebp_settings_conversion', quickwebp_settings_default( 'quickwebp_settings_conversion' ) );
$conversion_enabled = '1' === (string) $conversion;
$save_original = get_option( 'quickwebp_settings_conversion_save_original', quickwebp_settings_default( 'quickwebp_settings_conversion_save_original' ) );
$save_original = is_array( $save_original ) ? $save_original : array();
$save_original_enabled = in_array( 'checked', $save_original, true );
$display_mode = get_option( 'quickwebp_settings_conversion_display_webp_mode', quickwebp_settings_default( 'quickwebp_settings_conversion_display_webp_mode' ) );
$conversion_quality = get_option( 'quickwebp_settings_conversion_quality', quickwebp_settings_default( 'quickwebp_settings_conversion_quality' ) );
$profile_label = __( 'Custom profile', 'quickwebp' );
if ( $conversion_enabled && ! $save_original_enabled ) {
$profile_label = __( 'New site profile', 'quickwebp' );
}
if ( $conversion_enabled && $save_original_enabled ) {
$profile_label = __( 'Existing site profile', 'quickwebp' );
}
$preview_image_data = $this->get_preview_image_data();
$preview_image_data_webp = $preview_image_data['1_' . $conversion_quality] ?? $preview_image_data['1_medium'];
$preview_image_data_avif = $preview_image_data['2_' . $conversion_quality] ?? $preview_image_data['2_medium'];
require_once QUICKWEBP_PLUGIN_PATH . 'admin/templates/page-settings.php';
}
/**
* render_component
*
* @param mixed $data
* @return void
*/
public function render_component( $data = array() ) {
$data['type'] = $data['type'] ?? 'text';
$data['name'] = $data['name'] ?? '';
$file_name = $data['type'] == 'text' || $data['type'] == 'email' || $data['type'] == 'tel' || $data['type'] == 'number' ? 'text' : $data['type'];
$path_to_component = QUICKWEBP_PLUGIN_PATH . 'admin/components/' . $file_name . '.php';
if( file_exists( $path_to_component ) ) {
?>
|
|
|
Settings', 'quickwebp' ),
esc_url( admin_url( 'upload.php?page=quickwebp-settings' ) )
);
}
return array_merge( $new_actions, $plugin_actions );
}
/**
* Display web mode changed
*/
public function add_rewrite_rules( $values ) {
global $is_apache, $is_iis7, $is_nginx;
include_once QUICKWEBP_PLUGIN_PATH . 'admin/rewrite-rules/class-apache.php';
include_once QUICKWEBP_PLUGIN_PATH . 'admin/rewrite-rules/class-nginx.php';
include_once QUICKWEBP_PLUGIN_PATH . 'admin/rewrite-rules/class-iis.php';
$old_value = get_option( 'quickwebp_settings_conversion_display_webp_mode', quickwebp_settings_default('quickwebp_settings_conversion_display_webp_mode') );
$is_rewrite = 'rewrite' === $values;
$was_rewrite = 'rewrite' === $old_value;
$add_or_remove = false;
if ( $is_rewrite && !$was_rewrite ) {
$add_or_remove = 'add';
} elseif ( !$is_rewrite && $was_rewrite ) {
$add_or_remove = 'remove';
} else {
return $values;
}
if ( $is_apache ) {
$rules = new Quickwebp_Apache();
} elseif ( $is_iis7 ) {
$rules = new Quickwebp_IIS();
} elseif ( $is_nginx ) {
$rules = new Quickwebp_Nginx();
} else {
return $values;
}
if ( 'add' === $add_or_remove ) {
$result = $rules->add();
} else {
$result = $rules->remove();
}
if ( is_wp_error( $result ) ) {
add_action( 'admin_notices', function() use ( $result ) {
?>
get_error_message() ); ?>
is_conversion_enabled_from_request_or_option();
if ( ! $conversion_enabled ) {
return 'disabled';
}
$save_original = $this->is_save_original_enabled_from_request_or_option();
if ( ! $save_original ) {
return 'disabled';
}
if ( 'disabled' === $value ) {
return 'picture';
}
return $value;
}
/**
* Get whether original images should be preserved.
*/
private function is_save_original_enabled_from_request_or_option() {
//phpcs:ignore WordPress.Security.NonceVerification.Missing
if ( isset( $_POST['quickwebp_settings_conversion_save_original'] ) ) {
//phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$raw_value = wp_unslash( $_POST['quickwebp_settings_conversion_save_original'] );
if ( is_array( $raw_value ) ) {
$raw_value = array_map( 'sanitize_text_field', $raw_value );
return in_array( 'checked', $raw_value, true );
}
return false;
}
$saved_value = get_option(
'quickwebp_settings_conversion_save_original',
quickwebp_settings_default( 'quickwebp_settings_conversion_save_original' )
);
$saved_value = is_array( $saved_value ) ? $saved_value : array();
return in_array( 'checked', $saved_value, true );
}
/**
* Get whether image conversion is enabled.
*/
private function is_conversion_enabled_from_request_or_option() {
//phpcs:ignore WordPress.Security.NonceVerification.Missing
if ( isset( $_POST['quickwebp_settings_conversion'] ) ) {
//phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$raw_value = wp_unslash( $_POST['quickwebp_settings_conversion'] );
$raw_value = sanitize_text_field( (string) $raw_value );
return '1' === $raw_value;
}
$saved_value = get_option(
'quickwebp_settings_conversion',
quickwebp_settings_default( 'quickwebp_settings_conversion' )
);
return '1' === (string) $saved_value;
}
/**
* Data for the preview image used in the settings page.
*/
private function get_preview_image_data() {
return array(
'name' => 'preview.jpg',
'size' => '423.17 KB',
'dimensions' => '1264 x 848',
'1_low' => array(
'size' => '175.32 KB',
'save' => '247.85 KB',
'save_percent' => '59%',
'percent' => '41%',
),
'1_medium' => array(
'size' => '196.08 KB',
'save' => '227.09 KB',
'save_percent' => '54%',
'percent' => '46%',
),
'1_high' => array(
'size' => '229.29 KB',
'save' => '193.88 KB',
'save_percent' => '46%',
'percent' => '54%',
),
'1_extra_high' => array(
'size' => '387.46 KB',
'save' => '35.71 KB',
'save_percent' => '8%',
'percent' => '92%',
),
'2_low' => array(
'size' => '73.44 KB',
'save' => '349.73 KB',
'save_percent' => '83%',
'percent' => '17%',
),
'2_medium' => array(
'size' => '120.06 KB',
'save' => '303.11 KB',
'save_percent' => '72%',
'percent' => '28%',
),
'2_high' => array(
'size' => '183.21 KB',
'save' => '239.96 KB',
'save_percent' => '57%',
'percent' => '43%',
),
'2_extra_high' => array(
'size' => '290.54 KB',
'save' => '132.63 KB',
'save_percent' => '31%',
'percent' => '69%',
),
);
}
}