- Issue created by @lavanyatalwar
- 🇮🇳India vishal.kadam Mumbai
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 → .
- 🇮🇳India vishal.kadam Mumbai
- The following points are just a start and don't necessarily encompass all of the changes that may be necessary
1. FILE: ai_log_analysis.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. FILE: ai_log_analysis.install
// Drop the custom log table on uninstall. \Drupal::database()->schema()->dropTable('ai_log_analysis');
Drupal core automatically deletes the database tables defined by hook_schema() on uninstall.
3. FILE: ai_log_analysis.module
/** * @file * Contains hooks and custom logic for the ai_log_analysis 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.
- 🇮🇳India lavanyatalwar
@vishal.kadam Thank you for the review.
I've implemented the suggested changes.
Please take a look and let me know if anything else needs to be updated.
Thanks! - 🇮🇳India vishal.kadam Mumbai
Rest looks fine to me.
Please wait for a Project Moderator to take a look and if everything goes fine, you will get the role.
- Status changed to Needs work
about 1 month ago 4:30pm 29 August 2025 - 🇮🇹Italy apaderno Brescia, 🇮🇹
- The following points are just a start and don't necessarily encompass all of the changes that may be necessary
- A specific point may just be an example and may apply in other places
- A review is about code that does not follow the coding standards, contains possible security issue, or does not correctly use the Drupal API
- The single review points are not ordered, not even by importance
src/Controller/LogController.php
Since that class use a single method 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.A controller is not used to gather data. In those cases, a form is used.
$snippets_markup .= "<p><strong>" . $this->t('Message:') . "</strong> {$msg}</p>";
Instead of concatenating a translatable string with a string, it would be better to use a
t()
-placeholder.src/Form/LogAnalysisSettingsForm.php
$this->messenger()->addStatus($this->t('AI Log Analysis settings have been saved.')); parent::submitForm($form, $form_state);
A similar message is already output by the parent class.
- 🇮🇳India lavanyatalwar
Thank you for the review @avpaderno,
I’ve made the suggested changes, removed the redundant status message in the settings form, refactored the LogController to drop ControllerBase in favor of dependency injection, and updated the t() usage with placeholders.
Kindly have a look and let me know if anything else needs to be updated.
Thanks. - 🇷🇴Romania bbu23
Hi! Below you have my feedback:
- There are still 2 pending
DrupalPractice
warnings:FILE: /var/www/html/web/modules/contrib/ai_log_analysis/ai_log_analysis.module ------------------------------------------------------------------------------ FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE ------------------------------------------------------------------------------ 14 | WARNING | Unused variable $max_logs_per_type. ------------------------------------------------------------------------------ FILE: /var/www/html/web/modules/contrib/ai_log_analysis/ai_log_analysis.routing.yml ------------------------------------------------------------------------------------------------------------------ FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE ------------------------------------------------------------------------------------------------------------------ 15 | WARNING | Open page callback found, please add a comment before the line why there is no access restriction ------------------------------------------------------------------------------------------------------------------
-
ai_log_analysis.info.yml
: The module should be compatible with^10.2 || ^11
, since theai
module dependency's minimum Core requirement is10.2
. Is there a reason why this module is not yet compatible with Drupal 11?- The dependencies in
ai_log_analysis.info.yml
are prefixed withdrupal:
when the module is coming from core, otherwise they're prefixed with their own module name. For example, theai
module that is a dependency to your module is a contrib module, therefore the dependency should beai:ai
-
composer.json
should probably specify license"license": "GPL-2.0-or-later"
and you don't need to require the"drupal/core": "^10"
package. Would be nice to include support information as well. See Add a composer.json file → for more info.-
ai_log_analysis.install
: I'm not sure I understand the necessity of theai_log_analysis_install()
hook and what table iscustom_log
. It does not match with the description of the function, is it still needed?-
ai_log_analysis.module
: - For a new module that aims to be compatible with Drupal 10 and Drupal 11 (assuming that the core requirement will be changed), I would rather implement hooks as class methods as described in Support for object oriented hook implementations using autowired services → .- Fix the open page callback in
ai_log_analysis.routing.yml
also reported by PHPCS- Fix the
README.md
file. The markdown is a bit broken-
src/Command/ErrorLogAnalyzerCommand.php
:
--- I'd convert the definition of the Drush command from PHP Annotations to PHP Attributes as shown in Creating Custom Commands.
--- I'd use$this->io()
to interact with the output, especially for questions. See The io() system-
src/Form/LogAnalysisSettingsForm.php
: With Drupal 10 and Drupal 11, there is no longer need to use#default_value
for each form element, when the parent class isConfigFormBase
: 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' => [], ];
-
src/Logger/AiLogAnalyzerLogger.php
: should probably usestr_contains
instead ofstrpos