Problem/Motivation

Quoting myself from #3216089-27: Expose validation constraints (and validatability %) in Config Inspector UI and #3216089-28: Expose validation constraints (and validatability %) in Config Inspector UI:

An idea for a follow-up could be to distinguish between inherited constraints vs local constraints — that would make it clear that for example the _core key (which is present in both cdn.settings and media.settings's Drush output) actually is of the type _core_config_info — so adding a validation constraint there would fix it everywhere.

+

Another follow-up would be to map the FQCNs to the equivalent types:

  • \Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint would become PrimitiveType because of
     * @Constraint(
     *   id = "PrimitiveType",
     *   label = @Translation("Primitive type", context = "Validation")
     * )
    
  • \Drupal\cdn\Plugin\Validation\Constraint\CdnDomainConstraint would become CdnDomain because of
     * @Constraint(
     *   id = "CdnDomain",
     *   label = @Translation("CDN domain", context = "Validation"),
     * )
    
  • and so on
  • … but that's really just a nice-to-have compared to today, where this information is still painfully difficult to access.

Steps to reproduce

Proposed resolution

Remaining tasks

User interface changes

Before

After

Before

After

Before
$ vendor/bin/drush config:inspect --filter-keys=cdn.settings --detail --list-constraints
 ----------------------------------------- --------- ------------- ------- ----------------------------------------------------------------------------- 
  Key                                       Status    Validatable   Data    Validation constraints                                                       
 ----------------------------------------- --------- ------------- ------- ----------------------------------------------------------------------------- 
  cdn.settings                              Correct   36%           Valid                                                                                
   cdn.settings:                            Correct   NOT           Valid                                                                                
   cdn.settings:_core                       Correct   NOT           Valid                                                                                
   cdn.settings:_core.default_config_hash   Correct   NOT           Valid                                                                                
   cdn.settings:farfuture                   Correct   NOT           Valid                                                                                
   cdn.settings:farfuture.status            Correct   Validatable   Valid   Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint  
   cdn.settings:langcode                    Correct   NOT           Valid                                                                                
   cdn.settings:mapping                     Correct   NOT           Valid                                                                                
   cdn.settings:mapping.conditions          Correct   NOT           Valid                                                                                
   cdn.settings:mapping.domain              Correct   Validatable   Valid   Drupal\cdn\Plugin\Validation\Constraint\CdnDomainConstraint                  
                                                                            Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint  
   cdn.settings:mapping.type                Correct   NOT           Valid                                                                                
   cdn.settings:scheme                      Correct   Validatable   Valid   Drupal\cdn\Plugin\Validation\Constraint\CdnSchemeConstraint                  
                                                                            Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint  
   cdn.settings:status                      Correct   Validatable   Valid   Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint  
   cdn.settings:stream_wrappers             Correct   NOT           Valid                                                                                
   cdn.settings:stream_wrappers.0           Correct   Validatable   Valid   Drupal\cdn\Plugin\Validation\Constraint\CdnStreamWrapperConstraint           
                                                                            Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint  
 ----------------------------------------- --------- ------------- ------- ----------------------------------------------------------------------------- 
After
$ vendor/bin/drush config:inspect --filter-keys=cdn.settings --detail --list-constraints
 Legend for Data: 
  ✅❓  → Correct primitive type, detailed validation impossible.
  ✅✅  → Correct primitive type, passed all validation constraints.
 ----------------------------------------- --------- ------------- ------ ------------------------ 
  Key                                       Status    Validatable   Data   Validation constraints  
 ----------------------------------------- --------- ------------- ------ ------------------------ 
  cdn.settings                              Correct   36%           ✅❓                           
   cdn.settings:                            Correct   NOT           ✅❓                           
   cdn.settings:_core                       Correct   NOT           ✅❓                           
   cdn.settings:_core.default_config_hash   Correct   NOT           ✅❓                           
   cdn.settings:farfuture                   Correct   NOT           ✅❓                           
   cdn.settings:farfuture.status            Correct   Validatable   ✅✅   ↣ PrimitiveType: {  }   
   cdn.settings:langcode                    Correct   NOT           ✅❓                           
   cdn.settings:mapping                     Correct   NOT           ✅❓                           
   cdn.settings:mapping.conditions          Correct   NOT           ✅❓                           
   cdn.settings:mapping.domain              Correct   Validatable   ✅✅   CdnDomain: {  }         
                                                                           ↣ PrimitiveType: {  }   
   cdn.settings:mapping.type                Correct   NOT           ✅❓                           
   cdn.settings:scheme                      Correct   Validatable   ✅✅   CdnScheme: {  }         
                                                                           ↣ PrimitiveType: {  }   
   cdn.settings:status                      Correct   Validatable   ✅✅   ↣ PrimitiveType: {  }   
   cdn.settings:stream_wrappers             Correct   NOT           ✅❓                           
   cdn.settings:stream_wrappers.0           Correct   Validatable   ✅✅   CdnStreamWrapper: {  }  
                                                                           ↣ PrimitiveType: {  }   
 ----------------------------------------- --------- ------------- ------ ------------------------ 

API changes

N/A

Data model changes

N/A

Comments

Wim Leers created an issue. See original summary.

wim leers’s picture

Assigned: wim leers » Unassigned
Issue summary: View changes
Status: Active » Needs review
StatusFileSize
new10.27 KB
new142.63 KB
new144.01 KB
new243.91 KB
new215.12 KB
gábor hojtsy’s picture

Looks like a great improvement indeed!

wim leers’s picture

Issue summary: View changes
StatusFileSize
new10.26 KB
new838 bytes

For something more interesting, see $ vendor/bin/drush config:inspect --filter-keys=editor.editor.basic_html --detail --list-constraints's output after a fresh install (which made me refine the output for Drush because it was impossible to distinguish some things):

$ vendor/bin/drush config:inspect --filter-keys=editor.editor.basic_html --detail --list-constraints
 Legend for Data: 
  ✅❓  → Correct primitive type, detailed validation impossible.
  ✅✅  → Correct primitive type, passed all validation constraints.
 --------------------------------------------------------------- --------- ------------- ------ --------------------------------------------------------------------------------- 
  Key                                                             Status    Validatable   Data   Validation constraints                                                           
 --------------------------------------------------------------- --------- ------------- ------ --------------------------------------------------------------------------------- 
  editor.editor.basic_html                                        Correct   68%           ✅❓                                                                                    
   editor.editor.basic_html:                                      Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:_core                                 Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:_core.default_config_hash             Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:dependencies                          Correct   Validatable   ✅✅   ValidKeys: '<infer>'                                                             
   editor.editor.basic_html:dependencies.config                   Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:dependencies.config.0                 Correct   Validatable   ✅✅   NotBlank: {  }                                                                   
                                                                                                 ConfigExists: {  }                                                               
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:dependencies.module                   Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:dependencies.module.0                 Correct   Validatable   ✅✅   NotBlank: {  }                                                                   
                                                                                                 ExtensionName: {  }                                                              
                                                                                                 ExtensionExists: module                                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:editor                                Correct   Validatable   ✅✅   PluginExists:                                                                    
                                                                                                   manager: plugin.manager.editor                                                 
                                                                                                   interface: Drupal\editor\Plugin\EditorPluginInterface                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:format                                Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:image_upload                          Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:image_upload.directory                Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:image_upload.max_dimensions           Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:image_upload.max_dimensions.height    Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:image_upload.max_dimensions.width     Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:image_upload.max_size                 Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:image_upload.scheme                   Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:image_upload.status                   Correct   Validatable   ✅✅   ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:langcode                              Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:settings                              Correct   Validatable   ✅✅   CKEditor5EnabledConfigurablePlugins: {  }                                        
   editor.editor.basic_html:settings.plugins                      Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:settings.plugins.ckeditor5_heading    Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:settings.plugins.ckeditor5_heading.   Correct   Validatable   ✅✅   NotBlank:                                                                        
  enabled_headings                                                                                 message: 'Enable at least one heading, otherwise disable the Heading plugin.'  
   editor.editor.basic_html:settings.plugins.ckeditor5_heading.   Correct   Validatable   ✅✅   Choice:                                                                          
  enabled_headings.0                                                                               callback: '\Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading::validChoices'     
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.plugins.ckeditor5_heading.   Correct   Validatable   ✅✅   Choice:                                                                          
  enabled_headings.1                                                                               callback: '\Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading::validChoices'     
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.plugins.ckeditor5_heading.   Correct   Validatable   ✅✅   Choice:                                                                          
  enabled_headings.2                                                                               callback: '\Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading::validChoices'     
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.plugins.ckeditor5_heading.   Correct   Validatable   ✅✅   Choice:                                                                          
  enabled_headings.3                                                                               callback: '\Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading::validChoices'     
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.plugins.ckeditor5_heading.   Correct   Validatable   ✅✅   Choice:                                                                          
  enabled_headings.4                                                                               callback: '\Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading::validChoices'     
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.plugins.ckeditor5_heading.   Correct   Validatable   ✅✅   Choice:                                                                          
  enabled_headings.5                                                                               callback: '\Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading::validChoices'     
                                                                                                 ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.plugins.ckeditor5_list       Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:settings.plugins.ckeditor5_list.rev   Correct   Validatable   ✅✅   NotNull: {  }                                                                    
  ersed                                                                                          ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.plugins.ckeditor5_list.sta   Correct   Validatable   ✅✅   NotNull: {  }                                                                    
  rtIndex                                                                                        ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   NOT           ✅❓                                                                                    
  iting                                                                                                                                                                           
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   NOT           ✅❓                                                                                    
  iting.allowed_tags                                                                                                                                                              
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.0                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.1                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.10                                                                          SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.11                                                                          SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.12                                                                          SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.2                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.3                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.4                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.5                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.6                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.7                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.8                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.ckeditor5_sourceEd   Correct   Validatable   ✅✅   SourceEditingRedundantTags: {  }                                                 
  iting.allowed_tags.9                                                                           SourceEditingPreventSelfXssConstraint: {  }                                      
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5Element: {  }                                                         
   editor.editor.basic_html:settings.plugins.media_media          Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:settings.plugins.media_media.allow_   Correct   Validatable   ✅✅   NotNull: {  }                                                                    
  view_mode_override                                                                             ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:settings.toolbar                      Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:settings.toolbar.items                Correct   NOT           ✅❓                                                                                    
   editor.editor.basic_html:settings.toolbar.items.0              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.1              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.10             Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.11             Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.12             Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.13             Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.14             Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.2              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.3              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.4              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.5              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.6              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.7              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.8              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:settings.toolbar.items.9              Correct   Validatable   ✅✅   CKEditor5ToolbarItemConditionsMet: {  }                                          
                                                                                                 ↣ PrimitiveType: {  }                                                            
                                                                                                 ↣ CKEditor5ToolbarItem: {  }                                                     
   editor.editor.basic_html:status                                Correct   Validatable   ✅✅   ↣ PrimitiveType: {  }                                                            
   editor.editor.basic_html:uuid                                  Correct   Validatable   ✅✅   Uuid: {  }                                                                       
                                                                                                 ↣ PrimitiveType: {  }                                                            
 --------------------------------------------------------------- --------- ------------- ------ --------------------------------------------------------------------------------- 
wim leers’s picture

StatusFileSize
new29.97 KB

Here's a plain text file with the output I quoted in #4 — d.o's formatting makes it unusable 🫣

ronaldtebrake’s picture

Status: Needs review » Needs work

That drush output, how neat 😍

---

   private static function getPrintableConstraints(ConfigSchemaValidatability $validatability, string $property_path): array {
+    $all_constraints = $validatability->getConstraints($property_path);
+    $local_constraints = array_map(
+      fn (string $constraint_name, $constraints_options) => trim(Yaml::encode([$constraint_name => $constraints_options])),
+      array_keys($all_constraints['local']),
+      array_values($all_constraints['local'])
+    );
+    $inherited_constraints = array_map(
+      fn (string $constraint_name, $constraints_options) => "↣ " . trim(Yaml::encode([$constraint_name => $constraints_options])),
+      array_keys($all_constraints['inherited']),
+      array_values($all_constraints['inherited'])
+    );
+
+    return array_merge($local_constraints, $inherited_constraints);
     return array_map(
       fn (Constraint $constraint) => get_class($constraint),
       $validatability->getConstraints($property_path)

Think we can remove the return array_map at the end.

ronaldtebrake’s picture

Status: Needs work » Needs review
StatusFileSize
new10.27 KB
new422 bytes
wim leers’s picture

Thanks! 🫣 Dead code indeed :P

wim leers’s picture

Status: Needs review » Reviewed & tested by the community
Issue tags: +Pittsburgh2023

@Gábor Hojtsy gave me commit access at DrupalCon! 🤓😄

Let's ship this!

  • Wim Leers committed e4402156 on 2.1.x
    Issue #3364412 by Wim Leers, ronaldtebrake, Gábor Hojtsy: Improve...
wim leers’s picture

Status: Reviewed & tested by the community » Fixed

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.