vendor/shopware/core/Checkout/Shipping/ShippingMethodCollection.php line 14

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Checkout\Shipping;
  3. use Shopware\Core\Checkout\Shipping\Aggregate\ShippingMethodPrice\ShippingMethodPriceCollection;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityCollection;
  5. use Shopware\Core\Framework\Log\Package;
  6. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  7. /**
  8.  * @extends EntityCollection<ShippingMethodEntity>
  9.  */
  10. #[Package('checkout')]
  11. class ShippingMethodCollection extends EntityCollection
  12. {
  13.     public function filterByActiveRules(SalesChannelContext $salesChannelContext): ShippingMethodCollection
  14.     {
  15.         return $this->filter(
  16.             function (ShippingMethodEntity $shippingMethod) use ($salesChannelContext) {
  17.                 return \in_array($shippingMethod->getAvailabilityRuleId(), $salesChannelContext->getRuleIds(), true);
  18.             }
  19.         );
  20.     }
  21.     /**
  22.      * @return list<string>
  23.      */
  24.     public function getPriceIds(): array
  25.     {
  26.         $ids = [[]];
  27.         foreach ($this->getIterator() as $element) {
  28.             $ids[] = $element->getPrices()->getIds();
  29.         }
  30.         return array_merge(...$ids);
  31.     }
  32.     public function getPrices(): ShippingMethodPriceCollection
  33.     {
  34.         $prices = [[]];
  35.         foreach ($this->getIterator() as $element) {
  36.             $prices[] = $element->getPrices();
  37.         }
  38.         $prices array_merge(...$prices);
  39.         return new ShippingMethodPriceCollection($prices);
  40.     }
  41.     /**
  42.      * Sorts the selected shipping method first
  43.      * If a different default shipping method is defined, it will be sorted second
  44.      * All other shipping methods keep their respective sorting
  45.      */
  46.     public function sortShippingMethodsByPreference(SalesChannelContext $context): void
  47.     {
  48.         $ids array_merge(
  49.             [$context->getShippingMethod()->getId(), $context->getSalesChannel()->getShippingMethodId()],
  50.             $this->getIds()
  51.         );
  52.         $this->sortByIdArray($ids);
  53.     }
  54.     public function getApiAlias(): string
  55.     {
  56.         return 'shipping_method_collection';
  57.     }
  58.     protected function getExpectedClass(): string
  59.     {
  60.         return ShippingMethodEntity::class;
  61.     }
  62. }