diff --git a/app/DoctrineMigrations/Version20120823160202.php b/app/DoctrineMigrations/Version20120823160202.php new file mode 100644 index 0000000..c753da8 --- /dev/null +++ b/app/DoctrineMigrations/Version20120823160202.php @@ -0,0 +1,30 @@ +abortIf($this->connection->getDatabasePlatform()->getName() != "mysql"); + + $this->addSql("CREATE TABLE user_favourite_forum_topics (user_id INT NOT NULL, forum_topic_id INT NOT NULL, INDEX IDX_917D04B0A76ED395 (user_id), INDEX IDX_917D04B038A6ADDA (forum_topic_id), PRIMARY KEY(user_id, forum_topic_id)) ENGINE = InnoDB"); + $this->addSql("ALTER TABLE user_favourite_forum_topics ADD CONSTRAINT FK_917D04B0A76ED395 FOREIGN KEY (user_id) REFERENCES user_data (user_id)"); + $this->addSql("ALTER TABLE user_favourite_forum_topics ADD CONSTRAINT FK_917D04B038A6ADDA FOREIGN KEY (forum_topic_id) REFERENCES forum_topics (id)"); + } + + public function down(Schema $schema) + { + // this down() migration is autogenerated, please modify it to your needs + $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql"); + + $this->addSql("DROP TABLE user_favourite_forum_topics"); + } +} diff --git a/src/KekRozsak/FrontBundle/Controller/ForumController.php b/src/KekRozsak/FrontBundle/Controller/ForumController.php index 28a18a1..ec5d3b4 100644 --- a/src/KekRozsak/FrontBundle/Controller/ForumController.php +++ b/src/KekRozsak/FrontBundle/Controller/ForumController.php @@ -4,12 +4,15 @@ namespace KekRozsak\FrontBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Component\HttpFoundation\Response; use KekRozsak\FrontBundle\Entity\ForumTopicGroup; use KekRozsak\FrontBundle\Entity\ForumTopic; use KekRozsak\FrontBundle\Entity\ForumPost; +use KekRozsak\FrontBundle\Entity\UserData; use KekRozsak\FrontBundle\Form\Type\ForumTopicGroupType; use KekRozsak\FrontBundle\Form\Type\ForumTopicType; use KekRozsak\FrontBundle\Form\Type\ForumPostType; @@ -168,4 +171,56 @@ class ForumController extends Controller 'form' => $form->createView(), ); } + + /** + * @Route("/{topicGroupSlug}/{topicSlug}/kedvenc-be", name="KekRozsakFrontBundle_forumFavouriteTopic", options={"expose": true}) + * @Method("GET") + * @ParamConverter("topic", options={"mapping"={"topicGroup"="topicGroup", "topicSlug"="slug"}}) + * @ParamConverter("topicGroup", options={"mapping"={"topicGroupSlug"="slug"}}) + * + * @param KekRozsak\FrontBundle\Entity\ForumTopicGroup $topicGroup + * @param KekRozsak\FrontBundle\Entity\ForumTopic $topic + * @return array + */ + public function favouriteTopic(ForumTopicGroup $topicGroup, ForumTopic $topic) + { + $user = $this->get('security.context')->getToken()->getUser(); + if (($userData = $user->getUserData()) === null) { + $userData = new UserData(); + $userData->setUser($user); + } + $userData->addFavouriteTopic($topic); + + $em = $this->getDoctrine()->getEntityManager(); + $em->persist($userData); + $em->flush(); + + return new Response(); + } + + /** + * @Route("/{topicGroupSlug}/{topicSlug}/kedvenc-ki", name="KekRozsakFrontBundle_forumUnfavouriteTopic", options={"expose": true}) + * @Method("GET") + * @ParamConverter("topic", options={"mapping"={"topicGroup"="topicGroup", "topicSlug"="slug"}}) + * @ParamConverter("topicGroup", options={"mapping"={"topicGroupSlug"="slug"}}) + * + * @param KekRozsak\FrontBundle\Entity\ForumTopicGroup $topicGroup + * @param KekRozsak\FrontBundle\Entity\ForumTopic $topic + * @return array + */ + public function unfavouriteTopic(ForumTopicGroup $topicGroup, ForumTopic $topic) + { + $user = $this->get('security.context')->getToken()->getUser(); + if (($userData = $user->getUserData()) === null) { + $userData = new UserData(); + $userData->setUser($user); + } + $userData->removeFavouriteTopic($topic); + + $em = $this->getDoctrine()->getEntityManager(); + $em->persist($userData); + $em->flush(); + + return new Response(); + } } diff --git a/src/KekRozsak/FrontBundle/Entity/UserData.php b/src/KekRozsak/FrontBundle/Entity/UserData.php index 9ac5a52..93a0be2 100644 --- a/src/KekRozsak/FrontBundle/Entity/UserData.php +++ b/src/KekRozsak/FrontBundle/Entity/UserData.php @@ -3,6 +3,7 @@ namespace KekRozsak\FrontBundle\Entity; use Doctrine\ORM\Mapping as ORM; +use Doctrine\Common\Collections\ArrayCollection; use KekRozsak\SecurityBundle\Entity\User; @@ -21,6 +22,7 @@ class UserData $this->googleTalkPublic = false; $this->skypePublic = false; $this->phoneNumberPublic = false; + $this->favouriteTopics = new ArrayCollection(); } /** @@ -452,4 +454,66 @@ class UserData { return $this->phoneNumberPublic; } + + /** + * ArrayCollection of the User's favourite ForumTopics + * + * @var Doctrine\Common\Collections\ArrayCollection $favouriteTopics + * + * @ORM\ManyToMany(targetEntity="ForumTopic", fetch="LAZY") + * @ORM\JoinTable(name="user_favourite_forum_topics", joinColumns={ + * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") + * }, inverseJoinColumns={ + * @ORM\JoinColumn(name="forum_topic_id") + * } + * ) + */ + protected $favouriteTopics; + + /** + * Add a favourite ForumTopic + * + * @param KekRozsak\FrontBundle\Entity\ForumTopic $topic + * @return UserData + */ + public function addFavouriteTopic(ForumTopic $topic) + { + // TODO: Check if not null + $this->favouriteTopics->add($topic); + return $this; + } + + /** + * Remove a favourite ForumTopic + * + * @param KekRozsak\FrontBundle\Entity\ForumTopic $topic + * @return UserData + */ + public function removeFavouriteTopic(ForumTopic $topic) + { + // TODO: Check if not null + $this->favouriteTopics->removeElement($topic); + return $this; + } + + /** + * Get favourite ForumTopics + * + * @return Doctrine\Common\Collections\ArrayCollection + */ + public function getFavouriteTopics() + { + return $this->favouriteTopics; + } + + /** + * Check if given ForumTopic is favourited by User + * + * @param KekRozsak\FrontBundle\Entity\ForumTopic $topic + * @return boolean + */ + public function isFavouriteForumTopic(ForumTopic $topic) + { + return $this->favouriteTopics->contains($topic); + } } diff --git a/src/KekRozsak/FrontBundle/Resources/views/Box/UserProfile.html.twig b/src/KekRozsak/FrontBundle/Resources/views/Box/UserProfile.html.twig index a8bdba9..690c832 100644 --- a/src/KekRozsak/FrontBundle/Resources/views/Box/UserProfile.html.twig +++ b/src/KekRozsak/FrontBundle/Resources/views/Box/UserProfile.html.twig @@ -17,6 +17,11 @@
További csoportok
Kedvenc Fórum-témáim
+{% if app.user.userData %} +{% for topic in app.user.userData.favouriteTopics %} +
{{ topic.title }}
+{% endfor %} +{% endif %}
Fórum
Üzenetek
diff --git a/src/KekRozsak/FrontBundle/Resources/views/Forum/topicList.html.twig b/src/KekRozsak/FrontBundle/Resources/views/Forum/topicList.html.twig index 0cf55d8..69e3513 100644 --- a/src/KekRozsak/FrontBundle/Resources/views/Forum/topicList.html.twig +++ b/src/KekRozsak/FrontBundle/Resources/views/Forum/topicList.html.twig @@ -18,7 +18,7 @@ - + @@ -26,6 +26,13 @@ {% for topic in topicGroup.topics %} +
Hozzászólások száma Utolsó hozzászólás
+{% if app.user.userData and app.user.userData.isFavouriteForumTopic(topic) %} + [Kedvenc ikon] +{% else %} + [Nem kedvenc ikon] +{% endif %} + {{ topic.title }} @@ -44,3 +51,64 @@ Ebben a témakörben nincsenek témák. {% endif %} {% endblock content %} + +{% block bottomscripts %} + +{% endblock bottomscripts %} \ No newline at end of file