src/Entity/Platform.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\PlatformRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use App\Entity\Offer;
  8. use Symfony\Component\Validator\Constraints as Assert;
  9. /**
  10.  * @ORM\Entity(repositoryClass=PlatformRepository::class)
  11.  */
  12. class Platform
  13. {
  14.     const WHITE '#ffffff';
  15.     const WHITE_LIGHT '#ced4da';
  16.     const BLACK '#000000';
  17.     const BLACK_LIGHT '#878787';
  18.     
  19.     /**
  20.      * @ORM\Id
  21.      * @ORM\GeneratedValue
  22.      * @ORM\Column(type="integer")
  23.      */
  24.     private $id;
  25.     /**
  26.      * @ORM\Column(type="string", length=255)
  27.      */
  28.     private $name;
  29.     /**
  30.      * @ORM\OneToOne(targetEntity=Image::class, inversedBy="logoPlatform", cascade={"persist", "remove"})
  31.      */
  32.     private $logo;
  33.     /**
  34.      * @ORM\Column(type="string", length=255)
  35.      */
  36.     private $domain;
  37.     /**
  38.      * @ORM\OneToMany(targetEntity=User::class, mappedBy="platform", orphanRemoval=true)
  39.      */
  40.     private $users;
  41.     /**
  42.      * @ORM\Column(type="string", length=255, nullable=true)
  43.      * @Assert\Email()
  44.      */
  45.     private $email;
  46.     /**
  47.      * @ORM\Column(type="string", length=255, nullable=true)
  48.      */
  49.     private $emailPassword;
  50.     /**
  51.      * @ORM\Column(type="string", length=255, nullable=true)
  52.      */
  53.     private $smtpServer;
  54.     /**
  55.      * @ORM\Column(type="integer", nullable=true)
  56.      */
  57.     private $smtpPort;
  58.     /**
  59.      * @ORM\Column(type="string", length=255, nullable=true)
  60.      */
  61.     private $imapServer;
  62.     /**
  63.      * @ORM\Column(type="integer", nullable=true)
  64.      */
  65.     private $imapPort;
  66.     /**
  67.      * @ORM\Column(type="boolean", options={"default": false})
  68.      */
  69.     private $deleted;
  70.     /**
  71.      * @ORM\Column(type="datetime", nullable=true)
  72.      */
  73.     private $deletedAt;
  74.     /**
  75.      * @ORM\OneToMany(targetEntity=OfferCategory::class, mappedBy="platform")
  76.      */
  77.     private $offerCategories;
  78.     /**
  79.      * @ORM\OneToMany(targetEntity=Offer::class, mappedBy="platform")
  80.      */
  81.     private $offers;
  82.     /**
  83.      * @ORM\OneToMany(targetEntity=Subscription::class, mappedBy="platform")
  84.      */
  85.     private $subscriptions;
  86.     /**
  87.      * @ORM\OneToMany(targetEntity=Image::class, mappedBy="platform")
  88.      */
  89.     private $images;
  90.     /**
  91.      * @ORM\Column(type="string", length=255, nullable=true)
  92.      */
  93.     private $facebookPage;
  94.     /**
  95.      * @ORM\Column(type="string", length=255, nullable=true)
  96.      */
  97.     private $twitterPage;
  98.     /**
  99.      * @ORM\Column(type="string", length=255, nullable=true)
  100.      */
  101.     private $instagramPage;
  102.     /**
  103.      * @ORM\Column(type="string", length=20, nullable=true)
  104.      */
  105.     private $primaryColor;
  106.     /**
  107.      * @ORM\Column(type="string", length=20, nullable=true)
  108.      */
  109.     private $secondaryColor;
  110.     /**
  111.      * @ORM\Column(type="smallint", options={"default": 1})
  112.      */
  113.     private $defaultPayoutType;
  114.     /**
  115.      * @ORM\OneToOne(targetEntity=Image::class, inversedBy="faviconPlatform", cascade={"persist", "remove"})
  116.      */
  117.     private $favicon;
  118.     /**
  119.      * @ORM\ManyToOne(targetEntity=Currency::class, inversedBy="platforms")
  120.      */
  121.     private $defaultCurrency;
  122.     /**
  123.      * @ORM\OneToMany(targetEntity=PhoneCall::class, mappedBy="platform")
  124.      */
  125.     private $phoneCalls;
  126.     /**
  127.      * @ORM\OneToMany(targetEntity=Ticket::class, mappedBy="platform", orphanRemoval=true)
  128.      */
  129.     private $tickets;
  130.     /**
  131.      * @ORM\OneToMany(targetEntity=Callback::class, mappedBy="platform")
  132.      */
  133.     private $callbacks;
  134.     /**
  135.      * @ORM\OneToMany(targetEntity=Transaction::class, mappedBy="platform")
  136.      */
  137.     private $transactions;
  138.     /**
  139.      * @ORM\Column(type="smallint", options={"default": 15})
  140.      */
  141.     private $minCallDuration;
  142.     /**
  143.      * @ORM\OneToMany(targetEntity=LandingPage::class, mappedBy="platform", orphanRemoval=true)
  144.      */
  145.     private $landingPages;
  146.     public function __construct()
  147.     {
  148.         $this->users = new ArrayCollection();
  149.         $this->deleted false;
  150.         $this->offerCategories = new ArrayCollection();
  151.         $this->offers = new ArrayCollection();
  152.         $this->subscriptions = new ArrayCollection();
  153.         $this->images = new ArrayCollection();
  154.         $this->defaultPayoutType Offer::PAYOUT_TYPE_CPI_ID;
  155.         $this->phoneCalls = new ArrayCollection();
  156.         $this->tickets = new ArrayCollection();
  157.         $this->callbacks = new ArrayCollection();
  158.         $this->transactions = new ArrayCollection();
  159.         $this->minCallDuration 15;
  160.         $this->landingPages = new ArrayCollection();
  161.     }
  162.     public function getId(): ?int
  163.     {
  164.         return $this->id;
  165.     }
  166.     public function getName(): ?string
  167.     {
  168.         return $this->name;
  169.     }
  170.     public function setName(string $name): self
  171.     {
  172.         $this->name $name;
  173.         return $this;
  174.     }
  175.     public function getLogo(): ?Image
  176.     {
  177.         return $this->logo;
  178.     }
  179.     public function setLogo(?Image $logo): self
  180.     {
  181.         $this->logo $logo;
  182.         return $this;
  183.     }
  184.     public function getDomain(): ?string
  185.     {
  186.         return $this->domain;
  187.     }
  188.     public function setDomain(string $domain): self
  189.     {
  190.         $this->domain $domain;
  191.         return $this;
  192.     }
  193.     /**
  194.      * @return Collection|User[]
  195.      */
  196.     public function getUsers(): Collection
  197.     {
  198.         return $this->users;
  199.     }
  200.     public function addUser(User $user): self
  201.     {
  202.         if (!$this->users->contains($user)) {
  203.             $this->users[] = $user;
  204.             $user->setPlatform($this);
  205.         }
  206.         return $this;
  207.     }
  208.     public function removeUser(User $user): self
  209.     {
  210.         if ($this->users->removeElement($user)) {
  211.             // set the owning side to null (unless already changed)
  212.             if ($user->getPlatform() === $this) {
  213.                 $user->setPlatform(null);
  214.             }
  215.         }
  216.         return $this;
  217.     }
  218.     public function getSmtpServer(): ?string
  219.     {
  220.         return $this->smtpServer;
  221.     }
  222.     public function setSmtpServer(?string $smtpServer): self
  223.     {
  224.         $this->smtpServer $smtpServer;
  225.         return $this;
  226.     }
  227.     public function getImapServer(): ?string
  228.     {
  229.         return $this->imapServer;
  230.     }
  231.     public function setImapServer(?string $imapServer): self
  232.     {
  233.         $this->imapServer $imapServer;
  234.         return $this;
  235.     }
  236.     public function getEmail(): ?string
  237.     {
  238.         return $this->email;
  239.     }
  240.     public function setEmail(?string $email): self
  241.     {
  242.         $this->email $email;
  243.         return $this;
  244.     }
  245.     public function getEmailPassword(): ?string
  246.     {
  247.         return $this->emailPassword;
  248.     }
  249.     public function setEmailPassword(?string $emailPassword): self
  250.     {
  251.         $this->emailPassword $emailPassword;
  252.         return $this;
  253.     }
  254.     public function getImapPort(): ?int
  255.     {
  256.         return $this->imapPort;
  257.     }
  258.     public function setImapPort(?int $imapPort): self
  259.     {
  260.         $this->imapPort $imapPort;
  261.         return $this;
  262.     }
  263.     public function getSmtpPort(): ?int
  264.     {
  265.         return $this->smtpPort;
  266.     }
  267.     public function setSmtpPort(int $smtpPort): self
  268.     {
  269.         $this->smtpPort $smtpPort;
  270.         return $this;
  271.     }
  272.     public function getDeleted(): ?bool
  273.     {
  274.         return $this->deleted;
  275.     }
  276.     public function setDeleted(bool $deleted): self
  277.     {
  278.         $this->deleted $deleted;
  279.         return $this;
  280.     }
  281.     public function getDeletedAt(): ?\DateTimeInterface
  282.     {
  283.         return $this->deletedAt;
  284.     }
  285.     public function setDeletedAt(?\DateTimeInterface $deletedAt): self
  286.     {
  287.         $this->deletedAt $deletedAt;
  288.         return $this;
  289.     }
  290.     /**
  291.      * @return Collection|OfferCategory[]
  292.      */
  293.     public function getOfferCategories(): Collection
  294.     {
  295.         return $this->offerCategories;
  296.     }
  297.     public function addOfferCategory(OfferCategory $offerCategory): self
  298.     {
  299.         if (!$this->offerCategories->contains($offerCategory)) {
  300.             $this->offerCategories[] = $offerCategory;
  301.             $offerCategory->setPlatform($this);
  302.         }
  303.         return $this;
  304.     }
  305.     public function removeOfferCategory(OfferCategory $offerCategory): self
  306.     {
  307.         if ($this->offerCategories->removeElement($offerCategory)) {
  308.             // set the owning side to null (unless already changed)
  309.             if ($offerCategory->getPlatform() === $this) {
  310.                 $offerCategory->setPlatform(null);
  311.             }
  312.         }
  313.         return $this;
  314.     }
  315.     /**
  316.      * @return Collection|Offer[]
  317.      */
  318.     public function getOffers(): Collection
  319.     {
  320.         return $this->offers;
  321.     }
  322.     public function addOffer(Offer $offer): self
  323.     {
  324.         if (!$this->offers->contains($offer)) {
  325.             $this->offers[] = $offer;
  326.             $offer->setPlatform($this);
  327.         }
  328.         return $this;
  329.     }
  330.     public function removeOffer(Offer $offer): self
  331.     {
  332.         if ($this->offers->removeElement($offer)) {
  333.             // set the owning side to null (unless already changed)
  334.             if ($offer->getPlatform() === $this) {
  335.                 $offer->setPlatform(null);
  336.             }
  337.         }
  338.         return $this;
  339.     }
  340.     /**
  341.      * @return Collection|Subscription[]
  342.      */
  343.     public function getSubscriptions(): Collection
  344.     {
  345.         return $this->subscriptions;
  346.     }
  347.     public function addSubscription(Subscription $subscription): self
  348.     {
  349.         if (!$this->subscriptions->contains($subscription)) {
  350.             $this->subscriptions[] = $subscription;
  351.             $subscription->setPlatform($this);
  352.         }
  353.         return $this;
  354.     }
  355.     public function removeSubscription(Subscription $subscription): self
  356.     {
  357.         if ($this->subscriptions->removeElement($subscription)) {
  358.             // set the owning side to null (unless already changed)
  359.             if ($subscription->getPlatform() === $this) {
  360.                 $subscription->setPlatform(null);
  361.             }
  362.         }
  363.         return $this;
  364.     }
  365.     /**
  366.      * @return Collection|Image[]
  367.      */
  368.     public function getImages(): Collection
  369.     {
  370.         return $this->images;
  371.     }
  372.     public function addImage(Image $image): self
  373.     {
  374.         if (!$this->images->contains($image)) {
  375.             $this->images[] = $image;
  376.             $image->setPlatform($this);
  377.         }
  378.         return $this;
  379.     }
  380.     public function removeImage(Image $image): self
  381.     {
  382.         if ($this->images->removeElement($image)) {
  383.             // set the owning side to null (unless already changed)
  384.             if ($image->getPlatform() === $this) {
  385.                 $image->setPlatform(null);
  386.             }
  387.         }
  388.         return $this;
  389.     }
  390.     public function getFacebookPage(): ?string
  391.     {
  392.         return $this->facebookPage;
  393.     }
  394.     public function setFacebookPage(?string $facebookPage): self
  395.     {
  396.         $this->facebookPage $facebookPage;
  397.         return $this;
  398.     }
  399.     public function getTwitterPage(): ?string
  400.     {
  401.         return $this->twitterPage;
  402.     }
  403.     public function setTwitterPage(?string $twitterPage): self
  404.     {
  405.         $this->twitterPage $twitterPage;
  406.         return $this;
  407.     }
  408.     public function getInstagramPage(): ?string
  409.     {
  410.         return $this->instagramPage;
  411.     }
  412.     public function setInstagramPage(?string $instagramPage): self
  413.     {
  414.         $this->instagramPage $instagramPage;
  415.         return $this;
  416.     }
  417.     public function getPrimaryColor(): ?string
  418.     {
  419.         return $this->primaryColor;
  420.     }
  421.     public function setPrimaryColor(?string $primaryColor): self
  422.     {
  423.         $this->primaryColor $primaryColor;
  424.         return $this;
  425.     }
  426.     public function getSecondaryColor(): ?string
  427.     {
  428.         return $this->secondaryColor;
  429.     }
  430.     public function setSecondaryColor(?string $secondaryColor): self
  431.     {
  432.         $this->secondaryColor $secondaryColor;
  433.         return $this;
  434.     }
  435.     
  436.     public function getContrastColor($hexColor$light false
  437.     {
  438.         // hexColor RGB
  439.         $R1 hexdec(substr($hexColor12));
  440.         $G1 hexdec(substr($hexColor32));
  441.         $B1 hexdec(substr($hexColor52));
  442.         // Black RGB
  443.         $blackColor "#000000";
  444.         $R2BlackColor hexdec(substr($blackColor12));
  445.         $G2BlackColor hexdec(substr($blackColor32));
  446.         $B2BlackColor hexdec(substr($blackColor52));
  447.          // Calc contrast ratio
  448.          $L1 0.2126 pow($R1 2552.2) +
  449.                0.7152 pow($G1 2552.2) +
  450.                0.0722 pow($B1 2552.2);
  451.         $L2 0.2126 pow($R2BlackColor 2552.2) +
  452.               0.7152 pow($G2BlackColor 2552.2) +
  453.               0.0722 pow($B2BlackColor 2552.2);
  454.         $contrastRatio 0;
  455.         if ($L1 $L2) {
  456.             $contrastRatio = (int)(($L1 0.05) / ($L2 0.05));
  457.         } else {
  458.             $contrastRatio = (int)(($L2 0.05) / ($L1 0.05));
  459.         }
  460.         // If contrast is more than 5, return black color
  461.         if ($contrastRatio 12) {
  462.             if ($light) {
  463.                 return self::BLACK_LIGHT;
  464.             }
  465.             return self::BLACK;
  466.         } else { 
  467.             // if not, return white color.
  468.             if ($light) {
  469.                 return self::WHITE_LIGHT;
  470.             }
  471.             return self::WHITE;
  472.         }
  473.     }
  474.     
  475.     public function getInversedPrimaryColor(): ?string
  476.     {
  477.         return $this->getContrastColor($this->primaryColor);
  478.     }
  479.     
  480.     public function getInversedSecondaryColor(): ?string
  481.     {
  482.         return $this->getContrastColor($this->secondaryColor);
  483.     }
  484.     
  485.     public function getInversedLightPrimaryColor(): ?string
  486.     {
  487.         return $this->getContrastColor($this->primaryColortrue);
  488.     }
  489.     
  490.     public function getInversedLightSecondaryColor(): ?string
  491.     {
  492.         return $this->getContrastColor($this->secondaryColortrue);
  493.     }
  494.     
  495.     public function getColorForPrimary(): ?string
  496.     {
  497.         $bg $this->getInversedPrimaryColor();
  498.         if ($bg == self::WHITE) {
  499.             return $bg;
  500.         }
  501.         if ($this->getInversedSecondaryColor() == self::WHITE) {
  502.             return $this->secondaryColor;
  503.         }
  504.         return self::BLACK_LIGHT;
  505.     }
  506.     
  507.     public function getColorForSecondary(): ?string
  508.     {
  509.         $bg $this->getInversedSecondaryColor();
  510.         if ($bg == self::WHITE) {
  511.             return $bg;
  512.         }
  513.         if ($this->getInversedPrimaryColor() == self::WHITE) {
  514.             return $this->primaryColor;
  515.         }
  516.         return self::BLACK_LIGHT;
  517.     }
  518.     
  519.     public function getLinkColor(): ?string
  520.     {
  521.         if ($this->getInversedPrimaryColor() == self::WHITE) {
  522.             return $this->primaryColor;
  523.         }
  524.         if ($this->getInversedSecondaryColor() == self::WHITE) {
  525.             return $this->secondaryColor;
  526.         }
  527.         return '#4285f4';
  528.     }
  529.     
  530.     public function hasSocialNetworkPage(): ?bool
  531.     {
  532.         if ($this->facebookPage || $this->twitterPage || $this->instagramPage) {
  533.             return true;
  534.         }
  535.         return false;
  536.     }
  537.     public function getDefaultPayoutType(): ?int
  538.     {
  539.         return $this->defaultPayoutType;
  540.     }
  541.     public function setDefaultPayoutType(int $defaultPayoutType): self
  542.     {
  543.         $this->defaultPayoutType $defaultPayoutType;
  544.         return $this;
  545.     }
  546.     
  547.     public function getDefaultPayoutTypeLabel(): ?string
  548.     {
  549.         foreach(Offer::$payoutTypes as $name => $id) {
  550.             if ($this->defaultPayoutType == $id) {
  551.                 return $name;
  552.             }
  553.         }
  554.         return $this->defaultPayoutType;
  555.     }
  556.     public function getFavicon(): ?Image
  557.     {
  558.         return $this->favicon;
  559.     }
  560.     public function setFavicon(?Image $favicon): self
  561.     {
  562.         $this->favicon $favicon;
  563.         return $this;
  564.     }
  565.     public function getDefaultCurrency(): ?Currency
  566.     {
  567.         return $this->defaultCurrency;
  568.     }
  569.     public function setDefaultCurrency(?Currency $defaultCurrency): self
  570.     {
  571.         $this->defaultCurrency $defaultCurrency;
  572.         return $this;
  573.     }
  574.     /**
  575.      * @return Collection|PhoneCall[]
  576.      */
  577.     public function getPhoneCalls(): Collection
  578.     {
  579.         return $this->phoneCalls;
  580.     }
  581.     public function addPhoneCall(PhoneCall $phoneCall): self
  582.     {
  583.         if (!$this->phoneCalls->contains($phoneCall)) {
  584.             $this->phoneCalls[] = $phoneCall;
  585.             $phoneCall->setPlatform($this);
  586.         }
  587.         return $this;
  588.     }
  589.     public function removePhoneCall(PhoneCall $phoneCall): self
  590.     {
  591.         if ($this->phoneCalls->removeElement($phoneCall)) {
  592.             // set the owning side to null (unless already changed)
  593.             if ($phoneCall->getPlatform() === $this) {
  594.                 $phoneCall->setPlatform(null);
  595.             }
  596.         }
  597.         return $this;
  598.     }
  599.     /**
  600.      * @return Collection|Ticket[]
  601.      */
  602.     public function getTickets(): Collection
  603.     {
  604.         return $this->tickets;
  605.     }
  606.     public function addTicket(Ticket $ticket): self
  607.     {
  608.         if (!$this->tickets->contains($ticket)) {
  609.             $this->tickets[] = $ticket;
  610.             $ticket->setPlatform($this);
  611.         }
  612.         return $this;
  613.     }
  614.     public function removeTicket(Ticket $ticket): self
  615.     {
  616.         if ($this->tickets->removeElement($ticket)) {
  617.             // set the owning side to null (unless already changed)
  618.             if ($ticket->getPlatform() === $this) {
  619.                 $ticket->setPlatform(null);
  620.             }
  621.         }
  622.         return $this;
  623.     }
  624.     /**
  625.      * @return Collection|Callback[]
  626.      */
  627.     public function getCallbacks(): Collection
  628.     {
  629.         return $this->callbacks;
  630.     }
  631.     public function addCallback(Callback $callback): self
  632.     {
  633.         if (!$this->callbacks->contains($callback)) {
  634.             $this->callbacks[] = $callback;
  635.             $callback->setPlatform($this);
  636.         }
  637.         return $this;
  638.     }
  639.     public function removeCallback(Callback $callback): self
  640.     {
  641.         if ($this->callbacks->removeElement($callback)) {
  642.             // set the owning side to null (unless already changed)
  643.             if ($callback->getPlatform() === $this) {
  644.                 $callback->setPlatform(null);
  645.             }
  646.         }
  647.         return $this;
  648.     }
  649.     /**
  650.      * @return Collection|Transaction[]
  651.      */
  652.     public function getTransactions(): Collection
  653.     {
  654.         return $this->transactions;
  655.     }
  656.     public function addTransaction(Transaction $transaction): self
  657.     {
  658.         if (!$this->transactions->contains($transaction)) {
  659.             $this->transactions[] = $transaction;
  660.             $transaction->setPlatform($this);
  661.         }
  662.         return $this;
  663.     }
  664.     public function removeTransaction(Transaction $transaction): self
  665.     {
  666.         if ($this->transactions->removeElement($transaction)) {
  667.             // set the owning side to null (unless already changed)
  668.             if ($transaction->getPlatform() === $this) {
  669.                 $transaction->setPlatform(null);
  670.             }
  671.         }
  672.         return $this;
  673.     }
  674.     public function getMinCallDuration(): ?int
  675.     {
  676.         return $this->minCallDuration;
  677.     }
  678.     public function setMinCallDuration(int $minCallDuration): self
  679.     {
  680.         $this->minCallDuration $minCallDuration;
  681.         return $this;
  682.     }
  683.     /**
  684.      * @return Collection<int, LandingPage>
  685.      */
  686.     public function getLandingPages(): Collection
  687.     {
  688.         return $this->landingPages;
  689.     }
  690.     public function addLandingPage(LandingPage $landingPage): self
  691.     {
  692.         if (!$this->landingPages->contains($landingPage)) {
  693.             $this->landingPages[] = $landingPage;
  694.             $landingPage->setPlatform($this);
  695.         }
  696.         return $this;
  697.     }
  698.     public function removeLandingPage(LandingPage $landingPage): self
  699.     {
  700.         if ($this->landingPages->removeElement($landingPage)) {
  701.             // set the owning side to null (unless already changed)
  702.             if ($landingPage->getPlatform() === $this) {
  703.                 $landingPage->setPlatform(null);
  704.             }
  705.         }
  706.         return $this;
  707.     }
  708. }