1<?php
2
3namespace Bolt\Nut;
4
5use Symfony\Component\Console\Input\InputArgument;
6use Symfony\Component\Console\Input\InputInterface;
7use Symfony\Component\Console\Output\OutputInterface;
8
9/**
10 * Nut command to add a user to the system
11 */
12class UserAdd extends BaseCommand
13{
14    /**
15     * @see \Symfony\Component\Console\Command\Command::configure()
16     */
17    protected function configure()
18    {
19        $this
20            ->setName('user:add')
21            ->setDescription('Add a new user.')
22            ->addArgument('username', InputArgument::REQUIRED, 'The username (loginname) you wish to add a role to.')
23            ->addArgument('displayname', InputArgument::REQUIRED, 'The display name for the new user.')
24            ->addArgument('email', InputArgument::REQUIRED, 'The email address for the new user.')
25            ->addArgument('password', InputArgument::REQUIRED, 'The password for the new user.')
26            ->addArgument('role', InputArgument::REQUIRED, 'The role you wish to give them.');
27    }
28
29    /**
30     * @see \Symfony\Component\Console\Command\Command::execute()
31     */
32    protected function execute(InputInterface $input, OutputInterface $output)
33    {
34        $username = $input->getArgument('username');
35        $password = $input->getArgument('password');
36        $email = $input->getArgument('email');
37        $displayname = $input->getArgument('displayname');
38        $role = $input->getArgument('role');
39
40        $this->app['users']->getUsers();
41        $user = $this->app['users']->getEmptyUser();
42        $user['roles'] = array($role);
43        $user['username'] = $username;
44        $user['password'] = $password;
45        $user['displayname'] = $displayname;
46        $user['email'] = $email;
47
48        $valid = true;
49        if (! $this->app['users']->checkAvailability('username', $user['username'])) {
50            $valid = false;
51            $output->writeln("<error>Error creating user: username {$user['username']} already exists</error>");
52        }
53        if (! $this->app['users']->checkAvailability('email', $user['email'])) {
54            $valid = false;
55            $output->writeln("<error>Error creating user: email {$user['email']} exists</error>");
56        }
57        if (! $this->app['users']->checkAvailability('displayname', $user['displayname'])) {
58            $valid = false;
59            $output->writeln("<error>Error creating user: display name {$user['displayname']} already exists</error>");
60        }
61
62        if ($valid) {
63            $res = $this->app['users']->saveUser($user);
64            if ($res) {
65                $this->auditLog(__CLASS__, "User created: {$user['username']}");
66                $output->writeln("<info>Successfully created user: {$user['username']}</info>");
67            } else {
68                $output->writeln("<error>Error creating user: {$user['username']}</error>");
69            }
70        }
71    }
72}
73