Skip to content

Commit b02fd38

Browse files
authored
Merge pull request #3 from curiosity26/develop
Still need to do the cast, but let's not bring in a huge library for it
2 parents 4672a2e + e4d63b2 commit b02fd38

File tree

4 files changed

+57
-3
lines changed

4 files changed

+57
-3
lines changed

.idea/php.xml

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DependencyInjection/Curiosity26AclHelperExtension.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88

99
namespace Curiosity26\AclHelperBundle\DependencyInjection;
1010

11+
use Curiosity26\AclHelperBundle\Doctrine\DQL\CastAsInt;
1112
use Symfony\Component\Config\FileLocator;
1213
use Symfony\Component\DependencyInjection\ContainerBuilder;
1314
use Symfony\Component\DependencyInjection\Extension\Extension;
15+
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
1416
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
1517

16-
class Curiosity26AclHelperExtension extends Extension
18+
class Curiosity26AclHelperExtension extends Extension implements PrependExtensionInterface
1719
{
1820
/**
1921
* @param array $configs
@@ -26,4 +28,19 @@ public function load(array $configs, ContainerBuilder $container)
2628
$loader = new YamlFileLoader($container, new FileLocator([__DIR__.'/../Resources/config/']));
2729
$loader->load('services.yaml');
2830
}
31+
32+
public function prepend(ContainerBuilder $container)
33+
{
34+
$configs = $container->getExtensionConfig('doctrine');
35+
36+
if (!empty($configs) && array_key_exists('orm', $configs[0])) {
37+
$config = $configs[0];
38+
$default = array_key_exists(
39+
'default_entity_manager',
40+
$config['orm']
41+
) ? $config['orm']['default_entity_manager'] : 'default';
42+
$config['orm']['entity_managers'][$default]['dql']['string_functions']['INT'] = CastAsInt::class;
43+
$container->prependExtensionConfig('doctrine', $config);
44+
}
45+
}
2946
}

Doctrine/DQL/CastAsInt.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: alex.boyce
5+
* Date: 11/12/18
6+
* Time: 3:34 PM
7+
*/
8+
9+
namespace Curiosity26\AclHelperBundle\Doctrine\DQL;
10+
11+
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
12+
use Doctrine\ORM\Query\AST\InputParameter;
13+
use Doctrine\ORM\Query\Lexer;
14+
use Doctrine\ORM\Query\Parser;
15+
use Doctrine\ORM\Query\SqlWalker;
16+
17+
class CastAsInt extends FunctionNode
18+
{
19+
/**
20+
* @var InputParameter
21+
*/
22+
public $stringPrimary;
23+
24+
public function getSql(SqlWalker $sqlWalker)
25+
{
26+
return 'CAST(' . $this->stringPrimary->dispatch($sqlWalker) . ' AS integer)';
27+
}
28+
29+
public function parse(Parser $parser)
30+
{
31+
$parser->match(Lexer::T_IDENTIFIER);
32+
$parser->match(Lexer::T_OPEN_PARENTHESIS);
33+
34+
$this->stringPrimary = $parser->StringPrimary();
35+
36+
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
37+
}
38+
}

QueryBuilder/AclHelperQueryBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public function buildAclQuery($strategy = PermissionGrantingStrategy::ANY)
104104
}
105105

106106
$q
107-
->select('acl_o.objectIdentifier')
107+
->select('INT(acl_o.objectIdentifier)')
108108
->distinct()
109109
->from(ObjectIdentity::class, 'acl_o')
110110
->innerJoin(AclClass::class, 'acl_c', Join::WITH, 'acl_c.id = acl_o.classId')

0 commit comments

Comments
 (0)