|
@@ -21,10 +21,12 @@ use Rector\Php71\ValueObject\TwoNodeMatch;
|
|
|
use Symplify\RuleDocGenerator\Exception\PoorDocumentationException;
|
|
|
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
|
|
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
|
|
|
+use PhpParser\Node\Expr\BinaryOp\NotEqual;
|
|
|
use PhpParser\Node\Expr\BinaryOp\Greater;
|
|
|
use PhpParser\Node\Expr\BinaryOp\GreaterOrEqual;
|
|
|
use PhpParser\Node\Expr\BinaryOp\Smaller;
|
|
|
use PhpParser\Node\Expr\BinaryOp\SmallerOrEqual;
|
|
|
+use PhpParser\Node\Expr\BinaryOp\NotIdentical;
|
|
|
|
|
|
/**
|
|
|
* Class with Rector custom rule to fix code
|
|
@@ -55,7 +57,7 @@ class GlobalToFunction extends AbstractRector
|
|
|
public function getRuleDefinition(): RuleDefinition
|
|
|
{
|
|
|
return new RuleDefinition(
|
|
|
- 'Change $conf->global to getDolGlobal',
|
|
|
+ 'Change $conf->global to getDolGlobal in context (1) conf->global Operator Value or (2) function(conf->global...)',
|
|
|
[new CodeSample(
|
|
|
'$conf->global->CONSTANT',
|
|
|
'getDolGlobalInt(\'CONSTANT\')'
|
|
@@ -70,7 +72,7 @@ class GlobalToFunction extends AbstractRector
|
|
|
*/
|
|
|
public function getNodeTypes(): array
|
|
|
{
|
|
|
- return [FuncCall::class, Equal::class, Greater::class, GreaterOrEqual::class, Smaller::class, SmallerOrEqual::class, BooleanAnd::class, Concat::class, ArrayDimFetch::class];
|
|
|
+ return [FuncCall::class, Equal::class, NotEqual::class, Greater::class, GreaterOrEqual::class, Smaller::class, SmallerOrEqual::class, NotIdentical::class, BooleanAnd::class, Concat::class, ArrayDimFetch::class];
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -101,7 +103,7 @@ class GlobalToFunction extends AbstractRector
|
|
|
|
|
|
if ($node instanceof FuncCall) {
|
|
|
$tmpfunctionname = $this->getName($node);
|
|
|
- if (in_array($tmpfunctionname, array('dol_escape_htmltag', 'make_substitutions', 'min', 'max'))) {
|
|
|
+ if (in_array($tmpfunctionname, array('dol_escape_htmltag', 'make_substitutions', 'min', 'max', 'explode'))) {
|
|
|
$args = $node->getArgs();
|
|
|
$nbofparam = count($args);
|
|
|
|
|
@@ -126,6 +128,7 @@ class GlobalToFunction extends AbstractRector
|
|
|
}
|
|
|
return $node;
|
|
|
}
|
|
|
+
|
|
|
if ($node instanceof Concat) {
|
|
|
if ($this->isGlobalVar($node->left)) {
|
|
|
$constName = $this->getConstName($node->left);
|
|
@@ -154,6 +157,7 @@ class GlobalToFunction extends AbstractRector
|
|
|
}
|
|
|
return new Concat($leftConcat, $rightConcat);
|
|
|
}
|
|
|
+
|
|
|
if ($node instanceof BooleanAnd) {
|
|
|
$nodes = $this->resolveTwoNodeMatch($node);
|
|
|
if (!isset($nodes)) {
|
|
@@ -164,10 +168,16 @@ class GlobalToFunction extends AbstractRector
|
|
|
$node = $nodes->getFirstExpr();
|
|
|
}
|
|
|
|
|
|
+ // Now process all comparison like:
|
|
|
+ // $conf->global->... Operator Value
|
|
|
+
|
|
|
$typeofcomparison = '';
|
|
|
if ($node instanceof Equal) {
|
|
|
$typeofcomparison = 'Equal';
|
|
|
}
|
|
|
+ if ($node instanceof NotEqual) {
|
|
|
+ $typeofcomparison = 'NotEqual';
|
|
|
+ }
|
|
|
if ($node instanceof Greater) {
|
|
|
$typeofcomparison = 'Greater';
|
|
|
}
|
|
@@ -180,6 +190,10 @@ class GlobalToFunction extends AbstractRector
|
|
|
if ($node instanceof SmallerOrEqual) {
|
|
|
$typeofcomparison = 'SmallerOrEqual';
|
|
|
}
|
|
|
+ if ($node instanceof NotIdentical) {
|
|
|
+ $typeofcomparison = 'NotIdentical';
|
|
|
+ //var_dump($node->left);
|
|
|
+ }
|
|
|
if (empty($typeofcomparison)) {
|
|
|
return;
|
|
|
}
|
|
@@ -189,7 +203,8 @@ class GlobalToFunction extends AbstractRector
|
|
|
}
|
|
|
|
|
|
// Test the type after the comparison conf->global->xxx to know the name of function
|
|
|
- switch ($node->right->getType()) {
|
|
|
+ $typeright = $node->right->getType();
|
|
|
+ switch ($typeright) {
|
|
|
case 'Scalar_LNumber':
|
|
|
$funcName = 'getDolGlobalInt';
|
|
|
break;
|
|
@@ -214,6 +229,15 @@ class GlobalToFunction extends AbstractRector
|
|
|
$node->right
|
|
|
);
|
|
|
}
|
|
|
+ if ($typeofcomparison == 'NotEqual') {
|
|
|
+ return new NotEqual(
|
|
|
+ new FuncCall(
|
|
|
+ new Name($funcName),
|
|
|
+ [new Arg($constName)]
|
|
|
+ ),
|
|
|
+ $node->right
|
|
|
+ );
|
|
|
+ }
|
|
|
if ($typeofcomparison == 'Greater') {
|
|
|
return new Greater(
|
|
|
new FuncCall(
|
|
@@ -250,6 +274,15 @@ class GlobalToFunction extends AbstractRector
|
|
|
$node->right
|
|
|
);
|
|
|
}
|
|
|
+ if ($typeofcomparison == 'NotIdentical') {
|
|
|
+ return new NotIdentical(
|
|
|
+ new FuncCall(
|
|
|
+ new Name($funcName),
|
|
|
+ [new Arg($constName)]
|
|
|
+ ),
|
|
|
+ $node->right
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -262,7 +295,7 @@ class GlobalToFunction extends AbstractRector
|
|
|
{
|
|
|
return $this->binaryOpManipulator->matchFirstAndSecondConditionNode(
|
|
|
$booleanAnd,
|
|
|
- // $conf->global == $value
|
|
|
+ // Function to check if we are in the case $conf->global->... == $value
|
|
|
function (Node $node): bool {
|
|
|
if (!$node instanceof Equal) {
|
|
|
return \false;
|