<?php
namespace App\Mobile;
use App\Controller\Sms\SmsController;
use App\Entity\Branch;
use App\Entity\SystemUser;
use App\Entity\User;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Persistence\ObjectManager;
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerBuilder;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class UsersController extends AbstractController {
private ObjectManager $em;
public function __construct(ManagerRegistry $managerRegistry)
{
$this->em = $managerRegistry->getManager();
}
/**
* @Route("/sign_up", methods={"POST"}, name="signUpUsers")
* @param Request $request
* @param HttpClientInterface $client
* @return Response
*/
public function systemUsers(Request $request, HttpClientInterface $client): Response
{
$em = $this->em;
$phone = $request->query->get('phone');
$isTesting = $request->query->get('testing');
// dump($phone);
$phone = str_replace(' ', '', $phone);
$systemUser = $em->getRepository(SystemUser::class)->findOneBy([
'phone' => "$phone"
]);
if($systemUser){
$code = strtoupper($this->generateString(6));
$systemUser->setSignUpCode($code);
$sendSms = new SmsController($client);
// $message = "account activation code is #".$code."\nBzlxYnMSSpw";
// $message = "<#> Your NEEMA activation code is: ".$code." BzlxYnMSSpw";
$message = "<#> Your NEEMA activation code is: ".$code." Vu/h9juJ+BR";
if($request->query->get('text')){
$co = $request->query->get('text');
$message = "<#> Your NEEMA activation code is: ".$code." {$co}";
}
// $message = "<#> Your NEEMA activation code is: ".$code." nYVeso+m3Uu";
$id = $systemUser->getId();
$response = $sendSms->sendSignUpMessage($message,$systemUser->getPhone(),$id);
$em->flush();
if($isTesting){
$data = [
'message' => 'Successful please wait for activation code',
'code' => $code
];
}else {
$data = [
'message' => 'Successful please wait for activation code'
];
}
$dataJson = json_encode($data);
return new Response($dataJson, Response::HTTP_OK,[
'content-type'=>'application/json'
]);
}
return new Response('USER NOT REGISTERED',Response::HTTP_NOT_FOUND);
}
/**
* @Route("/sign_up/{signUpCode}", methods={"GET"}, name="getUser")
* @param Request $request
* @param $signUpCode
* @return Response
*/
public function getUsers(Request $request, $signUpCode): Response
{
$em = $this->getDoctrine()->getManager();
$systemUser = $em->getRepository(SystemUser::class)->findOneBy([
'signUpCode' => $signUpCode
]);
if($systemUser){
$branch = $em->getRepository(Branch::class)->findOneBy([
'branchCode' => $systemUser->getBranchCode()
]);
$oldUser = $em->getRepository(User::class)->findOneBy([
'systemUser' => $systemUser
]);
if($oldUser){
$oldUser->setPhone($systemUser->getPhone());
$oldUser->setBranch( $branch);
$data = [
'system_user' => [
'user_name' => $systemUser->getStaffName(),
'phone' => $systemUser->getPhone(),
'created_at' => $systemUser->getCreatedAt(),
'branch_name' => $branch->getBranchName()
],
'user' => [
'phone_number' => $systemUser->getPhone(),
'user_name' => $systemUser->getStaffName(),
'branch' => $branch->getBranchCode(),
]
];
$em->flush();
// $em->persist($oldUser);
$jsonData = json_encode($data);
return new Response($jsonData, Response::HTTP_OK,[
'content-type'=>'application/json'
]);
}else if($branch && !$oldUser){
$user = new User();
$user->setCreatedAt(new \DateTime());
$user->setPhone($systemUser->getPhone());
$user->setBranch($branch);
$user->setPassword('awesome');
$user->setRoles(['ROLE_USER']);
$user->setSystemUser($systemUser);
$user->setIsActive(false);
$em->persist($user);
}
$em->flush();
$data = [
'system_user' => [
'user_name' => $systemUser->getStaffName(),
'phone' => $systemUser->getPhone(),
'created_at' => $systemUser->getCreatedAt(),
'branch_name' => $branch->getBranchName()
],
'user' => [
'phone_number' => $systemUser->getPhone(),
'user_name' => $systemUser->getStaffName(),
'branch' => $branch->getBranchCode(),
]
];
$jsonData = json_encode($data);
return new Response($jsonData, Response::HTTP_OK,[
'content-type'=>'application/json'
]);
}
$context = new SerializationContext();
$context->setSerializeNull(true);
$serializer = SerializerBuilder::create()->build();
// $data = $serializer->serialize($mpesaTransaction, 'json', $context);
return new Response("NOT FOUND", Response::HTTP_NOT_FOUND);
}
function generateString($strength = 6): string
{
$input = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$input_length = strlen($input);
$random_string = '';
for($i = 0; $i < $strength; $i++) {
$random_character = $input[mt_rand(0, $input_length - 1)];
$random_string .= $random_character;
}
return $random_string;
}
}