118 lines
3.6 KiB
PHP
118 lines
3.6 KiB
PHP
<?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\Command;
|
|
|
|
use FOS\UserBundle\Util\UserManipulator;
|
|
use Symfony\Component\Console\Command\Command;
|
|
use Symfony\Component\Console\Input\InputArgument;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Input\InputOption;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
use Symfony\Component\Console\Question\Question;
|
|
|
|
/**
|
|
* @author Lenar Lõhmus <lenar@city.ee>
|
|
*/
|
|
abstract class RoleCommand extends Command
|
|
{
|
|
private $userManipulator;
|
|
|
|
public function __construct(UserManipulator $userManipulator)
|
|
{
|
|
parent::__construct();
|
|
|
|
$this->userManipulator = $userManipulator;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function configure()
|
|
{
|
|
$this
|
|
->setDefinition(array(
|
|
new InputArgument('username', InputArgument::REQUIRED, 'The username'),
|
|
new InputArgument('role', InputArgument::OPTIONAL, 'The role'),
|
|
new InputOption('super', null, InputOption::VALUE_NONE, 'Instead specifying role, use this to quickly add the super administrator role'),
|
|
));
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function execute(InputInterface $input, OutputInterface $output)
|
|
{
|
|
$username = $input->getArgument('username');
|
|
$role = $input->getArgument('role');
|
|
$super = (true === $input->getOption('super'));
|
|
|
|
if (null !== $role && $super) {
|
|
throw new \InvalidArgumentException('You can pass either the role or the --super option (but not both simultaneously).');
|
|
}
|
|
|
|
if (null === $role && !$super) {
|
|
throw new \RuntimeException('Not enough arguments.');
|
|
}
|
|
|
|
$manipulator = $this->userManipulator;
|
|
$this->executeRoleCommand($manipulator, $output, $username, $super, $role);
|
|
}
|
|
|
|
/**
|
|
* @see Command
|
|
*
|
|
* @param UserManipulator $manipulator
|
|
* @param OutputInterface $output
|
|
* @param string $username
|
|
* @param bool $super
|
|
* @param string $role
|
|
*/
|
|
abstract protected function executeRoleCommand(UserManipulator $manipulator, OutputInterface $output, $username, $super, $role);
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function interact(InputInterface $input, OutputInterface $output)
|
|
{
|
|
$questions = array();
|
|
|
|
if (!$input->getArgument('username')) {
|
|
$question = new Question('Please choose a username:');
|
|
$question->setValidator(function ($username) {
|
|
if (empty($username)) {
|
|
throw new \Exception('Username can not be empty');
|
|
}
|
|
|
|
return $username;
|
|
});
|
|
$questions['username'] = $question;
|
|
}
|
|
|
|
if ((true !== $input->getOption('super')) && !$input->getArgument('role')) {
|
|
$question = new Question('Please choose a role:');
|
|
$question->setValidator(function ($role) {
|
|
if (empty($role)) {
|
|
throw new \Exception('Role can not be empty');
|
|
}
|
|
|
|
return $role;
|
|
});
|
|
$questions['role'] = $question;
|
|
}
|
|
|
|
foreach ($questions as $name => $question) {
|
|
$answer = $this->getHelper('question')->ask($input, $output, $question);
|
|
$input->setArgument($name, $answer);
|
|
}
|
|
}
|
|
}
|