[3.0.x] Paragraph Group

Created on 6 August 2025, 7 days ago

Introduction

Paragraph Group can and should be an important contrib module for Drupal, particularly for the many Drupal sites now using the very popular Paragraphs module

Paragraph Group tidies up Drupal content editing pages, and so dramatically improves the user and editor experience when authoring content.

The module offers a new Accordion based widget for Paragraphs, facilitating better nesting and navigation for Paragraphs on edit pages. And it puts all fields into Field Groups. These two improvements convert busy or even messy edit pages into tidy, organized, navigable, well grouped field sets:

Relationship to other Contributed Modules

The content editing experience is still somewhat neglected in the Drupal ecosystem, so I feel that Paragraph Group is actually a vital Drupal contribution. Other modules in the Paragraphs ecosystem add great functionality like modal windows etc, but don't address fundamental Paragraphs complexity issues. And broader front end in-place editing and layout tools are great, but Paragraph Group strengthens the essential content architecture, coherence and control foundation that is necessary for those tools within the Admin Theme level.

Code and Security Concerns

I have taken every step to ensure my code is compliant with all relevant Drupal and industry standards, following the Drupal security application checklist carefully. The code is fully object oriented; all include or require statements have been replaced with Services accessed through dependency injection; the code is fully formatted using PHPCS; and the code is also fully reviewed with Claude Code.

I've also recently added complete PHPDoc and JSDoc notes to all my code functions to ensure maximum transparency and readability of code for any reviewer. So hopefully I've made this job as easy as possible for you!

All git commits, branches and work on this project is mine. So please see my project page for more info at:

https://www.drupal.org/project/paragraph_group

P.S. As a Drupal Developer and enthusiast since the Drupal 6 days in 2008, I have also examined some other modules in this queue, with some AI assistance. It can potentially be difficult for developers currently without security advisory approval like myself, to be forthright in reviews around security concerns, but please let me know if I can help out there as well. Please also feel free to raise any issues of concern for this module too, and I'll do my best to address them asap.

📌 Task
Status

Needs review

Component

module

Created by

🇦🇺Australia daniel.rosenkranz

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

  • Issue created by @daniel.rosenkranz
  • 🇮🇹Italy apaderno Brescia, 🇮🇹

    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, enable GitLab CI for the project, and fix what reported from the phpcs job. This help to fix most of what reviewers would report.
    • For the time this application is open, only your commits are allowed. No other people, including other maintainers/co-maintainers can make commits.
    • 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 won't be changed by this application.
    • Nobody else will get the permission to opt projects into security advisory policy. If there are other maintainers/co-maintainers who will to get that permission, they need to apply with a different module.
    • 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 Code Review Administrator before commenting on newly created applications. Code Review Administrators 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. The configuration used for these tools needs to be the same configuration used by GitLab CI, stored in the GitLab Templates repository.
    • 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

    1. FILE: paragraph_group.libraries.yml

      main:
        version: VERSION
      settings:
        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: paragraph_group.module

    /**
     * @file
     * Contains paragraph_group.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.

    /**
     * Implements hook_form_FORM_ID_alter().
     *
     * @param array $form
     *   The form array, passed by reference.
     * @param \Drupal\Core\Form\FormStateInterface $form_state
     *   The form state object.
     * @param string $form_id
     *   The form ID.
     */
    function paragraph_group_form_paragroup_config_form_alter(
    /**
     * Implements hook_form_FORM_ID_alter().
     *
     * @param array $form
     *   The form array, passed by reference.
     * @param \Drupal\Core\Form\FormStateInterface $form_state
     *   The form state object.
     * @param string $form_id
     *   The form ID.
     */
    function paragraph_group_form_system_themes_admin_form_alter(

    The description for this hook should also say for which form that hook is implemented, either by indicating that with the name of the class that implements the form (namespace included) or the form ID (which is usually indicated by getFormId()).

    3. FILE: src/Form/ParagroupConfigForm.php

      /**
       * Constructor.
       *
       * @param \Drupal\paragraph_group\Paragroup\ParagroupBatch $batch_obj
       *   The batch processing service.
       * @param \Drupal\paragraph_group\Paragroup\ParagroupFormData $form_data
       *   The form data service.
       */
      public function __construct(

    FILE: src/Paragroup/ParagroupBatch.php

      /**
       * Constructor.
       *
       * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
       *   The string translation service.
       * @param \Drupal\paragraph_group\Paragroup\ParagroupFormData $form_data
       *   The form data service.
       */
      public function __construct(

    FILE: src/Paragroup/ParagroupFormData.php

      /**
       * Constructor.
       *
       * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
       *   The string translation service.
       */
      public function __construct(TranslationInterface $string_translation) {

    The documentation comment for constructors is not mandatory anymore, If it is given, the description must be “Constructs a new [class name] object”, where [class name] includes the class namespace.

  • 🇦🇺Australia daniel.rosenkranz

    Thanks for your replies everyone. The fixes mentioned by @vishal.kadam should be fine, but I'm also setting up Gitlab CI as well as advised by @avpaderno. So I'll let you know when I've completed all the resulting fixes asap.

  • 🇦🇺Australia daniel.rosenkranz

    Hi all,

    I have now:

    1. Implemented Gitlab CI for my module, and duplicated it's PHPCS configuration in my local development environment.
    2. Fixed all issues noted by PHPCS. Commits at https://git.drupalcode.org/project/paragraph_group are now passing the PHPCS test in the Gitlab CI build pipeline.
    3. Also fixed the issues raised by Vishal Kadam above.

    So please let me know any further issues, and I'll do my best to address them asap. Appreciate your help.

Production build 0.71.5 2024