mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 11:30:55 +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',
|
||||
'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php',
|
||||
'PhabricatorPeopleManageProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleManageProfileMenuItem.php',
|
||||
'PhabricatorPeopleManagementWorkflow' => 'applications/people/management/PhabricatorPeopleManagementWorkflow.php',
|
||||
'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php',
|
||||
'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php',
|
||||
'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php',
|
||||
|
@ -3366,6 +3367,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorPeopleProfileBadgesController' => 'applications/people/controller/PhabricatorPeopleProfileBadgesController.php',
|
||||
'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
|
||||
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php',
|
||||
'PhabricatorPeopleProfileImageWorkflow' => 'applications/people/management/PhabricatorPeopleProfileImageWorkflow.php',
|
||||
'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php',
|
||||
'PhabricatorPeopleProfileMenuEngine' => 'applications/people/engine/PhabricatorPeopleProfileMenuEngine.php',
|
||||
'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php',
|
||||
|
@ -8545,6 +8547,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||
'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController',
|
||||
'PhabricatorPeopleManageProfileMenuItem' => 'PhabricatorProfileMenuItem',
|
||||
'PhabricatorPeopleManagementWorkflow' => 'PhabricatorManagementWorkflow',
|
||||
'PhabricatorPeopleNewController' => 'PhabricatorPeopleController',
|
||||
'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||
'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
|
||||
|
@ -8552,6 +8555,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorPeopleProfileBadgesController' => 'PhabricatorPeopleProfileController',
|
||||
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
|
||||
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleProfileController',
|
||||
'PhabricatorPeopleProfileImageWorkflow' => 'PhabricatorPeopleManagementWorkflow',
|
||||
'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController',
|
||||
'PhabricatorPeopleProfileMenuEngine' => 'PhabricatorProfileMenuEngine',
|
||||
'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleProfileController',
|
||||
|
|
|
@ -7,6 +7,8 @@ final class PhabricatorFilesComposeAvatarBuiltinFile
|
|||
private $color;
|
||||
private $border;
|
||||
|
||||
const VERSION = 'v1';
|
||||
|
||||
public function setIcon($icon) {
|
||||
$this->icon = $icon;
|
||||
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