diff --git a/src/KekRozsak/FrontBundle/Controller/DocumentController.php b/src/KekRozsak/FrontBundle/Controller/DocumentController.php index 48ac6c0..ed543f2 100644 --- a/src/KekRozsak/FrontBundle/Controller/DocumentController.php +++ b/src/KekRozsak/FrontBundle/Controller/DocumentController.php @@ -6,13 +6,17 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; +use KekRozsak\FrontBundle\Entity\Document; +use KekRozsak\FrontBundle\Form\Type\DocumentType; +use KekRozsak\FrontBundle\Extensions\Slugifier; + class DocumentController extends Controller { /** * @Route("/dokumentum/{documentSlug}", name="KekRozsakFrontBundle_documentView") * @Template() */ - public function documentViewAction($documentSlug) + public function viewAction($documentSlug) { $docRepo = $this->getDoctrine()->getRepository('KekRozsakFrontBundle:Document'); if (!($document = $docRepo->findOneBySlug($documentSlug))) @@ -22,4 +26,86 @@ class DocumentController extends Controller 'document' => $document, ); } + + /** + * @Route("/dokumentumok/uj/{groupSlug}", name="KekRozsakFrontBundle_documentCreate", defaults={"groupslug"=""}) + * @Template() + */ + public function createAction($groupSlug = '') + { + $groupRepo = $this->getDoctrine()->getRepository('KekRozsakFrontBundle:Group'); + $group = $groupRepo->findOneBySlug($groupSlug); + /* TODO: make group fully optional */ + + $document = new Document(); + $document->setSlug('n-a'); + $form = $this->createForm(new DocumentType(), $document); + $request = $this->getRequest(); + + if ($request->getMethod() == 'POST') + { + $form->bindRequest($request); + + if ($form->isValid()) + { + $slugifier = new Slugifier(); + $document->setSlug($slugifier->slugify($document->getTitle())); + $document->setCreatedAt(new \DateTime('now')); + $document->setCreatedBy($this->get('security.context')->getToken()->getUser()); + + if ($group) + { + $group->addDocument($document); + $document->addGroup($group); + } + + $em = $this->getDoctrine()->getEntityManager(); + $em->persist($document); + $em->flush(); + + /* TODO: return to group list if groupSlug is empty! */ + return $this->redirect($this->generateUrl('KekRozsakFrontBundle_groupDocuments', array('groupSlug' => $group->getSlug()))); + } + } + + return array( + 'defaultGroup' => $groupSlug, + 'form' => $form->createView(), + ); + } + + /** + * @Route("/dokumentum/{documentSlug}/szerkesztes", name="KekRozsakFrontBundle_documentEdit") + * @Template() + */ + public function editAction($documentSlug) + { + $documentRepo = $this->getDoctrine()->getRepository('KekRozsakFrontBundle:Document'); + if (!($document = $documentRepo->findOneBySlug($documentSlug))) + throw $this->createNotFoundException('A kért dokumentum nem létezik!'); + $form = $this->createForm(new DocumentType(), $document); + $request = $this->getRequest(); + + if ($request->getMethod() == 'POST') + { + $form->bindRequest($request); + if ($form->isValid()) + { + $slugifier = new Slugifier(); + $document->setSlug($slugifier->slugify($document->getTitle())); + // TODO: add updatedAt, updatedBy, updateReason, etc. + + $em = $this->getDoctrine()->getEntityManager(); + $em->persist($document); + $em->flush(); + + return $this->redirect($this->generateUrl('KekRozsakFrontBundle_documentView', array('documentSlug' => $document->getSlug()))); + } + } + + return array( + 'document' => $document, + 'form' => $form->createView(), + ); + } } diff --git a/src/KekRozsak/FrontBundle/Entity/Document.php b/src/KekRozsak/FrontBundle/Entity/Document.php index fc7905e..9026d3b 100644 --- a/src/KekRozsak/FrontBundle/Entity/Document.php +++ b/src/KekRozsak/FrontBundle/Entity/Document.php @@ -4,6 +4,8 @@ namespace KekRozsak\FrontBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; +use Symfony\Component\Validator\Constraints as Assert; +use Symfony\Bridge\Doctrine\Validator\Constraints as DoctrineAssert; use KekRozsak\SecurityBundle\Entity\User; use KekRozsak\FrontBundle\Entity\Group; @@ -12,6 +14,8 @@ use KekRozsak\FrontBundle\Entity\Group; * KekRozsak\FrontBundle\Entity\Document * @ORM\Entity * @ORM\Table(name="documents") + * @DoctrineAssert\UniqueEntity(fields={"title"}, message="Ilyen című dokumentum már létezik. Kérlek válassz másikat!") + * @DoctrineAssert\UniqueEntity(fields={"slug"}, message="Ilyen című dokumentum már létezik. Kérlek válassz másikat!") */ class Document { @@ -41,6 +45,7 @@ class Document /** * @var string $title * @ORM\Column(type="string", length=150, unique=true, nullable=false) + * @Assert\NotBlank() */ protected $title; @@ -69,6 +74,7 @@ class Document /** * @var string $slug * @ORM\Column(type="string", length=150, unique=true, nullable=false) + * @Assert\NotBlank() */ protected $slug; @@ -207,4 +213,88 @@ class Document { return $this->group; } + + /** + * @var KekRozsak\SecurityBundle\Entity\User $updatedBy + * @ORM\ManyToOne(targetEntity="KekRozsak\SecurityBundle\Entity\User") + */ + protected $updatedBy; + + /** + * Set updatedBy + * + * @param KekRozsak\SecurityBundle\Entity\User $updatedBy + * @return Document + */ + public function setUpdatedBy(\KekRozsak\SecurityBundle\Entity\User $updatedBy = null) + { + $this->updatedBy = $updatedBy; + return $this; + } + + /** + * Get updatedBy + * + * @return KekRozsak\SecurityBundle\Entity\User + */ + public function getUpdatedBy() + { + return $this->updatedBy; + } + + /** + * @var DateTime $updatedAt + * @ORM\Column(type="datetime", nullable=true) + */ + protected $updatedAt; + + /** + * Set updatedAt + * + * @param DateTime $updatedAt + * @return Document + */ + public function setUpdatedAt(\DateTime $updatedAt = null) + { + $this->updatedAt = $updatedAt; + return $this; + } + + /** + * Get updatedAt + * + * @return DateTime + */ + public function getUpdatedAt() + { + return $this->updatedAt; + } + + /** + * @var string updateReason + * @ORM\Column(type="text", nullable=true) + */ + protected $updateReason; + + /** + * Set updateReason + * + * @param string $updateReason + * @return Document + */ + public function setUpdateReason($updateReason = null) + { + $this->updateReason = $updateReason; + return $this; + } + + /** + * Get updateReason + * + * @return string + */ + public function getUpdateReason() + { + return $this->updateReason; + } } diff --git a/src/KekRozsak/FrontBundle/Form/Type/DocumentType.php b/src/KekRozsak/FrontBundle/Form/Type/DocumentType.php new file mode 100644 index 0000000..d7c3068 --- /dev/null +++ b/src/KekRozsak/FrontBundle/Form/Type/DocumentType.php @@ -0,0 +1,27 @@ +add('title', null, array( + 'label' => 'A dokumentum címe', + )); + + $builder->add('content', 'ckeditor', array( + 'label' => ' ', + )); + + /* TODO: possibility to add to other groups! */ + } + + public function getName() + { + return 'document'; + } +} diff --git a/src/KekRozsak/FrontBundle/Resources/views/Document/create.html.twig b/src/KekRozsak/FrontBundle/Resources/views/Document/create.html.twig new file mode 100644 index 0000000..52299ff --- /dev/null +++ b/src/KekRozsak/FrontBundle/Resources/views/Document/create.html.twig @@ -0,0 +1,9 @@ +{% extends '::main_template.html.twig' %} +{% block title %} - Dokumentum létrehozása{% endblock %} +{% block content %} +

Új dokumentum létrehozása

+
+ {{ form_widget(form) }} + +
+{% endblock content %} diff --git a/src/KekRozsak/FrontBundle/Resources/views/Document/documentView.html.twig b/src/KekRozsak/FrontBundle/Resources/views/Document/documentView.html.twig deleted file mode 100644 index a162a2d..0000000 --- a/src/KekRozsak/FrontBundle/Resources/views/Document/documentView.html.twig +++ /dev/null @@ -1,7 +0,0 @@ -{% extends '::main_template.html.twig' %} -{% block title %} - Dokumentum - {{ document.title }}{% endblock %} -{% block content %} -

{{ document.title }}

-{{ document.content }} -
{{ document.createdBy.displayName }}
-{% endblock content %} diff --git a/src/KekRozsak/FrontBundle/Resources/views/Document/edit.html.twig b/src/KekRozsak/FrontBundle/Resources/views/Document/edit.html.twig new file mode 100644 index 0000000..895bb5c --- /dev/null +++ b/src/KekRozsak/FrontBundle/Resources/views/Document/edit.html.twig @@ -0,0 +1,9 @@ +{% extends '::main_template.html.twig' %} +{% block title %} - Dokumentum szerkesztése - {{ document.title }}{% endblock %} +{% block content %} +

Dokumentum szerkesztése - {{ document.title }}

+
+ {{ form_widget(form) }} + +
+{% endblock content %} diff --git a/src/KekRozsak/FrontBundle/Resources/views/Document/view.html.twig b/src/KekRozsak/FrontBundle/Resources/views/Document/view.html.twig new file mode 100644 index 0000000..dcac593 --- /dev/null +++ b/src/KekRozsak/FrontBundle/Resources/views/Document/view.html.twig @@ -0,0 +1,9 @@ +{% extends '::main_template.html.twig' %} +{% block title %} - Dokumentum - {{ document.title }}{% endblock %} +{% block content %} +

+ {{ document.title }}{% if document.createdBy == app.user %} [ Szerkesztés ] {% endif %} +

+{{ document.content|raw }} +
{{ document.createdBy.displayName }}
+{% endblock content %} diff --git a/src/KekRozsak/FrontBundle/Resources/views/Group/groupDocuments.html.twig b/src/KekRozsak/FrontBundle/Resources/views/Group/groupDocuments.html.twig index 2b9651e..0d85ec9 100644 --- a/src/KekRozsak/FrontBundle/Resources/views/Group/groupDocuments.html.twig +++ b/src/KekRozsak/FrontBundle/Resources/views/Group/groupDocuments.html.twig @@ -9,9 +9,25 @@
  • Tagok
  • {{ group.name }} - Dokumentumok

    -