vendor/bundles/FOS/UserBundle/Util/UserManipulator.php
changeset 3 e54dfe4d0b2b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/bundles/FOS/UserBundle/Util/UserManipulator.php	Fri Sep 30 11:24:53 2011 +0200
@@ -0,0 +1,185 @@
+<?php
+
+/*
+ * This file is part of the FOSUserBundle package.
+ *
+ * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace FOS\UserBundle\Util;
+
+use FOS\UserBundle\Model\UserManagerInterface;
+
+/**
+ * Executes some manipulations on the users
+ *
+ * @author Christophe Coevoet <stof@notk.org>
+ * @author Luis Cordova <cordoval@gmail.com>
+ */
+class UserManipulator
+{
+    /**
+     * User manager
+     *
+     * @var UserManagerInterface
+     */
+    private $userManager;
+
+    public function __construct(UserManagerInterface $userManager)
+    {
+        $this->userManager = $userManager;
+    }
+
+    /**
+     * Creates a user and returns it.
+     *
+     * @param string $username
+     * @param string $password
+     * @param string $email
+     * @param Boolean $active
+     * @param Boolean $superadmin
+     * @return \FOS\UserBundle\Model\UserInterface
+     */
+    public function create($username, $password, $email, $active, $superadmin)
+    {
+        $user = $this->userManager->createUser();
+        $user->setUsername($username);
+        $user->setEmail($email);
+        $user->setPlainPassword($password);
+        $user->setEnabled((Boolean)$active);
+        $user->setSuperAdmin((Boolean)$superadmin);
+        $this->userManager->updateUser($user);
+
+        return $user;
+    }
+
+    /**
+     * Activates the given user.
+     *
+     * @param string $username
+     */
+    public function activate($username)
+    {
+        $user = $this->userManager->findUserByUsername($username);
+
+        if (!$user) {
+            throw new \InvalidArgumentException(sprintf('User identified by "%s" username does not exist.', $username));
+        }
+        $user->setEnabled(true);
+        $this->userManager->updateUser($user);
+    }
+
+    /**
+     * Deactivates the given user.
+     *
+     * @param string $username
+     */
+    public function deactivate($username)
+    {
+        $user = $this->userManager->findUserByUsername($username);
+
+        if (!$user) {
+            throw new \InvalidArgumentException(sprintf('User identified by "%s" username does not exist.', $username));
+        }
+        $user->setEnabled(false);
+        $this->userManager->updateUser($user);
+    }
+
+    /**
+     * Changes the password for the given user.
+     *
+     * @param string $username
+     * @param string $password
+     */
+    public function changePassword($username, $password)
+    {
+        $user = $this->userManager->findUserByUsername($username);
+
+        if (!$user) {
+            throw new \InvalidArgumentException(sprintf('User identified by "%s" username does not exist.', $username));
+        }
+        $user->setPlainPassword($password);
+        $this->userManager->updateUser($user);
+    }
+
+    /**
+     * Promotes the given user.
+     *
+     * @param string $username
+     */
+    public function promote($username)
+    {
+        $user = $this->userManager->findUserByUsername($username);
+
+        if (!$user) {
+            throw new \InvalidArgumentException(sprintf('User identified by "%s" username does not exist.', $username));
+        }
+        $user->setSuperAdmin(true);
+        $this->userManager->updateUser($user);
+    }
+
+    /**
+     * Demotes the given user.
+     *
+     * @param string $username
+     */
+    public function demote($username)
+    {
+        $user = $this->userManager->findUserByUsername($username);
+
+        if (!$user) {
+            throw new \InvalidArgumentException(sprintf('User identified by "%s" username does not exist.', $username));
+        }
+        $user->setSuperAdmin(false);
+        $this->userManager->updateUser($user);
+    }
+
+    /**
+     * Adds role to the given user.
+     *
+     * @param string $username
+     * @param string $role
+     * @return Boolean true if role was added, false if user already had the role
+     */
+    public function addRole($username, $role)
+    {
+        $user = $this->userManager->findUserByUsername($username);
+
+        if (!$user) {
+            throw new \InvalidArgumentException(sprintf('User identified by "%s" username does not exist.', $username));
+        }
+        if ($user->hasRole($role)) {
+            return false;
+        }
+        $user->addRole($role);
+        $this->userManager->updateUser($user);
+        
+        return true;
+    }
+    /**
+     * Removes role from the given user.
+     *
+     * @param string $username
+     * @param string $role
+     * @return Boolean true if role was removed, false if user didn't have the role
+     */
+    public function removeRole($username, $role)
+    {
+        $user = $this->userManager->findUserByUsername($username);
+
+        if (!$user) {
+            throw new \InvalidArgumentException(sprintf('User identified by "%s" username does not exist.', $username));
+        }
+        if (!$user->hasRole($role)) {
+            return false;
+        }
+        $user->removeRole($role);
+        $this->userManager->updateUser($user);
+        
+        return true;
+    }
+    
+}