diff --git a/src/models/Item.php b/src/models/Item.php index c396bfd..03d71c9 100644 --- a/src/models/Item.php +++ b/src/models/Item.php @@ -3,6 +3,7 @@ namespace fostercommerce\shipstationconnect\models; use craft\commerce\elements\Variant; +use craft\commerce\enums\LineItemType; use craft\commerce\models\LineItem; use craft\commerce\Plugin as CommercePlugin; use craft\elements\Asset; @@ -224,24 +225,34 @@ public static function fromCommerceLineItem(LineItem $lineItem): self }; $imageUrl = null; - $productImagesHandle = Plugin::getInstance()?->settings->productImagesHandle; - /** @var ?Variant $purchasable */ - $purchasable = $lineItem->getPurchasable(); - if ($productImagesHandle !== null && $purchasable !== null) { - /** @var ?AssetQuery $assetQuery */ - $assetQuery = $purchasable->{$productImagesHandle}; - if ($assetQuery === null) { - // Fallback to the product if the variant does not have an asset + $productImagesHandle = trim(Plugin::getInstance()?->settings->productImagesHandle ?? ''); + + if ($productImagesHandle === '') { + // Ensure that if the handle is an empty string, it is still considered empty. + $productImagesHandle = null; + } + + // Custom line items do not have a Commerce purchasable. + if ($lineItem->type !== LineItemType::Custom && $productImagesHandle !== null) { + /** @var ?Variant $purchasable */ + $purchasable = $lineItem->getPurchasable(); + + if ($purchasable !== null) { /** @var ?AssetQuery $assetQuery */ - $assetQuery = $purchasable->getOwner()->{$productImagesHandle}; - } + $assetQuery = $purchasable->{$productImagesHandle}; + if ($assetQuery === null) { + // Fallback to the product if the variant does not have an asset + /** @var ?AssetQuery $assetQuery */ + $assetQuery = $purchasable->getOwner()->{$productImagesHandle}; + } - if ($assetQuery !== null) { - /** @var ?Asset $asset */ - $asset = $assetQuery->one(); - $assetUrl = $asset?->getUrl(); - if ($assetUrl !== null) { - $imageUrl = UrlHelper::siteUrl($assetUrl); + if ($assetQuery !== null) { + /** @var ?Asset $asset */ + $asset = $assetQuery->one(); + $assetUrl = $asset?->getUrl(); + if ($assetUrl !== null) { + $imageUrl = UrlHelper::siteUrl($assetUrl); + } } } }