]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
First draft to manage relation between User and Group
authorNicolas LÅ“uillet <nicolas@loeuillet.org>
Sat, 5 Nov 2016 08:08:18 +0000 (09:08 +0100)
committerThomas Citharel <tcit@tcit.fr>
Fri, 23 Jun 2017 07:23:49 +0000 (09:23 +0200)
src/Wallabag/GroupBundle/Entity/Group.php
src/Wallabag/GroupBundle/Form/GroupType.php
src/Wallabag/GroupBundle/Resources/views/Manage/edit.html.twig
src/Wallabag/UserBundle/Entity/User.php

index 57dc16d104c9720863f4ddda19db625dee8f58bb..e889f74e0170b9b02f8b241ee37224208beae1cf 100644 (file)
@@ -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();
+    }
 }
index c2ad764bc2f39df7306b3005c115a07b5d02fbab..749c15e9090559a27e4ed3b3dcb87412876ec1c6 100644 (file)
@@ -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',
             ])
index 7de68c353587d0101365e1c9735b99e24a65c79c..791a7a189b271ff46636821a43a3942070243047 100644 (file)
                                     </div>
                                 </div>
 
+                                <div class="row">
+                                    <div class="input-field col s12">
+                                        {{ form_label(edit_form.users) }}
+                                        {{ form_errors(edit_form.users) }}
+                                        {{ form_widget(edit_form.users) }}
+                                    </div>
+                                </div>
+
                                 <br/>
 
                                 {{ form_widget(edit_form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
index 7da0d1d5ec05bb3becb78ac0322093ae5fe8fd32..dc10f1c44e8fa17939c3c7c798c5f5a61eada32e 100644 (file)
@@ -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());
     }
 }