Fix image upload structure for Miravia API compliance

🔧 Bug Fixes:
- Fixed product image structure to match Miravia API requirements
- Updated MiraviaProduct.php getData() method to wrap images in {"Image": [...]} format
- Updated MiraviaCombination.php getData() method to wrap SKU images properly
- Resolved error "[4224] The Main image of the product is required"

📋 Changes:
- Modified getData() methods to transform flat image arrays to nested structure
- Product images: images[] → Images: {"Image": [...]}
- SKU images: images[] → Images: {"Image": [...]}
- Maintains backward compatibility for empty image arrays

🎯 Impact:
- Product uploads will now pass Miravia's image validation
- Both product-level and SKU-level images properly formatted
- Complies with official Miravia API documentation structure

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Miravia Connector Bot
2025-07-17 08:11:23 +02:00
commit a7d7dbb164
61 changed files with 8501 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
<?php
if ( ! defined( 'ABSPATH' ) ) { exit; }
list($order, $items) = MiraviaCore::get_order_woocommerce($post->ID);
?>
<div id="miravia_order_gestion">
<?php
$package_data = get_post_meta($post->ID, '_miravia_packed_result', true);
if(isset($package_data['data']['pack_order_list'])){
$packages = [];
foreach ($package_data['data']['pack_order_list'] as $item){
if(isset($item['order_item_list'])){
foreach($item['order_item_list'] as $package){
$packages[$package['package_id']] = true;
}
}
}
foreach($packages as $p => $v) {
if($v) {
echo wp_kses('<a href="javascript:void(0)" class="miraviaprintLabel" data-id="'.$post->ID.'" data-package="'.$p.'"><i class="fa fa-print"></i> Print Shipping Label ['.$p.']</a>', wp_kses_allowed_html());
}
}
}else{
echo wp_kses(' <p>'.__('Ready to ship?','miraviawoo').'</p>
<button type="button" id="packOrderButton" data-id="'.$post->ID.'">Pack Order</button>', wp_kses_allowed_html());
}
?>
</div>

View File

@@ -0,0 +1,43 @@
<?php
if ( ! defined( 'ABSPATH' ) ) { exit; }
global $post;
$defaultBrand = get_option('miravia_default_brand', 'No Brand');
$productBrand = get_post_meta($post->ID, '_miravia_brand_product', true);
$productUnit = get_post_meta($post->ID, '_miravia_unit', true);
$productUnitValue = get_post_meta($post->ID, '_miravia_unit_value', true);
$defaultUnit = get_option('miravia_default_unit', 'units');
$defaultUnitValue = get_option('miravia_default_unit_value', '1');
if($productBrand) {
$defaultBrand = $productBrand;
}
?>
<div class="options_group show_if_simple show_if_external show_if_variable" style="">
<p class=" form-field miravia_brand_product_field">
<label for="miravia_brand_product"><?php echo __('Product Brand', 'miraviawoo') ?></label>
<select id="miravia_brand_product" name="miravia_brand_product" class="search-select-miravia-brand">
<option value="<?php echo $defaultBrand ?>" <?php selected($defaultBrand, $defaultBrand) ?>><?php echo $defaultBrand ?></option>
</select>
</p>
<p class=" form-field miravia_unit_type_field">
<label for="miravia_unit_type"><?php echo __('Unit Type', 'miraviawoo') ?></label>
<select id="miravia_unit_type" name="miravia_unit_type">
<option value="">Default: <?php echo $defaultUnit ?></option>
<option <?php echo selected('Units',$productUnit)?> value="Units">Units</option>
<option <?php echo selected('Liters',$productUnit)?> value="Liters">Liters</option>
<option <?php echo selected('Kilograms',$productUnit)?> value="Kilograms">Kilograms</option>
<option <?php echo selected('Grams',$productUnit)?> value="Grams">Grams</option>
<option <?php echo selected('Milliliters',$productUnit)?> value="Milliliters">Milliliters</option>
</select>
</p>
<p class=" form-field miravia_brand_product_field">
<label for="miravia_brand_product"><?php echo __('Unit Value', 'miraviawoo') ?></label>
<input type="text" name="miravia_unit_value" value="<?php echo $productUnitValue ?>" placeholder="Default: <?php echo $defaultUnitValue?>" />
</p>
</div>