1. merge is a wrong name for a branch and should be removed. Release branch names always end with the literal .x as described in
Release branches →
.
2. FILE: better_taxonomy.module
Since the module is declared compatible with Drupal 10.2, removing the function implementing the hook is not possible. The function still needs to be defined, but it calls the method defined by the service class, as described in Support for object oriented hook implementations using autowired services → (Backwards-compatible Hook implementation for Drupal versions from 10.1 to 11.0).
Rest seems fine to me.
Please wait for other reviewers and Project Moderator to take a look and if everything goes fine, you will get the role.
1. FILE: tmgmt_tolgee.module and modules/tmgmt_tolgee_reverse_sync/tmgmt_tolgee_reverse_sync.module
For a new module that aims to be compatible with Drupal 10/11, it is expected it implements hooks as class methods as described in Support for object oriented hook implementations using autowired services → .
2. FILE: tmgmt_tolgee.module
\Drupal::messenger()->addError($e->getMessage());
The first argument passed to MessengerInterface::addError(), MessengerInterface::addMessage(), MessengerInterface::addStatus(), and MessengerInterface::addWarning() must be a translatable string which uses placeholders.
3. FILE: css/tmgmt_tolgee.admin.css
Remove the empty file.
4. FILE: src/Plugin/tmgmt/Translator/TolgeeTranslator.php
/**
* The HTTP client.
*
* @var \GuzzleHttp\ClientInterface
*/
protected ClientInterface $client;
/**
* The key repository.
*
* @var \Drupal\key\KeyRepositoryInterface
*/
protected KeyRepositoryInterface $keyRepository;
/**
* The file system service.
*
* @var \Drupal\Core\File\FileSystemInterface
*/
protected FileSystemInterface $fileSystem;
/**
* The format manager.
*
* @var \Drupal\Component\Plugin\PluginManagerInterface
*/
protected PluginManagerInterface $formatManager;
/**
* The state service.
*
* @var \Drupal\Core\State\StateInterface
*/
protected StateInterface $state;
/**
* Constructs a TolgeeTranslator object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \GuzzleHttp\ClientInterface $client
* The HTTP client.
* @param \Drupal\key\KeyRepositoryInterface $key_repository
* The key repository.
* @param \Drupal\Core\File\FileSystemInterface $file_system
* The file system service.
* @param \Drupal\Component\Plugin\PluginManagerInterface $format_manager
* The format manager.
* @param \Drupal\Core\State\StateInterface $state
* The state service.
*/
public function __construct(
array $configuration,
string $plugin_id,
$plugin_definition,
ClientInterface $client,
KeyRepositoryInterface $key_repository,
FileSystemInterface $file_system,
PluginManagerInterface $format_manager,
StateInterface $state
) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->client = $client;
$this->keyRepository = $key_repository;
$this->fileSystem = $file_system;
$this->formatManager = $format_manager;
$this->state = $state;
}FILE: src/Service/TolgeeSynchronizer.php
protected $entityTypeManager;
protected $logger;
protected $messenger;
public function __construct(EntityTypeManagerInterface $entity_type_manager, LoggerChannelFactoryInterface $logger_factory, MessengerInterface $messenger) {
$this->entityTypeManager = $entity_type_manager;
$this->logger = $logger_factory->get('tmgmt_tolgee');
$this->messenger = $messenger;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
5. FILE: modules/tmgmt_tolgee_reverse_sync/src/TolgeePusher.php
/*
$this->loggerFactory->get('tmgmt_tolgee_reverse_sync')->info(
'Push Success to NS @ns: k=@key', ['@ns' => $namespace, '@key' => $payload['key']]
);
*/Remove commented code.
6. FILE: modules/tmgmt_tolgee_reverse_sync/src/Form/ReverseSyncSettingsForm.php
With Drupal 10 and Drupal 11, there is no longer need to use #default_value for each form element, when the parent class is ConfigFormBase: It is sufficient to use #config_target, as in the following code.
$form['image_toolkit'] = [
'#type' => 'radios',
'#title' => $this->t('Select an image processing toolkit'),
'#config_target' => 'system.image:toolkit',
'#options' => [],
];Using that code, it is no longer needed to save the configuration values in the form submission handler: The parent class will take care of that.
1. FILE: auto_taxonomy_menu.module
For a new module that aims to be compatible with Drupal 10/11, it is expected it implements hooks as class methods as described in Support for object oriented hook implementations using autowired services → .
/**
* @file
* Module file for Auto Taxonomy Menu.
*/The usual description for a .module file is “Hook implementations for the [module name] module”, where [module name] is the module name given in the .info.yml file.
2. FILE: src/Hook/AutoTaxonomyMenuHooks.php
Since the module is declared compatible with Drupal 11.0, removing the function implementing the hook from .module file is not possible. The function still needs to be defined, but it calls the method defined by the service class, as described in Support for object oriented hook implementations using autowired services → (Backwards-compatible Hook implementation for Drupal versions from 10.1 to 11.0).
3. FILE: src/Hook/AutoTaxonomyMenuHooks.php
/**
* The database connection.
*
* @var \Drupal\Core\Database\Connection
*/
protected $database;
/**
* The entity field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
*/
protected $entityFieldManager;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
/**
* The logger factory.
*
* @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
*/
protected $loggerFactory;
/**
* The messenger.
*
* @var \Drupal\Core\Messenger\MessengerInterface
*/
protected $messenger;
/**
* The router builder.
*
* @var \Drupal\Core\Routing\RouteBuilderInterface
*/
protected $routerBuilder;
/**
* Constructs a new AutoTaxonomyMenuHooks object.
*
* @param \Drupal\Core\Database\Connection $database
* The database connection.
* @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
* The entity field manager.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* The request stack.
* @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger_factory
* The logger factory.
* @param \Drupal\Core\Messenger\MessengerInterface $messenger
* The messenger.
* @param \Drupal\Core\Routing\RouteBuilderInterface $router_builder
* The router builder.
*/
public function __construct(
Connection $database,
EntityFieldManagerInterface $entity_field_manager,
EntityTypeManagerInterface $entity_type_manager,
RequestStack $request_stack,
LoggerChannelFactoryInterface $logger_factory,
MessengerInterface $messenger,
RouteBuilderInterface $router_builder,
) {
$this->database = $database;
$this->entityFieldManager = $entity_field_manager;
$this->entityTypeManager = $entity_type_manager;
$this->requestStack = $request_stack;
$this->loggerFactory = $logger_factory;
$this->messenger = $messenger;
$this->routerBuilder = $router_builder;
}FILE: src/Plugin/Derivative/AutoTaxonomyMenuLink.php
/**
* Database connection.
*
* @var \Drupal\Core\Database\Connection database
*/
protected Connection $database;
/**
* The logger factory.
*
* @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
*/
protected $loggerFactory;
/**
* Constructs plugin instance.
*
* @param \Drupal\Core\Database\Connection $database
* The database connection.
* @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger_factory
* The logger factory.
*/
public function __construct(Connection $database, LoggerChannelFactoryInterface $logger_factory) {
$this->database = $database;
$this->loggerFactory = $logger_factory;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
4. FILE: src/Plugin/Derivative/AutoTaxonomyMenuLink.php
$logger->debug("Processing menu item: " . $record->menu_link_id);
$logger->debug("Adding term: " . $term->name);
$logger->warning("Could not create the link $term->name \n {$ex->getMessage()}");
The $message parameter passed to the LoggerInterface methods must be a literal string that uses placeholders. It's not a translatable string returned from t()/$this->t(), a string concatenation, a value returned from a function/method, nor a variable containing an exception object.
Thank you for applying!
Please read Review process for security advisory coverage: What to expect → for more details and Security advisory coverage application checklist → to understand what reviewers look for. Tips for ensuring a smooth review → gives some hints for a smoother review.
The important notes are the following.
- If you have not done it yet, you should enable GitLab CI for the project and fix the PHP_CodeSniffer errors/warnings it reports.
- For the time this application is open, only your commits are allowed.
- The purpose of this application is giving you a new drupal.org role that allows you to opt projects into security advisory coverage, either projects you already created, or projects you will create. The project status will not be changed by this application; once this application is closed, you will be able to change the project status from Not covered to Opt into security advisory coverage. This is possible only 14 days after the project is created.
Keep in mind that once the project is opted into security advisory coverage, only Security Team members may change coverage. - Only the person who created the application will get the permission to opt projects into security advisory coverage. No other person will get the same permission from the same application; that applies also to co-maintainers/maintainers of the project used for the application.
- We only accept an application per user. If you change your mind about the project to use for this application, or it is necessary to use a different project for the application, please update the issue summary with the link to the correct project and the issue title with the project name and the branch to review.
To the reviewers
Please read How to review security advisory coverage applications → , Application workflow → , What to cover in an application review → , and Tools to use for reviews → .
The important notes are the following.
- It is preferable to wait for a project moderator before posting the first comment on newly created applications. Project moderators will do some preliminary checks that are necessary before any change on the project files is suggested.
- Reviewers should show the output of a CLI tool → only once per application.
- It may be best to have the applicant fix things before further review.
For new reviewers, I would also suggest to first read In which way the issue queue for coverage applications is different from other project queues → .
I have reviewed your posts and confirmed the account.
Hello Tanishq, and a warm welcome to the Drupal community!
You can contribute to drupal.org without having the role.
The 'confirmed' role is for users that contribute to this website. In this case, you've not contributed any content except this post, so there is no content to review. Postponing for now, after you have posted some content on Drupal.org.
You can add a comment to this issue to request a new review in order to get 'confirmed' or you will get that automatically.
Please visit the Become a confirmed user → page for information.
Here is a list of resources that will assist you in making helpful contributions:
Fix the warnings/errors reported by PHP_CodeSniffer. (see attached changelogify-phpcs-issues.txt)
This is not required. However, it is better if the module does not depend on Drupal versions that are no longer supported. Keeping the current approach is acceptable to maintain compatibility with versions below 10.3.
1. FILE: better_taxonomy.module
For a new module that aims to be compatible with Drupal 10/11, it is expected it implements hooks as class methods as described in
Support for object oriented hook implementations using autowired services →
.
It would require increasing the minimum Drupal 10 version supported, but Drupal 10.1 is no longer supported.
2. FILE: src/BTFormsService.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* Class constructor.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager.
*/
public function __construct(EntityTypeManagerInterface $entityTypeManager) {
$this->entityTypeManager = $entityTypeManager;
}FILE: src/BTService.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected RequestStack $requestStack;
/**
* The entity field manager service.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
*/
protected EntityFieldManagerInterface $entityFieldManager;
/**
* The term list builder.
*/
protected EntityListBuilderInterface $termListBuilder;
/**
* Class constructor.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager.
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
* The request stack.
* @param \Drupal\Core\Entity\EntityFieldManagerInterface $entityFieldManager
* The entity field manager service.
*/
public function __construct(
EntityTypeManagerInterface $entityTypeManager,
RequestStack $requestStack,
EntityFieldManagerInterface $entityFieldManager,
) {
$this->entityTypeManager = $entityTypeManager;
$this->requestStack = $requestStack;
$this->entityFieldManager = $entityFieldManager;
$this->termListBuilder = $entityTypeManager->getListBuilder('taxonomy_term');
}FILE: src/Form/AddMultipleForm.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The Better taxonomy utils service.
*
* @var \Drupal\better_taxonomy\BTService
*/
protected BTService $betterTaxonomyService;
/**
* The Better taxonomy forms service.
*
* @var \Drupal\better_taxonomy\BTFormsService
*/
protected BTFormsService $betterTaxonomyFormsService;
/**
* Class constructor.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager.
* @param \Drupal\better_taxonomy\BTService $betterTaxonomyService
* The Better taxonomy utils service.
* @param \Drupal\better_taxonomy\BTFormsService $betterTaxonomyFormsService
* The Better taxonomy forms service.
*/
public function __construct(
EntityTypeManagerInterface $entityTypeManager,
BTService $betterTaxonomyService,
BTFormsService $betterTaxonomyFormsService,
) {
$this->entityTypeManager = $entityTypeManager;
$this->betterTaxonomyService = $betterTaxonomyService;
$this->betterTaxonomyFormsService = $betterTaxonomyFormsService;
}FILE: src/Form/CoreOverviewTerms.php
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected ModuleHandlerInterface $moduleHandler;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The renderer.
*
* @var \Drupal\Core\Render\RendererInterface
*/
protected RendererInterface $renderer;
/**
* The entity repository.
*
* @var \Drupal\Core\Entity\EntityRepositoryInterface
*/
protected EntityRepositoryInterface $entityRepository;
/**
* The pager manager.
*
* @var \Drupal\Core\Pager\PagerManagerInterface
*/
protected PagerManagerInterface $pagerManager;
/**
* The entity type manager.
*
* @var \Drupal\better_taxonomy\BTService
*/
protected BTService $betterTaxonomyService;
/**
* The core overview terms form.
*
* @var \Drupal\taxonomy\Form\OverviewTerms
*/
protected OverviewTerms $coreClass;
/**
* Constructs an OverviewTerms object.
*
* @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler
* The module handler.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager.
* @param \Drupal\Core\Render\RendererInterface $renderer
* The renderer.
* @param \Drupal\Core\Entity\EntityRepositoryInterface $entityRepository
* The entity repository.
* @param \Drupal\Core\Pager\PagerManagerInterface $pagerManager
* Pager manager service.
* @param \Drupal\better_taxonomy\BTService $betterTaxonomyService
* The Better taxonomy utils service.
*/
public function __construct(
ModuleHandlerInterface $moduleHandler,
EntityTypeManagerInterface $entityTypeManager,
RendererInterface $renderer,
EntityRepositoryInterface $entityRepository,
PagerManagerInterface $pagerManager,
BTService $betterTaxonomyService,
) {
$this->moduleHandler = $moduleHandler;
$this->entityTypeManager = $entityTypeManager;
$this->renderer = $renderer;
$this->entityRepository = $entityRepository;
$this->pagerManager = $pagerManager;
$this->betterTaxonomyService = $betterTaxonomyService;
$this->coreClass = new OverviewTerms($moduleHandler, $entityTypeManager, $renderer, $entityRepository, $pagerManager);
}FILE: src/Form/DeleteAllForm.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* Vocabulary to delete all terms.
*
* @var \Drupal\taxonomy\VocabularyInterface
*/
protected VocabularyInterface $taxonomyVocabulary;
/**
* Class constructor.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager.
*/
public function __construct(EntityTypeManagerInterface $entityTypeManager) {
$this->entityTypeManager = $entityTypeManager;
}FILE: src/Form/DeleteAllForm.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The current route match.
*
* @var \Drupal\Core\Routing\RouteMatchInterface
*/
protected $routeMatch;
/**
* The form builder.
*
* @var \Drupal\Core\Form\FormBuilderInterface
*/
protected FormBuilderInterface $formBuilder;
/**
* Class constructor.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager.
* @param \Drupal\Core\Routing\RouteMatchInterface $routeMatch
* The current route match.
* @param \Drupal\Core\Form\FormBuilderInterface $formBuilder
* The form builder.
*/
public function __construct(
EntityTypeManagerInterface $entityTypeManager,
RouteMatchInterface $routeMatch,
FormBuilderInterface $formBuilder,
) {
$this->entityTypeManager = $entityTypeManager;
$this->routeMatch = $routeMatch;
$this->formBuilder = $formBuilder;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
3. FILE: src/Form/AddMultipleForm.php and src/Form/DeleteAllForm.php
$this->messenger()->addMessage($message);
The first argument passed to MessengerInterface::addError(), MessengerInterface::addMessage(), MessengerInterface::addStatus(), and MessengerInterface::addWarning() must be a translatable string which uses placeholders.
1. 2.3.1, 2.2.1, 2.1.1, 1.0.2, and 1.0.1 are wrong names for a branch and should be removed. Release branch names always end with the literal .x as described in
Release branches →
.
2. FILE: messages.module
For a new module that aims to be compatible with Drupal 10/11, it is expected it implements hooks as class methods as described in Support for object oriented hook implementations using autowired services → .
switch ($type) {
case 'success':
case 'status':
$messenger->addStatus($formatted_message);
break;
case 'warning':
$messenger->addWarning($formatted_message);
break;
case 'error':
$messenger->addError($formatted_message);
break;
case 'info':
default:
$messenger->addMessage($formatted_message);
break;
}The first argument passed to MessengerInterface::addError(), MessengerInterface::addMessage(), MessengerInterface::addStatus(), and MessengerInterface::addWarning() must be a translatable string which uses placeholders.
As a side note: These applications do not require that new releases are created after reviews, since a review could ask for a change that is not backward compatible with the existing releases.
1. FILE: README.md
The README file is missing the required sections → - Requirements, Installation, and Configuration.
2. FILE: src/Form/TailwindPrefixForm.php
With Drupal 10 and Drupal 11, there is no longer need to use #default_value for each form element, when the parent class is ConfigFormBase: It is sufficient to use #config_target, as in the following code.
$form['image_toolkit'] = [
'#type' => 'radios',
'#title' => $this->t('Select an image processing toolkit'),
'#config_target' => 'system.image:toolkit',
'#options' => [],
];
Using that code, it is no longer needed to save the configuration values in the form submission handler: The parent class will take care of that.
For this change, it is necessary to require at least Drupal 10.3, but that is not an issue, since Drupal 10.2.x is no longer supported.
3. FILE: src/Form/TailwindPrefixForm.php
/**
* Render cache backend.
*
* @var \Drupal\Core\Cache\CacheBackendInterface
*/
protected CacheBackendInterface $cacheRender;
/**
* Dynamic page cache backend.
*
* @var \Drupal\Core\Cache\CacheBackendInterface
*/
protected CacheBackendInterface $cacheDynamicPage;
/**
* Page cache backend.
*
* @var \Drupal\Core\Cache\CacheBackendInterface
*/
protected CacheBackendInterface $cachePage;
/**
* Constructs a TailwindPrefixForm object.
*
* @param \Drupal\Core\Cache\CacheBackendInterface $cacheRender
* Render cache service.
* @param \Drupal\Core\Cache\CacheBackendInterface $cacheDynamicPage
* Dynamic page cache service.
* @param \Drupal\Core\Cache\CacheBackendInterface $cachePage
* Page cache service.
*/
public function __construct(
CacheBackendInterface $cacheRender,
CacheBackendInterface $cacheDynamicPage,
CacheBackendInterface $cachePage,
) {
$this->cacheRender = $cacheRender;
$this->cacheDynamicPage = $cacheDynamicPage;
$this->cachePage = $cachePage;
}FILE: src/Twig/TailwindMergeClassesTwigExtension.php
/**
* Service instance used for merging Tailwind classes.
*
* @var \Drupal\tailwind_merge_classes\Service\TailwindMergeService
*/
public $tailwindMergeService;
/**
* Constructs the Twig extension.
*
* @param \Drupal\tailwind_merge_classes\Service\TailwindMergeService $service
* Tailwind merge service injected via dependency injection.
*/
public function __construct(TailwindMergeService $service) {
$this->tailwindMergeService = $service;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
If you changed what has been reported, please change the status to Needs review. In this way, reviewers will know everything has been changed and can be reviewed again.
1. main branch is still present. It needs to be deleted.
2. FILE: changelogify.module
Since the module is declared compatible with Drupal 10.3, removing the function implementing the hook is not possible. The function still needs to be defined, but it calls the method defined by the service class, as described in Support for object oriented hook implementations using autowired services → (Backwards-compatible Hook implementation for Drupal versions from 10.1 to 11.0).
3. I don't see a .gitlab-ci.yml file.
If you changed what has been reported, please change the status to Needs review. In this way, reviewers will know everything has been changed and can be reviewed again.
Releases should not be created after each review done here, since a review could ask for a change that is not backward compatible with the existing releases.
1. FILE: changelogify.module
For a new module that aims to be compatible with Drupal 10/11, it is expected it implements hooks as class methods as described in Support for object oriented hook implementations using autowired services → .
It would require increasing the minimum Drupal 10 version supported, but Drupal 10.1 is no longer supported.
/**
* @file
* Primary module hooks for Changelogify.
*/Drupal does not have primary and secondary hooks. Instead of that, it is preferable to use the usual description: “Hook implementations for the [module name] module”, where [module name] is the name of the module given in its .info.yml file.
2. FILE: src/EventManager.php
/**
* The entity type manager.
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The current user.
*/
protected AccountProxyInterface $currentUser;
/**
* The time service.
*/
protected TimeInterface $time;
/**
* Constructs an EventManager.
*/
public function __construct(
EntityTypeManagerInterface $entity_type_manager,
AccountProxyInterface $current_user,
TimeInterface $time
) {
$this->entityTypeManager = $entity_type_manager;
$this->currentUser = $current_user;
$this->time = $time;
}FILE: src/ReleaseGenerator.php
/**
* The entity type manager.
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The event manager.
*/
protected EventManagerInterface $eventManager;
/**
* The current user.
*/
protected AccountProxyInterface $currentUser;
/**
* The time service.
*/
protected TimeInterface $time;
/**
* Constructs a ReleaseGenerator.
*/
public function __construct(
EntityTypeManagerInterface $entity_type_manager,
EventManagerInterface $event_manager,
AccountProxyInterface $current_user,
TimeInterface $time
) {
$this->entityTypeManager = $entity_type_manager;
$this->eventManager = $event_manager;
$this->currentUser = $current_user;
$this->time = $time;
}FILE: src/Controller/DashboardController.php
/**
* The event manager.
*/
protected EventManagerInterface $eventManager;
/**
* Constructs a DashboardController.
*/
public function __construct(EventManagerInterface $event_manager)
{
$this->eventManager = $event_manager;
}FILE: src/Form/GenerateReleaseForm.php
/**
* The release generator.
*/
protected ReleaseGeneratorInterface $releaseGenerator;
/**
* Constructs a GenerateReleaseForm.
*/
public function __construct(ReleaseGeneratorInterface $release_generator)
{
$this->releaseGenerator = $release_generator;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
3. FILE: src/Entity/ChangelogifyEvent.php and src/Entity/ChangelogifyRelease.php
* @ContentEntityType(
Projects that are compatible with Drupal 10 or higher versions should use attributes instead of annotations. This means requiring at least Drupal 10.3, but this is not an issue, considering that the minimum supported Drupal version is now Drupal 10.4.9.
4. FILE: src/Form/ReleaseForm.php
$this->messenger()->addStatus($message);
The first argument passed to MessengerInterface::addError(), MessengerInterface::addMessage(), MessengerInterface::addStatus(), and MessengerInterface::addWarning() must be a translatable string which uses placeholders.
5. FILE: src/Form/SettingsForm.php
With Drupal 10 and Drupal 11, there is no longer need to use #default_value for each form element, when the parent class is ConfigFormBase: It is sufficient to use #config_target, as in the following code.
$form['image_toolkit'] = [
'#type' => 'radios',
'#title' => $this->t('Select an image processing toolkit'),
'#config_target' => 'system.image:toolkit',
'#options' => [],
];
Using that code, it is no longer needed to save the configuration values in the form submission handler: The parent class will take care of that.
For this change, it is necessary to require at least Drupal 10.3, but that is not an issue, since Drupal 10.2.x is no longer supported.
6. Fix the warnings/errors reported by PHP_CodeSniffer. (see attached changelogify-phpcs-issues.txt → )
NOTE: I would suggest enabling GitLab CI for the project, follow the Drupal Association .gitlab-ci.yml template and fix the PHP_CodeSniffer errors/warnings it reports.
Regarding point 2 in comment #4 📌 [D10/D11] Security advisory coverage application: Changelogify Needs review ,
2. There is No release on drupal.org.
A release is not required. Reviewers always verify the code directly from the branch.
Rest seems fine to me.
Please wait for other reviewers and Project Moderator to take a look and if everything goes fine, you will get the role.
Releases are not deleted after they are created. It is not possible to unpublish them either, since the form element to publish a release node is disabled.
1. FILE: lightgallery_formatter.libraries.yml and modules/lightgallery_formatter_preview/lightgallery_formatter_preview.libraries.yml
version: VERSION
VERSION is only used by Drupal core modules. Contributed modules should use a literal string that does not change with the Drupal core version a site is using.
2. FILE: src/LightgalleryPluginBase.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* Constructs a LightgalleryPluginBase object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
public function __construct(
array $configuration,
$plugin_id,
$plugin_definition,
EntityTypeManagerInterface $entity_type_manager,
) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->setConfiguration($configuration);
}FILE: src/Form/LightgalleryProfileForm.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The extension path resolver.
*
* @var \Drupal\Core\Extension\ExtensionPathResolver
*/
protected $extensionPathResolver;
/**
* The module extension list.
*
* @var \Drupal\Core\Extension\ModuleExtensionList
*/
protected $moduleExtensionList;
/**
* The app root path.
*
* @var string
*/
protected $appRoot;
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* The preview builder service (if available).
*
* @var \Drupal\lightgallery_formatter_preview\PreviewBuilder|null
*/
protected $previewBuilder;
/**
* The LightGallery plugin manager.
*
* @var \Drupal\lightgallery_formatter\LightgalleryPluginManager
*/
protected LightgalleryPluginManager $pluginManager;
/**
* Constructs a new LightgalleryProfileForm object.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Extension\ExtensionPathResolver $extension_path_resolver
* The extension path resolver.
* @param \Drupal\Core\Extension\ModuleExtensionList $module_extension_list
* The module extension list.
* @param string $app_root
* The app root path.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler.
* @param \Drupal\lightgallery_formatter\LightgalleryPluginManager $plugin_manager
* The LightGallery plugin manager.
*/
public function __construct(
EntityTypeManagerInterface $entity_type_manager,
ExtensionPathResolver $extension_path_resolver,
ModuleExtensionList $module_extension_list,
string $app_root,
ModuleHandlerInterface $module_handler,
LightgalleryPluginManager $plugin_manager,
) {
$this->entityTypeManager = $entity_type_manager;
$this->extensionPathResolver = $extension_path_resolver;
$this->moduleExtensionList = $module_extension_list;
$this->appRoot = $app_root;
$this->moduleHandler = $module_handler;
$this->pluginManager = $plugin_manager;
}FILE: modules/lightgallery_formatter_preview/src/PreviewBuilder.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The state service.
*
* @var \Drupal\Core\State\StateInterface
*/
protected $state;
/**
* The file URL generator.
*
* @var \Drupal\Core\File\FileUrlGeneratorInterface
*/
protected $fileUrlGenerator;
/**
* Constructs a PreviewBuilder object.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\State\StateInterface $state
* The state service.
* @param \Drupal\Core\File\FileUrlGeneratorInterface $file_url_generator
* The file URL generator.
*/
public function __construct(
EntityTypeManagerInterface $entity_type_manager,
StateInterface $state,
FileUrlGeneratorInterface $file_url_generator,
) {
$this->entityTypeManager = $entity_type_manager;
$this->state = $state;
$this->fileUrlGenerator = $file_url_generator;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
Rest seems fine to me.
Please wait for other reviewers and Project Moderator to take a look and if everything goes fine, you will get the role.
Reported changes needs to be committed in the review branch i.e. 1.0.x.
It would also be better not to create new branches: Reviewers could need to check again all the files, to understand which changes has been done in the new branch.
1. FILE: README.txt
Remove README.txt since README.md is present.
2. FILE: trace_mail_log.module
For a new module that aims to be compatible with Drupal 10/11, it is expected it implements hooks as class methods as described in Support for object oriented hook implementations using autowired services → .
It would require increasing the minimum Drupal 10 version supported, but Drupal 10.1 is no longer supported.
/**
* @file
* Module file for trace_mail_log.
*/The usual description for a .module file is “Hook implementations for the [module name] module”, where [module name] is the module name given in the .info.yml file.
3. FILE: src/MailManagerDecorator.php
/**
* The decorated mail manager.
*/
protected MailManagerInterface $innerMailManager;
/**
* The mail log service.
*/
protected MailLogService $mailLogService;
/**
* Constructs a MailManagerDecorator.
*
* @param \Drupal\Core\Mail\MailManagerInterface $inner_mail_manager
* The decorated mail manager.
* @param \Drupal\trace_mail_log\Service\MailLogService $mail_log_service
* The mail log service.
*/
public function __construct(
MailManagerInterface $inner_mail_manager,
MailLogService $mail_log_service,
) {
$this->innerMailManager = $inner_mail_manager;
$this->mailLogService = $mail_log_service;
}FILE: src/MailerDecorator.php
/**
* The decorated mailer service.
*/
protected MailerInterface $innerMailer;
/**
* The event dispatcher.
*/
protected EventDispatcherInterface $eventDispatcher;
/**
* The messenger service.
*/
protected MessengerInterface $messenger;
/**
* Constructs a MailerDecorator.
*
* @param \Drupal\symfony_mailer\MailerInterface $inner_mailer
* The decorated mailer service.
* @param \Symfony\Contracts\EventDispatcher\EventDispatcherInterface $event_dispatcher
* The event dispatcher.
* @param \Drupal\Core\Messenger\MessengerInterface $messenger
* The messenger service.
* @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
* The string translation service.
*/
public function __construct(
MailerInterface $inner_mailer,
EventDispatcherInterface $event_dispatcher,
MessengerInterface $messenger,
TranslationInterface $string_translation,
) {
$this->innerMailer = $inner_mailer;
$this->eventDispatcher = $event_dispatcher;
$this->messenger = $messenger;
$this->setStringTranslation($string_translation);
}FILE: src/Controller/DashboardController.php
/**
* The database connection.
*/
protected Connection $database;
/**
* The purge service.
*/
protected PurgeService $purgeService;
/**
* The date formatter service.
*/
protected DateFormatterInterface $dateFormatter;
/**
* Constructs a DashboardController.
*/
public function __construct(
Connection $database,
PurgeService $purge_service,
DateFormatterInterface $date_formatter,
ConfigFactoryInterface $config_factory,
) {
$this->database = $database;
$this->purgeService = $purge_service;
$this->dateFormatter = $date_formatter;
$this->configFactory = $config_factory;
}FILE: src/Controller/ExportController.php
/**
* The database connection.
*/
protected Connection $database;
/**
* The date formatter service.
*/
protected DateFormatterInterface $dateFormatter;
/**
* Constructs an ExportController.
*/
public function __construct(Connection $database, DateFormatterInterface $date_formatter) {
$this->database = $database;
$this->dateFormatter = $date_formatter;
}FILE: src/Controller/MailLogController.php
/**
* The database connection.
*/
protected Connection $database;
/**
* The file system service.
*/
protected FileSystemInterface $fileSystem;
/**
* The pager manager.
*/
protected PagerManagerInterface $pagerManager;
/**
* The date formatter service.
*/
protected DateFormatterInterface $dateFormatter;
/**
* Constructs a MailLogController.
*/
public function __construct(
Connection $database,
FileSystemInterface $file_system,
PagerManagerInterface $pager_manager,
DateFormatterInterface $date_formatter,
ConfigFactoryInterface $config_factory,
) {
$this->database = $database;
$this->fileSystem = $file_system;
$this->pagerManager = $pager_manager;
$this->dateFormatter = $date_formatter;
$this->configFactory = $config_factory;
}FILE: src/EventSubscriber/MailerEventSubscriber.php
/**
* The mail log service.
*/
protected MailLogService $mailLogService;
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* Constructs a MailerEventSubscriber.
*/
public function __construct(
MailLogService $mail_log_service,
ConfigFactoryInterface $config_factory,
) {
$this->mailLogService = $mail_log_service;
$this->configFactory = $config_factory;
}FILE: src/EventSubscriber/QueueEventSubscriber.php
/**
* The mail log service.
*/
protected MailLogService $mailLogService;
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* Constructs a QueueEventSubscriber.
*/
public function __construct(
MailLogService $mail_log_service,
ConfigFactoryInterface $config_factory,
) {
$this->mailLogService = $mail_log_service;
$this->configFactory = $config_factory;
}FILE: src/Form/DeleteAllForm.php
/**
* The purge service.
*/
protected PurgeService $purgeService;
/**
* Constructs a DeleteAllForm.
*/
public function __construct(PurgeService $purge_service) {
$this->purgeService = $purge_service;
}FILE: src/Form/DeleteEntryForm.php
/**
* The purge service.
*/
protected PurgeService $purgeService;
/**
* The database connection.
*/
protected Connection $database;
/**
* The date formatter service.
*/
protected DateFormatterInterface $dateFormatter;
/**
* Constructs a DeleteEntryForm.
*/
public function __construct(PurgeService $purge_service, Connection $database, DateFormatterInterface $date_formatter) {
$this->purgeService = $purge_service;
$this->database = $database;
$this->dateFormatter = $date_formatter;
}FILE: src/Service/MailLogService.php
/**
* The database connection.
*/
protected Connection $database;
/**
* The file system service.
*/
protected FileSystemInterface $fileSystem;
/**
* The logger.
*/
protected LoggerInterface $logger;
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* The time service.
*/
protected TimeInterface $time;
/**
* The UUID service.
*/
protected UuidInterface $uuid;
/**
* Constructs a MailLogService.
*/
public function __construct(
Connection $database,
FileSystemInterface $file_system,
LoggerChannelFactoryInterface $logger_factory,
ConfigFactoryInterface $config_factory,
TimeInterface $time,
UuidInterface $uuid,
) {
$this->database = $database;
$this->fileSystem = $file_system;
$this->logger = $logger_factory->get('trace_mail_log');
$this->configFactory = $config_factory;
$this->time = $time;
$this->uuid = $uuid;
}FILE: src/Service/PurgeService.php
/**
* The database connection.
*/
protected Connection $database;
/**
* The file system service.
*/
protected FileSystemInterface $fileSystem;
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* The logger.
*/
protected LoggerInterface $logger;
/**
* Constructs a PurgeService.
*/
public function __construct(
Connection $database,
FileSystemInterface $file_system,
ConfigFactoryInterface $config_factory,
LoggerChannelFactoryInterface $logger_factory,
) {
$this->database = $database;
$this->fileSystem = $file_system;
$this->configFactory = $config_factory;
$this->logger = $logger_factory->get('trace_mail_log');
}FILE: src/Service/WebformEmailStatusService.php
/**
* The database connection.
*/
protected Connection $database;
/**
* The memory cache service.
*/
protected CacheBackendInterface $memoryCache;
/**
* Constructs a WebformEmailStatusService.
*
* @param \Drupal\Core\Database\Connection $database
* The database connection.
* @param \Drupal\Core\Cache\CacheBackendInterface $memory_cache
* The memory cache service.
*/
public function __construct(Connection $database, CacheBackendInterface $memory_cache) {
$this->database = $database;
$this->memoryCache = $memory_cache;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
4. FILE: src/Controller/DashboardController.php, src/Controller/ExportController.php
Since that class does not use methods from the parent class, it does not need to use ControllerBase as parent class. Controllers do not need to have a parent class; as long as they implement \Drupal\Core\DependencyInjection\ContainerInjectionInterface, they are fine.
5. FILE: src/Form/SettingsForm.php
ConfigFormBase::__construct() needs to be called. Since its parameters changed in Drupal 10.2, the project cannot be compatible with all the Drupal 10 releases and Drupal 11; it needs to require at least Drupal 10.2.
With Drupal 10 and Drupal 11, there is no longer need to use #default_value for each form element, when the parent class is ConfigFormBase: It is sufficient to use #config_target, as in the following code.
$form['image_toolkit'] = [
'#type' => 'radios',
'#title' => $this->t('Select an image processing toolkit'),
'#config_target' => 'system.image:toolkit',
'#options' => [],
];
Using that code, it is no longer needed to save the configuration values in the form submission handler: The parent class will take care of that.
For this change, it is necessary to require at least Drupal 10.3, but that is not an issue, since Drupal 10.2.x is no longer supported.
FILE: bulk_paragraphs.module
Since the module is declared compatible with Drupal 10.2, removing the function implementing the hook is not possible. The function still needs to be defined, but it calls the method defined by the service class, as described in Support for object oriented hook implementations using autowired services → (Backwards-compatible Hook implementation for Drupal versions from 10.1 to 11.0).
1. 1.1.1 is a wrong name for a branch and should be removed. Release branch names always end with the literal .x as described in
Release branches →
.
2. Fix the warnings/errors reported by PHP_CodeSniffer. (See attached basic_ads-phpcs-issue.txt → )
NOTE: I would suggest enabling GitLab CI for the project, follow the Drupal Association .gitlab-ci.yml template and fix the PHP_CodeSniffer errors/warnings it reports.
Remember to change status, when the project is ready to be reviewed. In this queue, projects are only reviewed when the status is Needs review.
Without content to review, this request can only be closed. Feel free to re-open it after posting content on drupal.org, committing code in a project, or creating a merge request for a project, for example.
Without content to review, this request can only be closed. Feel free to re-open it after posting content on drupal.org, committing code in a project, or creating a merge request for a project, for example.
Without content to review, this request can only be closed. Feel free to re-open it after posting content on drupal.org, committing code in a project, or creating a merge request for a project, for example.
Without content to review, this request can only be closed. Feel free to re-open it after posting content on drupal.org, committing code in a project, or creating a merge request for a project, for example.
Without content to review, this request can only be closed. Feel free to re-open it after posting content on drupal.org, committing code in a project, or creating a merge request for a project, for example.
I am closing this issue since there have not been replies to my previous comment, where I asked for the complete stack trace information, after more than five weeks.
1. main is a wrong name for a branch and should be removed. Release branch names always end with the literal .x as described in
Release branches →
.
main will be a supported branch in future, but for the moment it is better not to use it. It is not wrong, but it is not completely supported on drupal.org.
2. FILE: bulk_paragraphs.module
For a new module that aims to be compatible with Drupal 10/11, it is expected it implements hooks as class methods as described in Support for object oriented hook implementations using autowired services → .
/**
* @file
* Main module file for the Bulk Paragraphs module.
*/The usual description for a .module file is “Hook implementations for the [module name] module”, where [module name] is the module name given in the .info.yml file.
I have confirmed the account based on module project contribution.
I have published 🐛 BigPipe placeholders with identical IDs are not all replaced Active and confirmed the account.
Rest seems fine to me.
Please wait for other reviewers and Project Moderator to take a look and if everything goes fine, you will get the role.
Remember to change status, when the project is ready to be reviewed. In this queue, projects are only reviewed when the status is Needs review.
Rest seems fine to me.
Please wait for other reviewers and Project Moderator to take a look and if everything goes fine, you will get the role.
1. main is a wrong name for a branch and should be removed. Release branch names always end with the literal .x as described in
Release branches →
.
main will be a supported branch in future, but for the moment it is better not to use it.
2. FILE: editor_advanced_table.info.yml
# Information added by Drupal.org packaging script on 2025-11-23
version: '1.0.0'
project: 'editor_advanced_table'
datestamp: 1763874920Remove these lines from the info file, it will be added by drupal.org packaging automatically.
1. master is a wrong name for a branch and should be removed. Release branch names always end with the literal .x as described in
Release branches →
.
2. FILE: site_config.info.yml, modules/site_config_jsonapi/site_config_jsonapi.info.yml, modules/site_config_rest/site_config_rest.info.yml
package: Custom
This line is used by custom modules created for specific sites. It is not a package name used for projects hosted on drupal.org.
3. FILE: site_config.info.yml
core_version_requirement: ^9 || ^10 || ^11
FILE: modules/site_config_jsonapi/site_config_jsonapi.info.yml, modules/site_config_rest/site_config_rest.info.yml
core_version_requirement: ^9 || ^10
A new project should not declare itself compatible with a Drupal release that is no longer supported. No site should be using Drupal 8 nor Drupal 9, and people should not be encouraged to use those Drupal releases.
4. FILE: src/SiteConfigPluginBase.php, src/Service/SiteConfigService.php, modules/site_config_jsonapi/src/Resource/SiteConfigBaseResource.php
\Drupal::logger('site_config')->error($e->getMessage());
The $message parameter passed to the LoggerInterface methods must be a literal string that uses placeholders. It's not a translatable string returned from t()/$this->t(), a string concatenation, a value returned from a function/method, nor a variable containing an exception object.
5. Fix the warnings/errors reported by PHP_CodeSniffer.
Note: I would suggest enabling GitLab CI for the project, follow the Drupal Association .gitlab-ci.yml template and fix the PHP_CodeSniffer errors/warnings it reports.
phpcs --standard=Drupal,DrupalPractice --extensions=php,module,inc,install,test,profile,theme,info,txt,md,yml site_config/
FILE: site_config/README.md
--------------------------------------------------------------------------------
FOUND 4 ERRORS AND 7 WARNINGS AFFECTING 10 LINES
--------------------------------------------------------------------------------
3 | WARNING | [ ] Line exceeds 80 characters; contains 274 characters
8 | WARNING | [ ] Line exceeds 80 characters; contains 102 characters
10 | WARNING | [ ] Line exceeds 80 characters; contains 91 characters
24 | WARNING | [ ] Line exceeds 80 characters; contains 115 characters
28 | WARNING | [ ] Line exceeds 80 characters; contains 151 characters
32 | WARNING | [ ] Line exceeds 80 characters; contains 85 characters
45 | ERROR | [ ] Missing short description in doc comment
75 | WARNING | [ ] Line exceeds 80 characters; contains 169 characters
75 | ERROR | [x] Perl-style comments are not allowed; use "// Comment" instead
77 | ERROR | [x] Perl-style comments are not allowed; use "// Comment" instead
79 | ERROR | [x] Perl-style comments are not allowed; use "// Comment" instead
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 3 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/src/Form/SettingsForm.php
--------------------------------------------------------------------------------
FOUND 7 ERRORS AFFECTING 7 LINES
--------------------------------------------------------------------------------
18 | ERROR | [ ] Missing short description in doc comment
23 | ERROR | [ ] Missing short description in doc comment
28 | ERROR | [ ] Missing short description in doc comment
29 | ERROR | [x] Do not append variable name "$blockManager" to the type declaration in a member variable comment
34 | ERROR | [ ] Missing short description in doc comment
47 | ERROR | [x] Missing function doc comment
108 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 3
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 3 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/src/SiteConfigPluginBase.php
--------------------------------------------------------------------------------
FOUND 20 ERRORS AND 5 WARNINGS AFFECTING 22 LINES
--------------------------------------------------------------------------------
23 | ERROR | [ ] Missing short description in doc comment
28 | ERROR | [ ] Missing short description in doc comment
33 | ERROR | [ ] Missing short description in doc comment
38 | ERROR | [ ] Missing short description in doc comment
43 | ERROR | [ ] Missing short description in doc comment
48 | ERROR | [ ] Missing short description in doc comment
68 | ERROR | [x] Missing function doc comment
82 | ERROR | [ ] Missing short description in doc comment
83 | ERROR | [ ] Description for the @return value is missing
92 | ERROR | [ ] Description for the @return value is missing
128 | WARNING | [ ] Line exceeds 80 characters; contains 90 characters
129 | WARNING | [ ] t() calls should be avoided in classes, use \Drupal\Core\StringTranslation\StringTranslationTrait and $this->t() instead
137 | WARNING | [ ] t() calls should be avoided in classes, use \Drupal\Core\StringTranslation\StringTranslationTrait and $this->t() instead
155 | WARNING | [ ] Line exceeds 80 characters; contains 94 characters
156 | WARNING | [ ] t() calls should be avoided in classes, use \Drupal\Core\StringTranslation\StringTranslationTrait and $this->t() instead
181 | ERROR | [x] Case breaking statements must be followed by a single blank line
198 | ERROR | [x] Expected 1 space before "|"; 0 found
198 | ERROR | [x] Expected 1 space after "|"; 0 found
210 | ERROR | [x] Space after closing parenthesis of function call prohibited
210 | ERROR | [x] Space found before semicolon; expected ");" but found ") ;"
218 | ERROR | [x] Expected 1 space before "|"; 0 found
218 | ERROR | [x] Expected 1 space after "|"; 0 found
228 | ERROR | [x] Expected 1 blank line after function; 2 found
240 | ERROR | [x] Case breaking statements must be followed by a single blank line
275 | ERROR | [x] Visibility must be declared on method "getOptions"
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 11 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/src/SiteConfigInterface.php
--------------------------------------------------------------------------------
FOUND 10 ERRORS AFFECTING 8 LINES
--------------------------------------------------------------------------------
24 | ERROR | [x] Expected 1 blank line after function; 2 found
51 | ERROR | [ ] Missing parameter comment
53 | ERROR | [ ] Description for the @return value is missing
55 | ERROR | [x] Expected 1 blank line after function; 2 found
61 | ERROR | [ ] Missing parameter comment
61 | ERROR | [ ] Missing parameter type
63 | ERROR | [ ] Description for the @return value is missing
65 | ERROR | [x] Visibility must be declared on method "getOptions"
65 | ERROR | [x] Expected 1 blank line after function; 0 found
66 | ERROR | [x] The closing brace for the interface must have an empty line before it
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 5 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/src/Service/SiteConfigService.php
--------------------------------------------------------------------------------
FOUND 21 ERRORS AND 4 WARNINGS AFFECTING 19 LINES
--------------------------------------------------------------------------------
8 | ERROR | [x] Missing class doc comment
10 | ERROR | [ ] Missing short description in doc comment
15 | ERROR | [ ] Missing short description in doc comment
16 | ERROR | [ ] Missing parameter comment
25 | ERROR | [ ] Description for the @return value is missing
37 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
47 | ERROR | [ ] Missing parameter comment
49 | ERROR | [ ] Description for the @return value is missing
62 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
70 | ERROR | [ ] Missing parameter comment
70 | ERROR | [ ] Missing parameter type
71 | ERROR | [ ] Missing parameter comment
71 | ERROR | [ ] Missing parameter type
72 | ERROR | [ ] Missing parameter comment
72 | ERROR | [ ] Missing parameter type
74 | ERROR | [ ] Description for the @return value is missing
86 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
94 | ERROR | [ ] Missing parameter comment
94 | ERROR | [ ] Missing parameter type
95 | ERROR | [ ] Missing parameter comment
95 | ERROR | [ ] Missing parameter type
96 | ERROR | [ ] Missing parameter comment
96 | ERROR | [ ] Missing parameter type
98 | ERROR | [ ] Description for the @return value is missing
110 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/modules/site_config_rest/site_config_rest.install
--------------------------------------------------------------------------------
FOUND 5 ERRORS AND 1 WARNING AFFECTING 5 LINES
--------------------------------------------------------------------------------
1 | ERROR | [x] The PHP open tag must be followed by exactly one blank line
2 | ERROR | [x] You must use "/**" style comments for a file comment
3 | ERROR | [x] No space found before comment text; expected "// /**" but found "///**"
6 | ERROR | [x] No space found before comment text; expected "// function site_config_rest_uninstall() {" but found "//function site_config_rest_uninstall() {"
8 | WARNING | [ ] There must be no blank line following an inline comment
8 | ERROR | [x] No space found before comment text; expected "// }" but found "//}"
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 5 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/modules/site_config_rest/src/Plugin/rest/resource/SiteConfigItemResource.php
--------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
--------------------------------------------------------------------------------
16 | ERROR | [x] Additional blank lines found at end of doc comment
19 | ERROR | [x] Missing function doc comment
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/modules/site_config_rest/src/Plugin/rest/resource/SiteConfigListResource.php
--------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
--------------------------------------------------------------------------------
16 | ERROR | [x] Additional blank lines found at end of doc comment
19 | ERROR | [x] Missing function doc comment
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/modules/site_config_rest/src/Plugin/rest/resource/SiteConfigResourceBase.php
--------------------------------------------------------------------------------
FOUND 9 ERRORS AFFECTING 7 LINES
--------------------------------------------------------------------------------
18 | ERROR | [x] Additional blank lines found at end of doc comment
21 | ERROR | [ ] Missing short description in doc comment
22 | ERROR | [x] Data types in @var tags need to be fully namespaced
26 | ERROR | [ ] Parameter $siteConfigService is not described in comment
80 | ERROR | [x] The abstract declaration must precede the visibility declaration
80 | ERROR | [x] Missing function doc comment
85 | ERROR | [ ] Missing parameter comment
85 | ERROR | [ ] Missing parameter type
87 | ERROR | [ ] Description for the @return value is missing
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 4 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/modules/site_config_jsonapi/src/Resource/SiteConfigBaseResource.php
--------------------------------------------------------------------------------
FOUND 20 ERRORS AND 5 WARNINGS AFFECTING 23 LINES
--------------------------------------------------------------------------------
5 | WARNING | [x] Unused use statement
11 | WARNING | [x] Unused use statement
12 | WARNING | [x] Unused use statement
13 | WARNING | [x] Unused use statement
30 | ERROR | [ ] Missing short description in doc comment
31 | ERROR | [x] Data types in @var tags need to be fully namespaced
35 | ERROR | [ ] Missing short description in doc comment
40 | ERROR | [ ] Missing short description in doc comment
45 | ERROR | [ ] Parameter $entityTypeManager is not described in comment
48 | ERROR | [ ] Missing parameter comment
49 | ERROR | [ ] Missing parameter comment
82 | ERROR | [x] The abstract declaration must precede the visibility declaration
95 | ERROR | [ ] Missing parameter comment
97 | ERROR | [ ] Description for the @return value is missing
109 | ERROR | [x] Case breaking statements must be followed by a single blank line
114 | ERROR | [x] Case breaking statements must be followed by a single blank line
124 | ERROR | [x] Expected newline after closing brace
124 | ERROR | [x] Use "elseif" in place of "else if"
139 | ERROR | [x] Expected 1 space after FUNCTION keyword; 0 found
146 | ERROR | [ ] Parameter $entity is not described in comment
149 | ERROR | [ ] Missing parameter comment
149 | ERROR | [ ] Doc comment for parameter $values does not match actual variable name $entity
151 | ERROR | [ ] Description for the @return value is missing
166 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
173 | ERROR | [x] Expected 1 newline at end of file; 2 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 12 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/modules/site_config_jsonapi/src/Resource/SiteConfigItemResource.php
--------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
--------------------------------------------------------------------------------
30 | ERROR | [x] Functions must not contain multiple empty lines in a row; found 2 empty lines
67 | ERROR | [x] Expected 1 newline at end of file; 2 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/modules/site_config_jsonapi/src/Resource/SiteConfigListResource.php
--------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------
65 | ERROR | [x] Expected 1 newline at end of file; 2 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: site_config/modules/site_config_jsonapi/site_config_jsonapi.routing.yml
--------------------------------------------------------------------------------
FOUND 0 ERRORS AND 2 WARNINGS AFFECTING 2 LINES
--------------------------------------------------------------------------------
6 | WARNING | Open page callback found, please add a comment before the line why there is no access restriction
12 | WARNING | Open page callback found, please add a comment before the line why there is no access restriction
--------------------------------------------------------------------------------
FILE: config_guardian.module
Since the module is declared compatible with Drupal 10.2, removing the function implementing the hook is not possible. The function still needs to be defined, but it calls the method defined by the service class, as described in Support for object oriented hook implementations using autowired services → (Backwards-compatible Hook implementation for Drupal versions from 10.1 to 11.0).
I have published 🐛 LogicException in Speech-To-Text Generation Explorer Active and confirmed the account.
Rest looks good to me.
Please wait for a Project Moderator to take a look and if everything goes fine, you will get the role.
Remember to change status, when the project is ready to be reviewed. In this queue, projects are only reviewed when the status is Needs review.
1 file change is pending
FILE: src/Plugin/EntitySplitterBase.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The entity field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
*/
protected EntityFieldManagerInterface $entityFieldManager;
/**
* Generic processor that abstracts common migration steps.
*
* @var \Drupal\entity_splitter\Processing\EntitySplitterProcessor
*/
protected EntitySplitterProcessor $processor;
/**
* The entity migration processor.
*
* @var \Drupal\entity_splitter\Processing\EntitySplitterProcessor
*/
protected EntitySplitterProcessor $entitySplitterProcessor;
/**
* The logger.
*
* @var \Drupal\Core\Logger\LoggerChannelInterface
*/
protected LoggerChannelInterface $logger;
/**
* Construct an entity migration base.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
* The entity field manager.
* @param \Drupal\entity_splitter\Processing\EntitySplitterProcessor $entity_splitter_processor
* The entity migration processor.
* @param \Drupal\Core\Logger\LoggerChannelInterface $logger
* The logger channel.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, EntitySplitterProcessor $entity_splitter_processor, LoggerChannelInterface $logger) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->entityFieldManager = $entity_field_manager;
$this->entitySplitterProcessor = $entity_splitter_processor;
$this->logger = $logger;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
Rest looks good to me.
Please wait for a Project Moderator to take a look and if everything goes fine, you will get the role.
Rest looks good to me.
Please wait for a Project Moderator to take a look and if everything goes fine, you will get the role.
1. FILE: README.md
The README file is missing the required sections → - Project name, Requirements, Installation, and Configuration.
2. FILE: README.txt
Remove README.txt since README.md is present.
3. FILE: event_to_calendar.info.yml
package: Custom
This line is used by custom modules created for specific sites. It is not a package name used for projects hosted on drupal.org.
4. FILE: event_to_calendar.module
For a new module that aims to be compatible with Drupal 10 and Drupal 11, I would rather implement hooks as class methods as described in
Support for object oriented hook implementations using autowired services →
.
It would require increasing the minimum Drupal 10 version supported, but Drupal 10.1 is no longer supported.
/**
* @file
* Contains event_to_calendar.module.
*/The usual description for a .module file is “Hook implementations for the [module name] module”, where [module name] is the module name given in the .info.yml file.
5. FILE: css/styles.css
#event-to-calendar-modal .modal-header button.close{
-webkit-appearance: none;
border: none;
background: none;
margin: 0;
padding: 0;
border-radius: 0px;
border-bottom: 1px solid #e5e5e5;
border-left: 1px solid #e5e5e5;
height: 2.625rem;
position: absolute;
right: 0;
top: 0;
transition: .25s;
width: 2.625rem;
}Code needs to be correctly indented. Drupal uses two spaces for indentation, not four spaces or tabs.
6. FILE: templates/event-to-calendar.html.twig
Twig code needs to be correctly indented. Drupal uses two spaces for indentation, not four spaces or tabs.
<button type="button" id="event-to-calendar-btn" class="btn btn-primary" data-toggle="modal" data-target="#event-to-calendar-modal">
Add to calendar
</button> <legend class="calendar-subscribe-label">Select the calendar service that you would like to link:</legend>/code>
<code> <span class="calendar-service-text">Google</span>
<span class="calendar-service-text">Exchange</span>
<span class="calendar-service-text">Apple</span>
<span class="calendar-service-text">Yahoo</span>
<span class="calendar-service-text">Outlook</span>
<span class="calendar-service-text">Android</span>
<span class="calendar-service-text">RSS</span>
<span class="calendar-service-text-inline">Excel</span>
<span class="calendar-service-text-inline">Other</span>
Strings shown in the user interface must be translatable. That holds true also for strings used in template files.
{# @todo: Add Event to Calendar modal make it through js file and make it work. #}
<script>
document.addEventListener('DOMContentLoaded', function () {
document.querySelector('#event-to-calendar-btn').addEventListener('click', function () {
document.querySelector('#event-to-calendar-modal').style.display = 'block';
});
document.querySelectorAll('#event-to-calendar-modal .close').forEach(function (closeBtn) {
closeBtn.addEventListener('click', function () {
document.querySelector('#event-to-calendar-modal').style.display = 'none';
});
});
});
</script>
{# @todo: Add Event to Calendar modal make it through css file and make it work. #}
<style>
/* Modal container */
.calendar-subscribe-modal {
background-color: #ffffff;
padding: 20px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); /* Soft shadow */
}
/* Modal header */
.calendar-subscribe-header {
position: relative;
color: #333;
font-size: 1.625rem;
font-weight: 700;
margin: 0;
}
.calendar-grid {
display: grid;
grid-template-columns: repeat(4, 1fr); /* 4 services per row */
justify-items: center;
text-align: center;
}
.calendar-subscribe-service {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border: 1px solid #e5e5e5;
min-width: -webkit-fill-available;
padding: 15px;
}
.calendar-subscribe-service:hover {
background-color: #f2f2f2;
}
.calendar-service-link {
text-decoration: none;
color: #000; /* You can adjust the color */
display: flex;
flex-direction: column;
align-items: center;
font-weight: normal;
font-size: 16px;
}
.calendar-service-image {
margin-bottom: 10px;
}
.calendar-service-text {
font-size: 18px;
}
.calendar-subscribe-label {
font-size: 16px;
}
#event-to-calendar-modal .modal-header button.close {
-webkit-appearance: none;
border: none;
background: none;
margin: 0;
padding: 0;
border-radius: 0;
border-bottom: 1px solid #e5e5e5;
border-left: 1px solid #e5e5e5;
height: 2.625rem;
position: absolute;
right: 0;
top: 0;
transition: 0.25s;
width: 2.625rem;
}
.calendar-service-link {
text-decoration: none;
display: flex;
align-items: center;
}
.calendar-subscribe-service-group {
width: 100%;
}
.calendar-service-image-inline {
margin-right: 10px;
}
.calendar-service-text-inline {
font-size: 18px;
display: inline-block;
}
@media (max-width: 767px) {
.calendar-subscribe-header{
font-size: 1.25rem !important;
}
.calendar-grid{
grid-template-columns: repeat(2, 1fr);
}
#event-to-calendar-modal .top-sm-auto
{
top: auto !important;
}
#event-to-calendar-modal .start-sm-auto{
left: auto !important;
}
#event-to-calendar-modal .translate-sm-none{
transform: none !important;
}
}
@media (max-width: 992px) {
.calendar-grid{
grid-template-columns: repeat(3, 1fr);
}
}
</style>Move all scripts (JavaScript) and styles (CSS) into a library and attach them. See the process here → .
6. FILE: src/Controller/EventToCalendarController.php
/**
* The configuration factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
public function __construct(ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $entity_type_manager) {
$this->configFactory = $config_factory;
$this->entityTypeManager = $entity_type_manager;
}The parent class already has properties and methods for the entity type manager, and the configuration object. There is no need to redefine properties for the same purpose; instead, the parent class methods should be used.
7. FILE: src/Plugin/Block/AddToCalendarBlock.php
* @Block(
Projects that are compatible with Drupal 10 or higher versions should use attributes instead of annotations. This means requiring at least Drupal 10.3, but this is not an issue, considering that the minimum supported Drupal version is now Drupal 10.4.9.
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The configuration factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/**
* Constructs a new AddToCalendarBlock.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The configuration factory.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ConfigFactoryInterface $config_factory) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->configFactory = $config_factory;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
8. Fix the warnings/errors reported by PHP_CodeSniffer.
Note: I would suggest enabling GitLab CI for the project, use the default phpcs.xml.dist file that comes from the GitLab Templates project, and fix what it reports for PHP_CodeSniffer errors/warnings. Chances are that the reported errors/warnings will be different, but it is what GitLab CI reports that should be fixed.
phpcs --standard=Drupal,DrupalPractice --extensions=php,module,inc,install,test,profile,theme,info,txt,md,yml event_to_calendar/
FILE: event_to_calendar/README.md
----------------------------------------------------------------------
FOUND 0 ERRORS AND 12 WARNINGS AFFECTING 12 LINES
----------------------------------------------------------------------
7 | WARNING | Line exceeds 80 characters; contains 328 characters
10 | WARNING | Line exceeds 80 characters; contains 89 characters
11 | WARNING | Line exceeds 80 characters; contains 89 characters
12 | WARNING | Line exceeds 80 characters; contains 122 characters
13 | WARNING | Line exceeds 80 characters; contains 90 characters
14 | WARNING | Line exceeds 80 characters; contains 92 characters
15 | WARNING | Line exceeds 80 characters; contains 88 characters
16 | WARNING | Line exceeds 80 characters; contains 84 characters
21 | WARNING | Line exceeds 80 characters; contains 93 characters
22 | WARNING | Line exceeds 80 characters; contains 88 characters
25 | WARNING | Line exceeds 80 characters; contains 183 characters
33 | WARNING | Line exceeds 80 characters; contains 112 characters
----------------------------------------------------------------------
FILE: event_to_calendar/src/Plugin/Block/AddToCalendarBlock.php
--------------------------------------------------------------------------------
FOUND 0 ERRORS AND 4 WARNINGS AFFECTING 4 LINES
--------------------------------------------------------------------------------
74 | WARNING | \Drupal calls should be avoided in classes, use dependency injection instead
96 | WARNING | Unused variable $start_date.
97 | WARNING | Unused variable $end_date.
98 | WARNING | Unused variable $location.
--------------------------------------------------------------------------------
FILE: event_to_calendar/src/Form/EventToCalendarConfigForm.php
--------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
--------------------------------------------------------------------------------
34 | WARNING | \Drupal calls should be avoided in classes, use dependency injection instead
--------------------------------------------------------------------------------
FILE: event_to_calendar/src/Controller/EventToCalendarController.php
--------------------------------------------------------------------------------
FOUND 3 ERRORS AND 2 WARNINGS AFFECTING 5 LINES
--------------------------------------------------------------------------------
140 | WARNING | \Drupal calls should be avoided in classes, use dependency injection instead
164 | WARNING | \Drupal calls should be avoided in classes, use dependency injection instead
257 | ERROR | String concat is not required here; use a single string instead
301 | ERROR | String concat is not required here; use a single string instead
345 | ERROR | String concat is not required here; use a single string instead
--------------------------------------------------------------------------------
1. main is a wrong name for a branch and should be removed. Release branch names always end with the literal .x as described in
Release branches →
.
main will be a supported branch in future, but for the moment it is better not to use it. It is not wrong, but it is not completely supported on drupal.org.
2. FILE: README.md
The README file is missing the required sections → - Requirements.
3. FILE: glidejs.module
/**
* @file
* This is the base module file.
*/The usual description for a .module file is “Hook implementations for the [module name] module”, where [module name] is the module name given in the .info.yml file.
4. FILE: templates/views-view-style-glide.html.twig
Twig code needs to be correctly indented. Drupal uses two spaces for indentation, not four spaces or tabs.
5. FILE: src/Plugin/views/style/GlideStyle.php
* @ViewsStyle(
Projects that are compatible with Drupal 10 or higher versions should use attributes instead of annotations. This means requiring at least Drupal 10.3, but this is not an issue, considering that the minimum supported Drupal version is now Drupal 10.4.9.
1. FILE: composer.json
"require": {
"drupal/core": "^10.2 || ^11"As a side note, it is not necessary to add the Drupal core requirements in the /composer.json/ file: The Drupal.org Composer Façade will add them.
2. FILE: config_guardian.module
For a new module that aims to be compatible with Drupal 10 and Drupal 11, I would rather implement hooks as class methods as described in Support for object oriented hook implementations using autowired services → .
/**
* @file
* Primary module hooks for Config Guardian module.
*/Drupal does not have primary and secondary hooks. Instead of that, it is preferable to use the usual description: “Hook implementations for the [module name] module”, where [module name] is the name of the module given in its .info.yml file.
3. FILE: src/Commands/ConfigGuardianCommands.php
/**
* The snapshot manager service.
*
* @var \Drupal\config_guardian\Service\SnapshotManagerService
*/
protected SnapshotManagerService $snapshotManager;
/**
* The config analyzer service.
*
* @var \Drupal\config_guardian\Service\ConfigAnalyzerService
*/
protected ConfigAnalyzerService $configAnalyzer;
/**
* The rollback engine service.
*
* @var \Drupal\config_guardian\Service\RollbackEngineService
*/
protected RollbackEngineService $rollbackEngine;
public function __construct(
SnapshotManagerService $snapshot_manager,
ConfigAnalyzerService $config_analyzer,
RollbackEngineService $rollback_engine,
) {
parent::__construct();
$this->snapshotManager = $snapshot_manager;
$this->configAnalyzer = $config_analyzer;
$this->rollbackEngine = $rollback_engine;
}FILE: src/Controller/ActivityController.php
/**
* The activity logger.
*/
protected ActivityLoggerService $activityLogger;
/**
* Constructs an ActivityController object.
*/
public function __construct(ActivityLoggerService $activity_logger) {
$this->activityLogger = $activity_logger;
}FILE: src/Controller/AjaxController.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The config analyzer.
*/
protected ConfigAnalyzerService $configAnalyzer;
/**
* Constructs an AjaxController object.
*/
public function __construct(
SnapshotManagerService $snapshot_manager,
ConfigAnalyzerService $config_analyzer,
) {
$this->snapshotManager = $snapshot_manager;
$this->configAnalyzer = $config_analyzer;
}FILE: src/Controller/AnalysisController.php
/**
* The config analyzer.
*/
protected ConfigAnalyzerService $configAnalyzer;
/**
* Constructs an AnalysisController object.
*/
public function __construct(ConfigAnalyzerService $config_analyzer) {
$this->configAnalyzer = $config_analyzer;
}FILE: src/Controller/ConfigSyncController.php
/**
* The config sync service.
*/
protected ConfigSyncService $configSync;
/**
* Constructs a ConfigSyncController object.
*/
public function __construct(ConfigSyncService $config_sync) {
$this->configSync = $config_sync;
}FILE: src/Controller/DashboardController.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The config analyzer.
*/
protected ConfigAnalyzerService $configAnalyzer;
/**
* The activity logger.
*/
protected ActivityLoggerService $activityLogger;
/**
* Constructs a DashboardController object.
*/
public function __construct(
SnapshotManagerService $snapshot_manager,
ConfigAnalyzerService $config_analyzer,
ActivityLoggerService $activity_logger,
) {
$this->snapshotManager = $snapshot_manager;
$this->configAnalyzer = $config_analyzer;
$this->activityLogger = $activity_logger;
}FILE: src/Controller/DependencyGraphController.php
/**
* The config analyzer.
*/
protected ConfigAnalyzerService $configAnalyzer;
/**
* Constructs a DependencyGraphController object.
*/
public function __construct(
ConfigAnalyzerService $config_analyzer,
) {
$this->configAnalyzer = $config_analyzer;
}FILE: src/Controller/SnapshotController.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* Constructs a SnapshotController object.
*/
public function __construct(SnapshotManagerService $snapshot_manager) {
$this->snapshotManager = $snapshot_manager;
}FILE: src/EventSubscriber/ConfigEventSubscriber.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The activity logger.
*/
protected ActivityLoggerService $activityLogger;
/**
* The settings service.
*/
protected SettingsService $settings;
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* Constructs a ConfigEventSubscriber object.
*/
public function __construct(
SnapshotManagerService $snapshot_manager,
ActivityLoggerService $activity_logger,
SettingsService $settings,
ConfigFactoryInterface $config_factory,
) {
$this->snapshotManager = $snapshot_manager;
$this->activityLogger = $activity_logger;
$this->settings = $settings;
$this->configFactory = $config_factory;
}FILE: src/Form/ConfigExportForm.php
/**
* The config sync service.
*/
protected ConfigSyncService $configSync;
/**
* The snapshot manager service.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The activity logger service.
*/
protected ActivityLoggerService $activityLogger;
/**
* Constructs a ConfigExportForm object.
*/
public function __construct(
ConfigSyncService $config_sync,
SnapshotManagerService $snapshot_manager,
ActivityLoggerService $activity_logger,
) {
$this->configSync = $config_sync;
$this->snapshotManager = $snapshot_manager;
$this->activityLogger = $activity_logger;
}FILE: src/Form/ConfigImportForm.php
/**
* The config sync service.
*/
protected ConfigSyncService $configSync;
/**
* Constructs a ConfigImportForm object.
*/
public function __construct(ConfigSyncService $config_sync) {
$this->configSync = $config_sync;
}FILE: src/Form/RollbackForm.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The rollback engine.
*/
protected RollbackEngineService $rollbackEngine;
/**
* The activity logger.
*/
protected ActivityLoggerService $activityLogger;
/**
* The snapshot data.
*/
protected ?array $snapshot = NULL;
/**
* Constructs a RollbackForm object.
*/
public function __construct(
SnapshotManagerService $snapshot_manager,
RollbackEngineService $rollback_engine,
ActivityLoggerService $activity_logger,
) {
$this->snapshotManager = $snapshot_manager;
$this->rollbackEngine = $rollback_engine;
$this->activityLogger = $activity_logger;
}FILE: src/Form/SnapshotCreateForm.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The activity logger.
*/
protected ActivityLoggerService $activityLogger;
/**
* Constructs a SnapshotCreateForm object.
*/
public function __construct(
SnapshotManagerService $snapshot_manager,
ActivityLoggerService $activity_logger,
) {
$this->snapshotManager = $snapshot_manager;
$this->activityLogger = $activity_logger;
}FILE: src/Form/SnapshotDeleteForm.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The activity logger.
*/
protected ActivityLoggerService $activityLogger;
/**
* Constructs a SnapshotDeleteForm object.
*/
public function __construct(
SnapshotManagerService $snapshot_manager,
ActivityLoggerService $activity_logger,
) {
$this->snapshotManager = $snapshot_manager;
$this->activityLogger = $activity_logger;
}FILE: src/Form/SnapshotImportForm.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The activity logger.
*/
protected ActivityLoggerService $activityLogger;
/**
* The rollback engine.
*/
protected RollbackEngineService $rollbackEngine;
/**
* Constructs a SnapshotImportForm object.
*/
public function __construct(
SnapshotManagerService $snapshot_manager,
ActivityLoggerService $activity_logger,
RollbackEngineService $rollback_engine,
) {
$this->snapshotManager = $snapshot_manager;
$this->activityLogger = $activity_logger;
$this->rollbackEngine = $rollback_engine;
}FILE: src/Service/ActivityLoggerService.php
/**
* The entity type manager.
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The current user.
*/
protected AccountProxyInterface $currentUser;
/**
* The request stack.
*/
protected RequestStack $requestStack;
/**
* The database connection.
*/
protected Connection $database;
/**
* The time service.
*/
protected TimeInterface $time;
/**
* The cache tags invalidator.
*/
protected CacheTagsInvalidatorInterface $cacheTagsInvalidator;
/**
* Constructs an ActivityLoggerService object.
*/
public function __construct(
EntityTypeManagerInterface $entity_type_manager,
AccountProxyInterface $current_user,
RequestStack $request_stack,
Connection $database,
TimeInterface $time,
CacheTagsInvalidatorInterface $cache_tags_invalidator,
) {
$this->entityTypeManager = $entity_type_manager;
$this->currentUser = $current_user;
$this->requestStack = $request_stack;
$this->database = $database;
$this->time = $time;
$this->cacheTagsInvalidator = $cache_tags_invalidator;
}FILE: src/Service/ConfigAnalyzerService.php
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* The active config storage.
*/
protected StorageInterface $activeStorage;
/**
* The sync config storage.
*/
protected StorageInterface $syncStorage;
/**
* The module handler.
*/
protected ModuleHandlerInterface $moduleHandler;
/**
* The config manager.
*/
protected ConfigManagerInterface $configManager;
/**
* Constructs a ConfigAnalyzerService object.
*/
public function __construct(
ConfigFactoryInterface $config_factory,
StorageInterface $active_storage,
StorageInterface $sync_storage,
ModuleHandlerInterface $module_handler,
ConfigManagerInterface $config_manager,
) {
$this->configFactory = $config_factory;
$this->activeStorage = $active_storage;
$this->syncStorage = $sync_storage;
$this->moduleHandler = $module_handler;
$this->configManager = $config_manager;
}FILE: src/Service/ConfigSyncService.php
/**
* The active config storage.
*/
protected StorageInterface $activeStorage;
/**
* The sync config storage.
*/
protected StorageInterface $syncStorage;
/**
* The config manager.
*/
protected ConfigManagerInterface $configManager;
/**
* The typed config manager.
*/
protected TypedConfigManagerInterface $typedConfigManager;
/**
* The lock backend.
*/
protected LockBackendInterface $lock;
/**
* The event dispatcher.
*/
protected EventDispatcherInterface $eventDispatcher;
/**
* The module handler.
*/
protected ModuleHandlerInterface $moduleHandler;
/**
* The module installer.
*/
protected ModuleInstallerInterface $moduleInstaller;
/**
* The theme handler.
*/
protected ThemeHandlerInterface $themeHandler;
/**
* The module extension list.
*/
protected ModuleExtensionList $moduleExtensionList;
/**
* The theme extension list.
*/
protected ThemeExtensionList $themeExtensionList;
/**
* The config analyzer service.
*/
protected ConfigAnalyzerService $configAnalyzer;
/**
* The activity logger service.
*/
protected ActivityLoggerService $activityLogger;
/**
* The snapshot manager service.
*/
protected SnapshotManagerService $snapshotManager;
/**
* Constructs a ConfigSyncService object.
*/
public function __construct(
StorageInterface $active_storage,
StorageInterface $sync_storage,
ConfigManagerInterface $config_manager,
TypedConfigManagerInterface $typed_config_manager,
LockBackendInterface $lock,
EventDispatcherInterface $event_dispatcher,
ModuleHandlerInterface $module_handler,
ModuleInstallerInterface $module_installer,
ThemeHandlerInterface $theme_handler,
ModuleExtensionList $module_extension_list,
ThemeExtensionList $theme_extension_list,
ConfigAnalyzerService $config_analyzer,
ActivityLoggerService $activity_logger,
SnapshotManagerService $snapshot_manager,
) {
$this->activeStorage = $active_storage;
$this->syncStorage = $sync_storage;
$this->configManager = $config_manager;
$this->typedConfigManager = $typed_config_manager;
$this->lock = $lock;
$this->eventDispatcher = $event_dispatcher;
$this->moduleHandler = $module_handler;
$this->moduleInstaller = $module_installer;
$this->themeHandler = $theme_handler;
$this->moduleExtensionList = $module_extension_list;
$this->themeExtensionList = $theme_extension_list;
$this->configAnalyzer = $config_analyzer;
$this->activityLogger = $activity_logger;
$this->snapshotManager = $snapshot_manager;
}FILE: src/Service/RollbackEngineService.php
/**
* The snapshot manager.
*/
protected SnapshotManagerService $snapshotManager;
/**
* The config analyzer.
*/
protected ConfigAnalyzerService $configAnalyzer;
/**
* The settings service.
*/
protected SettingsService $settings;
/**
* The config storage (active).
*/
protected StorageInterface $configStorage;
/**
* The sync config storage.
*/
protected StorageInterface $syncStorage;
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* The config manager.
*/
protected ConfigManagerInterface $configManager;
/**
* The event dispatcher.
*/
protected EventDispatcherInterface $eventDispatcher;
/**
* The lock backend.
*/
protected LockBackendInterface $lock;
/**
* The typed config manager.
*/
protected TypedConfigManagerInterface $typedConfigManager;
/**
* The module handler.
*/
protected ModuleHandlerInterface $moduleHandler;
/**
* The module installer.
*/
protected ModuleInstallerInterface $moduleInstaller;
/**
* The theme handler.
*/
protected ThemeHandlerInterface $themeHandler;
/**
* The string translation.
*/
protected TranslationInterface $stringTranslation;
/**
* The logger.
*
* @var \Psr\Log\LoggerInterface
*/
protected $logger;
/**
* Constructs a RollbackEngineService object.
*/
public function __construct(
SnapshotManagerService $snapshot_manager,
ConfigAnalyzerService $config_analyzer,
StorageInterface $config_storage,
StorageInterface $sync_storage,
ConfigFactoryInterface $config_factory,
ConfigManagerInterface $config_manager,
EventDispatcherInterface $event_dispatcher,
LockBackendInterface $lock,
TypedConfigManagerInterface $typed_config_manager,
ModuleHandlerInterface $module_handler,
ModuleInstallerInterface $module_installer,
ThemeHandlerInterface $theme_handler,
TranslationInterface $string_translation,
LoggerChannelFactoryInterface $logger_factory,
SettingsService $settings,
) {
$this->snapshotManager = $snapshot_manager;
$this->configAnalyzer = $config_analyzer;
$this->configStorage = $config_storage;
$this->syncStorage = $sync_storage;
$this->configFactory = $config_factory;
$this->configManager = $config_manager;
$this->eventDispatcher = $event_dispatcher;
$this->lock = $lock;
$this->typedConfigManager = $typed_config_manager;
$this->moduleHandler = $module_handler;
$this->moduleInstaller = $module_installer;
$this->themeHandler = $theme_handler;
$this->stringTranslation = $string_translation;
$this->logger = $logger_factory->get('config_guardian');
$this->settings = $settings;
}FILE: src/Service/SettingsService.php
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* Constructs a SettingsService object.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The config factory.
*/
public function __construct(ConfigFactoryInterface $config_factory) {
$this->configFactory = $config_factory;
}FILE: src/Service/SnapshotManagerService.php
/**
* The entity type manager.
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The active config storage.
*/
protected StorageInterface $configStorage;
/**
* The sync config storage.
*/
protected StorageInterface $syncStorage;
/**
* The config factory.
*/
protected ConfigFactoryInterface $configFactory;
/**
* The event dispatcher.
*/
protected EventDispatcherInterface $eventDispatcher;
/**
* The current user.
*/
protected AccountProxyInterface $currentUser;
/**
* The logger.
*
* @var \Psr\Log\LoggerInterface
*/
protected $logger;
/**
* The settings service.
*/
protected SettingsService $settings;
/**
* The database connection.
*/
protected Connection $database;
/**
* The UUID generator.
*/
protected UuidInterface $uuid;
/**
* The time service.
*/
protected TimeInterface $time;
/**
* The cache tags invalidator.
*/
protected CacheTagsInvalidatorInterface $cacheTagsInvalidator;
/**
* Constructs a SnapshotManagerService object.
*/
public function __construct(
EntityTypeManagerInterface $entity_type_manager,
StorageInterface $config_storage,
StorageInterface $sync_storage,
ConfigFactoryInterface $config_factory,
EventDispatcherInterface $event_dispatcher,
AccountProxyInterface $current_user,
LoggerChannelFactoryInterface $logger_factory,
SettingsService $settings,
Connection $database,
UuidInterface $uuid,
TimeInterface $time,
CacheTagsInvalidatorInterface $cache_tags_invalidator,
) {
$this->entityTypeManager = $entity_type_manager;
$this->configStorage = $config_storage;
$this->syncStorage = $sync_storage;
$this->configFactory = $config_factory;
$this->eventDispatcher = $event_dispatcher;
$this->currentUser = $current_user;
$this->logger = $logger_factory->get('config_guardian');
$this->settings = $settings;
$this->database = $database;
$this->uuid = $uuid;
$this->time = $time;
$this->cacheTagsInvalidator = $cache_tags_invalidator;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
4. FILE: src/Controller/ActivityController.php, src/Controller/DashboardController.php
Since that class does not use methods from the parent class, it does not need to use ControllerBase as parent class. Controllers do not need to have a parent class; as long as they implement \Drupal\Core\DependencyInjection\ContainerInjectionInterface, they are fine.
5. FILE: src/Form/SettingsForm.php
With Drupal 10 and Drupal 11, there is no longer need to use #default_value for each form element, when the parent class is ConfigFormBase: It is sufficient to use #config_target, as in the following code.
$form['image_toolkit'] = [
'#type' => 'radios',
'#title' => $this->t('Select an image processing toolkit'),
'#config_target' => 'system.image:toolkit',
'#options' => [],
];
Using that code, it is no longer needed to save the configuration values in the form submission handler: The parent class will take care of that.
For this change, it is necessary to require at least Drupal 10.3, but that is not an issue, since Drupal 10.2.x is no longer supported.
FILE: search_api_sqlite.permissions.yml
Remove empty file.
The typical path to confirm users usually involves reviewing content you created on this site. In this case, you just created this issue, so there is no content to review.
I am postponing this issue. After you posted some content on Drupal.org, you may want to add a comment to this issue to request a new review.
The 'confirmed' role is not required for helping out with translation.
To translate Drupal, locate the relevant language team(s) here;
https://localize.drupal.org/translate/languages
To translate the Drupal core, see. https://localize.drupal.org/translate/drupal_core
1. The project is missing a README.md file that follows the template suggested in README.md template → .
2. FILE: src/EntitySplitterActions.php
/**
* The plugin manager.
*
* @var \Drupal\entity_splitter\EntitySplitterManager
*/
private EntitySplitterManager $pluginManager;
/**
* The logger channel.
*
* @var \Drupal\Core\Logger\LoggerChannelInterface
*/
private LoggerChannelInterface $logger;
/**
* The file system.
*
* @var \Drupal\Core\File\FileSystemInterface
*/
private FileSystemInterface $fileSystem;
/**
* The YAML reader.
*
* @var \Drupal\entity_splitter\Mapping\YamlMappingReader
*/
private YamlMappingReader $yamlReader;
/**
* The field group mapper.
*
* @var \Drupal\entity_splitter\Mapping\FieldGroupMapper
*/
private FieldGroupMapper $fieldGroupMapper;
/**
* Constructs an entity splitter actions object.
*
* @param \Drupal\entity_splitter\EntitySplitterManager $plugin_manager
* The plugin manager.
* @param \Drupal\Core\File\FileSystemInterface $file_system
* The file system.
* @param \Drupal\entity_splitter\Mapping\YamlMappingReader $yaml_reader
* The yaml reader.
* @param \Drupal\entity_splitter\Mapping\FieldGroupMapper $field_group_mapper
* The field group mapper.
* @param \Drupal\Core\Logger\LoggerChannelInterface $logger
* The logger.
*/
public function __construct(EntitySplitterManager $plugin_manager, FileSystemInterface $file_system, YamlMappingReader $yaml_reader, FieldGroupMapper $field_group_mapper, LoggerChannelInterface $logger) {
$this->pluginManager = $plugin_manager;
$this->fileSystem = $file_system;
$this->yamlReader = $yaml_reader;
$this->fieldGroupMapper = $field_group_mapper;
$this->logger = $logger;
}
FILE: src/Commands/EntitySplitterCommands.php
/**
* The entity migration runner.
*
* @var \Drupal\entity_splitter\EntitySplitterActions
*/
protected EntitySplitterActions $actions;
/**
* Construct the entity migration commands.
*
* @param \Drupal\entity_splitter\EntitySplitterActions $actions
* The actions (run / migrate).
*/
public function __construct(EntitySplitterActions $actions) {
parent::__construct();
$this->actions = $actions;
}FILE: src/Mapping/FieldGroupMapper.php
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected ModuleHandlerInterface $moduleHandler;
/**
* The config factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected ConfigFactoryInterface $configFactory;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* Constructs a field group mapper.
*
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The config factory.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
public function __construct(
ModuleHandlerInterface $module_handler,
ConfigFactoryInterface $config_factory,
EntityTypeManagerInterface $entity_type_manager,
) {
$this->moduleHandler = $module_handler;
$this->configFactory = $config_factory;
$this->entityTypeManager = $entity_type_manager;
}FILE: src/Plugin/EntitySplitterBase.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The entity field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
*/
protected EntityFieldManagerInterface $entityFieldManager;
/**
* Generic processor that abstracts common migration steps.
*
* @var \Drupal\entity_splitter\Processing\EntitySplitterProcessor
*/
protected EntitySplitterProcessor $processor;
/**
* The entity migration processor.
*
* @var \Drupal\entity_splitter\Processing\EntitySplitterProcessor
*/
protected EntitySplitterProcessor $entitySplitterProcessor;
/**
* The logger.
*
* @var \Drupal\Core\Logger\LoggerChannelInterface
*/
protected LoggerChannelInterface $logger;
/**
* Construct an entity migration base.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
* The entity field manager.
* @param \Drupal\entity_splitter\Processing\EntitySplitterProcessor $entity_splitter_processor
* The entity migration processor.
* @param \Drupal\Core\Logger\LoggerChannelInterface $logger
* The logger channel.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, EntitySplitterProcessor $entity_splitter_processor, LoggerChannelInterface $logger) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->entityFieldManager = $entity_field_manager;
$this->entitySplitterProcessor = $entity_splitter_processor;
$this->logger = $logger;
}FILE: src/Plugin/QueueWorker/EntitySplitterDataMigrationQueue.php
/**
* The delay interval equal to 15 minutes.
*/
const int DELAY_INTERVAL = 900;
/**
* The entity type manager service.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The entity splitter actions.
*
* @var \Drupal\entity_splitter\EntitySplitterActions
*/
protected EntitySplitterActions $entitySplitterActions;
/**
* The entity splitter processor.
*
* @var \Drupal\entity_splitter\Processing\EntitySplitterProcessor
*/
protected EntitySplitterProcessor $entitySplitterProcessor;
/**
* The logger interface.
*
* @var \Psr\Log\LoggerInterface
*/
protected LoggerInterface $logger;
/**
* Constructs a new class instance.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin ID for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* Entity type manager service.
* @param \Drupal\entity_splitter\EntitySplitterActions $entity_splitter_actions
* Entity splitter actions.
* @param \Drupal\entity_splitter\Processing\EntitySplitterProcessor $entity_splitter_processor
* Entity splitter processor.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntitySplitterActions $entity_splitter_actions, EntitySplitterProcessor $entity_splitter_processor) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->entitySplitterActions = $entity_splitter_actions;
$this->entitySplitterProcessor = $entity_splitter_processor;
$this->logger = $this->getLogger('entity_splitter');
}FILE: src/Processing/EntitySplitterProcessor.php
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected EntityTypeManagerInterface $entityTypeManager;
/**
* The entity field manager.
*
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
*/
protected EntityFieldManagerInterface $entityFieldManager;
/**
* The module handler.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected ModuleHandlerInterface $moduleHandler;
/**
* The queue.
*
* @var \Drupal\Core\Queue\QueueInterface
*/
protected QueueInterface $queue;
/**
* The language manager.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected LanguageManagerInterface $languageManager;
/**
* The logger.
*
* @var \Drupal\Core\Logger\LoggerChannelInterface
*/
protected LoggerChannelInterface $logger;
/**
* Construct a processor.
*/
public function __construct(
EntityTypeManagerInterface $entity_type_manager,
EntityFieldManagerInterface $entity_field_manager,
ModuleHandlerInterface $module_handler,
QueueFactory $queue_factory,
LanguageManagerInterface $language_manager,
LoggerChannelInterface $logger,
) {
$this->entityTypeManager = $entity_type_manager;
$this->entityFieldManager = $entity_field_manager;
$this->moduleHandler = $module_handler;
$this->queue = $queue_factory->get('entity_splitter_field_data_migration');
$this->languageManager = $language_manager;
$this->logger = $logger;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
1. main is a wrong name for a branch and should be removed. Release branch names always end with the literal .x as described in
Release branches →
.
main will be a supported branch in future, but for the moment it is better not to use it. It is not wrong, but it is not completely supported on drupal.org.
2. FILE: LICENSE
Projects hosted on drupal.org are licensed under GPLv2+, the same license used from Drupal core. If you are licensing a project under a different license, it cannot he hosted on drupal.org. More details are given in Drupal Git Contributor Agreement & Repository Usage Policy → .
All code that is a derivative work of Drupal (typically PHP code, including but not limited to: core patches, modules, themes, etc) committed to Drupal.org's git repository is licensed as GPL version 2.0 and later (official short identifier: “GPL-2.0-or-later”). This means that the code is licensed under GPLv2, and there exists an option that allows downstream recipients to re-license the code to be under a later version of GPL.
For code licensed under GPLv3, see See I want to release my work under GPL version 3 or under GPL version 2-only. Can I do so and host it on Drupal.org? →
No. You can release your work under any GPL version 2 or later compatible license. However, you may only check it into Drupal's Git repositories if you are releasing it under the same license as Drupal itself, that is GPL version 2 or later, allowing users to choose between the terms of the GPL version 2 or the terms in any new versions as updated by the FSF. If you are unable or unwilling to do so, do not check it into a Drupal Git repository.
3. FILE: README.md
The README file is missing the required sections → - Requirements and Configuration.
4. FILE: README.txt
Remove README.txt since README.md is present.
5. FILE: basic_ads.module
/**
* @file
* Contains basic_ads.module.
*/The usual description for a .module file is “Hook implementations for the [module name] module”, where [module name] is the module name given in the .info.yml file.
6. FILE: css/basic_ads.css
Remove emptyy file.
7. FILE: js/ad-tracking.js and templates/node--basic-ad.html.twig
Code needs to be correctly indented. Drupal uses two spaces for indentation, not four spaces or tabs.
8. FILE: src/Form/BasicAdsSettingsForm.php
ConfigFormBase::__construct() needs to be called. Since its parameters changed in Drupal 10.2, the project cannot be compatible with all the Drupal 10 releases and Drupal 11; it needs to require at least Drupal 10.2.
With Drupal 10 and Drupal 11, there is no longer need to use #default_value for each form element, when the parent class is ConfigFormBase: It is sufficient to use #config_target, as in the following code.
$form['image_toolkit'] = [
'#type' => 'radios',
'#title' => $this->t('Select an image processing toolkit'),
'#config_target' => 'system.image:toolkit',
'#options' => [],
];
Using that code, it is no longer needed to save the configuration values in the form submission handler: The parent class will take care of that.
For this change, it is necessary to require at least Drupal 10.3, but that is not an issue, since Drupal 10.2.x is no longer supported.
FILE: file_access_via_webform.info.yml
dependencies:
- drupal:webform
The dependencies follow the format <project name>:<module name>. What used for the Webform module is not correct.
1. FILE: camera_capture.info.yml
package: Custom
This line is used by custom modules created for specific sites. It is not a package name used for projects hosted on drupal.org.
2. Fix the warnings/errors reported by PHP_CodeSniffer.
Note: I would suggest enabling GitLab CI for the project, follow the Drupal Association .gitlab-ci.yml template and fix the PHP_CodeSniffer errors/warnings it reports.
phpcs --standard=Drupal,DrupalPractice --extensions=php,module,inc,install,test,profile,theme,info,txt,md,yml camera_capture/
FILE: camera_capture/camera_capture.routing.yml
-------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------
7 | ERROR | [x] Expected 1 newline at end of file; 0 found
-------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
-------------------------------------------------------------------------------
FILE: camera_capture/camera_capture.info.yml
--------------------------------------------------------------------------------
FOUND 1 ERROR AND 1 WARNING AFFECTING 2 LINES
--------------------------------------------------------------------------------
1 | WARNING | [ ] Remove "version" from the info file, it will be added by drupal.org packaging automatically
6 | ERROR | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: camera_capture/src/Form/CameraCaptureForm.php
--------------------------------------------------------------------------------
FOUND 9 ERRORS AND 4 WARNINGS AFFECTING 12 LINES
--------------------------------------------------------------------------------
8 | WARNING | [ ] There must be no blank line following an inline comment
8 | ERROR | [x] Comments may not appear after statements
148 | ERROR | [ ] Doc comment short description must start with a capital letter
149 | ERROR | [ ] Doc comment short description must be on a single line, further text should be a separate paragraph
174 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
179 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
182 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
183 | ERROR | [x] TRUE, FALSE and NULL must be uppercase; expected "FALSE" but found "false"
189 | ERROR | [x] TRUE, FALSE and NULL must be uppercase; expected "FALSE" but found "false"
198 | ERROR | [x] TRUE, FALSE and NULL must be uppercase; expected "TRUE" but found "true"
211 | ERROR | [x] TRUE, FALSE and NULL must be uppercase; expected "FALSE" but found "false"
219 | ERROR | [x] TRUE, FALSE and NULL must be uppercase; expected "TRUE" but found "true"
233 | ERROR | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 7 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
I have confirmed the account based on module project contribution.
I have published 📌 Addok API URL migration Active and confirmed the account.
Remember to change status, when the project is ready to be reviewed. In this queue, projects are only reviewed when the status is Needs review.
I have published Media image field link to image file gives 404, sometimes → and Image field link to image file leads to 404 response, sometimes → , and confirmed the account.
Hello, and a warm welcome to the Drupal community!
I have published your comment on forum Unable to install new modules → and confirmed the account.
Here is a list of resources that will assist you in making helpful contributions:
@wouters_f I have updated the module to implement using "AI (Artificial Intelligence)" module and added it in ecosystem.
1. FILE: README.md
The README file is missing the required section → - Requirements.
2. FILE: secure_password_reset_log.module
/**
* @file
* Primary module hooks for secure_password_reset_log module.
*/Drupal does not have primary and secondary hooks. Instead of that, it is preferable to use the usual description: “Hook implementations for the [module name] module”, where [module name] is the name of the module given in its .info.yml file.
3. FILE: src/Controller/LogController.php
/**
* The database connection.
*
* @var \Drupal\Core\Database\Connection
*/
protected Connection $database;
/**
* The flood control service.
*
* @var \Drupal\Core\Flood\FloodInterface
*/
protected FloodInterface $flood;
/**
* The date formatter service.
*
* @var \Drupal\Core\Datetime\DateFormatterInterface
*/
protected DateFormatterInterface $dateFormatter;
/**
* The page cache kill switch.
*
* @var \Drupal\Core\PageCache\ResponsePolicy\KillSwitch
*/
protected KillSwitch $killSwitch;
/**
* Constructs a LogController object.
*
* @param \Drupal\Core\Database\Connection $database
* The database connection.
* @param \Drupal\Core\Flood\FloodInterface $flood
* The flood control service.
* @param \Drupal\Core\Datetime\DateFormatterInterface $dateFormatter
* The date formatter service.
* @param \Drupal\Core\PageCache\ResponsePolicy\KillSwitch $killSwitch
* The page cache kill switch.
*/
public function __construct(Connection $database, FloodInterface $flood, DateFormatterInterface $dateFormatter, KillSwitch $killSwitch) {
$this->database = $database;
$this->flood = $flood;
$this->dateFormatter = $dateFormatter;
$this->killSwitch = $killSwitch;
}FILE: src/EventSubscriber/PasswordResetSubscriber.php
/**
* The current user service.
*
* @var \Drupal\Core\Session\AccountProxyInterface
*/
protected AccountProxyInterface $currentUser;
/**
* The database connection.
*
* @var \Drupal\Core\Database\Connection
*/
protected Connection $database;
/**
* The flood control service.
*
* @var \Drupal\Core\Flood\FloodInterface
*/
protected FloodInterface $flood;
/**
* The config factory service.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected ConfigFactoryInterface $configFactory;
/**
* Constructs a new PasswordResetSubscriber object.
*
* @param \Drupal\Core\Session\AccountProxyInterface $current_user
* The current user service.
* @param \Drupal\Core\Database\Connection $database
* The database connection.
* @param \Drupal\Core\Flood\FloodInterface $flood
* The flood control service.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The config factory service.
* @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
* The string translation service.
*/
public function __construct(
AccountProxyInterface $current_user,
Connection $database,
FloodInterface $flood,
ConfigFactoryInterface $config_factory,
TranslationInterface $string_translation,
) {
$this->currentUser = $current_user;
$this->database = $database;
$this->flood = $flood;
$this->configFactory = $config_factory;
$this->setStringTranslation($string_translation);
}FILE: src/Form/ClearLogsForm.php
/**
* Database connection.
*
* @var \Drupal\Core\Database\Connection
*/
protected Connection $database;
/**
* Constructs the ClearLogsForm.
*/
public function __construct(Connection $database) {
$this->database = $database;
}FILE: src/Form/DeleteLogForm.php
/**
* Database connection.
*
* @var \Drupal\Core\Database\Connection
*/
protected Connection $database;
/**
* Constructs the DeleteLogForm.
*/
public function __construct(Connection $database) {
$this->database = $database;
}FILE: src/Plugin/views/field/DeleteLogLink.php
/**
* The current user account service.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $currentUser;
/**
* Constructs a new DeleteLogLink object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin ID for the plugin instance.
* @param mixed $plugin_definition
* The plugin definition.
* @param \Drupal\Core\Session\AccountInterface $current_user
* The current user account service.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountInterface $current_user) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->currentUser = $current_user;
}New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
4. FILE: src/Plugin/views/field/DeleteLogLink.php
* @ViewsField("secure_password_reset_log_delete_link")
FILE: src/Plugin/views/field/UserStatus.php
* @ViewsField("secure_password_reset_log_user_status")
Projects that are compatible with Drupal 10 or higher versions should use attributes instead of annotations.
5. Fix the warnings/errors reported by PHP_CodeSniffer.
Note: I would suggest enabling GitLab CI for the project, follow the Drupal Association .gitlab-ci.yml template and fix the PHP_CodeSniffer errors/warnings it reports.
phpcs --standard=Drupal,DrupalPractice --extensions=php,module,inc,install,test,profile,theme,info,txt,md,yml secure_password_reset_log/
FILE: secure_password_reset_log/secure_password_reset_log.info.yml
--------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------
7 | ERROR | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: secure_password_reset_log/README.md
-------------------------------------------------------------------------
FOUND 1 ERROR AND 3 WARNINGS AFFECTING 4 LINES
-------------------------------------------------------------------------
9 | WARNING | [ ] Line exceeds 80 characters; contains 266 characters
11 | WARNING | [ ] Line exceeds 80 characters; contains 168 characters
33 | WARNING | [ ] Line exceeds 80 characters; contains 113 characters
157 | ERROR | [x] Expected 1 newline at end of file; 0 found
-------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
-------------------------------------------------------------------------
FILE: secure_password_reset_log/config/install/secure_password_reset_log.settings.yml
--------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------
2 | ERROR | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: secure_password_reset_log/src/Form/ClearLogsForm.php
--------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
--------------------------------------------------------------------------------
70 | WARNING | Possible useless method overriding detected
--------------------------------------------------------------------------------
FILE: secure_password_reset_log/src/EventSubscriber/PasswordResetSubscriber.php
--------------------------------------------------------------------------------
FOUND 1 ERROR AND 2 WARNINGS AFFECTING 3 LINES
--------------------------------------------------------------------------------
119 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
179 | ERROR | [x] Expected 1 space before "?"; 2 found
182 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: secure_password_reset_log/secure_password_reset_log.module
--------------------------------------------------------------------------------
FOUND 2 ERRORS AND 1 WARNING AFFECTING 1 LINE
--------------------------------------------------------------------------------
14 | WARNING | [ ] Line exceeds 80 characters; contains 84 characters
14 | ERROR | [x] Comments may not appear after statements
14 | ERROR | [x] Inline comments must end in full-stops, exclamation marks, question marks, colons, or closing parentheses
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: secure_password_reset_log/secure_password_reset_log.routing.yml
--------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------
39 | ERROR | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: secure_password_reset_log/secure_password_reset_log.install
--------------------------------------------------------------------------------
FOUND 1 ERROR AND 1 WARNING AFFECTING 2 LINES
--------------------------------------------------------------------------------
1 | ERROR | [x] Missing file doc comment
3 | WARNING | [x] Unused use statement
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
1. The project is missing a README.md file that follows the template suggested in README.md template → .
2. Fix the warnings/errors reported by PHP_CodeSniffer.
Note: I would suggest enabling GitLab CI for the project, follow the Drupal Association .gitlab-ci.yml template and fix the PHP_CodeSniffer errors/warnings it reports.
phpcs --standard=Drupal,DrupalPractice --extensions=php,module,inc,install,test,profile,theme,info,txt,md,yml entity_add_another/
FILE: entity_add_another/entity_add_another.permissions.yml
--------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------
7 | ERROR | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: entity_add_another/entity_add_another.module
--------------------------------------------------------------------------------
FOUND 40 ERRORS AND 3 WARNINGS AFFECTING 41 LINES
--------------------------------------------------------------------------------
1 | ERROR | [x] Missing file doc comment
6 | WARNING | [x] Unused use statement
7 | WARNING | [x] Unused use statement
9 | ERROR | [x] There must be one blank line after the last USE statement; 2 found;
15 | ERROR | [ ] All functions defined in a module file must be prefixed with the module's name, found "ekc_add_another_help" but expected
| | "entity_add_another_ekc_add_another_help"
15 | ERROR | [x] Expected 1 blank line before function; 2 found
16 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
17 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 6
19 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
21 | ERROR | [x] Whitespace found at end of line
26 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
28 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
29 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 6
30 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
32 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
33 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
34 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 6
35 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
36 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
37 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
38 | ERROR | [x] Whitespace found at end of line
39 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
40 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
41 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
42 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
43 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
45 | WARNING | [ ] Line exceeds 80 characters; contains 85 characters
45 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
46 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
47 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
48 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
49 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
50 | ERROR | [x] Line indented incorrectly; expected 6 spaces, found 10
51 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
53 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
54 | ERROR | [x] Line indented incorrectly; expected 6 spaces, found 12
55 | ERROR | [x] Line indented incorrectly; expected 6 spaces, found 12
56 | ERROR | [x] Line indented incorrectly; expected 6 spaces, found 12
57 | ERROR | [x] Line indented incorrectly; expected 6 spaces, found 12
58 | ERROR | [x] Line indented incorrectly; expected 6 spaces, found 12
59 | ERROR | [x] Line indented incorrectly; expected 6 spaces, found 12
60 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 8
61 | ERROR | [x] Line indented incorrectly; expected 2 spaces, found 4
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 41 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: entity_add_another/config/schema/entity_add_another.schema.yml
--------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------
10 | ERROR | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: entity_add_another/src/Form/EntityAddAnotherSettingsForm.php
--------------------------------------------------------------------------------
FOUND 2 ERRORS AND 1 WARNING AFFECTING 3 LINES
--------------------------------------------------------------------------------
41 | ERROR | [x] Whitespace found at end of line
55 | ERROR | [x] Whitespace found at end of line
102 | WARNING | [ ] \Drupal calls should be avoided in classes, use dependency injection instead
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
FILE: entity_add_another/entity_add_another.info.yml
--------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------
6 | ERROR | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------