<?php/** * Created by PhpStorm. * User: adv * Date: 15.12.15 * Time: 23:33 */namespace Slivki\Entity;use Doctrine\Common\Collections\ArrayCollection;class EntityDescription extends Entity implements \JsonSerializable {    const TYPE = 0;    const TYPE_OFFER_CONDITIONS_ID = 1;    const TYPE_OFFER_FEATURES_ID = 2;    const TYPE_OFFER_LOCATION_ID = 3;    const TYPE_OFFER_DESCRIPTION_ID = 4;    const TYPE_OFFER_LOGO_ID = 6;    const TYPE_OFFER_LEGAL_ID = 7;    const TYPE_OFFER_WORKING_HOURS_ID = 8;    const TYPE_SALE_DESCRIPTION_ID = 9;    const TYPE_SALE_FANCY_DESCRIPTION_ID = 10;    const TYPE_FOOD_ORDER_DESCRIPTION_ID = 11;    public const TYPE_VENDOR_CONDITION = 12;    public const TYPE_BRIEF_DELIVERY_CONDITION = 13;    protected $typeID;    protected $entityID;    protected $description;    protected $offer;    protected $entityDescriptionSliderImages;    protected $sortOrder;    public function __construct() {        if (!defined('static::TYPE')) {            throw new \Exception('Constant TYPE is not defined in ' . get_class($this));        }        $this->entityDescriptionSliderImages = new ArrayCollection();    }    public function getTypeID() {        return $this->typeID;    }    public function setTypeID($typeID) {        $this->typeID = $typeID;    }    public function getEntityID() {        return $this->entityID;    }    public function setEntityID($entityID) {        $this->entityID = $entityID;    }    public function getDescription() {        return $this->description;    }    public function setDescription($description) {        $this->description = $description;    }    public function getSortOrder() {        return $this->sortOrder;    }    public function setSortOrder($sortOrder) {        $this->sortOrder = $sortOrder;    }    /**     * @return \Slivki\Entity\Offer     */    public function getOffer() {        return $this->offer;    }    public function setOffer(Offer $offer) {        $this->offer = $offer;        $this->entityID = $offer->getID();    }    public function getEntityDescriptionSliderImages() {        return $this->entityDescriptionSliderImages;    }    public function addEntityDescriptionSliderImage(EntityDescriptionSliderImage $entityDescriptionSliderImage) {        if (!$this->entityDescriptionSliderImages->contains($entityDescriptionSliderImage)) {            $this->entityDescriptionSliderImages->add($entityDescriptionSliderImage);        }    }    public function getType() {        return static::TYPE;    }    public function jsonSerialize(): array    {        return [            'ID' => $this->ID,            'sortOrder' => $this->sortOrder,            'typeID' => $this->typeID,            'description' => $this->description,            'entityDescriptionSliderImages' => $this->entityDescriptionSliderImages->toArray()        ];    }    public static function fromJSON($data) {        $class = static::class;        $description = new $class();        $description->setDescription($data->description);        $description->setTypeID($data->typeID);        $description->setID($data->ID);        $description->setSortOrder($data->sortOrder);        foreach ($data->entityDescriptionSliderImages as $sliderImage) {            $description->addEntityDescriptionSliderImage(EntityDescriptionSliderImage::fromJSON($sliderImage));        }        return $description;    }    public static function getDescriptionClass($type) {        $classes = ['EntityDescription', 'SaleDescription', 'SaleFancyDescription', 'SaleLoadMoreBtnDescription', 'SaleLoadMoreBtnDescription'];        if (!isset($classes[$type])) {            throw new \Exception('Class not found. ' . $type);        }        return "Slivki\Entity\\" . $classes[$type];    }}