This repository contains Rector rules for upgrade of custom modules used with REMP CRM.
composer require --dev remp/crm-rectorNote: Composer will ask if you trust plugin rector/extension-installer. This plugin installs CRM rules into Rector package.
Run command:
vendor/bin/rector initFill 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-runAfter you reviewed planned changes, run it without --dry-run:
vendor/bin/rector processUse 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\StateEnumrenamed toParsedMailLogStateEnum,Crm\PaymentsModule\Models\RecurrentPayment\StateEnumrenamed toRecurrentPaymentStateEnum,Crm\UsersModule\Models\AddressChangeRequest\StatusEnumrenamed toAddressChangeRequestStatusEnum.
And replaces all deprecated constants with enums:
PaymentsRepositoryconstants replaced byPaymentStatusEnumenums,RecurrentPaymentsRepositoryconstants replaced byRecurrentPaymentStateEnumenums,ParsedMailLogsRepositoryconstants replaced byParsedMailLogStateEnumenums,AddressChangeRequestsRepositoryconstants replaced byAddressChangeRequestStatusEnumenums.
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_0contains CRM changes and Nette rules (3.0, 3.1). - Set:
Crm\Utils\Rector\Set\CrmSetList::CRM_1_0_WITHOUT_NETTEcontains only CRM changes.- You can call Nette sets from your
rector.phplater.
- You can call Nette sets from your
- Set:
Crm\Utils\Rector\Set\CrmSetList::NETTE_ANNOTATIONS_TO_ATTRIBUTEScontains 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\ApiHandlerInterfaceto CRM v1.0.
- Changes parameters of Api handlers which implement interface
\Crm\Utils\Rector\UpgradeToCrm1\ApiHandlerJsonResponseRector- Changes all instances of
Crm\ApiModule\Api\JsonResponsetoTomaj\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.