src/Model/Product/Car.php line 132

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace App\Model\Product;
  15. use Pimcore\Model\DataObject\AccessoryPart\Listing;
  16. use Pimcore\Model\DataObject\Data\Hotspotimage;
  17. class Car extends \Pimcore\Model\DataObject\Car
  18. {
  19.     const OBJECT_TYPE_ACTUAL_CAR 'actual-car';
  20.     const OBJECT_TYPE_VIRTUAL_CAR 'virtual-car';
  21.     public function getOSName(): ?string
  22.     {
  23.         return ($this->getManufacturer() ? ($this->getManufacturer()->getName() . ' ') : null) . $this->getName();
  24.     }
  25.     /**
  26.      * @param string|null $language
  27.      * @return string|null
  28.      */
  29.     public function getProductName($language null)
  30.     {
  31.         return $this->getName($language);
  32.     }
  33.     /**
  34.      * @return string
  35.      */
  36.     public function getSubText(): string
  37.     {
  38.         $textParts = [];
  39.         $textParts[] = $this->getBodyStyle() ? $this->getBodyStyle()->getName() : '';
  40.         $textParts[] = $this->getProductionYear();
  41.         $textParts[] = $this->getAttributes()->getEngine() ? $this->getAttributes()->getEngine()->getPower() : '';
  42.         return "<span class='text-nowrap'>" implode("</span>, <span class='text-nowrap'>"array_filter($textParts)) . '</span>';
  43.     }
  44.     /**
  45.      * @return string|null
  46.      */
  47.     public function getOSProductNumber(): ?string
  48.     {
  49.         return $this->getId();
  50.     }
  51.     /**
  52.      * @return string|null
  53.      */
  54.     public function getOSIndexType(): ?string
  55.     {
  56.         return $this->getObjectType() === self::OBJECT_TYPE_ACTUAL_CAR self::OBJECT_TYPE_VARIANT self::OBJECT_TYPE_OBJECT;
  57.     }
  58.     /**
  59.      * @return int
  60.      */
  61.     public function getOSParentId()
  62.     {
  63.         if ($this->getObjectType() == self::OBJECT_TYPE_ACTUAL_CAR) {
  64.             $parent $this->getParent();
  65.             while ($parent->getParent() instanceof self) {
  66.                 $parent $parent->getParent();
  67.             }
  68.             return $parent->getId();
  69.         }
  70.         return parent::getOSParentId();
  71.     }
  72.     /**
  73.      * @return Hotspotimage|null
  74.      */
  75.     public function getMainImage(): ?Hotspotimage
  76.     {
  77.         $gallery $this->getGallery();
  78.         if ($gallery) {
  79.             $items $gallery->getItems();
  80.             if ($items) {
  81.                 return $items[0];
  82.             }
  83.         }
  84.         return null;
  85.     }
  86.     /**
  87.      * @return Hotspotimage[]
  88.      */
  89.     public function getAdditionalImages(): array
  90.     {
  91.         $gallery $this->getGallery();
  92.         $items $gallery->getItems();
  93.         if ($items) {
  94.             unset($items[0]);
  95.         } else {
  96.             $items = [];
  97.         }
  98.         $items array_filter($items, function ($item) {
  99.             return !empty($item) && !empty($item->getImage());
  100.         });
  101.         $generalImages $this->getGenericImages()->getItems();
  102.         if ($generalImages) {
  103.             $items array_merge($items$generalImages);
  104.         }
  105.         return $items;
  106.     }
  107.     /**
  108.      * @return Category|null
  109.      */
  110.     public function getMainCategory(): ?Category
  111.     {
  112.         $categories $this->getCategories();
  113.         $category reset($categories);
  114.         return $category ?: null;
  115.     }
  116.     /**
  117.      * @return Listing
  118.      *
  119.      * @throws \Exception
  120.      */
  121.     public function getAccessories(): Listing
  122.     {
  123.         // get all parent IDs
  124.         $filterIds = ['compatibleTo LIKE "%,' $this->getId() . ',%"'];
  125.         $parent $this->getParent();
  126.         while ($parent instanceof self) {
  127.             $filterIds[] = 'compatibleTo LIKE "%,' $parent->getId() . ',%"';
  128.             $parent $parent->getParent();
  129.         }
  130.         // create listing with OR statements
  131.         $listing = new Listing();
  132.         $listing->setCondition(implode(' OR '$filterIds));
  133.         return $listing;
  134.     }
  135.     /**
  136.      * @return Car[]
  137.      */
  138.     public function getColorVariants(): array
  139.     {
  140.         if ($this->getObjectType() == self::OBJECT_TYPE_ACTUAL_CAR) {
  141.             $parent $this->getParent();
  142.             $carSiblings = [];
  143.             foreach ($parent->getChildren() as $sibling) {
  144.                 if ($sibling instanceof self && $sibling->getObjectType() == self::OBJECT_TYPE_ACTUAL_CAR) {
  145.                     $carSiblings[] = $sibling;
  146.                 }
  147.             }
  148.             return $carSiblings;
  149.         }
  150.         return [];
  151.     }
  152. }