src/Aqarmap/Bundle/ListingBundle/Entity/Section.php line 28

Open in your IDE?
  1. <?php
  2. namespace Aqarmap\Bundle\ListingBundle\Entity;
  3. use Aqarmap\Bundle\ExchangeBundle\Entity\ExchangeRequest;
  4. use Aqarmap\Bundle\ListingBundle\Constant\ListingStatus;
  5. use Aqarmap\Bundle\UserBundle\Entity\UserInterest;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Criteria;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Gedmo\Mapping\Annotation as Gedmo;
  10. use Gedmo\Translatable\Translatable;
  11. use JMS\Serializer\Annotation as Serializer;
  12. /**
  13.  * Section.
  14.  *
  15.  * @ORM\Cache
  16.  *
  17.  * @ORM\Table(name="sections")
  18.  *
  19.  * @ORM\Entity(repositoryClass="Aqarmap\Bundle\ListingBundle\Repository\SectionRepository")
  20.  *
  21.  * @Gedmo\TranslationEntity(class="Aqarmap\Bundle\ListingBundle\Entity\SectionTranslation")
  22.  *
  23.  * @Serializer\ExclusionPolicy("all")
  24.  */
  25. class Section implements Translatable
  26. {
  27.     /**
  28.      * @var int
  29.      *
  30.      * @ORM\Column(name="id", type="integer")
  31.      *
  32.      * @ORM\Id
  33.      *
  34.      * @ORM\GeneratedValue(strategy="AUTO")
  35.      *
  36.      * @Serializer\Groups({"MyListings", "Default", "Search", "DefaultV4", "SearchV4", "SlugResolver", "listingDetails"})
  37.      *
  38.      * @Serializer\Expose
  39.      */
  40.     private $id;
  41.     /**
  42.      * @var string
  43.      *
  44.      * @ORM\Column(name="title", type="string", length=100)
  45.      *
  46.      * @Gedmo\Translatable
  47.      *
  48.      * @Serializer\Groups({"Default", "Search", "DefaultV4", "SlugResolver", "listingDetails", "MyListings", "MyLeads"})
  49.      *
  50.      * @Serializer\Expose
  51.      */
  52.     private $title;
  53.     /**
  54.      * @var string
  55.      *
  56.      * @ORM\Column(name="description", type="text", length=512, nullable=true)
  57.      *
  58.      * @Gedmo\Translatable
  59.      *
  60.      * @Serializer\Groups({"Default", "DefaultV4"})
  61.      *
  62.      * @Serializer\Expose
  63.      */
  64.     private $description;
  65.     /**
  66.      * @var string
  67.      *
  68.      * @ORM\Column(name="meta_title", type="string", length=100)
  69.      *
  70.      * @Gedmo\Translatable
  71.      *
  72.      * @Serializer\Groups({"Default"})
  73.      *
  74.      * @Serializer\Expose
  75.      */
  76.     private $metaTitle;
  77.     /**
  78.      * @var string
  79.      *
  80.      * @ORM\Column(name="meta_description", type="text", length=512, nullable=true)
  81.      *
  82.      * @Gedmo\Translatable
  83.      *
  84.      * @Serializer\Groups({"Default", "DefaultV4"})
  85.      *
  86.      * @Serializer\Expose
  87.      */
  88.     private $metaDescription;
  89.     /**
  90.      * @var bool
  91.      *
  92.      * @ORM\Column(name="main", type="boolean")
  93.      *
  94.      * @Serializer\Groups({"Default"})
  95.      *
  96.      * @Serializer\Expose
  97.      */
  98.     private $main false;
  99.     /**
  100.      * @var bool
  101.      *
  102.      * @ORM\Column(name="searchable", type="boolean")
  103.      *
  104.      * @Serializer\Groups({"Default"})
  105.      *
  106.      * @Serializer\Expose
  107.      */
  108.     private $searchable false;
  109.     /**
  110.      * @Gedmo\Slug(fields={"title"}, updatable=false)
  111.      *
  112.      * @Serializer\Groups({"Default", "DefaultV4", "SlugResolver" , "SearchV4", "listingDetails"})
  113.      *
  114.      * @Serializer\Expose
  115.      *
  116.      * @ORM\Column(length=128, unique=true)
  117.      */
  118.     private $slug;
  119.     /**
  120.      * @ORM\OneToMany(
  121.      *   targetEntity="SectionTranslation",
  122.      *   mappedBy="object",
  123.      *   cascade={"persist", "remove"}
  124.      * )
  125.      */
  126.     private $translations;
  127.     /**
  128.      * @ORM\OneToMany(targetEntity="Listing", mappedBy="section", fetch="EXTRA_LAZY")
  129.      */
  130.     protected $listings;
  131.     /**
  132.      * @ORM\OneToMany(targetEntity="\Aqarmap\Bundle\NeighborhoodBundle\Entity\LocationStatistics",
  133.      * mappedBy="section", fetch="EXTRA_LAZY")
  134.      */
  135.     protected $locationStatistics;
  136.     /**
  137.      * @ORM\OneToMany(targetEntity="PriceFilter", mappedBy="section", fetch="EXTRA_LAZY")
  138.      */
  139.     protected $priceFilter;
  140.     /**
  141.      * @ORM\OneToMany(targetEntity="Rule", mappedBy="section", fetch="EXTRA_LAZY")
  142.      */
  143.     protected $rules;
  144.     /**
  145.      * @ORM\OneToMany(targetEntity="Aqarmap\Bundle\UserBundle\Entity\UserInterest", mappedBy="section")
  146.      */
  147.     protected $interests;
  148.     /**
  149.      * @ORM\OneToMany(targetEntity="\Aqarmap\Bundle\ExchangeBundle\Entity\ExchangeRequest",
  150.      * mappedBy="section", fetch="EXTRA_LAZY")
  151.      */
  152.     protected $exchangeRequests;
  153.     /**
  154.      * @Gedmo\Locale
  155.      * Used locale to override Translation listener`s locale
  156.      * this is not a mapped field of entity metadata, just a simple property
  157.      */
  158.     private $locale;
  159.     /**
  160.      * @ORM\Column(name="synced", type="boolean")
  161.      */
  162.     private $synced false;
  163.     /**
  164.      * @ORM\Column(name="reference_id", type="integer", nullable=true)
  165.      */
  166.     private $referenceId;
  167.     /**
  168.      * @var string
  169.      *
  170.      * @ORM\Column(name="meta_search_description", type="text", length=512, nullable=true)
  171.      *
  172.      * @Gedmo\Translatable
  173.      */
  174.     private $metaSearchDescription;
  175.     /**
  176.      * @var array
  177.      */
  178.     private $v4Translations = [];
  179.     /**
  180.      * Constructor.
  181.      */
  182.     public function __construct()
  183.     {
  184.         $this->translations = new ArrayCollection();
  185.         $this->listings = new ArrayCollection();
  186.         $this->locationStatistics = new ArrayCollection();
  187.         $this->priceFilter = new ArrayCollection();
  188.         $this->rules = new ArrayCollection();
  189.         $this->interests = new ArrayCollection();
  190.         $this->exchangeRequests = new ArrayCollection();
  191.     }
  192.     // ---------------------------------------------------------------------
  193.     /**
  194.      * Get id.
  195.      *
  196.      * @return int
  197.      */
  198.     public function getId()
  199.     {
  200.         return $this->id;
  201.     }
  202.     // ---------------------------------------------------------------------
  203.     /**
  204.      * Set title.
  205.      *
  206.      * @param string $title
  207.      *
  208.      * @return Section
  209.      */
  210.     public function setTitle($title)
  211.     {
  212.         $this->title $title;
  213.         return $this;
  214.     }
  215.     /**
  216.      * Get title.
  217.      *
  218.      * @return string
  219.      */
  220.     public function getTitle()
  221.     {
  222.         return $this->title;
  223.     }
  224.     // ---------------------------------------------------------------------
  225.     /**
  226.      * Set description.
  227.      *
  228.      * @param string $description
  229.      *
  230.      * @return Section
  231.      */
  232.     public function setDescription($description)
  233.     {
  234.         $this->title $description;
  235.         return $this;
  236.     }
  237.     /**
  238.      * Get description.
  239.      *
  240.      * @return string
  241.      */
  242.     public function getDescription()
  243.     {
  244.         return $this->description;
  245.     }
  246.     // ---------------------------------------------------------------------
  247.     /**
  248.      * Set main.
  249.      *
  250.      * @param bool $main
  251.      *
  252.      * @return Section
  253.      */
  254.     public function setMain($main)
  255.     {
  256.         $this->main $main;
  257.         return $this;
  258.     }
  259.     /**
  260.      * Get main.
  261.      *
  262.      * @return bool
  263.      */
  264.     public function getMain()
  265.     {
  266.         return $this->main;
  267.     }
  268.     // ---------------------------------------------------------------------
  269.     /**
  270.      * Set searchable.
  271.      *
  272.      * @param bool $searchable
  273.      *
  274.      * @return Section
  275.      */
  276.     public function setSearchable($searchable)
  277.     {
  278.         $this->searchable $searchable;
  279.         return $this;
  280.     }
  281.     /**
  282.      * Get searchable.
  283.      *
  284.      * @return bool
  285.      */
  286.     public function getSearchable()
  287.     {
  288.         return $this->searchable;
  289.     }
  290.     /**
  291.      * @Serializer\VirtualProperty()
  292.      *
  293.      * @Serializer\Groups({"DefaultV4"})
  294.      *
  295.      * @Serializer\Expose
  296.      *
  297.      * @return bool
  298.      */
  299.     public function isSearchable()
  300.     {
  301.         return (bool) $this->searchable;
  302.     }
  303.     /**
  304.      * @Serializer\VirtualProperty()
  305.      *
  306.      * @Serializer\Groups({"DefaultV4"})
  307.      *
  308.      * @Serializer\Expose
  309.      *
  310.      * @return bool
  311.      */
  312.     public function isMain()
  313.     {
  314.         return (bool) $this->main;
  315.     }
  316.     /**
  317.      * @Serializer\VirtualProperty()
  318.      *
  319.      * @Serializer\Groups({"DefaultV4"})
  320.      *
  321.      * @Serializer\SerializedName("inheritanceType")
  322.      *
  323.      * @Serializer\Expose
  324.      *
  325.      * @return string
  326.      */
  327.     public function getInheritanceType()
  328.     {
  329.         return str_replace('-''_'$this->getSlug());
  330.     }
  331.     // ---------------------------------------------------------------------
  332.     /**
  333.      * Set slug.
  334.      *
  335.      * @param string $slug
  336.      *
  337.      * @return Section
  338.      */
  339.     public function setSlug($slug)
  340.     {
  341.         $this->slug $slug;
  342.         return $this;
  343.     }
  344.     /**
  345.      * Get slug.
  346.      *
  347.      * @return string
  348.      */
  349.     public function getSlug()
  350.     {
  351.         return $this->slug;
  352.     }
  353.     // ---------------------------------------------------------------------
  354.     /**
  355.      * Get translations.
  356.      *
  357.      * @return ArrayCollection
  358.      */
  359.     public function getTranslations()
  360.     {
  361.         return $this->translations;
  362.     }
  363.     public function getTranslatableLocale()
  364.     {
  365.         return $this->locale;
  366.     }
  367.     /**
  368.      * Add translation.
  369.      *
  370.      * @return Section
  371.      */
  372.     public function addTranslation(SectionTranslation $translation)
  373.     {
  374.         if (!$this->translations->contains($translation)) {
  375.             $this->translations->add($translation);
  376.             $translation->setObject($this);
  377.         }
  378.         return $this;
  379.     }
  380.     /**
  381.      * Remove translation.
  382.      *
  383.      * @return Section
  384.      */
  385.     public function removeTranslation(SectionTranslation $translation)
  386.     {
  387.         if ($this->translations->contains($translation)) {
  388.             $this->translations->removeElement($translation);
  389.         }
  390.         return $this;
  391.     }
  392.     // ---------------------------------------------------------------------
  393.     /**
  394.      * Add listings.
  395.      *
  396.      * @return Section
  397.      */
  398.     public function addListing(Listing $listings)
  399.     {
  400.         $this->listings[] = $listings;
  401.         return $this;
  402.     }
  403.     /**
  404.      * Remove listings.
  405.      */
  406.     public function removeListing(Listing $listings): void
  407.     {
  408.         $this->listings->removeElement($listings);
  409.     }
  410.     /**
  411.      * Get listings.
  412.      *
  413.      * @return \Doctrine\Common\Collections\Collection
  414.      */
  415.     public function getListings()
  416.     {
  417.         return $this->listings;
  418.     }
  419.     /**
  420.      * @param array $locations
  421.      *
  422.      * @return \Doctrine\Common\Collections\Collection
  423.      */
  424.     public function getLocationListings($locations)
  425.     {
  426.         $criteria Criteria::create()
  427.             ->where(Criteria::expr()->in('location'$locations))
  428.             ->andWhere(Criteria::expr()->eq('status'ListingStatus::LIVE))
  429.             ->orderBy(['featured' => Criteria::DESC'publishedAt' => Criteria::DESC])
  430.             ->setMaxResults(6);
  431.         return $this->getListings()->matching($criteria);
  432.     }
  433.     // ---------------------------------------------------------------------
  434.     /**
  435.      * Add priceFilter.
  436.      *
  437.      * @return Section
  438.      */
  439.     public function addPriceFilter(PriceFilter $priceFilter)
  440.     {
  441.         $this->priceFilter[] = $priceFilter;
  442.         return $this;
  443.     }
  444.     /**
  445.      * Remove priceFilter.
  446.      */
  447.     public function removePriceFilter(PriceFilter $priceFilter): void
  448.     {
  449.         $this->priceFilter->removeElement($priceFilter);
  450.     }
  451.     /**
  452.      * Get priceFilter.
  453.      *
  454.      * @return \Doctrine\Common\Collections\Collection
  455.      */
  456.     public function getPriceFilter()
  457.     {
  458.         return $this->priceFilter;
  459.     }
  460.     // ---------------------------------------------------------------------
  461.     /**
  462.      * Add rules.
  463.      *
  464.      * @return Section
  465.      */
  466.     public function addRule(Rule $rules)
  467.     {
  468.         $this->rules[] = $rules;
  469.         return $this;
  470.     }
  471.     /**
  472.      * Remove rules.
  473.      */
  474.     public function removeRule(Rule $rules): void
  475.     {
  476.         $this->rules->removeElement($rules);
  477.     }
  478.     /**
  479.      * Get rules.
  480.      *
  481.      * @return \Doctrine\Common\Collections\Collection
  482.      */
  483.     public function getRules()
  484.     {
  485.         return $this->rules;
  486.     }
  487.     // ---------------------------------------------------------------------
  488.     /**
  489.      * Add locationStatistic.
  490.      *
  491.      * @return Section
  492.      */
  493.     public function addLocationStatistic(\Aqarmap\Bundle\NeighborhoodBundle\Entity\LocationStatistics $locationStatistic)
  494.     {
  495.         $this->locationStatistics[] = $locationStatistic;
  496.         return $this;
  497.     }
  498.     /**
  499.      * Remove locationStatistic.
  500.      */
  501.     public function removeLocationStatistic(\Aqarmap\Bundle\NeighborhoodBundle\Entity\LocationStatistics $locationStatistic): void
  502.     {
  503.         $this->locationStatistics->removeElement($locationStatistic);
  504.     }
  505.     /**
  506.      * Get locationStatistics.
  507.      *
  508.      * @return \Doctrine\Common\Collections\Collection
  509.      */
  510.     public function getLocationStatistics()
  511.     {
  512.         return $this->locationStatistics;
  513.     }
  514.     /**
  515.      * Add interest.
  516.      *
  517.      * @return Section
  518.      */
  519.     public function addInterest(UserInterest $interest)
  520.     {
  521.         $this->interests[] = $interest;
  522.         return $this;
  523.     }
  524.     /**
  525.      * Remove interest.
  526.      */
  527.     public function removeInterest(UserInterest $interest): void
  528.     {
  529.         $this->interests->removeElement($interest);
  530.     }
  531.     /**
  532.      * Get interests.
  533.      *
  534.      * @return \Doctrine\Common\Collections\Collection
  535.      */
  536.     public function getInterests()
  537.     {
  538.         return $this->interests;
  539.     }
  540.     public function setTranslatableLocale($locale): void
  541.     {
  542.         $this->locale $locale;
  543.     }
  544.     /**
  545.      * Add exchangeRequest.
  546.      *
  547.      * @return Section
  548.      */
  549.     public function addExchangeRequest(ExchangeRequest $exchangeRequest)
  550.     {
  551.         $this->exchangeRequests[] = $exchangeRequest;
  552.         return $this;
  553.     }
  554.     /**
  555.      * Remove exchangeRequest.
  556.      */
  557.     public function removeExchangeRequest(ExchangeRequest $exchangeRequest): void
  558.     {
  559.         $this->exchangeRequests->removeElement($exchangeRequest);
  560.     }
  561.     /**
  562.      * Get exchangeRequests.
  563.      *
  564.      * @return \Doctrine\Common\Collections\Collection
  565.      */
  566.     public function getExchangeRequests()
  567.     {
  568.         return $this->exchangeRequests;
  569.     }
  570.     public function __toString()
  571.     {
  572.         return $this->title;
  573.     }
  574.     /**
  575.      * @return string
  576.      */
  577.     public function getMetaDescription()
  578.     {
  579.         return $this->metaDescription;
  580.     }
  581.     /**
  582.      * @param string $metaDescription
  583.      */
  584.     public function setMetaDescription($metaDescription): void
  585.     {
  586.         $this->metaDescription $metaDescription;
  587.     }
  588.     /**
  589.      * @return string
  590.      */
  591.     public function getMetaTitle()
  592.     {
  593.         return $this->metaTitle;
  594.     }
  595.     /**
  596.      * @param string $metaTitle
  597.      *
  598.      * @return $this
  599.      */
  600.     public function setMetaTitle($metaTitle)
  601.     {
  602.         $this->metaTitle $metaTitle;
  603.         return $this;
  604.     }
  605.     /**
  606.      * @return self
  607.      */
  608.     public function setSynced(bool $synced false)
  609.     {
  610.         $this->synced $synced;
  611.         return $this;
  612.     }
  613.     /**
  614.      * @return bool|null
  615.      */
  616.     public function getSynced()
  617.     {
  618.         return $this->synced;
  619.     }
  620.     /**
  621.      * @return string|null
  622.      */
  623.     public function getMetaSearchDescription()
  624.     {
  625.         return $this->metaSearchDescription;
  626.     }
  627.     /**
  628.      * @return Section
  629.      */
  630.     public function setMetaSearchDescription(string $metaSearchDescription)
  631.     {
  632.         $this->metaSearchDescription $metaSearchDescription;
  633.         return $this;
  634.     }
  635.     /**
  636.      * @Serializer\VirtualProperty
  637.      *
  638.      * @Serializer\Groups({"Default"})
  639.      *
  640.      * @Serializer\Expose
  641.      *
  642.      * @return int|null
  643.      */
  644.     public function getReferenceId()
  645.     {
  646.         return $this->id;
  647.     }
  648.     /**
  649.      * @return self
  650.      */
  651.     public function setReferenceId(?int $referenceId)
  652.     {
  653.         $this->referenceId $referenceId;
  654.         return $this;
  655.     }
  656.     /**
  657.      * @Serializer\VirtualProperty
  658.      *
  659.      * @Serializer\SerializedName("referenceId")
  660.      *
  661.      * @Serializer\Expose()
  662.      *
  663.      * @Serializer\Groups({"DefaultV4"})
  664.      */
  665.     public function getReferencedV4Id()
  666.     {
  667.         return $this->getId();
  668.     }
  669.     /**
  670.      * @param array $translations
  671.      *
  672.      * @return self
  673.      */
  674.     public function setV4Translations($translations = [])
  675.     {
  676.         $this->v4Translations $translations;
  677.         return $this;
  678.     }
  679.     /**
  680.      * Get translations.
  681.      *
  682.      * @Serializer\VirtualProperty
  683.      *
  684.      * @Serializer\Groups({"DefaultV4", "MyListing"})
  685.      *
  686.      * @Serializer\SerializedName("translations")
  687.      *
  688.      * @Serializer\Expose
  689.      *
  690.      * @return array
  691.      */
  692.     public function getV4Translations()
  693.     {
  694.         return $this->v4Translations;
  695.     }
  696. }