1 <?php 
declare(strict_types
=1); 
   4  * This file is part of the Rapsys BlogBundle package. 
   6  * (c) Raphaël Gertz <symfony@rapsys.eu> 
   8  * For the full copyright and license information, please view the LICENSE 
   9  * file that was distributed with this source code. 
  12 namespace Rapsys\BlogBundle\Repository
; 
  14 use Doctrine\ORM\EntityManagerInterface
; 
  15 use Doctrine\ORM\EntityRepository 
as BaseEntityRepository
; 
  16 use Doctrine\ORM\Mapping\ClassMetadata
; 
  17 use Symfony\Component\Routing\RouterInterface
; 
  18 use Symfony\Contracts\Translation\TranslatorInterface
; 
  20 use Rapsys\PackBundle\Util\SluggerUtil
; 
  27 class EntityRepository 
extends BaseEntityRepository 
{ 
  29          * The RouterInterface instance 
  31          * @var RouterInterface 
  33         protected RouterInterface 
$router; 
  36          * The SluggerUtil instance 
  40         protected SluggerUtil 
$slugger; 
  43          * The table keys array 
  47         protected array $tableKeys; 
  50          * The table values array 
  54         protected array $tableValues; 
  57          * The TranslatorInterface instance 
  59          * @var TranslatorInterface 
  61         protected TranslatorInterface 
$translator; 
  64          * The list of languages 
  68         protected array $languages = []; 
  75         protected string $locale; 
  78          * Initializes a new LocationRepository instance 
  80          * @param EntityManagerInterface $manager The EntityManagerInterface instance 
  81          * @param ClassMetadata $class The ClassMetadata instance 
  82          * @param RouterInterface $router The router instance 
  83          * @param SluggerUtil $slugger The SluggerUtil instance 
  84          * @param TranslatorInterface $translator The TranslatorInterface instance 
  85          * @param array $languages The languages list 
  86          * @param string $locale The current locale 
  88         public function __construct(EntityManagerInterface 
$manager, ClassMetadata 
$class, RouterInterface 
$router, SluggerUtil 
$slugger, TranslatorInterface 
$translator, array $languages, string $locale) { 
  89                 //Call parent constructor 
  90                 parent
::__construct($manager, $class); 
  93                 $this->languages 
= $languages; 
  96                 $this->locale 
= $locale; 
  99                 $this->router 
= $router; 
 102                 $this->slugger 
= $slugger; 
 105                 $this->translator 
= $translator; 
 108                 $qs = $manager->getConfiguration()->getQuoteStrategy(); 
 109                 $dp = $manager->getConnection()->getDatabasePlatform(); 
 111                 //Set quoted table names 
 112                 //XXX: this allow to make this code table name independent 
 113                 //XXX: remember to place longer prefix before shorter to avoid strange replacings 
 116                         'RapsysBlogBundle:ArticleKeyword' => $qs->getJoinTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\Article')->getAssociationMapping('keywords'), $manager->getClassMetadata('Rapsys\BlogBundle\Entity\Article'), $dp), 
 117                         'RapsysBlogBundle:ArticleTranslation' => $qs->getTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\ArticleTranslation'), $dp), 
 118                         'RapsysBlogBundle:KeywordTranslation' => $qs->getTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\KeywordTranslation'), $dp), 
 119                         'RapsysBlogBundle:UserTranslation' => $qs->getTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\UserTranslation'), $dp), 
 120                         'RapsysBlogBundle:Article' => $qs->getTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\Article'), $dp), 
 121                         'RapsysBlogBundle:Civility' => $qs->getTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\Civility'), $dp), 
 122                         'RapsysBlogBundle:Group' => $qs->getTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\Group'), $dp), 
 123                         'RapsysBlogBundle:Keyword' => $qs->getTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\Keyword'), $dp), 
 124                         'RapsysBlogBundle:User' => $qs->getTableName($manager->getClassMetadata('Rapsys\BlogBundle\Entity\User'), $dp), 
 126                         //XXX: or $manager->getConnection()->quote($this->locale) ??? 
 127                         ':locale' => $dp->quoteStringLiteral($this->locale
), 
 129                         //XXX: Set limit used to workaround mariadb subselect optimization 
 130                         ':limit' => PHP_INT_MAX
, 
 136                 //Set quoted table name keys 
 137                 $this->tableKeys 
= array_keys($tables); 
 139                 //Set quoted table name values 
 140                 $this->tableValues 
= array_values($tables); 
 146          * @param string $req The request to replace 
 147          * @return string The replaced request 
 149         protected function replace(string $req): string { 
 150                 //Replace bundle entity name by table name 
 151                 return str_replace($this->tableKeys
, $this->tableValues
, $req);