src/Flexy/FrontBundle/Entity/Page.php line 34

  1. <?php
  2. namespace App\Flexy\FrontBundle\Entity;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  6. use App\Flexy\FrontBundle\Repository\PageRepository;
  7. use Doctrine\Common\Collections\ArrayCollection;
  8. use Doctrine\Common\Collections\Collection;
  9. use Doctrine\DBAL\Types\Types;
  10. use Doctrine\ORM\Mapping as ORM;
  11. use App\Entity\Link;
  12. use Symfony\Component\Serializer\Annotation\Groups;
  13. use Gedmo\Translatable\Translatable;
  14. use Gedmo\Mapping\Annotation as Gedmo;
  15.     /**
  16.      *
  17.      * @example This page need to have a rich content for SEO (in htmlContent) Texts and 
  18.      * paragraphes with cool design using bootstrap CSS 5+ and icons from font awesome
  19.      * 
  20.      */
  21. #[ApiResource(
  22.     normalizationContext: ['groups' => ['read']],
  23.     denormalizationContext: ['groups' => ['write']],
  24. )]
  25. #[ApiFilter(SearchFilter::class,properties:["slug"=>"exact"])]
  26. #[ORM\Entity(repositoryClassPageRepository::class)]
  27. #[Gedmo\SoftDeleteable(fieldName'deletedAt'timeAwarefalsehardDeletetrue)]
  28. #[ORM\Cache(usage:"NONSTRICT_READ_WRITE",region:"append_depend")]
  29. class Page implements Translatable
  30. {
  31.     #[ORM\Id]
  32.     #[ORM\GeneratedValue]
  33.     #[ORM\Column(type'integer')]
  34.     #[Groups(['read'])]
  35.     private $id;
  36.     /**
  37.      * #requiredForAi
  38.      * @example Give me HTML5 with some cool CSS 3 using bootstrap 5 ,You can Use (Containers,Grids,ListGroups,Accordions,Form controls), Suggest paragraphs (at least 16 if type simple, 4 if widget) use all images provided
  39.      */
  40.     #[ORM\Column(typeTypes::TEXTnullabletrue)]
  41.     private ?string $htmlContent null;
  42.     
  43.     #[ORM\Column(type'string'length255nullablefalse)]
  44.     #[Groups(['read','write'])]
  45.     #[Gedmo\Translatable]
  46.      private $title;
  47.     #[ORM\Column(type'json'nullabletrue)]
  48.     #[Groups(['read','write'])]
  49.     #[Gedmo\Translatable]
  50.     private $jsonContent=[];
  51.     #[ORM\Column(type'json'nullabletrue)]
  52.     #[Groups(['read','write'])]
  53.     #[Gedmo\Translatable]
  54.     private $jsonSimplifiedContent;
  55.     #[ORM\Column(type'datetime'nullabletrue)]
  56.     private ?\DateTimeInterface $createdAt null;
  57.     /**
  58.      * @Gedmo\Slug(fields={"title"})
  59.      */
  60.     #[Gedmo\Slug(fields: ['title'], unique:trueupdatable:false)]
  61.     #[ORM\Column(type'string'length255nullabletrue)]
  62.     #[Groups(['read','write'])]
  63.     private ?string $slug null;
  64.     
  65.     #[ORM\Column(type'boolean'nullabletrue)]
  66.     private ?bool $isEnabled null;
  67.     #[ORM\OneToOne(targetEntityLink::class, cascade: ['persist''remove'])]
  68.     #[ORM\JoinColumn(nullabletrueonDelete'CASCADE')]
  69.     private $link;
  70.     /**
  71.      *
  72.      * @example [wysiwyg|simple|summernote] type of page editor default is wysiwyg
  73.      */
  74.     #[ORM\Column(type'string'length255nullabletrue)]
  75.     private $pageEditor="summernote";
  76.     /**
  77.      *
  78.      * @example [simple|widget] default is simple (Is the full page with more content)
  79.      */
  80.     #[ORM\Column(type'string'length255nullabletrue)]
  81.     private $type="simple";
  82.     
  83.         #[ORM\Column(typeTypes::TEXTnullabletrue)]
  84.         private ?string $description null;
  85.         #[ORM\Column(nullabletrue)]
  86.     private ?\DateTimeImmutable $deletedAt null;
  87.         /**
  88.      * Used locale to override Translation listener`s locale
  89.      * this is not a mapped field of entity metadata, just a simple property
  90.      */
  91.     #[Gedmo\Locale]
  92.     private $locale;
  93.     #[ORM\Column(length255nullabletrue)]
  94.     private ?string $image null;
  95.     #[ORM\ManyToMany(targetEntityCategoryPage::class, inversedBy'pages')]
  96.     private Collection $categories;
  97.     #[ORM\Column(length255nullabletrue)]
  98.     private ?string $keywords null;
  99.     #[ORM\Column(length255nullabletrue)]
  100.     private ?string $titleAdmin null;
  101.     
  102.     #[Groups(['read','write'])]
  103.     #[ORM\Column(length255nullabletrue)]
  104.     private ?string $frontHook null;
  105.     #[Groups(['read','write'])]
  106.     #[ORM\Column(nullabletrue)]
  107.     private ?int $frontHookPriority null;
  108.     public function __construct()
  109.     {
  110.         $this->categories = new ArrayCollection();
  111.     }
  112.     public function __toString()
  113.     {
  114.         return $this->title" (".$this->type.")";
  115.     }
  116.     public function getId(): ?int
  117.     {
  118.         return $this->id;
  119.     }
  120.     public function getCreatedAt(): ?\DateTimeInterface
  121.     {
  122.         return $this->createdAt;
  123.     }
  124.     public function setCreatedAt(?\DateTimeInterface $createdAt): self
  125.     {
  126.         $this->createdAt $createdAt;
  127.         return $this;
  128.     }
  129.     public function getSlug(): ?string
  130.     {
  131.         return $this->slug;
  132.     }
  133.     public function setSlug(string $slug): self
  134.     {
  135.         $this->slug $slug;
  136.         return $this;
  137.     }
  138.     public function getIsEnabled(): ?bool
  139.     {
  140.         return $this->isEnabled;
  141.     }
  142.     public function setIsEnabled(?bool $isEnabled): self
  143.     {
  144.         $this->isEnabled $isEnabled;
  145.         return $this;
  146.     }
  147.      /**
  148.       * Get the value of title
  149.       */ 
  150.      public function getTitle()
  151.      {
  152.           return $this->title;
  153.      }
  154.      /**
  155.       * Set the value of title
  156.       *
  157.       * @return  self
  158.       */ 
  159.      public function setTitle($title)
  160.      {
  161.           $this->title $title;
  162.           return $this;
  163.      }
  164.     /**
  165.      * Get the value of link
  166.      */ 
  167.     public function getLink()
  168.     {
  169.         return $this->link;
  170.     }
  171.     /**
  172.      * Set the value of link
  173.      *
  174.      * @return  self
  175.      */ 
  176.     public function setLink($link)
  177.     {
  178.         $this->link $link;
  179.         return $this;
  180.     }
  181.     /**
  182.      * Get the value of jsonContent
  183.      */ 
  184.     public function getJsonContent()
  185.     {
  186.         if($this->jsonContent==null){
  187.             return [];
  188.         }
  189.         return $this->jsonContent;
  190.     }
  191.     /**
  192.      * Set the value of jsonContent
  193.      *
  194.      * @return  self
  195.      */ 
  196.     public function setJsonContent($jsonContent)
  197.     {
  198.         $this->jsonContent $jsonContent;
  199.         return $this;
  200.     }
  201.     #[Groups(['read'])]
  202.     public function getJsonContentCSS() {
  203.         $contents $this->jsonSimplifiedContent;
  204.         $css '';
  205.         if(!$contents){
  206.             return '';
  207.         }
  208.         //dd($this->jsonContent);
  209.         foreach ($contents as $singleContent) {
  210.             $css $css.$singleContent["css"];
  211.         }
  212.         
  213.         return $css;
  214.     }
  215.     #[Groups(['read'])]
  216.     public function getJsonContentHTML() {
  217.         $contents $this->jsonSimplifiedContent;
  218.         $html '';
  219.         if(!$contents){
  220.             return '';
  221.         }
  222.         //dd($this->jsonContent);
  223.         foreach ($contents as $singleContent) {
  224.             $html $html.$singleContent["html"];
  225.         }
  226.         
  227.         return $html;
  228.     }
  229.     public function jsonContentToHtml() {
  230.         $obj $this->jsonContent;
  231.         $html '';
  232.         //dd($this->jsonContent);
  233.         foreach ($obj["blocks"] as $block) {
  234.             switch ($block["type"]) {
  235.                 case 'paragraph':
  236.                     $html .= '<p>' $block["data"]["text"] . '</p>';
  237.                     break;
  238.                 
  239.                 case 'header':
  240.                     $html .= '<h'$block["data"]["level"] .'>' $block["data"]["text"] . '</h'$block["data"]["level"] .'>';
  241.                     break;
  242.                 case 'raw':
  243.                     $html .= $block["data"]["html"];
  244.                     break;
  245.                 case 'list':
  246.                     $lsType = ($block["data"]["style"] == 'ordered') ? 'ol' 'ul';
  247.                     $html .= '<' $lsType '>';
  248.                     foreach($block["data"]["items"] as $item) {
  249.                         $html .= '<li>' $item '</li>';
  250.                     }
  251.                     $html .= '</' $lsType '>';
  252.                     break;
  253.                 
  254.                 case 'code':
  255.                     $html .= '<pre><code class="language-'$block["data"]["lang"] .'">'$block["data"]["code"] .'</code></pre>';
  256.                     break;
  257.                 
  258.                 case 'image':
  259.                     $html .= '<div class="img_pnl"><img src="'$block["data"]["file"]["url"]->url .'" /></div>';
  260.                     break;
  261.                 
  262.                 default:
  263.                     break;
  264.             }
  265.         }
  266.         
  267.         return $html;
  268.     }
  269.     /**
  270.      * Get the value of pageEditor
  271.      */ 
  272.     public function getPageEditor()
  273.     {
  274.         return $this->pageEditor;
  275.     }
  276.     /**
  277.      * Set the value of pageEditor
  278.      *
  279.      * @return  self
  280.      */ 
  281.     public function setPageEditor($pageEditor)
  282.     {
  283.         $this->pageEditor $pageEditor;
  284.         return $this;
  285.     }
  286.     /**
  287.      * Get the value of jsonSimplifiedContent
  288.      */ 
  289.     public function getJsonSimplifiedContent()
  290.     {
  291.         return $this->jsonSimplifiedContent;
  292.     }
  293.     /**
  294.      * Set the value of jsonSimplifiedContent
  295.      *
  296.      * @return  self
  297.      */ 
  298.     public function setJsonSimplifiedContent($jsonSimplifiedContent)
  299.     {
  300.         $this->jsonSimplifiedContent $jsonSimplifiedContent;
  301.         return $this;
  302.     }
  303.     public function getDescription(): ?string
  304.     {
  305.         return $this->description;
  306.     }
  307.     public function setDescription(?string $description): self
  308.     {
  309.         $this->description $description;
  310.         return $this;
  311.     }
  312.     /**
  313.      * Get the value of type
  314.      */ 
  315.     public function getType()
  316.     {
  317.         return $this->type;
  318.     }
  319.     /**
  320.      * Set the value of type
  321.      *
  322.      * @return  self
  323.      */ 
  324.     public function setType($type)
  325.     {
  326.         $this->type $type;
  327.         return $this;
  328.     }
  329.     public function setTranslatableLocale($locale)
  330.     {
  331.         $this->locale $locale;
  332.     }
  333.     public function getHtmlContent(): ?string
  334.     {
  335.         return $this->htmlContent;
  336.     }
  337.     public function setHtmlContent(?string $htmlContent): static
  338.     {
  339.         $this->htmlContent $htmlContent;
  340.         return $this;
  341.     }
  342.     public function getImage(): ?string
  343.     {
  344.         return $this->image;
  345.     }
  346.     public function setImage(?string $image): static
  347.     {
  348.         $this->image $image;
  349.         return $this;
  350.     }
  351.     /**
  352.      * @return Collection<int, CategoryPage>
  353.      */
  354.     public function getCategories(): Collection
  355.     {
  356.         return $this->categories;
  357.     }
  358.     public function addCategory(CategoryPage $category): static
  359.     {
  360.         if (!$this->categories->contains($category)) {
  361.             $this->categories->add($category);
  362.             $category->addPage($this);
  363.         }
  364.         return $this;
  365.     }
  366.     public function removeCategory(CategoryPage $category): static
  367.     {
  368.         if ($this->categories->removeElement($category)) {
  369.             $category->removePage($this);
  370.         }
  371.         return $this;
  372.     }
  373.     public function getKeywords(): ?string
  374.     {
  375.         return $this->keywords;
  376.     }
  377.     public function setKeywords(?string $keywords): static
  378.     {
  379.         $this->keywords $keywords;
  380.         return $this;
  381.     }
  382.     public function getTitleAdmin(): ?string
  383.     {
  384.         return $this->titleAdmin;
  385.     }
  386.     public function setTitleAdmin(?string $titleAdmin): static
  387.     {
  388.         $this->titleAdmin $titleAdmin;
  389.         return $this;
  390.     }
  391.     public function getFrontHook(): ?string
  392.     {
  393.         return $this->frontHook;
  394.     }
  395.     public function setFrontHook(?string $frontHook): static
  396.     {
  397.         $this->frontHook $frontHook;
  398.         return $this;
  399.     }
  400.     public function getFrontHookPriority(): ?int
  401.     {
  402.         return $this->frontHookPriority;
  403.     }
  404.     public function setFrontHookPriority(?int $frontHookPriority): static
  405.     {
  406.         $this->frontHookPriority $frontHookPriority;
  407.         return $this;
  408.     }
  409. }