This repository contains Rector rules for upgrade of custom modules used with REMP CRM.
composer require --dev remp/crm-rector
Note: Composer will ask if you trust plugin rector/extension-installer
. This plugin installs CRM rules into Rector package.
Run command:
vendor/bin/rector init
Fill custom paths & options & sets/rules you want to run.
E.g. to update to CRM 1.0 it could look like this:
<?php
declare(strict_types=1);
use Crm\Utils\Rector\Set\CrmSetList;
use Rector\Config\RectorConfig;
use Rector\Core\Configuration\Option;
return static function (RectorConfig $rectorConfig): void {
$parameters = $rectorConfig->parameters();
// paths to refactor
$rectorConfig->paths([
__DIR__ . '/app/custom-modules', // path to custom modules
]);
// set with CRM v3 and CRM v4 changes; check README for details
$rectorConfig->sets([
CrmSetList::CRM_4,
]);
// run single rule if you don't want to run whole set
// $rectorConfig->rule(\Crm\Utils\Rector\UpgradeToCrm4\InputParamChangeRector::class);
// $rectorConfig->rule(\Crm\Utils\Rector\UpgradeToCrm4\RemoveParamsProcessorRector::class);
// automatically import/remove namespaces after all rules are applied
$rectorConfig->importNames();
$rectorConfig->importShortClasses(false);
$rectorConfig->removeUnusedImports();
};
Sets and rules are listed below.
vendor/bin/rector process --dry-run
After you reviewed planned changes, run it without --dry-run
:
vendor/bin/rector process
Use vendor/bin/rector --help
for help. Notable flags are -vvv
for verbose messages, --clear-cache
and --xdebug
if you need to debug rector rules.
Use set CrmSetList::CRM_4
:
$rectorConfig->sets([\Crm\Utils\Rector\Set\CrmSetList::CRM_4]);
// removes import of Crm\ApiModule\Models\Params\InputParam
$rectorConfig->removeUnusedImports();
// imports new *InputParam classes
$rectorConfig->importNames();
or individual subsets / rules.
This set (CrmSetList::CRM_4_LAZY_WIDGET_MANAGER
) replaces deprecated classes BaseWidget
and WidgetManager
with BaseLazyWidget
and LazyWidgetManager
. They were deprecated since
version 2.1.0,
commit remp/crm-application-module@43d9c19f37
This set (CrmSetList::CRM_4_ENUMS
) handles renames of few enums where class name didn't contain context:
Crm\PaymentsModule\Models\ParsedMailLog\StateEnum
renamed toParsedMailLogStateEnum
,Crm\PaymentsModule\Models\RecurrentPayment\StateEnum
renamed toRecurrentPaymentStateEnum
,Crm\UsersModule\Models\AddressChangeRequest\StatusEnum
renamed toAddressChangeRequestStatusEnum
.
And replaces all deprecated constants with enums:
PaymentsRepository
constants replaced byPaymentStatusEnum
enums,RecurrentPaymentsRepository
constants replaced byRecurrentPaymentStateEnum
enums,ParsedMailLogsRepository
constants replaced byParsedMailLogStateEnum
enums,AddressChangeRequestsRepository
constants replaced byAddressChangeRequestStatusEnum
enums.
This rule (\Crm\Utils\Rector\UpgradeToCrm4\InputParamChangeRector
) changes \Crm\ApiModule\Models\Params\InputParam
to specific InputParam
object from tomaj/nette-api library.
See what will be changed in getRuleDefinition()
method in \Crm\Utils\Rector\UpgradeToCrm4\InputParamChangeRector
This rule (\Crm\Utils\Rector\UpgradeToCrm4\RemoveParamsProcessorRector
) will remove useless calls of ParamsProcessor
. Some of these methods were removed (hasError()
). And getErrors()
or getValues()
(loading API parameters from ParamsProcessor
) are not needed anymore. API runner handles errors before loading handler and provides validated parameters to handle()
method.
WARNING: This Rector rule does crude work. You still need to go through all changes and fix your API handlers (if you worked or need to work with errors).
If you use
ApiParamsValidatorInterface
, do not run this Rector rule. It doesn't understand this context.
See what will be changed in getRuleDefinition()
method in \Crm\Utils\Rector\UpgradeToCrm4\RemoveParamsProcessorRector
Set:
$rectorConfig->sets([\Crm\Utils\Rector\Set\CrmSetList::NETTE_ANNOTATIONS_TO_ATTRIBUTES]);
Changes:
/** @var @inject */
public Crm\UsersModule\Repositories\UsersRepository $usersRepository;
to:
#[\Nette\DI\Attributes\Inject]
public Crm\UsersModule\Repositories\UsersRepository $usersRepository;
Fixes also persistent
and crossOrigin
.
\Crm\Utils\Rector\TransformToLazyEventListeners\TransformToLazyEventListeners
- Changes register events method to new lazy variant and removes
$this->getInstance()
call from all event registrations.
- Changes register events method to new lazy variant and removes
-
Set:
Crm\Utils\Rector\Set\CrmSetList::CRM_3_0_PSR4
- contains namespace renames after class names / namespaces were changed to follow PSR4 standard.Usage:
$rectorConfig->sets([ CrmSetList::CRM_3_0_PSR4, ]);
ℹ️ We are not maintaining this set anymore. Set & rules were removed. Last release with working rules is https://github.com/remp2020/crm-rector/releases/tag/1.2.0.
Check also the CRM 1.0 migration guide.
- Set:
Crm\Utils\Rector\Set\CrmSetList::CRM_1_0
contains CRM changes and Nette rules (3.0, 3.1). - Set:
Crm\Utils\Rector\Set\CrmSetList::CRM_1_0_WITHOUT_NETTE
contains only CRM changes.- You can call Nette sets from your
rector.php
later.
- You can call Nette sets from your
- Set:
Crm\Utils\Rector\Set\CrmSetList::NETTE_ANNOTATIONS_TO_ATTRIBUTES
contains transformation of PHPdoc-based annotations to PHP 8.0 attributes (available since Nette 3.0+).
\Crm\Utils\Rector\UpgradeToCrm1\ApiHandlerParametersRector
- Changes parameters of Api handlers which implement interface
Crm\ApiModule\Api\ApiHandlerInterface
to CRM v1.0.
- Changes parameters of Api handlers which implement interface
\Crm\Utils\Rector\UpgradeToCrm1\ApiHandlerJsonResponseRector
- Changes all instances of
Crm\ApiModule\Api\JsonResponse
toTomaj\NetteApi\Response\JsonApiResponse
.
- Changes all instances of
Note: Both these rules are part of sets CRM_1_0
and CRM_1_0_WITHOUT_NETTE
. These are created as individual rules because Rector's general rules were not sufficient. We recommend running whole set.