Files
carpseeds.pl/wp-content/plugins/przelewy24/includes/class-p24-product-trait.php
2024-07-15 11:28:08 +02:00

166 lines
4.5 KiB
PHP

<?php
/**
* File that define P24_Product_Trait trait.
*
* @package Przelewy24
*/
defined( 'ABSPATH' ) || exit;
/**
* Trait with common methods for overwritten objects.
*/
trait P24_Product_Trait {
/**
* A getter.
*
* Should be defined in parent class of classes including this trait.
*
* @param string $prop The name of prop.
* @param string $context The name of context.
* @return mixed
*/
abstract protected function get_prop( $prop, $context = 'view' );
/**
* A setter for internal variables.
*
* Should be defined in parent class of classes including this trait.
*
* @param string $prop The name of prop.
* @param mixed $value The value of prop.
* @return mixed
*/
abstract protected function set_prop( $prop, $value );
/**
* Common code to run in constructor.
*/
protected function populate_internal_data() {
$this->data[ P24_Product_Keys::KEY_CURRENCY ] = get_woocommerce_currency();
$this->data[ P24_Product_Keys::KEY_DEFAULT_CURRENCY_PRICE ] = '';
$this->data[ P24_Product_Keys::KEY_DEFAULT_CURRENCY_REGULAR_PRICE ] = '';
$this->data[ P24_Product_Keys::KEY_DEFAULT_CURRENCY_SALE_PRICE ] = '';
}
/**
* Compute price native to object.
*
* The object has own currency.
* The false values have special meaning.
*
* @param mixed $price Price in default currency.
* @return mixed
* @throws LogicException If currency is not found.
*/
protected function compute_native_price( $price ) {
$currency = $this->get_currency();
$multi_currency = get_przelewy24_plugin_instance()->get_multi_currency_instance();
return $multi_currency->compute_price_in_currency( $price, $currency );
}
/**
* Get currency of the object.
*
* @param string $context The name of context.
* @return mixed
*/
public function get_currency( $context = 'view' ) {
return $this->get_prop( P24_Product_Keys::KEY_CURRENCY, $context );
}
/**
* Set the product's active price.
*
* @param string $price Price in default currency.
*/
public function set_price( $price ) {
$native_price = $this->compute_native_price( $price );
$this->set_prop( 'price', wc_format_decimal( $native_price ) );
$this->set_prop( 'default_currency_price', wc_format_decimal( $price ) );
}
/**
* Get price.
* It is in base currency for editing.
*
* @param string $context Name of context.
* @return mixed
*/
public function get_price( $context = 'view' ) {
if ( 'edit' === $context ) {
return $this->get_prop( 'default_currency_price', $context );
} else {
return $this->get_prop( 'price', $context );
}
}
/**
* Set the product's regular price.
*
* @param string $price Price in default currency.
*/
public function set_regular_price( $price ) {
$native_price = $this->compute_native_price( $price );
$this->set_prop( 'regular_price', wc_format_decimal( $native_price ) );
$this->set_prop( 'default_currency_regular_price', wc_format_decimal( $price ) );
}
/**
* Get regular price.
* It is in base currency for editing.
*
* @param string $context Name of context.
* @return mixed
*/
public function get_regular_price( $context = 'view' ) {
if ( 'edit' === $context ) {
return $this->get_prop( 'default_currency_regular_price', $context );
} else {
return $this->get_prop( 'regular_price', $context );
}
}
/**
* Set the product's sale price.
*
* @param string $price Price in default currency.
*/
public function set_sale_price( $price ) {
$native_price = $this->compute_native_price( $price );
$this->set_prop( 'sale_price', wc_format_decimal( $native_price ) );
$this->set_prop( 'default_currency_sale_price', wc_format_decimal( $price ) );
}
/**
* Get sale price.
* It is in base currency for editing.
*
* @param string $context Name of context.
* @return mixed
*/
public function get_sale_price( $context = 'view' ) {
if ( 'edit' === $context ) {
return $this->get_prop( 'default_currency_sale_price', $context );
} else {
return $this->get_prop( 'sale_price', $context );
}
}
/**
* Overwrite currency of product.
*
* @param string $new_currency New currency.
* @return void
*/
public function overwrite_currency( $new_currency ) {
$price = $this->get_price( 'edit' );
$regular_price = $this->get_regular_price( 'edit' );
$sale_price = $this->get_sale_price( 'edit' );
$this->set_prop( P24_Product_Keys::KEY_CURRENCY, $new_currency );
$this->set_price( $price );
$this->set_regular_price( $regular_price );
$this->set_sale_price( $sale_price );
}
}