<?php namespace PriorPrice; class SettingsData { /** * Register hooks. * * @since 1.2 * * @return void */ public function register_hooks() : void { add_action( 'admin_init', [ $this, 'set_defaults' ] ); } /** * Set default settings. * * @since 1.2 * * @return void */ public function set_defaults() : void { $update = false; $settings = get_option( 'wc_price_history_settings' ); // Handle settings added in 1.2. if ( $settings === false ) { $settings = [ 'display_on' => [ 'product_page' => '1', 'shop_page' => '1', ], 'display_when' => 'on_sale', 'days_number' => '30', 'count_from' => 'sale_start', ]; $update = true; } // Handle settings added in 1.3. if ( ! isset( $settings['display_text'] ) || $settings['display_text'] === '30-day low: %s' ) { /* translators: Do not translate {price}, it is template slug! */ $settings['display_text'] = esc_html__( '30-day low: {price}', 'wc-price-history' ); $update = true; } if ( ! isset( $settings['old_history'] ) ) { $settings['old_history'] = 'custom_text'; // 'hide', 'current_price', 'custom_text' $settings['old_history_custom_text'] = esc_html__( 'Price in the last {days} days is the same as current', 'wc-price-history' ); $update = true; } if ( ! isset( $settings[ FirstScan::OPTION_NAME ] ) ) { $settings[ FirstScan::OPTION_NAME ] = FirstScan::SCAN_NOT_STARTED; $update = true; } if ( ! isset( $settings['variable_product_defer_lowest_price'] ) ) { $settings['variable_product_defer_lowest_price'] = false; $update = true; } if ( ! isset( $settings['variable_product_defer_placeholder_text'] ) ) { $settings['variable_product_defer_placeholder_text'] = esc_html__( 'Select a variant to see the lowest price', 'wc-price-history' ); $update = true; } if ( $update ) { update_option( 'wc_price_history_settings', $settings ); } } /** * Set all settings. * * @since 2.1.3 * * @param array<string, mixed> $settings Settings. * * @return void */ public function set_all_settings( array $settings ): void { update_option( 'wc_price_history_settings', $settings ); } /** * Get all settings. * * @since 2.1.3 * * @return array<string, mixed> */ public function get_settings(): array { return get_option( 'wc_price_history_settings' ); } /** * Get the display on settings. * * @since 1.2 * * @return array<array<bool>> */ public function get_display_on() : array { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['display_on'] ) ) { return []; } return $settings['display_on']; } /** * Get the display when settings. * * @since 1.2 * * @return string */ public function get_display_when() : string { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['display_when'] ) ) { return 'always'; } return $settings['display_when']; } /** * Get days settings. * * @since 1.2 * * @return int */ public function get_days_number() : int { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['days_number'] ) ) { return 30; } return (int) $settings['days_number']; } /** * Get count from setting. * * @since 1.2 * * @return string */ public function get_count_from() : string { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['count_from'] ) ) { return 'sale_start'; } return $settings['count_from']; } /** * Get display_text setting. * * @since 1.3 * * @return string */ public function get_display_text() : string { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['display_text'] ) ) { /* translators: %s - the lowest price in the last 30 days. */ $old_format = esc_html__( '30-day low: %s', 'wc-price-history' ); $with_placeholders = str_replace( [ '30', '%s' ], [ '{days}', '{price}' ], $old_format ); return $with_placeholders; } return esc_html( $settings['display_text'] ); } /** * Get display line through setting. * * @since 1.7 * * @return bool */ public function get_display_line_through() : bool { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['display_line_through'] ) ) { return false; } return (bool) $settings['display_line_through']; } /** * Get old history setting. * * @since 1.9.0 * * @return string */ public function get_old_history() : string { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['old_history'] ) ) { return 'hide'; } return $settings['old_history']; } /** * Get old history custom text setting. * * @since 1.9.0 * * @return string */ public function get_old_history_custom_text() : string { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['old_history_custom_text'] ) ) { return esc_html__( 'Price in the last {days} days is the same as current', 'wc-price-history' ); } return esc_html( $settings['old_history_custom_text'] ); } /** * Get old history custom text setting. * * @since 2.0 * * @return int */ public function get_first_scan_status(): int { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings[ FirstScan::OPTION_NAME ] ) ) { return FirstScan::SCAN_NOT_STARTED; } return (int) $settings[ FirstScan::OPTION_NAME ]; } /** * Set first scan status. * * @since 2.0 * * @param int $status Status. * * @return void */ public function set_first_scan_status( int $status ): void { $settings = get_option( 'wc_price_history_settings' ); $settings[ FirstScan::OPTION_NAME ] = $status; update_option( 'wc_price_history_settings', $settings ); } /** * Get variable product defer lowest price setting. * * When true, lowest price for variable products is shown only after a variant is selected. * * @since 3.2.0 * * @return bool */ public function get_variable_product_defer_lowest_price(): bool { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['variable_product_defer_lowest_price'] ) ) { return false; } return (bool) $settings['variable_product_defer_lowest_price']; } /** * Get variable product placeholder text (shown before variant is selected). * * @since 3.2.0 * * @return string */ public function get_variable_product_defer_placeholder_text(): string { $settings = get_option( 'wc_price_history_settings' ); if ( ! isset( $settings['variable_product_defer_placeholder_text'] ) || $settings['variable_product_defer_placeholder_text'] === '' ) { return ''; } return esc_html( $settings['variable_product_defer_placeholder_text'] ); } }