src/Model/Product/Car.php line 21

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.     /**
  22.      * @return string
  23.      */
  24.     public function getOSName(): ?string
  25.     {
  26.         return ($this->getManufacturer() ? $this->getManufacturer()->getName() . ' ' '') . $this->getName();
  27.     }
  28.     public function getProductName($language null)
  29.     {
  30.         return $this->getName($language);
  31.     }
  32.     /**
  33.      * @return string
  34.      */
  35.     public function getSubText(): string
  36.     {
  37.         $textParts = [];
  38.         $textParts[] = $this->getBodyStyle() ? $this->getBodyStyle()->getName() : '';
  39.         $textParts[] = $this->getProductionYear();
  40.         $textParts[] = $this->getAttributes()->getEngine() ? $this->getAttributes()->getEngine()->getPower() : '';
  41.         return "<span class='text-nowrap'>" implode("</span>, <span class='text-nowrap'>"array_filter($textParts)) . '</span>';
  42.     }
  43.     /**
  44.      * @return int|string
  45.      */
  46.     public function getOSProductNumber(): ?string
  47.     {
  48.         return $this->getId();
  49.     }
  50.     /**
  51.      * @return string
  52.      */
  53.     public function getOSIndexType(): ?string
  54.     {
  55.         return $this->getObjectType() === self::OBJECT_TYPE_ACTUAL_CAR self::OBJECT_TYPE_VARIANT self::OBJECT_TYPE_OBJECT;
  56.     }
  57.     /**
  58.      * @return int
  59.      */
  60.     public function getOSParentId()
  61.     {
  62.         if ($this->getObjectType() == self::OBJECT_TYPE_ACTUAL_CAR) {
  63.             $parent $this->getParent();
  64.             while ($parent->getParent() instanceof self) {
  65.                 $parent $parent->getParent();
  66.             }
  67.             return $parent->getId();
  68.         }
  69.         return parent::getOSParentId();
  70.     }
  71.     /**
  72.      * @return Hotspotimage|null
  73.      */
  74.     public function getMainImage(): ?Hotspotimage
  75.     {
  76.         $gallery $this->getGallery();
  77.         if ($gallery) {
  78.             $items $gallery->getItems();
  79.             if ($items) {
  80.                 return $items[0];
  81.             }
  82.         }
  83.         return null;
  84.     }
  85.     /**
  86.      * @return Hotspotimage[]
  87.      */
  88.     public function getAdditionalImages(): array
  89.     {
  90.         $gallery $this->getGallery();
  91.         $items $gallery->getItems();
  92.         if ($items) {
  93.             unset($items[0]);
  94.         } else {
  95.             $items = [];
  96.         }
  97.         $items array_filter($items, function ($item) {
  98.             return !empty($item) && !empty($item->getImage());
  99.         });
  100.         $generalImages $this->getGenericImages()->getItems();
  101.         if ($generalImages) {
  102.             $items array_merge($items$generalImages);
  103.         }
  104.         return $items;
  105.     }
  106.     /**
  107.      * @return Category|null
  108.      */
  109.     public function getMainCategory(): ?Category
  110.     {
  111.         $categories $this->getCategories();
  112.         $category reset($categories);
  113.         return $category ?: null;
  114.     }
  115.     /**
  116.      * @return Listing
  117.      *
  118.      * @throws \Exception
  119.      */
  120.     public function getAccessories(): Listing
  121.     {
  122.         // get all parent IDs
  123.         $filterIds = ['compatibleTo LIKE "%,' $this->getId() . ',%"'];
  124.         $parent $this->getParent();
  125.         while ($parent instanceof self) {
  126.             $filterIds[] = 'compatibleTo LIKE "%,' $parent->getId() . ',%"';
  127.             $parent $parent->getParent();
  128.         }
  129.         // create listing with OR statements
  130.         $listing = new Listing();
  131.         $listing->setCondition(implode(' OR '$filterIds));
  132.         return $listing;
  133.     }
  134.     /**
  135.      * @return Car[]
  136.      */
  137.     public function getColorVariants(): array
  138.     {
  139.         if ($this->getObjectType() == self::OBJECT_TYPE_ACTUAL_CAR) {
  140.             $parent $this->getParent();
  141.             $carSiblings = [];
  142.             foreach ($parent->getChildren() as $sibling) {
  143.                 if ($sibling instanceof self && $sibling->getObjectType() == self::OBJECT_TYPE_ACTUAL_CAR) {
  144.                     $carSiblings[] = $sibling;
  145.                 }
  146.             }
  147.             return $carSiblings;
  148.         }
  149.         return [];
  150.     }
  151. }