oont-contents/plugins/sold-out-badge-for-woocommerce/classes/Settings.php
2025-02-08 15:10:23 +01:00

201 lines
No EOL
12 KiB
PHP

<?php
namespace CharlieEtienne\WCSOB;
use Carbon_Fields\Container;
use Carbon_Fields\Field;
use Carbon_Fields\Helper\Helper as CarbonHelper;
class Settings {
/**
* Add nav menu and declare fields
*
* @noinspection PhpPossiblePolymorphicInvocationInspection
*/
public static function add_plugin_settings_page() {
Container::make( 'theme_options', __( 'Sold Out Badge for WooCommerce', 'sold-out-badge-for-woocommerce' ) )
->set_page_file( 'wcsob' )
->set_page_parent( 'options-general.php' )
->add_fields(
[
// Content
Field::make( 'separator', 'wcsob_content', __( 'Content', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_text' . I18n::get_suffix(), __( 'Label', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( __( 'Sold out!', 'sold-out-badge-for-woocommerce' ) ),
// Colors
Field::make( 'separator', 'wcsob_colors', __( 'Colors', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'color', 'wcsob_background_color', __( 'Background Color', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( '#222222' )->set_width( 50 )
->set_help_text( __( 'Default #222222', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'color', 'wcsob_text_color', __( 'Text Color', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( '#ffffff' )->set_width( 50 )
->set_help_text( __( 'Default #ffffff', 'sold-out-badge-for-woocommerce' ) ),
// Other appearance settings
Field::make( 'separator', 'wcsob_other_appearance_settings', __( 'Other appearance settings', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_font_size', __( 'Font size', 'sold-out-badge-for-woocommerce' ) . ' (px)' )
->set_default_value( '12' )->set_attribute( 'type', 'number' )->set_width( 16 )->set_help_text( __( 'Default "12"', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_width', __( 'Width', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( 'auto' )->set_width( 16 )->set_help_text( __( 'Value in px or "auto". Default "auto".', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_height', __( 'Height', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( 'auto' )->set_width( 16 )->set_help_text( __( 'Value in px or "auto". Default "auto".', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_border_radius', __( 'Border radius', 'sold-out-badge-for-woocommerce' ) . ' (px)' )
->set_default_value( '0' )->set_attribute( 'type', 'number' )->set_width( 16 )->set_help_text( __( 'Default "0"', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'select', 'wcsob_font_weight', __( 'Font weight', 'sold-out-badge-for-woocommerce' ) )
->add_options( [ 'normal' => 'normal', 'bold' => 'bold', ] )
->set_default_value( 'bold' )->set_width( 16 )->set_help_text( __( 'Default "bold"', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_z_index', __( 'Z-index', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( '9999' )->set_attribute( 'type', 'number' )->set_width( 16 )
->set_help_text( __( 'Try to increase this value if your badge is still invisible. Default "9999".', 'sold-out-badge-for-woocommerce' ) ),
// Padding
Field::make( 'separator', 'wcsob_padding', __( 'Padding', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_padding_top', __( 'Padding top', 'sold-out-badge-for-woocommerce' ) . ' (px)' )
->set_default_value( '3' )->set_attribute( 'type', 'number' )->set_width( 25 )->set_help_text( __( 'Default "3"', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_padding_right', __( 'Padding right', 'sold-out-badge-for-woocommerce' ) . ' (px)' )
->set_default_value( '8' )->set_attribute( 'type', 'number' )->set_width( 25 )->set_help_text( __( 'Default "8"', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_padding_bottom', __( 'Padding bottom', 'sold-out-badge-for-woocommerce' ) . ' (px)' )
->set_default_value( '3' )->set_attribute( 'type', 'number' )->set_width( 25 )->set_help_text( __( 'Default "3"', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_padding_left', __( 'Padding left', 'sold-out-badge-for-woocommerce' ) . ' (px)' )
->set_default_value( '8' )->set_attribute( 'type', 'number' )->set_width( 25 )->set_help_text( __( 'Default "8"', 'sold-out-badge-for-woocommerce' ) ),
// Position (in product loop)
Field::make( 'separator', 'wcsob_position', __( 'Position (in product loop)', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_position_top', __( 'Position from top', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( '6' )->set_width( 25 )->set_help_text( __( 'Value in px or "auto". Default "6".', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_position_right', __( 'Position from right', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( 'auto' )->set_width( 25 )->set_help_text( __( 'Value in px or "auto". Default "auto".', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_position_bottom', __( 'Position from bottom', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( 'auto' )->set_width( 25 )->set_help_text( __( 'Value in px or "auto". Default "auto".', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_position_left', __( 'Position from left', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( '6' )->set_width( 25 )->set_help_text( __( 'Value in px or "auto". Default "6".', 'sold-out-badge-for-woocommerce' ) ),
// Position (in single product)
Field::make( 'separator', 'wcsob_single_position', __( 'Position (in single product)', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_single_position_top', __( 'Position from top', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( '6' )->set_width( 25 )->set_help_text( __( 'Value in px or "auto". Default "6".', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_single_position_right', __( 'Position from right', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( 'auto' )->set_width( 25 )->set_help_text( __( 'Value in px or "auto". Default "auto".', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_single_position_bottom', __( 'Position from bottom', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( 'auto' )->set_width( 25 )->set_help_text( __( 'Value in px or "auto". Default "auto".', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'text', 'wcsob_single_position_left', __( 'Position from left', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( '6' )->set_width( 25 )->set_help_text( __( 'Value in px or "auto". Default "6".', 'sold-out-badge-for-woocommerce' ) ),
// Other settings
Field::make( 'separator', 'wcsob_other_settings', __( 'Other settings', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'checkbox', 'wcsob_hide_sale_flash', __( 'Hide Sale badge?', 'sold-out-badge-for-woocommerce' ) )
->set_help_text( __( 'Do you want to hide the "Sale!" badge when a product is sold out?', 'sold-out-badge-for-woocommerce' ) . ' ' . __( 'Checked by default.', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( true ),
Field::make( 'multiselect', 'wcsob_behaviour', __( 'Behaviour', 'sold-out-badge-for-woocommerce' ) )
->set_options( [
'out-of-stock' => __( 'Display on "out of stock" products (default)', 'sold-out-badge-for-woocommerce' ),
'backorder' => __( 'Display on "available on backorder" products', 'sold-out-badge-for-woocommerce' ),
] )
->set_default_value( 'out-of-stock' )
->set_help_text( __( 'Choose whether to display badge on "out of stock" products (default) or/and on "available on backorder" products', 'sold-out-badge-for-woocommerce' ) ),
Field::make( 'checkbox', 'wcsob_alt_method', __( 'Use alternative method? (pure CSS)', 'sold-out-badge-for-woocommerce' ) )
->set_help_text( __( 'Try this method in case of odd badge placement or if the badge does not show. Useful for some themes like Divi. The <code>.product</code> div needs to have a <code>.outofstock</code> class.', 'sold-out-badge-for-woocommerce' ) . ' ' . __( 'Unchecked by default.', 'sold-out-badge-for-woocommerce' ) )
->set_default_value( false ),
] );
}
public static function get_option( string $option ) {
return carbon_get_theme_option( $option );
}
public static function get_value( string $option, string $format = "" ): string {
return sprintf( "%s%s",
esc_html( self::get_option( $option ) ),
empty( $format ) ? "" : $format
);
}
public static function get_text( string $option ): string {
if ( empty( I18n::get_theme_option( $option ) ) ) {
return esc_html__( self::get_option( $option ), 'sold-out-badge-for-woocommerce' );
}
return esc_html( I18n::get_theme_option( $option ) );
}
public static function get_behaviour() {
return self::get_option( 'wcsob_behaviour' );
}
/**
* Get value and append "px" if numeric, or "auto" if auto, or default value
*
* @param string $option
*
* @return mixed|string
*/
public static function get_value_from_string( string $option ) {
if ( is_numeric( self::get_option( $option ) ) ) {
return self::get_value( $option, 'px' );
} elseif ( 'auto' === self::get_option( $option ) ) {
return 'auto';
} else {
return self::get_default_value( $option );
}
}
public static function get_default_value( $option ) {
$field = CarbonHelper::get_field( 'theme_options', null, $option );
if ( ! isset( $field ) ) {
return '';
}
return $field->get_default_value();
}
/**
* @return mixed
*/
public static function should_hide_sale_flash() {
return self::get_option( 'wcsob_hide_sale_flash' );
}
/**
* Check if we are using alternative method
*
* @return mixed
*/
public static function use_alt_method() {
return self::get_option( 'wcsob_alt_method' );
}
/**
* Hide per product
*
* @return void
*/
public static function hide_per_product(): void {
global $product_object;
$values = $product_object->get_meta( '_wcsob_hide' );
woocommerce_wp_checkbox(
[
'id' => '_wcsob_hide',
'label' => __( 'Sold Out Badge: Exclude', 'sold-out-badge-for-woocommerce' ),
'description' => __( 'Don\'t display SOLD OUT! badge on this product.', 'sold-out-badge-for-woocommerce' ),
'value' => empty( $values ) ? 'no' : $values,
] );
}
/**
* @param $product
*
* @return void
*/
public static function save_hide_per_product( $product ): void {
$product->update_meta_data( '_wcsob_hide', isset( $_POST[ '_wcsob_hide' ] ) ? 'yes' : 'no' );
}
}