Files
medicalalert-web-reloaded/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommobject.php
2024-09-25 09:25:31 -04:00

170 lines
4.3 KiB
PHP

<?php
/**
* All object details.
*
* @link https://makewebbetter.com/
* @since 1.0.0
*
* @package makewebbetter-hubspot-for-woocommerce
* @subpackage makewebbetter-hubspot-for-woocommerce/includes
*/
/**
* Stores all object data that needs to be updated on hubspot.
*
* Provide a list of properties and associated data for objects
* so that at the time of updating a object on hubspot we can
* simply create an instance of this class and get everything
* managed.
*
* @package makewebbetter-hubspot-for-woocommerce
* @subpackage makewebbetter-hubspot-for-woocommerce/includes
*/
class HubwooEcommObject {
/**
* Object in the form of acceptable by hubspot.
*
* @since 1.0.0
* @var json
*/
public $_object_type;
/**
* WooCommerce Object ID
*
* @since 1.0.0
* @var json
*/
public $_object_id;
/**
* Object Properties.
*
* @since 1.0.0
* @var Array
*/
private $_properties = array();
/**
* Instance of HubwooEcommPropertyCallbacks class
*
* @since 1.0.0
* @var $_callback_instance
*/
private $_callback_instance = null;
/**
* Load the modified object properties.
*
* Set all the modified object properties so that they will be
* ready in the form of directly acceptable by hubspot api.
*
* @param int $id object id.
* @param string $object_type ecomm object type.
* @since 1.0.0
*/
public function __construct( $id, $object_type ) {
// load the object id in the class property.
$this->_object_id = $id;
// load the object type in the class property.
$this->_object_type = $object_type;
// store the instance of property callback.
$this->_callback_instance = new HubwooEcommPropertyCallbacks( $this->_object_id, $this->_object_type );
// prepare the modified fields data and store it in the object.
$this->prepare_modified_fields();
}
/**
* All properties for sync messages.
*
* @return array and key value pair array of properties.
* @since 1.0.0
*/
public function get_object_properties() {
// let others decide if they have modified fields in there integration.
$this->_properties = apply_filters( 'hubwoo_ecomm_' . $this->_object_type . '_modified_fields', $this->_properties, $this->_object_id );
return $this->_properties;
}
/**
* All properties for creation
*
* @return array and key value pair array of properties.
* @since 1.0.0
*/
public function get_object_properties_for_creation() {
$modified_fields = HubwooEcommProperties::get_instance()->hubwoo_ecomm_get_properties_for_object( $this->_object_type );
$properties = array();
if ( is_array( $modified_fields ) && count( $modified_fields ) ) {
foreach ( $modified_fields as $single_field ) {
$property_val = $this->_return_property_value( $single_field );
if ( ! empty( $property_val ) ) {
$properties[] = array(
'name' => $single_field,
'value' => $property_val,
);
}
}
}
return $properties;
}
/**
* Format modified fields of customer.
*
* Check for all the modified fields till the last update
* and prepare them in the hubspot api acceptable form.
*
* @since 1.0.0
*/
private function prepare_modified_fields() {
// need to update all fields, so lets get all the properties that we are working with.
$modified_fields = HubwooEcommProperties::get_instance()->hubwoo_ecomm_get_properties_for_object( $this->_object_type );
if ( is_array( $modified_fields ) && count( $modified_fields ) ) {
foreach ( $modified_fields as $single_field ) {
$property = $this->_return_property_value( $single_field );
if ( ! empty( $property ) ) {
$this->_properties[ $single_field ] = $property;
}
}
}
}
/**
* Prepare property in the form of key value accepted by hubspot.
*
* @param array $property_name array of the property details to validate the value.
* @return string property value
*/
public function _return_property_value( $property_name ) {
// if property name is not empty.
if ( ! empty( $property_name ) ) {
// get property value.
$property_val = $this->_callback_instance->_get_object_property_value( $property_name, $this->_object_id );
return $property_val;
}
}
}