X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fdrush%2Fdrush%2Fsrc%2FDrupal%2FCommands%2Fcore%2FUserCommands.php;fp=vendor%2Fdrush%2Fdrush%2Fsrc%2FDrupal%2FCommands%2Fcore%2FUserCommands.php;h=fc7d6598f37b02fe518aae86e2e39063d8ef22ff;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hp=0000000000000000000000000000000000000000;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0;p=yaffs-website diff --git a/vendor/drush/drush/src/Drupal/Commands/core/UserCommands.php b/vendor/drush/drush/src/Drupal/Commands/core/UserCommands.php new file mode 100644 index 000000000..fc7d6598f --- /dev/null +++ b/vendor/drush/drush/src/Drupal/Commands/core/UserCommands.php @@ -0,0 +1,347 @@ + 'table', 'uid' => self::REQ, 'mail' => self::REQ]) + { + $accounts = []; + if ($mails = StringUtils::csvToArray($options['mail'])) { + foreach ($mails as $mail) { + if ($account = user_load_by_mail($mail)) { + $accounts[$account->id()] = $account; + } + } + } + if ($uids = StringUtils::csvToArray($options['uid'])) { + if ($loaded = User::loadMultiple($uids)) { + $accounts += $loaded; + } + } + if ($names = StringUtils::csvToArray($names)) { + foreach ($names as $name) { + if ($account = user_load_by_name($name)) { + $accounts[$account->id()] = $account; + } + } + } + if (empty($accounts)) { + throw new \Exception(dt('Unable to find a matching user')); + } + + foreach ($accounts as $id => $account) { + $outputs[$id] = $this->infoArray($account); + } + + $result = new RowsOfFields($outputs); + $result->addRendererFunction([$this, 'renderRolesCell']); + return $result; + } + + public function renderRolesCell($key, $cellData, FormatterOptions $options) + { + if (is_array($cellData)) { + return implode("\n", $cellData); + } + return $cellData; + } + + /** + * Block the specified user(s). + * + * @command user:block + * + * @param string $names A comma delimited list of user names. + * @aliases ublk,user-block + * @usage drush user:block user3 + * Block the users whose name is user3 + */ + public function block($names) + { + if ($names = StringUtils::csvToArray($names)) { + foreach ($names as $name) { + if ($account = user_load_by_name($name)) { + $account->block(); + $account->save(); + $this->logger->success(dt('Blocked user(s): !user', ['!user' => $name])); + } else { + $this->logger->warning(dt('Unable to load user: !user', ['!user' => $name])); + } + } + } + } + + /** + * UnBlock the specified user(s). + * + * @command user:unblock + * + * @param string $names A comma delimited list of user names. + * @aliases uublk,user-unblock + * @usage drush user:unblock user3 + * Unblock the users with name user3 + */ + public function unblock($names) + { + if ($names = StringUtils::csvToArray($names)) { + foreach ($names as $name) { + if ($account = user_load_by_name($name)) { + $account->activate(); + $account->save(); + $this->logger->success(dt('Unblocked user(s): !user', ['!user' => $name])); + } else { + $this->logger->warning(dt('Unable to load user: !user', ['!user' => $name])); + } + } + } + } + + /** + * Add a role to the specified user accounts. + * + * @command user:role:add + * + * @validate-entity-load user_role role + * @param string $role The name of the role to add. + * @param string $names A comma delimited list of user names. + * @aliases urol,user-add-role + * @usage drush user:add-role "power user" user3 + * Add the "power user" role to user3 + */ + public function addRole($role, $names) + { + if ($names = StringUtils::csvToArray($names)) { + foreach ($names as $name) { + if ($account = user_load_by_name($name)) { + $account->addRole($role); + $account->save(); + $this->logger->success(dt('Added !role role to !user', [ + '!role' => $role, + '!user' => $name, + ])); + } else { + $this->logger->warning(dt('Unable to load user: !user', ['!user' => $name])); + } + } + } + } + + /** + * Remove a role from the specified user accounts. + * + * @command user:role:remove + * + * @validate-entity-load user_role role + * @param string $role The name of the role to add + * @param string $names A comma delimited list of user names. + * @aliases urrol,user-remove-role + * @usage drush user:remove-role "power user" user3 + * Remove the "power user" role from user3 + */ + public function removeRole($role, $names) + { + if ($names = StringUtils::csvToArray($names)) { + foreach ($names as $name) { + if ($account = user_load_by_name($name)) { + $account->removeRole($role); + $account->save(); + $this->logger->success(dt('Removed !role role from !user', [ + '!role' => $role, + '!user' => $name, + ])); + } else { + $this->logger->warning(dt('Unable to load user: !user', ['!user' => $name])); + } + } + } + } + + /** + * Create a user account. + * + * @command user:create + * + * @param string $name The name of the account to add + * @option password The password for the new account + * @option mail The email address for the new account + * @aliases ucrt,user-create + * @usage drush user:create newuser --mail="person@example.com" --password="letmein" + * Create a new user account with the name newuser, the email address person@example.com, and the password letmein + */ + public function create($name, $options = ['password' => self::REQ, 'mail' => self::REQ]) + { + $new_user = [ + 'name' => $name, + 'pass' => $options['password'], + 'mail' => $options['mail'], + 'access' => '0', + 'status' => 1, + ]; + if (!Drush::simulate()) { + if ($account = User::create($new_user)) { + $account->save(); + drush_backend_set_result($this->infoArray($account)); + $this->logger()->success(dt('Created a new user with uid !uid', ['!uid' => $account->id()])); + } else { + return new CommandError("Could not create a new user account with the name " . $name . "."); + } + } + } + + /** + * Assure that provided username is available. + * + * @hook validate user-create + */ + public function createValidate(CommandData $commandData) + { + if ($mail = $commandData->input()->getOption('mail')) { + if (user_load_by_mail($mail)) { + throw new \Exception(dt('There is already a user account with the email !mail', ['!mail' => $mail])); + } + } + $name = $commandData->input()->getArgument('name'); + if (user_load_by_name($name)) { + throw new \Exception((dt('There is already a user account with the name !name', ['!name' => $name]))); + } + } + + /** + * Cancel user account(s) with the specified name(s). + * + * @command user:cancel + * + * @param string $names A comma delimited list of user names. + * @option delete-content Delete all content created by the user + * @aliases ucan,user-cancel + * @usage drush user:cancel username + * Cancel the user account with the name username and anonymize all content created by that user. + * @usage drush user:cancel --delete-content username + * Cancel the user account with the name username and delete all content created by that user. + */ + public function cancel($names, $options = ['delete-content' => false]) + { + if ($names = StringUtils::csvToArray($names)) { + foreach ($names as $name) { + if ($account = user_load_by_name($name)) { + if ($options['delete-content']) { + $this->logger()->warning(dt('All content created by !name will be deleted.', ['!name' => $account->getUsername()])); + } + if ($this->io()->confirm('Cancel user account?: ')) { + $method = $options['delete-content'] ? 'user_cancel_delete' : 'user_cancel_block'; + user_cancel([], $account->id(), $method); + drush_backend_batch_process(); + // Drupal logs a message for us. + } + } else { + $this->logger()->warning(dt('Unable to load user: !user', ['!user' => $name])); + } + } + } + } + + /** + * Set the password for the user account with the specified name. + * + * @command user:password + * + * @param string $name The name of the account to modify. + * @param string $password The new password for the account. + * @aliases upwd,user-password + * @usage drush user:password someuser "correct horse battery staple" + * Set the password for the username someuser. @see xkcd.com/936 + */ + public function password($name, $password) + { + if ($account = user_load_by_name($name)) { + if (!Drush::simulate()) { + $account->setpassword($password); + $account->save(); + $this->logger()->success(dt('Changed password for !name.', ['!name' => $name])); + } + } else { + throw new \Exception(dt('Unable to load user: !user', ['!user' => $name])); + } + } + + /** + * A flatter and simpler array presentation of a Drupal $user object. + * + * @param $account A user account + * @return array + */ + public function infoArray($account) + { + return [ + 'uid' => $account->id(), + 'name' => $account->getUsername(), + 'pass' => $account->getPassword(), + 'mail' => $account->getEmail(), + 'user_created' => $account->getCreatedTime(), + 'created' => format_date($account->getCreatedTime()), + 'user_access' => $account->getLastAccessedTime(), + 'access' => format_date($account->getLastAccessedTime()), + 'user_login' => $account->getLastLoginTime(), + 'login' => format_date($account->getLastLoginTime()), + 'user_status' => $account->get('status')->value, + 'status' => $account->isActive() ? 'active' : 'blocked', + 'timezone' => $account->getTimeZone(), + 'roles' => $account->getRoles(), + 'langcode' => $account->getPreferredLangcode(), + 'uuid' => $account->uuid->value, + ]; + } +}