src/Entity/Exercise.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Common\Collections\Collection;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Symfony\Component\HttpFoundation\File\File;
  7. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  8. use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
  9. use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait;
  10. use Symfony\Component\Validator\Constraints as Assert;
  11. /**
  12.  * @ORM\Entity(repositoryClass="App\Repository\ExerciseRepository")
  13.  * @Vich\Uploadable
  14.  */
  15. class Exercise implements TranslatableInterface
  16. {
  17.   use TranslatableTrait;
  18.   const DIFICULTY_TYPE_HIGH "HIGH";
  19.   const DIFICULTY_TYPE_MEDIUM "MEDIUM";
  20.   const DIFICULTY_TYPE_LOW "LOW";
  21.   /**
  22.    * @ORM\Id()
  23.    * @ORM\GeneratedValue()
  24.    * @ORM\Column(type="integer")
  25.    */
  26.   private $id;
  27.   /**
  28.    * @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="exercises")
  29.    * @ORM\JoinColumn(nullable=false)
  30.    */
  31.   private $category;
  32.   /**
  33.    * @ORM\ManyToMany(targetEntity="App\Entity\Material", inversedBy="exercises")
  34.    * @ORM\JoinColumn(nullable=false)
  35.    */
  36.   private $materials;
  37.     /**
  38.    * @ORM\OneToMany(targetEntity="App\Entity\NoteExercise", mappedBy="exercise", orphanRemoval=true)
  39.    */
  40.   private $notes;
  41.   /**
  42.    * @ORM\Column(type="string", length=255, nullable=true)
  43.    */
  44.   private $image;
  45.   /**
  46.    * @Assert\Length(
  47.    *    max = "50M",
  48.    *   maxMessage = "The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}."
  49.    * )
  50.    *
  51.    * @Vich\UploadableField(mapping="exercise_images", fileNameProperty="image")
  52.    * @var File
  53.    */
  54.   private $imageFile;
  55.   /**
  56.    * @ORM\Column(type="datetime", nullable=true)
  57.    * @var \DateTime
  58.    */
  59.   private $updatedAt;
  60.   /**
  61.    * @ORM\Column(type="string", length=255, nullable=true)
  62.    */
  63.   private $poster;
  64.   /**
  65.    * @Vich\UploadableField(mapping="exercise_images", fileNameProperty="poster")
  66.    * @var File
  67.    */
  68.   private $posterFile;
  69.   /**
  70.    * @ORM\Column(type="string", length=255, nullable=true)
  71.    */
  72.   private $dificulty;
  73.   /**
  74.    * @ORM\Column(type="string", length=255, nullable=true)
  75.    */
  76.   private $intensity;
  77.   /**
  78.    * @ORM\Column(type="integer", nullable=true)
  79.    */
  80.   private $duration;
  81.   /**
  82.    * @ORM\OneToMany(targetEntity="App\Entity\ExerciseCalendar", mappedBy="exercise", orphanRemoval=true)
  83.    */
  84.   private $exerciseCalendars;
  85.   /**
  86.    * @ORM\Column(type="integer")
  87.    */
  88.   private $customer_id;
  89.   /**
  90.    * @ORM\ManyToOne(targetEntity="App\Entity\Customer", inversedBy="exercises")
  91.    * @ORM\JoinColumn(nullable=false)
  92.    */
  93.   private $customer;
  94.   /**
  95.    * @ORM\Column(type="integer", nullable=false)
  96.    */
  97.   private $category_id;
  98.   /**
  99.    * @ORM\OneToMany(targetEntity=ExerciseQualification::class, mappedBy="exercise")
  100.    */
  101.   private $exerciseQualifications;
  102.   /**
  103.    * @ORM\Column(type="integer", nullable=true)
  104.    */
  105.   private $is_shared;
  106.   /**
  107.    * @ORM\Column(type="datetime", nullable=true)
  108.    */
  109.   private $deletedAt;
  110.   private $stars;
  111.   public function __construct()
  112.   {
  113.     $this->exerciseCalendars = new ArrayCollection();
  114.     $this->materials = new ArrayCollection();
  115.     $this->exerciseQualifications = new ArrayCollection();
  116.     $this->stars = new ArrayCollection();
  117.     $this->notes = new ArrayCollection();
  118.   }
  119.   public function getId(): ?int
  120.   {
  121.     return $this->id;
  122.   }
  123.   public function getCustomerId(): ?int
  124.   {
  125.     return $this->customer_id;
  126.   }
  127.   public function setCustomerId(?int $customer): self
  128.   {
  129.     $this->customer_id $customer;
  130.     return $this;
  131.   }
  132.   public function getCustomer(): ?Customer
  133.   {
  134.     return $this->customer;
  135.   }
  136.   public function setCategoryId(?int $category): self
  137.   {
  138.     $this->category_id $category;
  139.     return $this;
  140.   }
  141.   public function getCategoryId(): ?int
  142.   {
  143.     return $this->category_id;
  144.   }
  145.   public function getCategory(): ?Category
  146.   {
  147.     return $this->category;
  148.   }
  149.   public function setCategory(?Category $category): self
  150.   {
  151.     $this->category $category;
  152.     return $this;
  153.   }
  154.   /**
  155.    * @return \DateTime
  156.    */
  157.   public function getUpdatedAt(): \DateTime
  158.   {
  159.     return $this->updatedAt;
  160.   }
  161.   /**
  162.    * @param \DateTime $updatedAt
  163.    * @return Exercise
  164.    */
  165.   public function setUpdatedAt(\DateTime $updatedAt): Exercise
  166.   {
  167.     $this->updatedAt $updatedAt;
  168.     return $this;
  169.   }
  170.   /**
  171.    * @param File|null $image
  172.    * @return Exercise
  173.    */
  174.   public function setImageFile(File $image null)
  175.   {
  176.     $this->imageFile $image;
  177.     // VERY IMPORTANT:
  178.     // It is required that at least one field changes if you are using Doctrine,
  179.     // otherwise the event listeners won't be called and the file is lost
  180.     if ($image) {
  181.       // if 'updatedAt' is not defined in your entity, use another property
  182.       $this->updatedAt = new \DateTime('now');
  183.     }
  184.     return $this;
  185.   }
  186.   public function getImageFile()
  187.   {
  188.     return $this->imageFile;
  189.   }
  190.   public function getImage(): ?string
  191.   {
  192.     return $this->image;
  193.   }
  194.   public function setImage(?string $image): self
  195.   {
  196.     $this->image $image;
  197.     return $this;
  198.   }
  199.   /**
  200.    * @param File|null $poster
  201.    * @return Exercise
  202.    */
  203.   public function setPosterFile(File $poster null)
  204.   {
  205.     $this->posterFile $poster;
  206.     // VERY IMPORTANT:
  207.     // It is required that at least one field changes if you are using Doctrine,
  208.     // otherwise the event listeners won't be called and the file is lost
  209.     if ($poster) {
  210.       // if 'updatedAt' is not defined in your entity, use another property
  211.       $this->updatedAt = new \DateTime('now');
  212.     }
  213.     return $this;
  214.   }
  215.   public function getPosterFile()
  216.   {
  217.     return $this->posterFile;
  218.   }
  219.   public function getPoster(): ?string
  220.   {
  221.     return $this->poster;
  222.   }
  223.   public function setPoster(?string $poster): self
  224.   {
  225.     $this->poster $poster;
  226.     return $this;
  227.   }
  228.   public function getDificulty(): ?string
  229.   {
  230.     return $this->dificulty;
  231.   }
  232.   public function setDificulty(?string $dificulty): self
  233.   {
  234.     $this->dificulty $dificulty;
  235.     return $this;
  236.   }
  237.   public function getIntensity(): ?string
  238.   {
  239.     return $this->intensity;
  240.   }
  241.   public function setIntensity(?string $intensity): self
  242.   {
  243.     $this->intensity $intensity;
  244.     return $this;
  245.   }
  246.   public function getDuration(): ?int
  247.   {
  248.     return $this->duration;
  249.   }
  250.   public function setDuration(?int $duration): self
  251.   {
  252.     $this->duration $duration;
  253.     return $this;
  254.   }
  255.   public function getIsShared(): ?int
  256.   {
  257.     return $this->is_shared;
  258.   }
  259.   public function setIsShared(?int $isShared): self
  260.   {
  261.     $this->is_shared $isShared;
  262.     return $this;
  263.   }
  264.   /**
  265.    * @return \DateTime
  266.    */
  267.   public function getDeletedAt(): \DateTime
  268.   {
  269.     return $this->deletedAt;
  270.   }
  271.   /**
  272.    * @param \DateTime $deletedAt
  273.    * @return Exercise
  274.    */
  275.   public function setDeletedAt(\DateTime $deletedAt): Exercise
  276.   {
  277.     $this->deletedAt $deletedAt;
  278.     return $this;
  279.   }
  280.   public function __call($method$arguments)
  281.   {
  282.     $method = ('get' === substr($method03) || 'set' === substr($method03)) ? $method 'get' ucfirst($method);
  283.     return $this->proxyCurrentLocaleTranslation($method$arguments);
  284.   }
  285.   public function __get($name)
  286.   {
  287.     $method 'get' ucfirst($name);
  288.     $arguments = [];
  289.     return $this->proxyCurrentLocaleTranslation($method$arguments);
  290.   }
  291.   public function __toArray($imagePath "")
  292.   {
  293.     return [
  294.       "id" => $this->getId(),
  295.       "name" => $this->getName(),
  296.       "image" => !empty($this->getImage()) ? $imagePath $this->getImage() : "",
  297.       "poster" => !empty($this->getPoster()) ? $imagePath $this->getPoster() : "",
  298.       "description" => $this->getDescription(),
  299.       "category" => $this->getCategory()->getId(),
  300.       "dificulty" => $this->getDificulty(),
  301.       "intensity" => $this->getIntensity(),
  302.       "duration" => $this->getDuration(),
  303.       "isShared" => $this->getIsShared(),
  304.       "materials" => $this->getMaterialsArray(),
  305.       "customer" => $this->getCustomerId(),
  306.       "category" => $this->getCategoryId(),
  307.       "notes" => $this->getNotesArray()
  308.     ];
  309.   }
  310.   /**
  311.    * @return Collection|ExerciseCalendar[]
  312.    */
  313.   public function getExerciseCalendars(): Collection
  314.   {
  315.     return $this->exerciseCalendars;
  316.   }
  317.   public function addExerciseCalendar(ExerciseCalendar $exerciseCalendar): self
  318.   {
  319.     if (!$this->exerciseCalendars->contains($exerciseCalendar)) {
  320.       $this->exerciseCalendars[] = $exerciseCalendar;
  321.       $exerciseCalendar->setExercise($this);
  322.     }
  323.     return $this;
  324.   }
  325.   public function removeExerciseCalendar(ExerciseCalendar $exerciseCalendar): self
  326.   {
  327.     if ($this->exerciseCalendars->contains($exerciseCalendar)) {
  328.       $this->exerciseCalendars->removeElement($exerciseCalendar);
  329.       // set the owning side to null (unless already changed)
  330.       if ($exerciseCalendar->getExercise() === $this) {
  331.         $exerciseCalendar->setExercise(null);
  332.       }
  333.     }
  334.     return $this;
  335.   }
  336.   /**
  337.    * @return Collection|Material[]
  338.    */
  339.   public function getMaterials(): Collection
  340.   {
  341.     return $this->materials;
  342.   }
  343.   /**
  344.    * @return array
  345.    */
  346.   public function getMaterialsArray()
  347.   {
  348.     $materials $this->materials;
  349.     $output = [];
  350.     foreach ($materials as $material) {
  351.       $output[] = $material->__toArray();
  352.     }
  353.     return $output;
  354.   }
  355.   /**
  356.    * @return Collection|NoteExercise[]
  357.    */
  358.   public function getNotes(): Collection
  359.   {
  360.     return $this->notes;
  361.   }
  362.     /**
  363.    * @return array
  364.    */
  365.   public function getNotesArray()
  366.   {
  367.     $notes $this->notes;
  368.     $output = [];
  369.     foreach ($notes as $note) {
  370.       $output[] = $note->__toArray();
  371.     }
  372.     return $output;
  373.   }
  374.   public function addMaterial(Material $material): self
  375.   {
  376.     if (!$this->materials->contains($material)) {
  377.       $this->materials[] = $material;
  378.     }
  379.     return $this;
  380.   }
  381.   public function removeMaterial(Material $material): self
  382.   {
  383.     if ($this->materials->contains($material)) {
  384.       $this->materials->removeElement($material);
  385.       // set the owning side to null (unless already changed)
  386.       if ($material->getExercise() === $this) {
  387.         $material->setExercise(null);
  388.       }
  389.     }
  390.     return $this;
  391.   }
  392.   public function removeMaterials(): self
  393.   {
  394.     $materials $this->materials;
  395.     foreach ($materials as $material) {
  396.       $this->materials->removeElement($material);
  397.       if ($material->getExercisesUser() === $this) {
  398.         $material->removeExerciseUser($this);
  399.       }
  400.     }
  401.     return $this;
  402.   }
  403.   public function getExerciseQualifications(): Collection
  404.   {
  405.     return $this->exerciseQualifications;
  406.   }
  407.   public function addExerciseQualification(ExerciseQualification $exerciseQualification): self
  408.   {
  409.     if (!$this->exerciseQualifications->contains($exerciseQualification)) {
  410.       $this->exerciseQualifications[] = $exerciseQualification;
  411.       $exerciseQualification->setExercise($this);
  412.     }
  413.     return $this;
  414.   }
  415.   public function removeExerciseQualification(ExerciseQualification $exerciseQualification): self
  416.   {
  417.     if ($this->exerciseQualifications->contains($exerciseQualification)) {
  418.       $this->exerciseQualifications->removeElement($exerciseQualification);
  419.       // set the owning side to null (unless already changed)
  420.       if ($exerciseQualification->getExercise() === $this) {
  421.         $exerciseQualification->setExercise(null);
  422.       }
  423.     }
  424.     return $this;
  425.   }
  426.   public function getStars(){
  427.     $this->stars 0;
  428.     foreach ($this->exerciseQualifications as $key => $value) {
  429.       $this->stars $this->stars $value->getQuantity();
  430.     }
  431.     if(!$this->stars){
  432.       return $this->stars;
  433.     }
  434.     
  435.     return round($this->stars count($this->exerciseQualifications)) ;
  436.   }
  437.   public function getMedia(){
  438.     $this->stars 0;
  439.     foreach ($this->exerciseQualifications as $key => $value) {
  440.       $this->stars $this->stars $value->getQuantity();
  441.     }
  442.     return $this->stars count($this->exerciseQualifications);
  443.   }
  444. }