resq/src/Command/CreateRiderAPIUserCommand.php

92 lines
2.5 KiB
PHP

<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Output\OutputInterface;
use Doctrine\ORM\EntityManagerInterface;
use Catalyst\APIBundle\Entity\User as APIUser;
use Catalyst\APIBundle\Entity\Role as APIRole;
use App\Entity\Rider;
use DateTime;
class CreateRiderAPIUserCommand extends Command
{
protected $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
parent::__construct();
}
protected function configure()
{
$this->setName('api:user-create-for-rider')
->setDescription('Create API users for existing riders.')
->setHelp('Creates API users for existing riders.')
->addArgument('role_id', InputArgument::REQUIRED, 'Role ID for api_user.');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
error_log('Creating api users...');
// get all existing riders
$riders = $this->em->getRepository(Rider::class)->findAll();
// get role for rider api user
$role_id = $input->getArgument('role_id');
$role = $this->em->getRepository(APIRole::class)->find($role_id);
if ($role == null)
{
error_log('Cannot find role with id ' . $role_id);
return 0;
}
foreach ($riders as $rider)
{
// skip riders who already have users
if ($rider->getAPIUser() != null)
continue;
// create api user for each rider
// no need to generate the keys.
// Secret and API keys are generated in constructor
$api_user = new APIUser();
// set enabled to true
$api_user->setEnabled(true);
// set name to rider's last name + first name
$rider_name = $rider->getFirstName() . ' ' . $rider->getLastName();
$api_user->setName($rider_name);
// set rider to api_user
$api_user->setRider($rider);
// set meta
$meta = ['rider_id' => $rider->getID()];
$api_user->setMetaData($meta);
// set role
$api_user->addRole($role);
// set rider's api user
$rider->setAPIUser($api_user);
$this->em->persist($api_user);
}
$this->em->flush();
return 0;
}
}