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

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