From 56c81a2f433eaba98f8cf0bfdd3672bc517ae266 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolas=20L=C5=93uillet?= Date: Sat, 5 Nov 2016 09:08:18 +0100 Subject: [PATCH] First draft to manage relation between User and Group --- src/Wallabag/GroupBundle/Entity/Group.php | 37 +++++++++++++++++++ src/Wallabag/GroupBundle/Form/GroupType.php | 7 ++++ .../Resources/views/Manage/edit.html.twig | 8 ++++ src/Wallabag/UserBundle/Entity/User.php | 12 +++++- 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/Wallabag/GroupBundle/Entity/Group.php b/src/Wallabag/GroupBundle/Entity/Group.php index 57dc16d1..e889f74e 100644 --- a/src/Wallabag/GroupBundle/Entity/Group.php +++ b/src/Wallabag/GroupBundle/Entity/Group.php @@ -4,6 +4,7 @@ namespace Wallabag\GroupBundle\Entity; use FOS\UserBundle\Model\Group as BaseGroup; use Doctrine\ORM\Mapping as ORM; +use Wallabag\UserBundle\Entity\User; /** * @ORM\Entity @@ -17,4 +18,40 @@ class Group extends BaseGroup * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; + + /** + * @ORM\ManyToMany(targetEntity="Wallabag\UserBundle\Entity\User", mappedBy="groups", cascade={"persist"}) + */ + protected $users; + + public function getUsers() + { + return $this->users ?: $this->users = new ArrayCollection(); + } + + public function addUser(User $user) + { + if (!$this->getUsers()->contains($user)) { + $this->getUsers()->add($user); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function removeUser(User $user) + { + if ($this->getUsers()->contains($user)) { + $this->getUsers()->removeElement($user); + } + + return $this; + } + + public function __toString() + { + return $this->getName(); + } } diff --git a/src/Wallabag/GroupBundle/Form/GroupType.php b/src/Wallabag/GroupBundle/Form/GroupType.php index c2ad764b..749c15e9 100644 --- a/src/Wallabag/GroupBundle/Form/GroupType.php +++ b/src/Wallabag/GroupBundle/Form/GroupType.php @@ -2,6 +2,7 @@ namespace Wallabag\GroupBundle\Form; +use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -21,6 +22,12 @@ class GroupType extends AbstractType 'required' => false, 'label' => 'group.form.name_label', ]) + ->add('users', EntityType::class, array( + 'class' => 'WallabagUserBundle:User', + 'choice_label' => 'username', + 'multiple' => true, + 'expanded' => true, + )) ->add('save', SubmitType::class, [ 'label' => 'group.form.save', ]) diff --git a/src/Wallabag/GroupBundle/Resources/views/Manage/edit.html.twig b/src/Wallabag/GroupBundle/Resources/views/Manage/edit.html.twig index 7de68c35..791a7a18 100644 --- a/src/Wallabag/GroupBundle/Resources/views/Manage/edit.html.twig +++ b/src/Wallabag/GroupBundle/Resources/views/Manage/edit.html.twig @@ -23,6 +23,14 @@ +
+
+ {{ form_label(edit_form.users) }} + {{ form_errors(edit_form.users) }} + {{ form_widget(edit_form.users) }} +
+
+
{{ form_widget(edit_form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} diff --git a/src/Wallabag/UserBundle/Entity/User.php b/src/Wallabag/UserBundle/Entity/User.php index 7da0d1d5..dc10f1c4 100644 --- a/src/Wallabag/UserBundle/Entity/User.php +++ b/src/Wallabag/UserBundle/Entity/User.php @@ -98,7 +98,7 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf private $authCode; /** - * @ORM\ManyToMany(targetEntity="Wallabag\GroupBundle\Entity\Group") + * @ORM\ManyToMany(targetEntity="Wallabag\GroupBundle\Entity\Group", inversedBy="users") * @ORM\JoinTable(name="user_group", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} @@ -319,5 +319,15 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf if (!empty($this->clients)) { return $this->clients->first(); } + + } + + /** + * @param string $name + * @return bool + */ + public function hasGroup($name = '') + { + return in_array($name, $this->getGroupNames()); } } -- 2.41.0