vendor/kunstmaan/media-bundle/Entity/Folder.php line 32

Open in your IDE?
  1. <?php
  2. namespace Kunstmaan\MediaBundle\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Gedmo\Mapping\Annotation as Gedmo;
  6. use Gedmo\Tree\Node as GedmoNode;
  7. use Kunstmaan\AdminBundle\Entity\AbstractEntity;
  8. use Kunstmaan\MediaBundle\Repository\FolderRepository;
  9. use Symfony\Component\Validator\Constraints as Assert;
  10. /**
  11.  * Defines a folder from the MediaBundle in the database
  12.  *
  13.  * @ORM\Entity(repositoryClass="Kunstmaan\MediaBundle\Repository\FolderRepository")
  14.  * @ORM\Table(name="kuma_folders", indexes={
  15.  *      @ORM\Index(name="idx_folder_internal_name", columns={"internal_name"}),
  16.  *      @ORM\Index(name="idx_folder_name", columns={"name"}),
  17.  *      @ORM\Index(name="idx_folder_deleted", columns={"deleted"})
  18.  * })
  19.  * @Gedmo\Tree(type="nested")
  20.  * @ORM\HasLifecycleCallbacks
  21.  */
  22. #[ORM\Entity(repositoryClassFolderRepository::class)]
  23. #[ORM\Table(name'kuma_folders')]
  24. #[ORM\Index(name'idx_folder_internal_name'columns: ['internal_name'])]
  25. #[ORM\Index(name'idx_folder_name'columns: ['name'])]
  26. #[ORM\Index(name'idx_folder_deleted'columns: ['deleted'])]
  27. #[Gedmo\Tree(type'nested')]
  28. #[ORM\HasLifecycleCallbacks]
  29. class Folder extends AbstractEntity implements GedmoNode
  30. {
  31.     const TYPE_FILES 'files';
  32.     const TYPE_IMAGE 'image';
  33.     const TYPE_MEDIA 'media';
  34.     const TYPE_SLIDESHOW 'slideshow';
  35.     const TYPE_VIDEO 'video';
  36.     /**
  37.      * @var string
  38.      *
  39.      * @Gedmo\Translatable
  40.      * @ORM\Column(type="string")
  41.      */
  42.     #[ORM\Column(name'name'type'string')]
  43.     #[Gedmo\Translatable]
  44.     #[Assert\NotBlank]
  45.     protected $name;
  46.     /**
  47.      * @var string
  48.      *
  49.      * @Gedmo\Locale
  50.      * Used locale to override Translation listener`s locale
  51.      * this is not a mapped field of entity metadata, just a simple property
  52.      */
  53.     #[Gedmo\Locale]
  54.     protected $locale;
  55.     /**
  56.      * @var Folder
  57.      *
  58.      * @ORM\ManyToOne(targetEntity="Folder", inversedBy="children", fetch="LAZY")
  59.      * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
  60.      * @Gedmo\TreeParent
  61.      */
  62.     #[ORM\ManyToOne(targetEntityFolder::class, inversedBy'children'fetch'LAZY')]
  63.     #[ORM\JoinColumn(name'parent_id'referencedColumnName'id'nullabletrue)]
  64.     #[Gedmo\TreeParent]
  65.     protected $parent;
  66.     /**
  67.      * @var ArrayCollection
  68.      *
  69.      * @ORM\OneToMany(targetEntity="Folder", mappedBy="parent", fetch="LAZY")
  70.      * @ORM\OrderBy({"lft" = "ASC"})
  71.      */
  72.     #[ORM\OneToMany(targetEntityFolder::class, mappedBy'parent'fetch'LAZY')]
  73.     #[ORM\OrderBy(['lft' => 'ASC'])]
  74.     protected $children;
  75.     /**
  76.      * @var ArrayCollection
  77.      *
  78.      * @ORM\OneToMany(targetEntity="Media", mappedBy="folder", fetch="LAZY")
  79.      * @ORM\OrderBy({"name" = "ASC"})
  80.      */
  81.     #[ORM\OneToMany(targetEntityMedia::class, mappedBy'folder'fetch'LAZY')]
  82.     #[ORM\OrderBy(['name' => 'ASC'])]
  83.     protected $media;
  84.     /**
  85.      * @var \DateTime
  86.      *
  87.      * @ORM\Column(type="datetime", name="created_at")
  88.      */
  89.     #[ORM\Column(name'created_at'type'datetime')]
  90.     protected $createdAt;
  91.     /**
  92.      * @var \DateTime
  93.      *
  94.      * @ORM\Column(type="datetime", name="updated_at")
  95.      */
  96.     #[ORM\Column(name'updated_at'type'datetime')]
  97.     protected $updatedAt;
  98.     /**
  99.      * @var string
  100.      *
  101.      * @ORM\Column(type="string", nullable=true)
  102.      */
  103.     #[ORM\Column(name'rel'type'string'nullabletrue)]
  104.     protected $rel;
  105.     /**
  106.      * @var string
  107.      *
  108.      * @ORM\Column(type="string", name="internal_name", nullable=true)
  109.      */
  110.     #[ORM\Column(name'internal_name'type'string'nullabletrue)]
  111.     protected $internalName;
  112.     /**
  113.      * @var int
  114.      *
  115.      * @ORM\Column(name="lft", type="integer", nullable=true)
  116.      * @Gedmo\TreeLeft
  117.      */
  118.     #[ORM\Column(name'lft'type'integer'nullabletrue)]
  119.     #[Gedmo\TreeLeft]
  120.     protected $lft;
  121.     /**
  122.      * @var int
  123.      *
  124.      * @ORM\Column(name="lvl", type="integer", nullable=true)
  125.      * @Gedmo\TreeLevel
  126.      */
  127.     #[ORM\Column(name'lvl'type'integer'nullabletrue)]
  128.     #[Gedmo\TreeLevel]
  129.     protected $lvl;
  130.     /**
  131.      * @var int
  132.      *
  133.      * @ORM\Column(name="rgt", type="integer", nullable=true)
  134.      * @Gedmo\TreeRight
  135.      */
  136.     #[ORM\Column(name'rgt'type'integer'nullabletrue)]
  137.     #[Gedmo\TreeRight]
  138.     protected $rgt;
  139.     /**
  140.      * @var bool
  141.      *
  142.      * @ORM\Column(type="boolean")
  143.      */
  144.     #[ORM\Column(name'deleted'type'boolean')]
  145.     protected $deleted;
  146.     /**
  147.      * @var GedmoNode|null
  148.      */
  149.     private $sibling;
  150.     public function __construct()
  151.     {
  152.         $this->children = new ArrayCollection();
  153.         $this->media = new ArrayCollection();
  154.         $this->setCreatedAt(new \DateTime());
  155.         $this->setUpdatedAt(new \DateTime());
  156.         $this->deleted false;
  157.     }
  158.     /**
  159.      * @return array
  160.      */
  161.     public static function allTypes()
  162.     {
  163.         return [
  164.             self::TYPE_MEDIA => self::TYPE_MEDIA,
  165.             self::TYPE_IMAGE => self::TYPE_IMAGE,
  166.             self::TYPE_FILES => self::TYPE_FILES,
  167.             self::TYPE_SLIDESHOW => self::TYPE_SLIDESHOW,
  168.             self::TYPE_VIDEO => self::TYPE_VIDEO,
  169.         ];
  170.     }
  171.     /**
  172.      * @return string
  173.      */
  174.     public function getTranslatableLocale()
  175.     {
  176.         return $this->locale;
  177.     }
  178.     /**
  179.      * @param string $locale
  180.      *
  181.      * @return Folder
  182.      */
  183.     public function setTranslatableLocale($locale)
  184.     {
  185.         $this->locale $locale;
  186.         return $this;
  187.     }
  188.     /**
  189.      * @return string
  190.      */
  191.     public function getRel()
  192.     {
  193.         return $this->rel;
  194.     }
  195.     /**
  196.      * @param string $rel
  197.      *
  198.      * @return Folder
  199.      */
  200.     public function setRel($rel)
  201.     {
  202.         $this->rel $rel;
  203.         return $this;
  204.     }
  205.     /**
  206.      * @return \DateTime
  207.      */
  208.     public function getCreatedAt()
  209.     {
  210.         return $this->createdAt;
  211.     }
  212.     /**
  213.      * @param \DateTime $createdAt
  214.      *
  215.      * @return Folder
  216.      */
  217.     public function setCreatedAt($createdAt)
  218.     {
  219.         $this->createdAt $createdAt;
  220.         return $this;
  221.     }
  222.     /**
  223.      * @return \DateTime
  224.      */
  225.     public function getUpdatedAt()
  226.     {
  227.         return $this->updatedAt;
  228.     }
  229.     /**
  230.      * @param \DateTime $updatedAt
  231.      *
  232.      * @return Folder
  233.      */
  234.     public function setUpdatedAt($updatedAt)
  235.     {
  236.         $this->updatedAt $updatedAt;
  237.         return $this;
  238.     }
  239.     /**
  240.      * @return Folder[]
  241.      */
  242.     public function getParents()
  243.     {
  244.         $parent $this->getParent();
  245.         $parents = [];
  246.         while ($parent !== null) {
  247.             $parents[] = $parent;
  248.             $parent $parent->getParent();
  249.         }
  250.         return array_reverse($parents);
  251.     }
  252.     /**
  253.      * @return Folder
  254.      */
  255.     public function getParent()
  256.     {
  257.         return $this->parent;
  258.     }
  259.     /**
  260.      * @return Folder
  261.      */
  262.     public function setParent(?Folder $parent null)
  263.     {
  264.         $this->parent $parent;
  265.         return $this;
  266.     }
  267.     /**
  268.      * @return Folder
  269.      */
  270.     public function addChild(Folder $child)
  271.     {
  272.         $this->children[] = $child;
  273.         $child->setParent($this);
  274.         return $this;
  275.     }
  276.     /**
  277.      * @return Folder
  278.      */
  279.     public function addMedia(Media $media)
  280.     {
  281.         $this->media[] = $media;
  282.         return $this;
  283.     }
  284.     /**
  285.      * @param bool $includeDeleted
  286.      *
  287.      * @return ArrayCollection
  288.      */
  289.     public function getMedia($includeDeleted false)
  290.     {
  291.         if ($includeDeleted) {
  292.             return $this->media;
  293.         }
  294.         return $this->media->filter(
  295.             function (Media $entry) {
  296.                 if ($entry->isDeleted()) {
  297.                     return false;
  298.                 }
  299.                 return true;
  300.             }
  301.         );
  302.     }
  303.     /**
  304.      * @param int $id
  305.      *
  306.      * @return bool
  307.      */
  308.     public function hasActive($id)
  309.     {
  310.         foreach ($this->getChildren() as $child) {
  311.             if ($child->hasActive($id) || $child->getId() == $id) {
  312.                 return true;
  313.             }
  314.         }
  315.         return false;
  316.     }
  317.     /**
  318.      * @param bool $includeDeleted
  319.      *
  320.      * @return ArrayCollection
  321.      */
  322.     public function getChildren($includeDeleted false)
  323.     {
  324.         if ($includeDeleted) {
  325.             return $this->children;
  326.         }
  327.         return $this->children->filter(
  328.             function (Folder $entry) {
  329.                 if ($entry->isDeleted()) {
  330.                     return false;
  331.                 }
  332.                 return true;
  333.             }
  334.         );
  335.     }
  336.     /**
  337.      * @param ArrayCollection $children
  338.      *
  339.      * @return Folder
  340.      */
  341.     public function setChildren($children)
  342.     {
  343.         $this->children $children;
  344.         return $this;
  345.     }
  346.     /**
  347.      * @return bool
  348.      */
  349.     public function isDeleted()
  350.     {
  351.         return $this->deleted;
  352.     }
  353.     /**
  354.      * @param bool $deleted
  355.      *
  356.      * @return Folder
  357.      */
  358.     public function setDeleted($deleted)
  359.     {
  360.         $this->deleted $deleted;
  361.         return $this;
  362.     }
  363.     /**
  364.      * @return string
  365.      */
  366.     public function getInternalName()
  367.     {
  368.         return $this->internalName;
  369.     }
  370.     /**
  371.      * @param string $internalName
  372.      *
  373.      * @return Folder
  374.      */
  375.     public function setInternalName($internalName)
  376.     {
  377.         $this->internalName $internalName;
  378.         return $this;
  379.     }
  380.     /**
  381.      * @return string
  382.      */
  383.     public function __toString()
  384.     {
  385.         return $this->getName();
  386.     }
  387.     /**
  388.      * @return string
  389.      */
  390.     public function getName()
  391.     {
  392.         return $this->name;
  393.     }
  394.     /**
  395.      * @param string $name
  396.      *
  397.      * @return Folder
  398.      */
  399.     public function setName($name)
  400.     {
  401.         $this->name $name;
  402.         return $this;
  403.     }
  404.     /**
  405.      * @param int $lft
  406.      *
  407.      * @return Folder
  408.      */
  409.     public function setLeft($lft)
  410.     {
  411.         $this->lft $lft;
  412.         return $this;
  413.     }
  414.     /**
  415.      * @return int
  416.      */
  417.     public function getLeft()
  418.     {
  419.         return $this->lft;
  420.     }
  421.     /**
  422.      * @param int $lvl
  423.      *
  424.      * @return Folder
  425.      */
  426.     public function setLevel($lvl)
  427.     {
  428.         $this->lvl $lvl;
  429.         return $this;
  430.     }
  431.     /**
  432.      * @param int $rgt
  433.      *
  434.      * @return Folder
  435.      */
  436.     public function setRight($rgt)
  437.     {
  438.         $this->rgt $rgt;
  439.         return $this;
  440.     }
  441.     /**
  442.      * @return int
  443.      */
  444.     public function getRight()
  445.     {
  446.         return $this->rgt;
  447.     }
  448.     /**
  449.      * @return string
  450.      */
  451.     public function getOptionLabel()
  452.     {
  453.         return str_repeat(
  454.             '-',
  455.             $this->getLevel()
  456.         ) . ' ' $this->getName();
  457.     }
  458.     /**
  459.      * @return int
  460.      */
  461.     public function getLevel()
  462.     {
  463.         return $this->lvl;
  464.     }
  465.     public function setSibling(GedmoNode $node): void
  466.     {
  467.         $this->sibling $node;
  468.     }
  469.     public function getSibling(): ?GedmoNode
  470.     {
  471.         return $this->sibling;
  472.     }
  473.     /**
  474.      * @ORM\PreUpdate
  475.      */
  476.     #[ORM\PreUpdate]
  477.     public function preUpdate()
  478.     {
  479.         $this->setUpdatedAt(new \DateTime());
  480.     }
  481. }