chore: initial import for test contour with k3s CI

This commit is contained in:
sova-bootstrap
2026-05-28 12:09:28 +03:00
commit d77d0a872f
423 changed files with 35401 additions and 0 deletions
+405
View File
@@ -0,0 +1,405 @@
<?php
namespace App\Controller;
use App\Entity\User;
use App\Bundle\Infoclinica\Region;
use App\Bundle\Infoclinica\Rest;
use App\Form\RegistrationFormType;
use App\Form\SettingType;
use App\Form\RefundType;
use App\Repository\UsrlogRepository;
use App\Entity\Usrlog;
use App\Security\LoginFormAuthenticator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Csrf\CsrfToken;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
class SecurityController extends AbstractController
{
public function __construct(CsrfTokenManagerInterface $csrfTokenManager, UserPasswordEncoderInterface $passwordEncoder)
{
$this->csrfTokenManager = $csrfTokenManager;
$this->passwordEncoder = $passwordEncoder;
}
/**
* @IsGranted("ROLE_USER")
* @Route("/refund", name="security_refund", methods={"GET", "POST"})
*/
public function refund(Request $request): Response
{
$refundForm = new RefundType();
$form = $this->createForm(RefundType::class, $refundForm);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($request->request->get('filial') == 3) {
$to = 'info.mmc@sova.clinic, i.cherednichenko@sova.clinic, y.belova@sova.clinic';
$company_name = 'АО «Многопрофильный медицинский центр»';
$company_director = 'Бушеневой С.Н.';
$to_mail = 'vozvrat-vlg@sova.clinic';
} else {
$to = 'i.cherednichenko@sova.clinic, v.karpova@sova.clinic, n.ermakova@sova.clinic';
$company_name = 'АО «МЛДК»';
$company_director = 'Бурлаковой Н.Ф.';
$to_mail = 'vozvrat@sova.clinic';
}
$subject = "Пациент сформировал заявление на возврат средств по онлайн консультации";
$headers = 'From: ' . $request->request->get('email') . "\r\n" .
'Reply-To: ' . $request->request->get('email') . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$message = "Здравствуйте. Пациент сформировал заявление на возврат средств по онлайн консультации. Ожидаем отправки заявления с почты пациента.\r\n Данные по консультации:\r\n";
$message .= 'ФИО пациента:' . $form->get('fio')->getData() ."\r\n";
$message .= 'Телефон пациента:' . $request->request->get('phone') ."\r\n";
$message .= 'Врач:' . $request->request->get('docName') ."\r\n";
$message .= 'Индификатор записи:' . $request->request->get('schedident') ."\r\n";
$message .= 'Сумма возврата:' . $form->get('sum')->getData() ."\r\n";
$message .= 'Дата платежа:' . $form->get('refund_date')->getData()->format('d.m.Y') ."\r\n";
mail($to, $subject, $message, $headers);
$html = $this->render('security/refund_blank.html.twig', [
'template' => Region::getTemplite(),
'to_email' => $to_mail,
'title' => 'Заявление на возврат',
'company_name' => $company_name,
'company_director' => $company_director,
'address' => $request->request->get('address'),
'phone' => $request->request->get('phone'),
'email' => $request->request->get('email'),
'current_date' => \date('Y-m-d'),
'fio' => $form->get('fio')->getData(),
'passport_serial' => explode(' ', $form->get('passport_serial')->getData())[0],
'passport_number' => explode(' ', $form->get('passport_serial')->getData())[1],
'passport_issued' => $form->get('passport_issued')->getData(),
'passport_date' => $form->get('passport_date')->getData()->format('d.m.Y'),
'refund_bases' => $form->get('refund_bases')->getData(),
'sum' => $form->get('sum')->getData(),
'refund_date' => $form->get('refund_date')->getData()->format('d.m.Y')
]);
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML($html);
$mpdf->Output();
}
return $this->render('security/refund_form.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @IsGranted("ROLE_USER")
* @Route("/case-history", name="security_case_history")
*/
public function case_history(): Response
{
return $this->render('security/case_history.html.twig', [
'template' => Region::getTemplite(),
'title' => 'Приемы'
]);
}
/**
* @IsGranted("ROLE_USER")
* @Route("/referrals", name="security_referrals")
*/
public function referrals(): Response
{
$referrals = [];
return $this->render('security/referrals.html.twig', [
'referrals' => $referrals,
'template' => Region::getTemplite(),
'title' => 'Результаты анализов',
]);
}
/**
* @IsGranted("ROLE_USER")
* @Route("/security-card", name="security_card")
*/
public function securityCard(): Response
{
return $this->render('security/card.html.twig', [
'template' => Region::getTemplite(),
'title' => 'Медицинская карта',
]);
}
/**
* @IsGranted("ROLE_USER")
* @Route("/payment", name="security_payment")
*/
public function payment(): Response
{
return $this->render('security/payment.html.twig', [
'template' => Region::getTemplite(),
'title' => 'Финансы',
]);
}
/**
* @IsGranted("ROLE_USER")
* @Route("/setting", name="security_setting")
*/
public function setting(
Request $request,
UserPasswordEncoderInterface $passwordEncoder
): Response
{
$user = $this->getUser();
$form = $this->createForm(SettingType::class, $user);
$form->handleRequest($request);
$response = [];
if ($request->getMethod() == 'POST') {
$user->setToken($form->get('plainPassword')->getData());
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$form->get('plainPassword')->getData()
)
);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->json([
'success' => true,
'redirect' => '/'
]);
}
return $this->render('security/setting.html.twig', [
'template' => Region::getTemplite(),
'form' => $form->createView(),
'setting' => $response,
'title' => 'Настройки',
]);
}
/**
* @Route("/login", name="security_login")
*/
public function login(Request $request, AuthenticationUtils $authenticationUtils): Response
{
$template = preg_match('/sovamed\.ru/m', $request->getHost())? 'login' : 'login_wmtmed';
return $this->render('security/' . $template . '.html.twig', [
'template' => Region::getTemplite(),
'alias' => null,
'last_username' => $authenticationUtils->getLastUsername(),
'error' => $authenticationUtils->getLastAuthenticationError(),
'title' => 'Личный кабинет - «СОВА»'
]);
}
/**
* @Route("/logout", name="security_logout")
*/
public function logout()
{
}
/**
* @Route("/api/usrlog/logout", name="security_usrlog_logout", methods={"POST"})
*/
public function usrlogLogout(Request $request, UsrlogRepository $usrlogRepository): Response
{
$pcode = null;
$user = $this->getUser();
if ($user instanceof User) {
$pcode = (string) $user->getUid();
} else {
$pcode = trim((string) $request->request->get('pcode', ''));
}
if ($pcode === '') {
return $this->json(['success' => false, 'message' => 'pcode is required'], 400);
}
$usrlog = new Usrlog();
$usrlog
->setPcode($pcode)
->setAgent((string) ($request->headers->get('User-Agent') ?? 'unknown'))
->setClientIp((string) ($request->getClientIp() ?? 'unknown'))
->setMethod('выход')
;
$usrlogRepository->add($usrlog);
return $this->json(['success' => true]);
}
/**
* @Route("/registration", name="security_reg", methods={"GET","POST"})
*/
public function registration(
Request $request,
UserPasswordEncoderInterface $passwordEncoder
): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$fullName = $form->get('firstName')->getData();
$fullName .= ' ';
$fullName .= $form->get('middleName')->getData();
$user->setFullName($fullName);
$user->setToken($form->get('plainPassword')->getData());
$user->setRoles(['ROLE_USER']);
$user->setConfirm(0);
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$form->get('plainPassword')->getData()
)
);
$infoclinica = new Rest();
$response = $infoclinica->register($request->request->all());
if ($response['response']['success'] == true) {
$user->setUid(date('U'));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('security_confirm', [
'id' => $user->getId(),
'rToken' => $response['response']['data']['rToken']
]);
} else {
$this->addFlash(
'notice',
$response['response']['data']['message'] ?? 'Cервис временно не доступен!'
);
}
}
return $this->render('security/register.html.twig', [
'title' => 'Регистрация',
'template' => Region::getTemplite(),
'form' => $form->createView()
]);
}
/**
* @Route("/forget", name="security_forget", methods={"POST"})
*/
public function forget(Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
$entityManager = $this->getDoctrine()->getManager();
$email = false;
$uid = $request->request->get('uid');
if ($email = $request->request->get('login')) {
$user = $entityManager->getRepository(User::class)
->findOneBy(['email' => \bin2hex($email)]);
if ($user) {
$uid = $user->getUid();
}
return $this->json(['uid' => $uid]);
};
$password = $request->request->get('password');
if ($uid && $password) {
$user = $entityManager->getRepository(User::class)
->findOneBy(['uid' => $uid]);
if (!$user) {
$user = new User();
}
$user->setUid($uid);
$user->setToken($password);
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$password
)
);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->json([
'success' => true,
'redirect' => '/login'
]);
}
return $this->json([
'success' => false,
'uid' => $uid
]);
}
/**
* @Route("/api/authenticated", name="security_authenticated", methods={"POST"})
*/
public function authenticated(Request $request,
GuardAuthenticatorHandler $guardHandler,
LoginFormAuthenticator $authenticator,
UserPasswordEncoderInterface $passwordEncoder
): Response {
$entityManager = $this->getDoctrine()->getManager();
$userData = $request->request->get('user');
$user = $entityManager->getRepository(User::class)
->findOneBy(['uid' => $userData['id']]);
if (!$user && $userData) {
$user = new User();
$user
->setFullName($userData['fullName'])
->setEmail($userData['email'])
->setPhone($userData['phone'])
->setUid($userData['id'])
->setConfirm(1)
->setRoles(['ROLE_USER'])
->setToken($userData['id'])
->setPassword(
$passwordEncoder->encodePassword(
$user,
$userData['id']
)
);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
$entityManager->clear();
}
return $guardHandler->authenticateUserAndHandleSuccess(
$user,
$request,
$authenticator,
'main'
);
}
}