mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-17 20:32:41 +01:00
Add a profileimage generation workflow for the cli
Summary: Ref T10319. This adds a basic means of generating default profile images for users. You can generate them for everyone, a group of users, or force updates. This only generated images and stores them in files. It does not assign them to users. Test Plan: `bin/people profileimage --all` to generate all images. `bin/people profileimage --users chad` to generate a user. `bin/people profileimage --all --force` to force rebuilding all images. {F3662810} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T10319 Differential Revision: https://secure.phabricator.com/D17464
This commit is contained in:
parent
be16f9b2cd
commit
3a868940c7
6 changed files with 161 additions and 0 deletions
1
bin/people
Symbolic link
1
bin/people
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../scripts/people/manage_people.php
|
20
scripts/people/manage_people.php
Executable file
20
scripts/people/manage_people.php
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$root = dirname(dirname(dirname(__FILE__)));
|
||||||
|
require_once $root.'/scripts/__init_script__.php';
|
||||||
|
|
||||||
|
$args = new PhutilArgumentParser($argv);
|
||||||
|
$args->setSynopsis(<<<EOSYNOPSIS
|
||||||
|
**people** __command__ [__options__]
|
||||||
|
Manage user profiles and accounts.
|
||||||
|
|
||||||
|
EOSYNOPSIS
|
||||||
|
);
|
||||||
|
$args->parseStandardArguments();
|
||||||
|
|
||||||
|
$workflows = id(new PhutilClassMapQuery())
|
||||||
|
->setAncestorClass('PhabricatorPeopleManagementWorkflow')
|
||||||
|
->execute();
|
||||||
|
$workflows[] = new PhutilHelpArgumentWorkflow();
|
||||||
|
$args->parseWorkflows($workflows);
|
|
@ -3359,6 +3359,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPeopleLogSearchEngine' => 'applications/people/query/PhabricatorPeopleLogSearchEngine.php',
|
'PhabricatorPeopleLogSearchEngine' => 'applications/people/query/PhabricatorPeopleLogSearchEngine.php',
|
||||||
'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php',
|
'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php',
|
||||||
'PhabricatorPeopleManageProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleManageProfileMenuItem.php',
|
'PhabricatorPeopleManageProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleManageProfileMenuItem.php',
|
||||||
|
'PhabricatorPeopleManagementWorkflow' => 'applications/people/management/PhabricatorPeopleManagementWorkflow.php',
|
||||||
'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php',
|
'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php',
|
||||||
'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php',
|
'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php',
|
||||||
'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php',
|
'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php',
|
||||||
|
@ -3366,6 +3367,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPeopleProfileBadgesController' => 'applications/people/controller/PhabricatorPeopleProfileBadgesController.php',
|
'PhabricatorPeopleProfileBadgesController' => 'applications/people/controller/PhabricatorPeopleProfileBadgesController.php',
|
||||||
'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
|
'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
|
||||||
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php',
|
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php',
|
||||||
|
'PhabricatorPeopleProfileImageWorkflow' => 'applications/people/management/PhabricatorPeopleProfileImageWorkflow.php',
|
||||||
'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php',
|
'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php',
|
||||||
'PhabricatorPeopleProfileMenuEngine' => 'applications/people/engine/PhabricatorPeopleProfileMenuEngine.php',
|
'PhabricatorPeopleProfileMenuEngine' => 'applications/people/engine/PhabricatorPeopleProfileMenuEngine.php',
|
||||||
'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php',
|
'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php',
|
||||||
|
@ -8545,6 +8547,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||||
'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController',
|
'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController',
|
||||||
'PhabricatorPeopleManageProfileMenuItem' => 'PhabricatorProfileMenuItem',
|
'PhabricatorPeopleManageProfileMenuItem' => 'PhabricatorProfileMenuItem',
|
||||||
|
'PhabricatorPeopleManagementWorkflow' => 'PhabricatorManagementWorkflow',
|
||||||
'PhabricatorPeopleNewController' => 'PhabricatorPeopleController',
|
'PhabricatorPeopleNewController' => 'PhabricatorPeopleController',
|
||||||
'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource',
|
'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||||
'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
|
'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
|
||||||
|
@ -8552,6 +8555,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPeopleProfileBadgesController' => 'PhabricatorPeopleProfileController',
|
'PhabricatorPeopleProfileBadgesController' => 'PhabricatorPeopleProfileController',
|
||||||
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
|
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
|
||||||
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleProfileController',
|
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleProfileController',
|
||||||
|
'PhabricatorPeopleProfileImageWorkflow' => 'PhabricatorPeopleManagementWorkflow',
|
||||||
'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController',
|
'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController',
|
||||||
'PhabricatorPeopleProfileMenuEngine' => 'PhabricatorProfileMenuEngine',
|
'PhabricatorPeopleProfileMenuEngine' => 'PhabricatorProfileMenuEngine',
|
||||||
'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleProfileController',
|
'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleProfileController',
|
||||||
|
|
|
@ -7,6 +7,8 @@ final class PhabricatorFilesComposeAvatarBuiltinFile
|
||||||
private $color;
|
private $color;
|
||||||
private $border;
|
private $border;
|
||||||
|
|
||||||
|
const VERSION = 'v1';
|
||||||
|
|
||||||
public function setIcon($icon) {
|
public function setIcon($icon) {
|
||||||
$this->icon = $icon;
|
$this->icon = $icon;
|
||||||
return $this;
|
return $this;
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
abstract class PhabricatorPeopleManagementWorkflow
|
||||||
|
extends PhabricatorManagementWorkflow {
|
||||||
|
|
||||||
|
protected function buildIterator(PhutilArgumentParser $args) {
|
||||||
|
$usernames = $args->getArg('users');
|
||||||
|
|
||||||
|
if ($args->getArg('all')) {
|
||||||
|
if ($usernames) {
|
||||||
|
throw new PhutilArgumentUsageException(
|
||||||
|
pht(
|
||||||
|
'Specify either a list of users or `%s`, but not both.',
|
||||||
|
'--all'));
|
||||||
|
}
|
||||||
|
return new LiskMigrationIterator(new PhabricatorUser());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($usernames) {
|
||||||
|
return $this->loadUsersWithUsernames($usernames);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function loadUsersWithUsernames(array $usernames) {
|
||||||
|
$users = array();
|
||||||
|
foreach($usernames as $username) {
|
||||||
|
$query = id(new PhabricatorPeopleQuery())
|
||||||
|
->setViewer($this->getViewer())
|
||||||
|
->withUsernames(array($username))
|
||||||
|
->executeOne();
|
||||||
|
|
||||||
|
if (!$query) {
|
||||||
|
throw new PhutilArgumentUsageException(
|
||||||
|
pht(
|
||||||
|
'"%s" is not a valid username.',
|
||||||
|
$username));
|
||||||
|
}
|
||||||
|
$users[] = $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $users;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorPeopleProfileImageWorkflow
|
||||||
|
extends PhabricatorPeopleManagementWorkflow {
|
||||||
|
|
||||||
|
protected function didConstruct() {
|
||||||
|
$this
|
||||||
|
->setName('profileimage')
|
||||||
|
->setExamples('**profileimage** --users __username__')
|
||||||
|
->setSynopsis(pht('Generate default profile images.'))
|
||||||
|
->setArguments(
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
'name' => 'user',
|
||||||
|
'help' => pht(
|
||||||
|
'Generate a default profile image for a specific user'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'all',
|
||||||
|
'help' => pht(
|
||||||
|
'Generate default profile images for all users.'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'force',
|
||||||
|
'short' => 'f',
|
||||||
|
'help' => pht(
|
||||||
|
'Force a default profile image to be replaced.'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'users',
|
||||||
|
'wildcard' => true,
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function execute(PhutilArgumentParser $args) {
|
||||||
|
$console = PhutilConsole::getConsole();
|
||||||
|
|
||||||
|
$is_force = $args->getArg('force');
|
||||||
|
$is_all = $args->getArg('all');
|
||||||
|
$is_user = $args->getArg('user');
|
||||||
|
|
||||||
|
$gd = function_exists('imagecreatefromstring');
|
||||||
|
if (!$gd) {
|
||||||
|
throw new PhutilArgumentUsageException(
|
||||||
|
pht(
|
||||||
|
'GD is not installed for php-cli. Aborting.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$iterator = $this->buildIterator($args);
|
||||||
|
if (!$iterator) {
|
||||||
|
throw new PhutilArgumentUsageException(
|
||||||
|
pht(
|
||||||
|
'Either specify a list of users to update, or use `%s` '.
|
||||||
|
'to update all users.',
|
||||||
|
'--all'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$version = PhabricatorFilesComposeAvatarBuiltinFile::VERSION;
|
||||||
|
|
||||||
|
foreach ($iterator as $user) {
|
||||||
|
$username = $user->getUsername();
|
||||||
|
$default_phid = $user->getDefaultProfileImagePHID();
|
||||||
|
|
||||||
|
if ($default_phid == null || $is_force) {
|
||||||
|
$file = id(new PhabricatorFilesComposeAvatarBuiltinFile())
|
||||||
|
->getUserProfileImageFile($username);
|
||||||
|
$user->setDefaultProfileImagePHID($file->getPHID());
|
||||||
|
$user->setDefaultProfileImageVersion($version);
|
||||||
|
$user->save();
|
||||||
|
$console->writeOut(
|
||||||
|
"%s\n",
|
||||||
|
pht(
|
||||||
|
'Generating profile image for "%s".',
|
||||||
|
$username));
|
||||||
|
} else {
|
||||||
|
$console->writeOut(
|
||||||
|
"%s\n",
|
||||||
|
pht(
|
||||||
|
'Default profile image "%s" already set for "%s".',
|
||||||
|
$version,
|
||||||
|
$username));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue