CMXX - Catalog API
This commit is contained in:
141
api/v2/get/catalog.php
Normal file
141
api/v2/get/catalog.php
Normal file
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
defined($security_key) or exit;
|
||||
|
||||
//------------------------------------------
|
||||
// Catalog
|
||||
//------------------------------------------
|
||||
|
||||
//------------------------------------------
|
||||
//Create Catalog
|
||||
//------------------------------------------
|
||||
$catalog = []; // Main catalog array
|
||||
|
||||
//------------------------------------------
|
||||
//GET ACTIVE AND SALES RELATED PRODUCTS
|
||||
//------------------------------------------
|
||||
|
||||
$filter = (isset($get_content) && $get_content !='') ? '&'.$get_content : '';
|
||||
|
||||
//GET PRODUCTS
|
||||
$api_url = '/v2/products/salesflag=1&status=1'.$filter;
|
||||
$products = ioApi($api_url,'',$clientsecret);
|
||||
$products = json_decode($products,true);
|
||||
|
||||
foreach ($products as $product) {
|
||||
|
||||
//------------------------------------------
|
||||
// Create product entry in catalog if it doesn't exist
|
||||
//------------------------------------------
|
||||
if (!isset($catalog[$product['rowID']])) {
|
||||
$catalog[$product['rowID']] = $product;
|
||||
$catalog[$product['rowID']]['versions'] = []; // Changed to versions array
|
||||
}
|
||||
|
||||
//------------------------------------------
|
||||
//Check for configurations and add to product
|
||||
//------------------------------------------
|
||||
if (isset($product['configurable']) && $product['configurable'] == 1){
|
||||
|
||||
//GET ACTIVE CONFIGURATIONS ITEMS BASED ON ACTIVE VERSIONS
|
||||
$api_url = '/v2/products_configurations/status=1&version_status=1&productrowid='.$product['rowID'] ;
|
||||
$product_config = ioApi($api_url,'',$clientsecret);
|
||||
$product_config = json_decode($product_config,true);
|
||||
|
||||
//------------------------------------------
|
||||
// Group configurations by version
|
||||
//------------------------------------------
|
||||
$version_configurations = [];
|
||||
|
||||
foreach ($product_config as $item) {
|
||||
if ($item['productrowid'] == $product['rowID']) {
|
||||
// Initialize version array if it doesn't exist
|
||||
if (!isset($version_configurations[$item['version']])) {
|
||||
$version_configurations[$item['version']] = [
|
||||
'version_id' => $item['version'],
|
||||
'config_setting' => $item['config'],
|
||||
'configurations' => []
|
||||
];
|
||||
}
|
||||
|
||||
if ($item['type'] == 'product') {
|
||||
$version_configurations[$item['version']]['configurations'][] = $item;
|
||||
}
|
||||
|
||||
if ($item['type'] == 'group') {
|
||||
$api_url = '/v2/products_attributes_items/item_status=1&list=catalog&group_id='.$item['assignment'];
|
||||
$attributes = ioApi($api_url,'',$clientsecret);
|
||||
$attributes = json_decode($attributes,true);
|
||||
|
||||
// Add attributes to the group item
|
||||
$item['attributes'] = $attributes;
|
||||
$version_configurations[$item['version']]['configurations'][] = $item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add all version configurations to the catalog
|
||||
$catalog[$product['rowID']]['versions'] = array_values($version_configurations);
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------
|
||||
// Lookup pricing (active pricelist and pricelistitems only)
|
||||
//------------------------------------------
|
||||
$api_url = '/v2/pricelists/status=1&item_status=1&list=price';
|
||||
$pricelist = ioApi($api_url,'',$clientsecret);
|
||||
$pricelist = json_decode($pricelist,true);
|
||||
|
||||
foreach ($pricelist as $price) {
|
||||
|
||||
// Add price to product level
|
||||
if (isset($catalog[$price['product_id']])) {
|
||||
$catalog[$price['product_id']]['price'] = $price['price'];
|
||||
$catalog[$price['product_id']]['rrp'] = $price['rrp'];
|
||||
$catalog[$price['product_id']]['price_modifier'] = $price['price_modifier'];
|
||||
}
|
||||
|
||||
//Check for configuration (can also include products as above)
|
||||
foreach ($catalog as &$items) {
|
||||
if (!empty($items['versions'])) {
|
||||
foreach ($items['versions'] as &$version) {
|
||||
foreach ($version['configurations'] as &$config) {
|
||||
//UPDATE PRODUCT PRICES IN CONFIGURATION
|
||||
if ($config['type'] == 'product' && $config['assignment'] == $price['product_id']) {
|
||||
$config['price'] = $price['price'];
|
||||
$config['rrp'] = $price['rrp'];
|
||||
$config['price_modifier'] = $price['price_modifier'];
|
||||
}
|
||||
|
||||
//UPDATE PRICES OF ATTRIBUTES IN GROUPS
|
||||
if ($config['type'] == 'group') {
|
||||
//check all attributes
|
||||
foreach($config['attributes'] as &$attribute) {
|
||||
if ($attribute['attribute_id'] == $price['product_id']) {
|
||||
$attribute['price'] = $price['price'];
|
||||
$attribute['rrp'] = $price['rrp'];
|
||||
$attribute['price_modifier'] = $price['price_modifier'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//------------------------------------------
|
||||
//REMOVE KEYS FROM OUTPUT
|
||||
//------------------------------------------
|
||||
$keys_to_remove = ['status','item_status','group_status','version','config','sn','build','softwareversion','healthindex','salesflag','configurable','updatedby','createdby','updated','created'];
|
||||
removeKeysRecursive($catalog,$keys_to_remove);
|
||||
|
||||
//------------------------------------------
|
||||
//JSON_ENCODE
|
||||
//------------------------------------------
|
||||
$messages = json_encode($catalog, JSON_UNESCAPED_UNICODE);
|
||||
|
||||
//------------------------------------------
|
||||
//Send results
|
||||
//------------------------------------------
|
||||
echo $messages;
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user