vendor/kunstmaan/node-bundle/Entity/NodeTranslation.php line 23

Open in your IDE?
  1. <?php
  2. namespace Kunstmaan\NodeBundle\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\ORM\EntityManager;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Kunstmaan\AdminBundle\Entity\AbstractEntity;
  7. use Kunstmaan\NodeBundle\Form\NodeTranslationAdminType;
  8. use Symfony\Component\Validator\Constraints as Assert;
  9. /**
  10.  * NodeTranslation
  11.  *
  12.  * @ORM\Entity(repositoryClass="Kunstmaan\NodeBundle\Repository\NodeTranslationRepository")
  13.  * @ORM\Table(
  14.  *     name="kuma_node_translations",
  15.  *     uniqueConstraints={@ORM\UniqueConstraint(name="ix_kuma_node_translations_node_lang", columns={"node_id", "lang"})},
  16.  *     indexes={@ORM\Index(name="idx__node_translation_lang_url", columns={"lang", "url"})}
  17.  * )
  18.  * @ORM\ChangeTrackingPolicy("DEFERRED_EXPLICIT")
  19.  */
  20. class NodeTranslation extends AbstractEntity
  21. {
  22.     /**
  23.      * @var Node
  24.      *
  25.      * @ORM\ManyToOne(targetEntity="Node", inversedBy="nodeTranslations")
  26.      * @ORM\JoinColumn(name="node_id", referencedColumnName="id")
  27.      */
  28.     protected $node;
  29.     /**
  30.      * @var string
  31.      *
  32.      * @ORM\Column(type="string")
  33.      */
  34.     protected $lang;
  35.     /**
  36.      * @var bool
  37.      *
  38.      * @ORM\Column(type="boolean")
  39.      */
  40.     protected $online false;
  41.     /**
  42.      * @var string
  43.      *
  44.      * @ORM\Column(type="string")
  45.      */
  46.     protected $title;
  47.     /**
  48.      * @var string
  49.      *
  50.      * @ORM\Column(type="string", nullable=true)
  51.      * @Assert\Regex("/^[a-zA-Z0-9\-_\/]+$/")
  52.      */
  53.     protected $slug;
  54.     /**
  55.      * @var string
  56.      *
  57.      * @ORM\Column(type="string", nullable=true)
  58.      */
  59.     protected $url;
  60.     /**
  61.      * @var NodeVersion
  62.      *
  63.      * @ORM\ManyToOne(targetEntity="NodeVersion")
  64.      * @ORM\JoinColumn(name="public_node_version_id", referencedColumnName="id")
  65.      */
  66.     protected $publicNodeVersion;
  67.     /**
  68.      * @var ArrayCollection
  69.      * @Assert\Valid()
  70.      * @ORM\OneToMany(targetEntity="NodeVersion", mappedBy="nodeTranslation")
  71.      * @ORM\OrderBy({"created" = "ASC"})
  72.      */
  73.     protected $nodeVersions;
  74.     /**
  75.      * @var int
  76.      *
  77.      * @ORM\Column(type="smallint", nullable=true)
  78.      */
  79.     protected $weight;
  80.     /**
  81.      * @var \DateTime
  82.      *
  83.      * @ORM\Column(type="datetime", nullable=true)
  84.      */
  85.     protected $created;
  86.     /**
  87.      * @var \DateTime
  88.      *
  89.      * @ORM\Column(type="datetime", nullable=true)
  90.      */
  91.     protected $updated;
  92.     /**
  93.      * contructor
  94.      */
  95.     public function __construct()
  96.     {
  97.         $this->nodeVersions = new ArrayCollection();
  98.         $this->setCreated(new \DateTime());
  99.         $this->setUpdated(new \DateTime());
  100.     }
  101.     /**
  102.      * Set node
  103.      *
  104.      * @param Node $node
  105.      *
  106.      * @return NodeTranslation
  107.      */
  108.     public function setNode($node)
  109.     {
  110.         $this->node $node;
  111.         return $this;
  112.     }
  113.     /**
  114.      * Get Node
  115.      *
  116.      * @return Node
  117.      */
  118.     public function getNode()
  119.     {
  120.         return $this->node;
  121.     }
  122.     /**
  123.      * Set lang
  124.      *
  125.      * @param string $lang
  126.      *
  127.      * @return NodeTranslation
  128.      */
  129.     public function setLang($lang)
  130.     {
  131.         $this->lang $lang;
  132.         return $this;
  133.     }
  134.     /**
  135.      * Get lang
  136.      *
  137.      * @return string
  138.      */
  139.     public function getLang()
  140.     {
  141.         return $this->lang;
  142.     }
  143.     /**
  144.      * Is online
  145.      *
  146.      * @return bool
  147.      */
  148.     public function isOnline()
  149.     {
  150.         return $this->online;
  151.     }
  152.     /**
  153.      * Set online
  154.      *
  155.      * @param bool $online
  156.      *
  157.      * @return NodeTranslation
  158.      */
  159.     public function setOnline($online)
  160.     {
  161.         $this->online $online;
  162.         return $this;
  163.     }
  164.     /**
  165.      * Set title
  166.      *
  167.      * @param string $title
  168.      *
  169.      * @return NodeTranslation
  170.      */
  171.     public function setTitle($title)
  172.     {
  173.         $this->title $title;
  174.         return $this;
  175.     }
  176.     /**
  177.      * Get title
  178.      *
  179.      * @return string
  180.      */
  181.     public function getTitle()
  182.     {
  183.         return $this->title;
  184.     }
  185.     /**
  186.      * Set slug
  187.      *
  188.      * @param string $slug
  189.      *
  190.      * @return NodeTranslation
  191.      */
  192.     public function setSlug($slug)
  193.     {
  194.         $this->slug $slug;
  195.         return $this;
  196.     }
  197.     /**
  198.      * Get slug
  199.      *
  200.      * @return string
  201.      */
  202.     public function getFullSlug()
  203.     {
  204.         $slug $this->getSlugPart();
  205.         if (empty($slug)) {
  206.             return null;
  207.         }
  208.         return $slug;
  209.     }
  210.     /**
  211.      * @return string
  212.      */
  213.     public function getSlugPart()
  214.     {
  215.         $slug '';
  216.         $parentNode $this->getNode()->getParent();
  217.         if ($parentNode !== null) {
  218.             $nodeTranslation $parentNode->getNodeTranslation($this->langtrue);
  219.             if ($nodeTranslation !== null) {
  220.                 $parentSlug $nodeTranslation->getSlugPart();
  221.                 if (!empty($parentSlug)) {
  222.                     $slug rtrim($parentSlug'/') . '/';
  223.                 }
  224.             }
  225.         }
  226.         $slug .= $this->getSlug();
  227.         return $slug;
  228.     }
  229.     /**
  230.      * Get slug
  231.      *
  232.      * @return string
  233.      */
  234.     public function getSlug()
  235.     {
  236.         return $this->slug;
  237.     }
  238.     /**
  239.      * @param NodeVersion $publicNodeVersion
  240.      *
  241.      * @return NodeTranslation
  242.      */
  243.     public function setPublicNodeVersion(NodeVersion $publicNodeVersion)
  244.     {
  245.         $this->publicNodeVersion $publicNodeVersion;
  246.         return $this;
  247.     }
  248.     /**
  249.      * @return NodeVersion
  250.      */
  251.     public function getPublicNodeVersion()
  252.     {
  253.         return $this->publicNodeVersion;
  254.     }
  255.     /**
  256.      * @return NodeVersion
  257.      */
  258.     public function getDraftNodeVersion()
  259.     {
  260.         return $this->getNodeVersion('draft');
  261.     }
  262.     /**
  263.      * @return ArrayCollection
  264.      */
  265.     public function getNodeVersions()
  266.     {
  267.         return $this->nodeVersions;
  268.     }
  269.     /**
  270.      * @param ArrayCollection $nodeVersions
  271.      *
  272.      * @return NodeTranslation
  273.      */
  274.     public function setNodeVersions(ArrayCollection $nodeVersions)
  275.     {
  276.         $this->nodeVersions $nodeVersions;
  277.         return $this;
  278.     }
  279.     /**
  280.      * @param string $type
  281.      *
  282.      * @return NodeVersion|null
  283.      */
  284.     public function getNodeVersion($type)
  285.     {
  286.         if ($type == 'public') {
  287.             return $this->publicNodeVersion;
  288.         }
  289.         $nodeVersions $this->getNodeVersions();
  290.         $max = \count($nodeVersions);
  291.         for ($i $max 1$i >= 0; --$i) {
  292.             /* @var NodeVersion $nodeVersion */
  293.             $nodeVersion $nodeVersions[$i];
  294.             if ($type == $nodeVersion->getType()) {
  295.                 return $nodeVersion;
  296.             }
  297.         }
  298.         return null;
  299.     }
  300.     /**
  301.      * Add nodeVersion
  302.      *
  303.      * @param NodeVersion $nodeVersion
  304.      *
  305.      * @return NodeTranslation
  306.      */
  307.     public function addNodeVersion(NodeVersion $nodeVersion)
  308.     {
  309.         $this->nodeVersions[] = $nodeVersion;
  310.         $nodeVersion->setNodeTranslation($this);
  311.         if ($nodeVersion->getType() == 'public') {
  312.             $this->publicNodeVersion $nodeVersion;
  313.         }
  314.         return $this;
  315.     }
  316.     /**
  317.      * @return string
  318.      */
  319.     public function getDefaultAdminType()
  320.     {
  321.         return NodeTranslationAdminType::class;
  322.     }
  323.     /**
  324.      * @param EntityManager $em   The entity manager
  325.      * @param string        $type The type
  326.      *
  327.      * @return object|null
  328.      */
  329.     public function getRef(EntityManager $em$type 'public')
  330.     {
  331.         $nodeVersion $this->getNodeVersion($type);
  332.         if ($nodeVersion) {
  333.             return $em->getRepository($nodeVersion->getRefEntityName())->find($nodeVersion->getRefId());
  334.         }
  335.         return null;
  336.     }
  337.     /**
  338.      * @param string $url
  339.      *
  340.      * @return NodeTranslation
  341.      */
  342.     public function setUrl($url)
  343.     {
  344.         $this->url $url;
  345.         return $this;
  346.     }
  347.     /**
  348.      * @return string
  349.      */
  350.     public function getUrl()
  351.     {
  352.         return $this->url;
  353.     }
  354.     /**
  355.      * @param int $weight
  356.      *
  357.      * @return NodeTranslation
  358.      */
  359.     public function setWeight($weight)
  360.     {
  361.         $this->weight $weight;
  362.         return $this;
  363.     }
  364.     /**
  365.      * @return int
  366.      */
  367.     public function getWeight()
  368.     {
  369.         return $this->weight;
  370.     }
  371.     /**
  372.      * @return \DateTime
  373.      */
  374.     public function getCreated()
  375.     {
  376.         return $this->created;
  377.     }
  378.     /**
  379.      * @param \DateTime $created
  380.      *
  381.      * @return NodeTranslation
  382.      */
  383.     public function setCreated($created)
  384.     {
  385.         $this->created $created;
  386.         return $this;
  387.     }
  388.     /**
  389.      * @return \DateTime
  390.      */
  391.     public function getUpdated()
  392.     {
  393.         return $this->updated;
  394.     }
  395.     /**
  396.      * @param \DateTime $updated
  397.      *
  398.      * @return NodeTranslation
  399.      */
  400.     public function setUpdated($updated)
  401.     {
  402.         $this->updated $updated;
  403.         return $this;
  404.     }
  405. }