mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-23 09:53:15 +00:00
Merge branch 'master' into PHRAS-2741-worker-service-part1
This commit is contained in:
@@ -48,6 +48,7 @@ use Alchemy\Phrasea\Command\Task\TaskRun;
|
||||
use Alchemy\Phrasea\Command\Task\TaskStart;
|
||||
use Alchemy\Phrasea\Command\Task\TaskState;
|
||||
use Alchemy\Phrasea\Command\Task\TaskStop;
|
||||
use Alchemy\Phrasea\Command\User\UserCreateCommand;
|
||||
use Alchemy\Phrasea\Command\User\UserSetPasswordCommand;
|
||||
use Alchemy\Phrasea\Command\User\UserListCommand;
|
||||
use Alchemy\Phrasea\Command\UpgradeDBDatas;
|
||||
@@ -117,10 +118,13 @@ $cli->command(new ListCollectionCommand('collection:list'));
|
||||
$cli->command(new ListDataboxCommand('databox:list'));
|
||||
$cli->command(new CreateDataboxCommand('databox:create'));
|
||||
|
||||
$cli->command(new UserCreateCommand('user:create'));
|
||||
|
||||
$cli->command(new UserSetPasswordCommand('user:set-password'));
|
||||
|
||||
$cli->command(new UserListCommand('user:list'));
|
||||
|
||||
|
||||
$cli->command(new RecordAdd('records:add'));
|
||||
$cli->command(new RescanTechnicalDatas('records:rescan-technical-datas'));
|
||||
$cli->command(new BuildMissingSubdefs('records:build-missing-subdefs'));
|
||||
|
@@ -24,20 +24,30 @@ class ListCollectionCommand extends Command
|
||||
parent::__construct('collection:list');
|
||||
$this->setDescription('List all collection in Phraseanet')
|
||||
->addOption('databox_id', 'd', InputOption::VALUE_REQUIRED, 'The id of the databox to list collection')
|
||||
->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format')
|
||||
->setHelp('');
|
||||
return $this;
|
||||
}
|
||||
protected function doExecute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
try {
|
||||
$databox = $this->container->findDataboxById($input->getOption('databox_id'));
|
||||
$collections = $this->listDataboxCollections($databox);
|
||||
$jsonformat = $input->getOption('jsonformat');
|
||||
$databox = $this->container->findDataboxById($input->getOption('databox_id'));
|
||||
$collections = $this->listDataboxCollections($databox);
|
||||
|
||||
if ($jsonformat) {
|
||||
foreach ($collections as $collection) {
|
||||
$collectionList[] = array_combine(['id local for API', 'id distant', 'name','label','status','total records'], $collection);
|
||||
}
|
||||
echo json_encode($collectionList);
|
||||
} else {
|
||||
$table = $this->getHelperSet()->get('table');
|
||||
$table
|
||||
->setHeaders(['id local for API', 'id distant', 'name','label','status','total records'])
|
||||
->setRows($collections)
|
||||
->render($output);
|
||||
}
|
||||
|
||||
$table = $this->getHelperSet()->get('table');
|
||||
$table
|
||||
->setHeaders(['id local for API', 'id distant', 'name','label','status','total records'])
|
||||
->setRows($collections)
|
||||
->render($output);
|
||||
} catch (\Exception $e) {
|
||||
$output->writeln("<error>{$e->getMessage()}</error>");
|
||||
}
|
||||
|
@@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\Command\Databox;
|
||||
|
||||
use Alchemy\Phrasea\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class ListDataboxCommand extends Command
|
||||
@@ -25,6 +26,7 @@ class ListDataboxCommand extends Command
|
||||
parent::__construct('databox:list');
|
||||
|
||||
$this->setDescription('List all databox in Phraseanet')
|
||||
->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format')
|
||||
->setHelp('');
|
||||
|
||||
return $this;
|
||||
@@ -33,15 +35,23 @@ class ListDataboxCommand extends Command
|
||||
protected function doExecute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
try {
|
||||
$jsonformat = $input->getOption('jsonformat');
|
||||
$databoxes = array_map(function (\databox $databox) {
|
||||
return $this->listDatabox($databox);
|
||||
}, $this->container->getApplicationBox()->get_databoxes());
|
||||
|
||||
$table = $this->getHelperSet()->get('table');
|
||||
$table
|
||||
->setHeaders(['id', 'name', 'alias'])
|
||||
->setRows($databoxes)
|
||||
->render($output);
|
||||
if ($jsonformat) {
|
||||
foreach ($databoxes as $databox) {
|
||||
$databoxList[] = array_combine(['id', 'name', 'alias'], $databox);
|
||||
}
|
||||
echo json_encode($databoxList);
|
||||
} else {
|
||||
$table = $this->getHelperSet()->get('table');
|
||||
$table
|
||||
->setHeaders(['id', 'name', 'alias'])
|
||||
->setRows($databoxes)
|
||||
->render($output);
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$output->writeln('<error>Listing databox failed : '.$e->getMessage().'</error>');
|
||||
|
211
lib/Alchemy/Phrasea/Command/User/UserCreateCommand.php
Normal file
211
lib/Alchemy/Phrasea/Command/User/UserCreateCommand.php
Normal file
@@ -0,0 +1,211 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Phraseanet
|
||||
*
|
||||
* (c) 2005-2016 Alchemy
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Alchemy\Phrasea\Command\User;
|
||||
|
||||
use Alchemy\Phrasea\Application\Helper\NotifierAware;
|
||||
use Alchemy\Phrasea\Command\Command;
|
||||
use Alchemy\Phrasea\Core\LazyLocator;
|
||||
use Alchemy\Phrasea\Model\Entities\User;
|
||||
use Alchemy\Phrasea\Notification\Mail\MailRequestPasswordSetup;
|
||||
use Alchemy\Phrasea\Notification\Mail\MailRequestEmailConfirmation;
|
||||
use Alchemy\Phrasea\Notification\Receiver;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
|
||||
class UserCreateCommand extends Command
|
||||
{
|
||||
use NotifierAware;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct($name = null)
|
||||
{
|
||||
parent::__construct('user:create');
|
||||
|
||||
$this->setDescription('Create user in Phraseanet')
|
||||
->addOption('user_login', null, InputOption::VALUE_REQUIRED, 'The desired login for created user.')
|
||||
->addOption('user_mail', null, InputOption::VALUE_OPTIONAL, 'The desired mail for created user.')
|
||||
->addOption('user_password', null, InputOption::VALUE_OPTIONAL, 'The desired password')
|
||||
->addOption('send_mail_confirm', null, InputOption::VALUE_NONE, 'Send an email to user, for validate email.')
|
||||
->addOption('send_mail_password', null, InputOption::VALUE_NONE, 'Send an email to user, for password definition, work only if user_password is not define')
|
||||
->addOption('model_number', null, InputOption::VALUE_OPTIONAL, 'Id of model')
|
||||
->addOption('user_gender', null, InputOption::VALUE_OPTIONAL, 'The gender for created user.')
|
||||
->addOption('user_firstname', null, InputOption::VALUE_OPTIONAL, 'The first name for created user.')
|
||||
->addOption('user_lastname', null, InputOption::VALUE_OPTIONAL, 'The last name for created user.')
|
||||
->addOption('user_compagny', null, InputOption::VALUE_OPTIONAL, 'The compagny for created user.')
|
||||
->addOption('user_job', null, InputOption::VALUE_OPTIONAL, 'The job for created user.')
|
||||
->addOption('user_activitie', null, InputOption::VALUE_OPTIONAL, 'The activitie for created user.')
|
||||
->addOption('user_phone', null, InputOption::VALUE_OPTIONAL, 'The phone number for created user.')
|
||||
->setHelp('');
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function doExecute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
|
||||
$userLogin = $input->getOption('user_login');
|
||||
$userMail = $input->getOption('user_mail');
|
||||
$userPassword = $input->getOption('user_password');
|
||||
$sendMailConfirm = $input->getOption('send_mail_confirm');
|
||||
$sendMailPassword = $input->getOption('send_mail_password');
|
||||
$modelNumber = $input->getOption('model_number');
|
||||
$userGender = $input->getOption('user_gender');
|
||||
$userFirstName = $input->getOption('user_firstname');
|
||||
$userLastName = $input->getOption('user_lastname');
|
||||
$userCompagny = $input->getOption('user_compagny');
|
||||
$userJob = $input->getOption('user_job');
|
||||
$userActivity = $input->getOption('user_activitie');
|
||||
$userPhone = $input->getOption('user_phone');
|
||||
|
||||
$userRepository = $this->container['repo.users'];
|
||||
|
||||
if ($userMail) {
|
||||
if (!\Swift_Validate::email($userMail)) {
|
||||
$output->writeln('<error>Invalid mail address</error>');
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (null !== $userRepository->findByEmail($userMail)) {
|
||||
$output->writeln('<error>An user exist with this email.</error>');
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$password = (!is_null($userPassword)) ? $userPassword : $this->container['random.medium']->generateString(128);
|
||||
$userManipulator = $this->container['manipulator.user'];
|
||||
$user = $userManipulator->createUser($userLogin, $password, $userMail);
|
||||
|
||||
if ($userGender) {
|
||||
if (null === $gender = $this->verifyGender($userGender)) {
|
||||
$output->writeln('<bg=yellow;options=bold>Gender '.$userGender.' not exists.</>');
|
||||
}
|
||||
$user->setGender($gender);
|
||||
}
|
||||
|
||||
if($userFirstName) $user->setFirstName($userFirstName);
|
||||
if($userLastName) $user->setLastName($userLastName);
|
||||
if($userCompagny) $user->setCompany($userCompagny);
|
||||
if($userJob) $user->setJob($userJob);
|
||||
if($userActivity) $user->setActivity($userActivity);
|
||||
if($userPhone) $user->setPhone($userPhone);
|
||||
|
||||
if ($sendMailPassword and $userMail and is_null($userPassword)) {
|
||||
$this->sendPasswordSetupMail($user);
|
||||
}
|
||||
|
||||
if ($sendMailConfirm and $userMail) {
|
||||
$user->setMailLocked(true);
|
||||
$this->sendAccountUnlockEmail($user);
|
||||
}
|
||||
|
||||
if ($modelNumber) {
|
||||
$template = $userRepository->find($modelNumber);
|
||||
if (!$template) {
|
||||
$output->writeln('<bg=yellow;options=bold>Model '.$modelNumber.' not found.</>');
|
||||
} else {
|
||||
$base_ids = [];
|
||||
foreach ($this->container->getApplicationBox()->get_databoxes() as $databox) {
|
||||
foreach ($databox->get_collections() as $collection) {
|
||||
$base_ids[] = $collection->get_base_id();
|
||||
}
|
||||
}
|
||||
$this->container->getAclForUser($user)->apply_model($template, $base_ids);
|
||||
}
|
||||
}
|
||||
|
||||
$this->container['orm.em']->flush();
|
||||
|
||||
$output->writeln("<info>Create new user successful !</info>");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get gender for user
|
||||
* @param $type
|
||||
* @return int|null
|
||||
*/
|
||||
private function verifyGender($type)
|
||||
{
|
||||
switch (strtolower($type)) {
|
||||
case "mlle.":
|
||||
case "mlle":
|
||||
case "miss":
|
||||
case "mademoiselle":
|
||||
case "0":
|
||||
$gender = User::GENDER_MISS;
|
||||
break;
|
||||
case "mme":
|
||||
case "madame":
|
||||
case "ms":
|
||||
case "ms.":
|
||||
case "1":
|
||||
$gender = User::GENDER_MRS;
|
||||
break;
|
||||
case "m":
|
||||
case "m.":
|
||||
case "mr":
|
||||
case "mr.":
|
||||
case "monsieur":
|
||||
case "mister":
|
||||
case "2":
|
||||
$gender = User::GENDER_MR;
|
||||
break;
|
||||
default:
|
||||
$gender = null;
|
||||
}
|
||||
return $gender;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send mail for renew password
|
||||
* @param User $user
|
||||
*/
|
||||
public function sendPasswordSetupMail(User $user)
|
||||
{
|
||||
$this->setDelivererLocator(new LazyLocator($this->container, 'notification.deliverer'));
|
||||
$receiver = Receiver::fromUser($user);
|
||||
|
||||
$token = $this->container['manipulator.token']->createResetPasswordToken($user);
|
||||
|
||||
$mail = MailRequestPasswordSetup::create($this->container, $receiver);
|
||||
$servername = $this->container['conf']->get('servername');
|
||||
$mail->setButtonUrl('http://'.$servername.'/login/renew-password/?token='.$token->getValue());
|
||||
$mail->setLogin($user->getLogin());
|
||||
|
||||
$this->deliver($mail);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*/
|
||||
public function sendAccountUnlockEmail(User $user)
|
||||
{
|
||||
$this->setDelivererLocator(new LazyLocator($this->container, 'notification.deliverer'));
|
||||
$receiver = Receiver::fromUser($user);
|
||||
|
||||
$token = $this->container['manipulator.token']->createAccountUnlockToken($user);
|
||||
|
||||
$mail = MailRequestEmailConfirmation::create($this->container, $receiver);
|
||||
$servername = $this->container['conf']->get('servername');
|
||||
$mail->setButtonUrl('http://'.$servername.'/login/register-confirm/?code='.$token->getValue());
|
||||
$mail->setExpiration($token->getExpiration());
|
||||
|
||||
$this->deliver($mail);
|
||||
}
|
||||
|
||||
}
|
@@ -42,6 +42,7 @@ class UserListCommand extends Command
|
||||
->addOption('application', null, InputOption::VALUE_NONE, 'List application of user work only if --user_id is set')
|
||||
->addOption('right', null, InputOption::VALUE_NONE, 'Show right information')
|
||||
->addOption('adress', null, InputOption::VALUE_NONE, 'Show adress information')
|
||||
->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format')
|
||||
->setHelp('');
|
||||
|
||||
return $this;
|
||||
@@ -61,6 +62,7 @@ class UserListCommand extends Command
|
||||
$created = $input->getOption('created');
|
||||
$updated = $input->getOption('updated');
|
||||
$withRight = $input->getOption('right');
|
||||
$jsonformat = $input->getOption('jsonformat');
|
||||
|
||||
$query = $this->container['phraseanet.user-query'];
|
||||
|
||||
@@ -87,24 +89,33 @@ class UserListCommand extends Command
|
||||
if ($userId and $application) {
|
||||
$showApplication = true;
|
||||
}
|
||||
$userList[] = $this->listUser($user,$withAdress,$withRight);
|
||||
$userList[] = $this->listUser($user, $withAdress, $withRight);
|
||||
|
||||
$userListRaw[] = array_combine($this->headerTable($withAdress, $withRight), $this->listUser($user, $withAdress, $withRight));
|
||||
}
|
||||
|
||||
$table = $this->getHelperSet()->get('table');
|
||||
$table
|
||||
->setHeaders($this->headerTable($withAdress,$withRight))
|
||||
->setRows($userList)
|
||||
->render($output);
|
||||
;
|
||||
if ($jsonformat) {
|
||||
echo json_encode($userListRaw);
|
||||
} else {
|
||||
$table = $this->getHelperSet()->get('table');
|
||||
$table
|
||||
->setHeaders($this->headerTable($withAdress, $withRight))
|
||||
->setRows($userList)
|
||||
->render($output);
|
||||
;
|
||||
|
||||
|
||||
if ($showApplication) {
|
||||
$applicationTable = $this->getHelperSet()->get('table');
|
||||
$applicationTable->setHeaders(array(
|
||||
array(new TableCell('Applications', array('colspan' => 5))),
|
||||
['name','callback','client_secret','client_id','token'],
|
||||
))->setRows($this->getApplicationOfUser($users[0]))->render($output);
|
||||
}
|
||||
|
||||
if ($showApplication) {
|
||||
$applicationTable = $this->getHelperSet()->get('table');
|
||||
$applicationTable->setHeaders(array(
|
||||
array(new TableCell('Applications', array('colspan' => 5))),
|
||||
['name','callback','client_secret','client_id','token'],
|
||||
))->setRows($this->getApplicationOfUser($users[0]))->render($output);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user