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

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