src/Controller/DefaultController.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Identity;
  4. use App\Enum\IdentityRole;
  5. use App\Factory\EntityManagerFactory;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. #use Swp\Entity\SafetyDocument;
  12. use Obzervr\Entity\ObzervrSafetyDocument;
  13. use Obzervr\Repository\ObzervrSafetyDocumentRepository;
  14. class DefaultController extends Controller
  15. {
  16.     public function __construct(EntityManagerInterface $em)
  17.     {
  18.         EntityManagerFactory::$em $em;
  19.         // This REFUSES to work on class initiation here - NO idea - some more symfony bs. Calling a custom function from here also fails
  20.         //EntityManagerFactory::$obzem = $this->getDoctrine()->getManager('obzervr');
  21.     }
  22.     /**
  23.      * @Route("/", name="index", methods={"GET"})
  24.      *
  25.      * @param SessionInterface $session
  26.      *
  27.      * @return Response
  28.      */
  29.     public function indexAction(EntityManagerInterface $emSessionInterface $session): Response
  30.     {
  31.         $session->remove('query');
  32.         // List V1 AND V2 database and show in list
  33.         // 27-04-2020 Obzervr closed their SQL Server connection  and it broke the Liveboards database selection screen.
  34.         // No more Obzervr:
  35.         // $obzEm = $this->getDoctrine()->getManager('obzervr');
  36.         // THIS WORKS TO PROVE CONNECTION TO SQL SERVER
  37.         //  $em->getConnection()->connect();
  38.         //  $connected = $em->getConnection()->isConnected();
  39.         //$aaaa = get_declared_classes(); //new ObzervrSafetyDocument();
  40.         //    $em = $this->getDoctrine()->getManager('obzervr');
  41.         //$em = EntityManagerFactory::createObzervr('lol');
  42.         //  $aaaa = $em->getConnection();//$em->getConfiguration();order
  43.         // EntityManagerFactory::$em = $em;
  44.         //$repo = $obzEm->getRepository(ObzervrSafetyDocument::class);
  45.         //$aaaa = $repo->findAll(array(), array('name' => 'ASC'));
  46.         // 27-04-2020 Obzervr closed their SQL Server connection  and it broke the Liveboards database selection screen.
  47.         // No more Obzervr:
  48.         $databases = array(); //$databases = $obzEm->getConnection()->getSchemaManager()->listDatabases(); // works
  49.         /* Default SQL Server databases to blacklist
  50.         $blacklist = [
  51.             'master',
  52.             'tempdb',
  53.             'model',
  54.             'msdb',
  55.         ];*/
  56.         $blacklist = [];
  57.         // SWP v1 databases and blacklists - merging above Obzervr versions
  58.         $databases array_merge($databases$this->getDoctrine()->getConnection()->getSchemaManager()->listDatabases());
  59.         // There is some silly drama with trying to run say "SHOW DATABASES LIKE '%_swp_com' (swp v2) via Symfony that I do not have
  60.         // time to deal with, so instead, we will continue to list all databases above, and instead, we will simply filter out
  61.         // all databases that dont end with _swp_com before blacklisting anything special
  62.         // Now only keep v2 databases
  63.         foreach ($databases as $key => $database)
  64.             if (!$this->get('App\Service\UtilsService')::isSwpV2Database($database))
  65.                 unset($databases[$key]);
  66.         $blacklist = [
  67.             'swp_swp_com',
  68.         ];
  69.         $databases array_diff($databases$blacklist);
  70.         if (!$this->isGranted(IdentityRole::ROLE_ADMIN)) {
  71.             if ($this->getUser() instanceof Identity) {
  72.                 /** @var Identity $identity */
  73.                 $identity $this->getUser();
  74.                 $databases array_intersect($databases$identity->getAccessTo());
  75.             } else {
  76.                 //  This can't really happen in production anyway
  77.                 throw $this->createAccessDeniedException(); // @codeCoverageIgnore
  78.             }
  79.         }
  80.         return $this->render('index.html.twig', ['databases' => $databases]);
  81.     }
  82. }