2
0
forked from Wavyzz/dolibarr

Fix #28071 - New branch to fix bad merge (#28083)

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* Qual: Introduce getDataToShowPhoto to prepare generic code

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Fix missing trans

* Fix langs

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Remove useless files in web templates

* Clean code

* Fix duplicate translation key

* Fix duplicate translation key

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Fix duplicate key

* Fix $object

* Debug v19

* WIP SMSing

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* WIP EMAILINGS_SUPPORT_ALSO_SMS

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* WIP SMSing

* Debug the "validate" feature

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Clean code

* Move rights->x->y into hasRight('x', 'y')

* Move rights->x->y into hasRight('x', 'y')

* Move rights->x->y into hasRight('x', 'y')

* Move rights->x->y into hasRight('x', 'y')

* Move rights->x->y into hasRight('x', 'y')

* Move rights->x->y into hasRight('x', 'y')

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* Enhance rector to fix empty($user->rights->modulex->perm1)

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into
develop

* Fix template to use v19 dev rules

* Fix use v19 dev rules

* Fix phpunit

* Debug v19

* Clean code

* Use rector to convert user->rights into user->hasRight

* Clean code

* Use rector to convert user->rights into user->hasRight

* Use rector to convert user->rights into user->hasRight

* Clean code

* Fix phpcs

* add editorconfig for sql files (#27999)

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* add model_pdf field in llx_ticket-ticket.sql (#27996)

* add model_pdf field in llx_ticket-ticket.sql

* Update 19.0.0-20.0.0.sql

* Update 19.0.0-20.0.0.sql

* Improve wording in README (#27994)

* fix phpstan (#27989)

* fix phpstan

* Update UserRightsToFunction.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>

* Qual: Fix spelling/working in datapolicy translations (#28006)

# Qual: Fix spelling/wording in datapolicy translations

Fixed some spelling and wording in datapolicy translations.

* qual: phpstan for htdocs/ticket/class/ticketstats.class.php (#27986)

htdocs/ticket/class/ticketstats.class.php	98	Parameter #1 $year (string) of method TicketStats::getNbByMonth() should be compatible with parameter $year (int) of method Stats::getNbByMonth()

* Merge branch '19.0' of git@github.com:Dolibarr/dolibarr.git into develop

* Fix user with readonly perm on email template must be able to read.

* Fix doc

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Better message

* Add missing fields in merge of thirdparty

* Debug v19 selection of ticket printer per terminal

* Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

* Use constant

* NEW: Adding a recipient on emails sent, change status to sent partialy.

* fix travis (#28052)

* fix travis

* Update partnership.class.php

* fix php doc (#28047)

* fix undefined array key (#28048)

* Add region and departament for Cuba (#28046)

* Update llx_10_c_regions.sql

Add Cuba Regions (id_country=77)

* Update llx_20_c_departements.sql

Add Provinces Cuba (id country=77)

* Find the typo (#28050)

* Find the typo

* clean code

* add last_main_doc field to product (#28045)

* add las_main_doc field to product

* add field fetch

* NEW Add Categorie filter for ActionComm (#28041)

* New Add Categorie filter for ActionComm

New Add Categorie filter for ActionComm

* Fix space errors

Fix space errors

* Fix space errors 2

Fix space errors 2

* Update cunits.class.php (#28056)

FIX: error SQL when creating a Cunit

* Update codespell-lines-ignore.txt to avoid PR merge conflict

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
Co-authored-by: Frédéric FRANCE <frederic34@users.noreply.github.com>
Co-authored-by: thibdrev <thibault.drevet@gmail.com>
Co-authored-by: sonikf <93765174+sonikf@users.noreply.github.com>
Co-authored-by: Ikarus <44511582+LeKarSol@users.noreply.github.com>
Co-authored-by: Anthony Damhet <73399671+EchoLoGeek@users.noreply.github.com>
Co-authored-by: Quentin-Seekness <72733832+Quentin-Seekness@users.noreply.github.com>
This commit is contained in:
MDW
2024-02-09 15:58:49 +01:00
committed by GitHub
parent 275dbca5fa
commit 7b54824d49
523 changed files with 2895 additions and 7653 deletions

View File

@@ -10,6 +10,10 @@ use Rector\Core\PhpParser\Node\NodeFactory;
use Rector\Core\Rector\AbstractRector;
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
use PhpParser\Node\Expr\BinaryOp\BooleanAnd;
use PhpParser\Node\Expr\BinaryOp\Concat;
use PhpParser\Node\Expr\BinaryOp\Equal;
/**
* Class to refactor User rights
@@ -50,6 +54,7 @@ class UserRightsToFunction extends AbstractRector
Node\Expr\Assign::class,
Node\Expr\PropertyFetch::class,
Node\Expr\BooleanNot::class,
Node\Expr\BinaryOp\BooleanAnd::class,
Node\Expr\Empty_::class,
Node\Expr\Isset_::class,
Node\Stmt\ClassMethod::class
@@ -74,40 +79,112 @@ class UserRightsToFunction extends AbstractRector
}
}
}
if ($node instanceof Node\Expr\Assign) {
return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN;
// var is left of = and expr is right of =
if (!isset($node->var)) {
return;
}
if (!$node->expr instanceof Node\Expr\PropertyFetch) {
return;
}
$data = $this->getRights($node->expr);
if (!isset($data)) {
return;
}
$args = [new Arg($data['module']), new Arg($data['perm1'])];
if (!empty($data['perm2'])) {
$args[] = new Arg($data['perm2']);
}
$node->expr = $this->nodeFactory->createMethodCall($data['user'], 'hasRight', $args);
return $node;
}
if ($node instanceof Node\Expr\BinaryOp\BooleanAnd) {
/*$nodes = $this->resolveTwoNodeMatch($node);
if (!isset($nodes)) {
return;
}
$node = $nodes->getFirstExpr();
*/
$mustprocesstheleft = false;
$mustprocesstheright = false;
if ($node->left instanceof Node\Expr\PropertyFetch) {
$data = $this->getRights($node->left);
if (isset($data)) {
$mustprocesstheleft = true;
}
}
if (empty($mustprocesstheleft) && $node->right instanceof Node\Expr\PropertyFetch) {
$data = $this->getRights($node->right);
if (isset($data)) {
$mustprocesstheright = true;
}
}
if (isset($data)) {
$args = [new Arg($data['module']), new Arg($data['perm1'])];
if (!empty($data['perm2'])) {
$args[] = new Arg($data['perm2']);
}
if ($mustprocesstheleft && !empty($data['module'])) {
$node->left = $this->nodeFactory->createMethodCall($data['user'], 'hasRight', $args);
}
if ($mustprocesstheright && !empty($data['module'])) {
$node->right = $this->nodeFactory->createMethodCall($data['user'], 'hasRight', $args);
}
}
return $node;
}
$caseok = false; // Will be true if we can make the replacement. We must not do it for assignment like when $user->right->aaa->bbb = ...
$isInverse = false;
if ($node instanceof Node\Expr\BooleanNot) {
if (!$node->expr instanceof Node\Expr\Empty_) {
return null;
}
$node = $node->expr->expr;
$caseok = true;
}
if ($node instanceof Node\Expr\Empty_) {
$node = $node->expr;
$isInverse = true;
$caseok = true;
}
if ($node instanceof Node\Expr\Isset_) {
// Take first arg for isset (No code found with multiple isset).
$node = $node->vars[0];
$caseok = true;
}
if (!$node instanceof Node\Expr\PropertyFetch) {
return;
return null;
}
$data = $this->getRights($node);
if (!isset($data)) {
return;
if ($caseok) {
$data = $this->getRights($node);
if (!isset($data)) {
return;
}
$args = [new Arg($data['module']), new Arg($data['perm1'])];
if (!empty($data['perm2'])) {
$args[] = new Arg($data['perm2']);
}
$method = $this->nodeFactory->createMethodCall($data['user'], 'hasRight', $args);
if ($isInverse) {
return new Node\Expr\BooleanNot($method);
}
return $method;
} else {
return null;
}
$args = [new Arg($data['module']), new Arg($data['perm1'])];
if (!empty($data['perm2'])) {
$args[] = new Arg($data['perm2']);
}
$method = $this->nodeFactory->createMethodCall($data['user'], 'hasRight', $args);
if ($isInverse) {
return new Node\Expr\BooleanNot($method);
}
return $method;
}
/**
@@ -150,4 +227,34 @@ class UserRightsToFunction extends AbstractRector
$user = $rights->var;
return compact('user', 'module', 'perm1', 'perm2');
}
/**
* Get nodes with check empty
*
* @param BooleanAnd $booleanAnd A BooleandAnd
* @return TwoNodeMatch|null
*/
private function resolveTwoNodeMatch(BooleanAnd $booleanAnd): ?TwoNodeMatch
{
return $this->binaryOpManipulator->matchFirstAndSecondConditionNode(
$booleanAnd,
// Function to check if we are in the case $conf->global->... == $value
function (Node $node): bool {
if (!$node instanceof Equal) {
return \false;
}
return $this->isGlobalVar($node->left);
},
// !empty(...) || isset(...)
function (Node $node): bool {
if ($node instanceof BooleanNot && $node->expr instanceof Empty_) {
return $this->isGlobalVar($node->expr->expr);
}
if (!$node instanceof Isset_) {
return $this->isGlobalVar($node);
}
return \true;
}
);
}
}