vendor/kunstmaan/node-bundle/Entity/Node.php line 37

Open in your IDE?
  1. <?php
  2. namespace Kunstmaan\NodeBundle\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\NodeBundle\Form\NodeAdminType;
  9. use Kunstmaan\NodeBundle\Repository\NodeRepository;
  10. use Kunstmaan\UtilitiesBundle\Helper\ClassLookup;
  11. use Symfony\Component\Validator\Constraints as Assert;
  12. /**
  13.  * @ORM\Entity(repositoryClass="Kunstmaan\NodeBundle\Repository\NodeRepository")
  14.  * @ORM\Table(
  15.  *      name="kuma_nodes",
  16.  *      indexes={
  17.  *          @ORM\Index(name="idx_node_internal_name", columns={"internal_name"}),
  18.  *          @ORM\Index(name="idx_node_ref_entity_name", columns={"ref_entity_name"}),
  19.  *          @ORM\Index(name="idx_node_tree", columns={"deleted", "hidden_from_nav", "lft", "rgt"})
  20.  *      }
  21.  * )
  22.  * @ORM\HasLifecycleCallbacks()
  23.  * @ORM\ChangeTrackingPolicy("DEFERRED_EXPLICIT")
  24.  * @Gedmo\Tree(type="nested")
  25.  */
  26. #[ORM\Entity(repositoryClassNodeRepository::class)]
  27. #[ORM\Table(name'kuma_nodes')]
  28. #[ORM\Index(name'idx_node_internal_name'columns: ['internal_name'])]
  29. #[ORM\Index(name'idx_node_ref_entity_name'columns: ['ref_entity_name'])]
  30. #[ORM\Index(name'idx_node_tree'columns: ['deleted''hidden_from_nav''lft''rgt'])]
  31. #[ORM\HasLifecycleCallbacks]
  32. #[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')]
  33. #[Gedmo\Tree(type'nested')]
  34. class Node extends AbstractEntity implements GedmoNode
  35. {
  36.     /**
  37.      * @var Node
  38.      *
  39.      * @ORM\ManyToOne(targetEntity="Node", inversedBy="children")
  40.      * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
  41.      * @Gedmo\TreeParent
  42.      */
  43.     #[ORM\ManyToOne(targetEntityNode::class, inversedBy'children')]
  44.     #[ORM\JoinColumn(name'parent_id'referencedColumnName'id')]
  45.     #[Gedmo\TreeParent]
  46.     protected $parent;
  47.     /**
  48.      * @var ArrayCollection
  49.      *
  50.      * @ORM\OneToMany(targetEntity="Node", mappedBy="parent")
  51.      */
  52.     #[ORM\OneToMany(targetEntityNode::class, mappedBy'parent')]
  53.     protected $children;
  54.     /**
  55.      * @var int
  56.      *
  57.      * @ORM\Column(name="lft", type="integer", nullable=true)
  58.      * @Gedmo\TreeLeft
  59.      */
  60.     #[ORM\Column(name'lft'type'integer'nullabletrue)]
  61.     #[Gedmo\TreeLeft]
  62.     protected $lft;
  63.     /**
  64.      * @var int
  65.      *
  66.      * @ORM\Column(name="lvl", type="integer", nullable=true)
  67.      * @Gedmo\TreeLevel
  68.      */
  69.     #[ORM\Column(name'lvl'type'integer'nullabletrue)]
  70.     #[Gedmo\TreeLevel]
  71.     protected $lvl;
  72.     /**
  73.      * @var int
  74.      *
  75.      * @ORM\Column(name="rgt", type="integer", nullable=true)
  76.      * @Gedmo\TreeRight
  77.      */
  78.     #[ORM\Column(name'rgt'type'integer'nullabletrue)]
  79.     #[Gedmo\TreeRight]
  80.     protected $rgt;
  81.     /**
  82.      * @var ArrayCollection
  83.      *
  84.      * @ORM\OneToMany(targetEntity="NodeTranslation", mappedBy="node")
  85.      */
  86.     #[ORM\OneToMany(targetEntityNodeTranslation::class, mappedBy'node')]
  87.     #[Assert\Valid]
  88.     protected $nodeTranslations;
  89.     /**
  90.      * @var bool
  91.      *
  92.      * @ORM\Column(type="boolean")
  93.      */
  94.     #[ORM\Column(name'deleted'type'boolean')]
  95.     protected $deleted;
  96.     /**
  97.      * @var bool
  98.      *
  99.      * @ORM\Column(type="boolean", name="hidden_from_nav")
  100.      */
  101.     #[ORM\Column(name'hidden_from_nav'type'boolean')]
  102.     protected $hiddenFromNav;
  103.     /**
  104.      * @var string
  105.      *
  106.      * @ORM\Column(type="string", nullable=false, name="ref_entity_name")
  107.      */
  108.     #[ORM\Column(name'ref_entity_name'type'string'nullablefalse)]
  109.     protected $refEntityName;
  110.     /**
  111.      * @var string
  112.      *
  113.      * @ORM\Column(type="string", nullable=true, name="internal_name")
  114.      */
  115.     #[ORM\Column(name'internal_name'type'string'nullabletrue)]
  116.     protected $internalName;
  117.     /**
  118.      * @var GedmoNode|null
  119.      */
  120.     private $sibling;
  121.     public function __construct()
  122.     {
  123.         $this->children = new ArrayCollection();
  124.         $this->nodeTranslations = new ArrayCollection();
  125.         $this->deleted false;
  126.         $this->hiddenFromNav false;
  127.     }
  128.     /**
  129.      * @return bool
  130.      */
  131.     public function isHiddenFromNav()
  132.     {
  133.         return $this->hiddenFromNav;
  134.     }
  135.     /**
  136.      * @return bool
  137.      */
  138.     public function getHiddenFromNav()
  139.     {
  140.         return $this->hiddenFromNav;
  141.     }
  142.     /**
  143.      * @param bool $hiddenFromNav
  144.      *
  145.      * @return Node
  146.      */
  147.     public function setHiddenFromNav($hiddenFromNav)
  148.     {
  149.         $this->hiddenFromNav $hiddenFromNav;
  150.         return $this;
  151.     }
  152.     /**
  153.      * @return ArrayCollection|Node[]
  154.      */
  155.     public function getChildren()
  156.     {
  157.         return $this->children->filter(
  158.             function (Node $entry) {
  159.                 if ($entry->isDeleted()) {
  160.                     return false;
  161.                 }
  162.                 return true;
  163.             }
  164.         );
  165.     }
  166.     /**
  167.      * @param ArrayCollection $children
  168.      *
  169.      * @return Node
  170.      */
  171.     public function setChildren($children)
  172.     {
  173.         $this->children $children;
  174.         return $this;
  175.     }
  176.     /**
  177.      * Add children
  178.      *
  179.      * @return Node
  180.      */
  181.     public function addNode(Node $child)
  182.     {
  183.         $this->children[] = $child;
  184.         $child->setParent($this);
  185.         return $this;
  186.     }
  187.     /**
  188.      * @param bool $includeOffline
  189.      *
  190.      * @return ArrayCollection|NodeTranslation[]
  191.      */
  192.     public function getNodeTranslations($includeOffline false)
  193.     {
  194.         return $this->nodeTranslations
  195.             ->filter(function (NodeTranslation $entry) use ($includeOffline) {
  196.                 return $includeOffline || $entry->isOnline();
  197.             }
  198.             );
  199.     }
  200.     /**
  201.      * @return Node
  202.      */
  203.     public function setNodeTranslations(ArrayCollection $nodeTranslations)
  204.     {
  205.         $this->nodeTranslations $nodeTranslations;
  206.         return $this;
  207.     }
  208.     /**
  209.      * @param string $lang           The locale
  210.      * @param bool   $includeOffline Include offline pages or not
  211.      *
  212.      * @return NodeTranslation|null
  213.      */
  214.     public function getNodeTranslation($lang$includeOffline false)
  215.     {
  216.         $nodeTranslations $this->getNodeTranslations($includeOffline);
  217.         /* @var NodeTranslation $nodeTranslation */
  218.         foreach ($nodeTranslations as $nodeTranslation) {
  219.             if ($lang == $nodeTranslation->getLang()) {
  220.                 return $nodeTranslation;
  221.             }
  222.         }
  223.         return null;
  224.     }
  225.     /**
  226.      * Add nodeTranslation
  227.      *
  228.      * @return Node
  229.      */
  230.     public function addNodeTranslation(NodeTranslation $nodeTranslation)
  231.     {
  232.         $this->nodeTranslations[] = $nodeTranslation;
  233.         $nodeTranslation->setNode($this);
  234.         return $this;
  235.     }
  236.     /**
  237.      * Set parent
  238.      *
  239.      * @param Node $parent
  240.      *
  241.      * @return Node
  242.      */
  243.     public function setParent($parent)
  244.     {
  245.         $this->parent $parent;
  246.         return $this;
  247.     }
  248.     /**
  249.      * Get parent
  250.      *
  251.      * @return Node
  252.      */
  253.     public function getParent()
  254.     {
  255.         return $this->parent;
  256.     }
  257.     /**
  258.      * @return Node[]
  259.      */
  260.     public function getParents()
  261.     {
  262.         $parent $this->getParent();
  263.         $parents = [];
  264.         while ($parent !== null) {
  265.             $parents[] = $parent;
  266.             $parent $parent->getParent();
  267.         }
  268.         return array_reverse($parents);
  269.     }
  270.     /**
  271.      * @return bool
  272.      */
  273.     public function isDeleted()
  274.     {
  275.         return $this->deleted;
  276.     }
  277.     /**
  278.      * @param bool $deleted
  279.      *
  280.      * @return Node
  281.      */
  282.     public function setDeleted($deleted)
  283.     {
  284.         $this->deleted $deleted;
  285.         return $this;
  286.     }
  287.     /**
  288.      * Set referenced entity
  289.      *
  290.      * @return Node
  291.      */
  292.     public function setRef(HasNodeInterface $entity)
  293.     {
  294.         $this->setRefEntityName(ClassLookup::getClass($entity));
  295.         return $this;
  296.     }
  297.     /**
  298.      * Set class name of referenced entity
  299.      *
  300.      * @param string $refEntityName
  301.      *
  302.      * @return Node
  303.      */
  304.     protected function setRefEntityName($refEntityName)
  305.     {
  306.         $this->refEntityName $refEntityName;
  307.         return $this;
  308.     }
  309.     /**
  310.      * Get class name of referenced entity
  311.      *
  312.      * @return string
  313.      */
  314.     public function getRefEntityName()
  315.     {
  316.         return $this->refEntityName;
  317.     }
  318.     /**
  319.      * Set internal name
  320.      *
  321.      * @param string $internalName
  322.      *
  323.      * @return Node
  324.      */
  325.     public function setInternalName($internalName)
  326.     {
  327.         $this->internalName $internalName;
  328.         return $this;
  329.     }
  330.     /**
  331.      * Get internal name
  332.      *
  333.      * @return string
  334.      */
  335.     public function getInternalName()
  336.     {
  337.         return $this->internalName;
  338.     }
  339.     /**
  340.      * @return string
  341.      */
  342.     public function getDefaultAdminType()
  343.     {
  344.         return NodeAdminType::class;
  345.     }
  346.     /**
  347.      * Get tree left
  348.      *
  349.      * @return int
  350.      */
  351.     public function getLeft()
  352.     {
  353.         return $this->lft;
  354.     }
  355.     /**
  356.      * Get tree right
  357.      *
  358.      * @return int
  359.      */
  360.     public function getRight()
  361.     {
  362.         return $this->rgt;
  363.     }
  364.     /**
  365.      * Get tree level
  366.      *
  367.      * @return int
  368.      */
  369.     public function getLevel()
  370.     {
  371.         return $this->lvl;
  372.     }
  373.     public function setSibling(GedmoNode $node): void
  374.     {
  375.         $this->sibling $node;
  376.     }
  377.     public function getSibling(): ?GedmoNode
  378.     {
  379.         return $this->sibling;
  380.     }
  381.     /**
  382.      * @return string
  383.      */
  384.     public function __toString()
  385.     {
  386.         return 'node ' $this->getId() . ', refEntityName: ' $this->getRefEntityName();
  387.     }
  388. }