Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AdminUserCreateCommand.php
Go to the documentation of this file.
1 <?php
8 
13 use Symfony\Component\Console\Input\InputInterface;
14 use Symfony\Component\Console\Input\InputOption;
15 use Symfony\Component\Console\Output\OutputInterface;
16 use Symfony\Component\Console\Question\Question;
17 
22 {
26  private $installerFactory;
27 
31  private $validationRules;
32 
37  public function __construct(InstallerFactory $installerFactory, UserValidationRules $validationRules)
38  {
39  $this->installerFactory = $installerFactory;
40  $this->validationRules = $validationRules;
41  parent::__construct();
42  }
43 
49  protected function configure()
50  {
51  $this->setName('admin:user:create')
52  ->setDescription('Creates an administrator')
53  ->setDefinition($this->getOptionsList());
54  parent::configure();
55  }
56 
65  protected function interact(InputInterface $input, OutputInterface $output)
66  {
68  $questionHelper = $this->getHelper('question');
69 
70  if (!$input->getOption(AdminAccount::KEY_USER)) {
71  $question = new Question('<question>Admin user:</question> ', '');
72  $this->addNotEmptyValidator($question);
73 
74  $input->setOption(
76  $questionHelper->ask($input, $output, $question)
77  );
78  }
79 
80  if (!$input->getOption(AdminAccount::KEY_PASSWORD)) {
81  $question = new Question('<question>Admin password:</question> ', '');
82  $question->setHidden(true);
83 
84  $question->setValidator(function ($value) use ($output) {
85  $user = new \Magento\Framework\DataObject();
86  $user->setPassword($value);
87 
88  $validator = new \Magento\Framework\Validator\DataObject();
89  $this->validationRules->addPasswordRules($validator);
90 
91  $validator->isValid($user);
92  foreach ($validator->getMessages() as $message) {
93  throw new \Exception($message);
94  }
95 
96  return $value;
97  });
98 
99  $input->setOption(
101  $questionHelper->ask($input, $output, $question)
102  );
103  }
104 
105  if (!$input->getOption(AdminAccount::KEY_EMAIL)) {
106  $question = new Question('<question>Admin email:</question> ', '');
107  $this->addNotEmptyValidator($question);
108 
109  $input->setOption(
111  $questionHelper->ask($input, $output, $question)
112  );
113  }
114 
115  if (!$input->getOption(AdminAccount::KEY_FIRST_NAME)) {
116  $question = new Question('<question>Admin first name:</question> ', '');
117  $this->addNotEmptyValidator($question);
118 
119  $input->setOption(
121  $questionHelper->ask($input, $output, $question)
122  );
123  }
124 
125  if (!$input->getOption(AdminAccount::KEY_LAST_NAME)) {
126  $question = new Question('<question>Admin last name:</question> ', '');
127  $this->addNotEmptyValidator($question);
128 
129  $input->setOption(
131  $questionHelper->ask($input, $output, $question)
132  );
133  }
134  }
135 
142  private function addNotEmptyValidator(Question $question)
143  {
144  $question->setValidator(function ($value) {
145  if (trim($value) == '') {
146  throw new \Exception('The value cannot be empty');
147  }
148 
149  return $value;
150  });
151  }
152 
156  protected function execute(InputInterface $input, OutputInterface $output)
157  {
158  $errors = $this->validate($input);
159  if ($errors) {
160  $output->writeln('<error>' . implode('</error>' . PHP_EOL . '<error>', $errors) . '</error>');
161  // we must have an exit code higher than zero to indicate something was wrong
162  return \Magento\Framework\Console\Cli::RETURN_FAILURE;
163  }
164  $installer = $this->installerFactory->create(new ConsoleLogger($output));
165  $installer->installAdminUser($input->getOptions());
166  $output->writeln(
167  '<info>Created Magento administrator user named ' . $input->getOption(AdminAccount::KEY_USER) . '</info>'
168  );
169  return \Magento\Framework\Console\Cli::RETURN_SUCCESS;
170  }
171 
178  public function getOptionsList($mode = InputOption::VALUE_REQUIRED)
179  {
180  $requiredStr = ($mode === InputOption::VALUE_REQUIRED ? '(Required) ' : '');
181 
182  return [
183  new InputOption(
185  null,
186  $mode,
187  $requiredStr . 'Admin user'
188  ),
189  new InputOption(
191  null,
192  $mode,
193  $requiredStr . 'Admin password'
194  ),
195  new InputOption(
197  null,
198  $mode,
199  $requiredStr . 'Admin email'
200  ),
201  new InputOption(
203  null,
204  $mode,
205  $requiredStr . 'Admin first name'
206  ),
207  new InputOption(
209  null,
210  $mode,
211  $requiredStr . 'Admin last name'
212  ),
213  ];
214  }
215 
222  public function validate(InputInterface $input)
223  {
224  $errors = [];
225  $user = new \Magento\Framework\DataObject();
226  $user->setFirstname($input->getOption(AdminAccount::KEY_FIRST_NAME))
227  ->setLastname($input->getOption(AdminAccount::KEY_LAST_NAME))
228  ->setUsername($input->getOption(AdminAccount::KEY_USER))
229  ->setEmail($input->getOption(AdminAccount::KEY_EMAIL))
230  ->setPassword(
231  $input->getOption(AdminAccount::KEY_PASSWORD) === null
232  ? '' : $input->getOption(AdminAccount::KEY_PASSWORD)
233  );
234 
235  $validator = new \Magento\Framework\Validator\DataObject();
236  $this->validationRules->addUserInfoRules($validator);
237  $this->validationRules->addPasswordRules($validator);
238 
239  if (!$validator->isValid($user)) {
240  $errors = array_merge($errors, $validator->getMessages());
241  }
242 
243  return $errors;
244  }
245 }
__construct(InstallerFactory $installerFactory, UserValidationRules $validationRules)
$message
$value
Definition: gender.phtml:16
$user
Definition: dummy_user.php:13
if($exist=($block->getProductCollection() && $block->getProductCollection() ->getSize())) $mode
Definition: grid.phtml:15
$errors
Definition: overview.phtml:9
execute(InputInterface $input, OutputInterface $output)