Manchester
Account created on 26 May 2009, over 15 years ago
#

Merge Requests

More

Recent comments

🇬🇧United Kingdom Eli-T Manchester

Updated Guzzle Client 6 to 7.

Updated text now Australian platform is no longer available.

🇬🇧United Kingdom Eli-T Manchester

This is a duplicate of 📌 Drupal 11 Compatibility Active which has some actual work done on it.

🇬🇧United Kingdom Eli-T Manchester

@quietone I've just tested this on Drupal 11.0.9 and can confirm the problem exists there too.

🇬🇧United Kingdom Eli-T Manchester

Actually setting the status to Active rather than Needs work as explicitly requested by @quietone in #54

🇬🇧United Kingdom Eli-T Manchester

Reopening.

Here is a video showing the issue starting from a Standard install of 10.3.9 on SimplyTest.me

https://www.youtube.com/watch?v=CZBmAEukp5g

🇬🇧United Kingdom Eli-T Manchester

If we address the PHPCS issue and folks falling foul of this confirm it works, let's get it merged and in a release - it's been hanging around long enough!

🇬🇧United Kingdom Eli-T Manchester

Thanks @davidwhthomas!

MR!21 is showing PHPCS failures so putting back to needs work.

https://git.drupalcode.org/issue/views_ef_fieldset-2497845/-/jobs/3481155

🇬🇧United Kingdom Eli-T Manchester

We came across this converting a site to multilingual - we had a limit in services.yml for /jsonapi/* routes but not /cy/jsonapi/*.

This patch fixes that issue.

(we're going to add a limit for the other language anway).

Thanks everyone!

🇬🇧United Kingdom Eli-T Manchester

eli-t made their first commit to this issue’s fork.

🇬🇧United Kingdom Eli-T Manchester

This looks good, moving to RTBC and adding credit

🇬🇧United Kingdom Eli-T Manchester

@viniciusrp can you please update the merge request instead of posting patches? That will run the CI.

🇬🇧United Kingdom Eli-T Manchester

@viniciusrp can you please update the merge request instead of posting patches? That will run the CI.

🇬🇧United Kingdom Eli-T Manchester

You're welcome @evilargest! Thanks for checking and letting me know 💙

🇬🇧United Kingdom Eli-T Manchester

Further to #10, in Drupal Slack #support channel, @godotislate pointed me towards \Drupal\views\Plugin\views\filter\LanguageFilter::access(), which is what stops the langcode exposed filter from showing.

🇬🇧United Kingdom Eli-T Manchester

Apologies, current MR conflicts with 8.x-1.x HEAD

🇬🇧United Kingdom Eli-T Manchester

@evilargest can you confirm if this is still an issue with the latest 8.x-1.x please?

🇬🇧United Kingdom Eli-T Manchester

Apologies - merge request now conflicts with HEAD of 8.x-1.x.

🇬🇧United Kingdom Eli-T Manchester

Marking as needs work as question in #6 unanswered, and patches should now be converted to merge requests.

🇬🇧United Kingdom Eli-T Manchester

Apologies, patch in #10 no longer applies.

Whilst I'm not opposed to the code quality improvements in this patch, they should be addressed in their own separate issues rather than here where reasonably practical.

🇬🇧United Kingdom Eli-T Manchester

Can you confirm if this is still an issue on HEAD of 8.x-1.x please?

🇬🇧United Kingdom Eli-T Manchester

These docblocks have now been removed elsewhere.

🇬🇧United Kingdom Eli-T Manchester

Thanks for all your work everyone 💙

🇬🇧United Kingdom Eli-T Manchester

Thanks everyone for your work on this. Let's convert the patch to a merge request.

🇬🇧United Kingdom Eli-T Manchester

The way I recreated the bug was just by using the standard profile and using views_ef_fieldset on it.
The langcode filter on that form, even though set to exposed, does not show on that form. Whilst this makes functional sense, I don't know the mechanism by which it is hidden at the moment.
It isn't represented in $form['#info']['filter-langcode'] in views_ef_fieldset_form_views_exposed_form_alter() the unlike all the other exposed filters. The alter function assumes it is, hence the PHP warning.

It would be interesting to know if this can happen with other exposed filters, but if it can, the fix in the MR should still work.

🇬🇧United Kingdom Eli-T Manchester

I think the fix in MR16 is the right fix, but it has been superseded by some of the recent code quality changes.

🇬🇧United Kingdom Eli-T Manchester

I managed to reliably recreate this on Drupal 11.0.5 PHP 8.3 in ddev with the following view

uuid: 9ed39921-eb39-45c8-9025-86ea582d1cca
langcode: en
status: true
dependencies:
  module:
    - node
    - user
_core:
  default_config_hash: d7p-wwJZ_Wmz1gnvla9jDtRsjOaWAhPoIoW9w3vo4R4
id: content
label: Content
module: node
description: 'Find and manage content.'
tag: default
base_table: node_field_data
base_field: nid
display:
  default:
    id: default
    display_title: Default
    display_plugin: default
    position: 0
    display_options:
      title: Content
      fields:
        node_bulk_form:
          id: node_bulk_form
          table: node
          field: node_bulk_form
          entity_type: node
          plugin_id: node_bulk_form
          label: ''
          exclude: false
          alter:
            alter_text: false
          element_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
        title:
          id: title
          table: node_field_data
          field: title
          entity_type: node
          entity_field: title
          plugin_id: field
          label: Title
          exclude: false
          alter:
            alter_text: false
          element_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          type: string
          settings:
            link_to_entity: true
        type:
          id: type
          table: node_field_data
          field: type
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: node
          entity_field: type
          plugin_id: field
          label: 'Content type'
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: true
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          click_sort_column: target_id
          type: entity_reference_label
          settings:
            link: false
          group_column: target_id
          group_columns: {  }
          group_rows: true
          delta_limit: 0
          delta_offset: 0
          delta_reversed: false
          delta_first_last: false
          multi_type: separator
          separator: ', '
          field_api_classes: false
        name:
          id: name
          table: users_field_data
          field: name
          relationship: uid
          entity_type: user
          entity_field: name
          plugin_id: field
          label: Author
          exclude: false
          alter:
            alter_text: false
          element_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          type: user_name
        status:
          id: status
          table: node_field_data
          field: status
          entity_type: node
          entity_field: status
          plugin_id: field
          label: Status
          exclude: false
          alter:
            alter_text: false
          element_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          type: boolean
          settings:
            format: custom
            format_custom_false: Unpublished
            format_custom_true: Published
        changed:
          id: changed
          table: node_field_data
          field: changed
          entity_type: node
          entity_field: changed
          plugin_id: field
          label: Updated
          exclude: false
          alter:
            alter_text: false
          element_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          type: timestamp
          settings:
            date_format: short
            custom_date_format: ''
            timezone: ''
            tooltip:
              date_format: long
              custom_date_format: ''
            time_diff:
              enabled: false
              future_format: '@interval hence'
              past_format: '@interval ago'
              granularity: 2
              refresh: 60
        langcode:
          id: langcode
          table: node_field_data
          field: langcode
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: node
          entity_field: langcode
          plugin_id: field_language
          label: Language
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: true
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          click_sort_column: value
          type: language
          settings:
            link_to_entity: false
            native_language: false
          group_column: value
          group_columns: {  }
          group_rows: true
          delta_limit: 0
          delta_offset: 0
          delta_reversed: false
          delta_first_last: false
          multi_type: separator
          separator: ', '
          field_api_classes: false
        operations:
          id: operations
          table: node
          field: operations
          relationship: none
          group_type: group
          admin_label: ''
          plugin_id: entity_operations
          label: Operations
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: true
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          destination: true
      pager:
        type: full
        options:
          pagination_heading_level: h4
          items_per_page: 50
          tags:
            next: 'Next ›'
            previous: '‹ Previous'
            first: '« First'
            last: 'Last »'
      exposed_form:
        type: basic
        options:
          submit_button: Filter
          reset_button: true
          reset_button_label: Reset
          exposed_sorts_label: 'Sort by'
          expose_sort_order: true
          sort_asc_label: Asc
          sort_desc_label: Desc
      access:
        type: perm
        options:
          perm: 'access content overview'
      cache:
        type: tag
      empty:
        area_text_custom:
          id: area_text_custom
          table: views
          field: area_text_custom
          plugin_id: text_custom
          empty: true
          content: 'No content available.'
      sorts: {  }
      arguments: {  }
      filters:
        title:
          id: title
          table: node_field_data
          field: title
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: node
          entity_field: title
          plugin_id: string
          operator: contains
          value: ''
          group: 1
          exposed: true
          expose:
            operator_id: title_op
            label: Title
            description: ''
            use_operator: false
            operator: title_op
            operator_limit_selection: false
            operator_list: {  }
            identifier: title
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
        type:
          id: type
          table: node_field_data
          field: type
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: node
          entity_field: type
          plugin_id: bundle
          operator: in
          value: {  }
          group: 1
          exposed: true
          expose:
            operator_id: type_op
            label: 'Content type'
            description: ''
            use_operator: false
            operator: type_op
            operator_limit_selection: false
            operator_list: {  }
            identifier: type
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
            reduce: false
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
        status:
          id: status
          table: node_field_data
          field: status
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: node
          entity_field: status
          plugin_id: boolean
          operator: '='
          value: '1'
          group: 1
          exposed: true
          expose:
            operator_id: ''
            label: Status
            description: ''
            use_operator: false
            operator: status_op
            operator_limit_selection: false
            operator_list: {  }
            identifier: status
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
          is_grouped: true
          group_info:
            label: 'Published status'
            description: ''
            identifier: status
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items:
              1:
                title: Published
                operator: '='
                value: '1'
              2:
                title: Unpublished
                operator: '='
                value: '0'
        langcode:
          id: langcode
          table: node_field_data
          field: langcode
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: node
          entity_field: langcode
          plugin_id: language
          operator: in
          value: {  }
          group: 1
          exposed: true
          expose:
            operator_id: langcode_op
            label: Language
            description: ''
            use_operator: false
            operator: langcode_op
            operator_limit_selection: false
            operator_list: {  }
            identifier: langcode
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
            reduce: false
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
        status_extra:
          id: status_extra
          table: node_field_data
          field: status_extra
          entity_type: node
          plugin_id: node_status
          operator: '='
          value: false
          group: 1
          expose:
            operator_limit_selection: false
            operator_list: {  }
      filter_groups:
        operator: AND
        groups:
          1: AND
      style:
        type: table
        options:
          grouping: {  }
          row_class: ''
          default_row_class: true
          columns:
            node_bulk_form: node_bulk_form
            title: title
            type: type
            name: name
            status: status
            changed: changed
            edit_node: edit_node
            delete_node: delete_node
            dropbutton: dropbutton
            timestamp: title
          default: changed
          info:
            node_bulk_form:
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            title:
              sortable: true
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            type:
              sortable: true
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            name:
              sortable: false
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: priority-low
            status:
              sortable: true
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            changed:
              sortable: true
              default_sort_order: desc
              align: ''
              separator: ''
              empty_column: false
              responsive: priority-low
            edit_node:
              sortable: false
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            delete_node:
              sortable: false
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            dropbutton:
              sortable: false
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            timestamp:
              sortable: false
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
          override: true
          sticky: true
          summary: ''
          empty_table: true
          caption: ''
          description: ''
      row:
        type: fields
      query:
        type: views_query
      relationships:
        uid:
          id: uid
          table: node_field_data
          field: uid
          admin_label: author
          plugin_id: standard
          required: true
      show_admin_links: false
      display_extenders: {  }
    cache_metadata:
      max-age: 0
      contexts:
        - 'languages:language_content'
        - 'languages:language_interface'
        - url
        - url.query_args
        - user
        - 'user.node_grants:view'
        - user.permissions
      tags: {  }
  page_1:
    id: page_1
    display_title: Page
    display_plugin: page
    position: 1
    display_options:
      display_extenders:
        views_ef_fieldset:
          views_ef_fieldset:
            enabled: true
            options:
              sort:
                root:
                  container_type: details
                  depth: '0'
                  description: ''
                  id: root
                  open: true
                  pid: ''
                  title: Filters
                  type: container
                  weight: '0'
                title:
                  depth: '1'
                  id: title
                  pid: root
                  type: filter
                  weight: '-10'
                type:
                  depth: '1'
                  id: type
                  pid: root
                  type: filter
                  weight: '-10'
                status:
                  depth: '1'
                  id: status
                  pid: root
                  type: filter
                  weight: '-10'
                langcode:
                  depth: '1'
                  id: langcode
                  pid: root
                  type: filter
                  weight: '-10'
                container-0:
                  container_type: details
                  depth: '1'
                  description: ''
                  id: container-0
                  open: false
                  pid: root
                  title: 'Container 0'
                  type: container
                  weight: '-9'
                submit:
                  depth: '2'
                  id: submit
                  pid: container-0
                  type: buttons
                  weight: '-11'
                container-1:
                  container_type: details
                  depth: '1'
                  description: ''
                  id: container-1
                  open: false
                  pid: root
                  title: 'Container 1'
                  type: container
                  weight: '-8'
                container-2:
                  container_type: details
                  depth: '1'
                  description: ''
                  id: container-2
                  open: false
                  pid: root
                  title: 'Container 2'
                  type: container
                  weight: '-7'
                container-3:
                  container_type: details
                  depth: '1'
                  description: ''
                  id: container-3
                  open: false
                  pid: root
                  title: 'Container 3'
                  type: container
                  weight: '-6'
                container-4:
                  container_type: details
                  depth: '1'
                  description: ''
                  id: container-4
                  open: false
                  pid: root
                  title: 'Container 4'
                  type: container
                  weight: '-5'
      path: admin/content/node
      menu:
        type: 'default tab'
        title: Content
        description: ''
        weight: -10
        menu_name: admin
        context: ''
      tab_options:
        type: normal
        title: Content
        description: 'Find and manage content'
        weight: -10
        menu_name: admin
    cache_metadata:
      max-age: 0
      contexts:
        - 'languages:language_content'
        - 'languages:language_interface'
        - url
        - url.query_args
        - user
        - 'user.node_grants:view'
        - user.permissions
      tags: {  }

After importing this and visiting

🇬🇧United Kingdom Eli-T Manchester

I'm reopening this because I think we need to take a pragmatic approach here.

Without adding $context to the FlysystemBridge class, we will continue to fill our logs up with PHP warnings on PHP 8.2 and later.

As @adam-vessey says in #6, the best place to fix this is upstream in the twistor/FlysystemStreamWrapper. However, the PR raised on that project has not had any response from the maintainers, and has no commits since 2019. I think it's wise to proceed on the assumption that will never be merged.

I appreciate we can add twistor/flysystem-stream-wrapper as an explicit package and then patch as outlined by @gold in #7 but that has the drawback that if flysystem is removed from a project later, twistor/flysystem-stream-wrapper has to be manually removed, which could be missed.

The argument to patch upstream is moot if that patch will never be accepted upstream.

Therefore I've opened a pull request to to add $context to this module's FlysystemBridge class. Note this is a different solution to the patch in #2, for the reasons discussed in #6.

🇬🇧United Kingdom Eli-T Manchester

eli-t made their first commit to this issue’s fork.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

7.x branch is no longer supported so closing as won't fix.

🇬🇧United Kingdom Eli-T Manchester

Closing because coding standards are being addressed on the 8.x branch in 📌 Use GitlabCI Active , and given the last release of the 7.x branch was in 2015 I think we should mark it as unsupported.

🇬🇧United Kingdom Eli-T Manchester

All CI now passes.

I would very much appreciate any review/manual testing from other users of this module. The automated tests are currently somewhat limited.

🇬🇧United Kingdom Eli-T Manchester

CI is now passing again with the exception of PHPStan, which is complaining about the following

 ------ ----------------------------------------------------------------------- 
  Line   src/ArrayDataItemIterator.php                                          
 ------ ----------------------------------------------------------------------- 
  18     Return type mixed of method                                            
         Drupal\views_ef_fieldset\ArrayDataItemIterator::getChildren() is not   
         covariant with tentative return type RecursiveIterator|null of method  
         RecursiveIterator::getChildren().                                      
         💡 Make it covariant, or use the #[\ReturnTypeWillChange] attribute    
            to temporarily suppress the error.                                  
  30     Return type mixed of method                                            
         Drupal\views_ef_fieldset\ArrayDataItemIterator::hasChildren() is not   
         covariant with tentative return type bool of method                    
         RecursiveIterator::hasChildren().                                      
         💡 Make it covariant, or use the #[\ReturnTypeWillChange] attribute    
            to temporarily suppress the error.                                  
 ------ ----------------------------------------------------------------------- 
🇬🇧United Kingdom Eli-T Manchester

The pipeline did pass a year ago, but rerunning it now results in failure at the build stage.

https://git.drupalcode.org/project/views_ef_fieldset/-/jobs/3058636

🇬🇧United Kingdom Eli-T Manchester

Running the tests locally shows deprecation warnings on Drupal 11 but not 10:

❰elliot.ward❙~/code/d11test/d11❱✔≻ ddev exec phpunit -c web/core/phpunit.xml.dist web/modules/contrib/jsonapi_filter_cache_tags/
HTML output directory sites/simpletest/browser_output is not a writable directory.

PHPUnit 10.5.36 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.3.8
Configuration: /var/www/html/web/core/phpunit.xml.dist

DD                                                                  2 / 2 (100%)

Time: 00:12.613, Memory: 4.00 MB

2 tests triggered 1 deprecation:

1) /var/www/html/vendor/symfony/error-handler/DebugClassLoader.php:341
Method "Symfony\Component\EventDispatcher\EventSubscriberInterface::getSubscribedEvents()" might add "array" as a native return type declaration in the future. Do the same in implementation "Drupal\jsonapi_filter_cache_tags\EventSubscriber\ResponseSubscriber" now to avoid errors or add an explicit @return annotation to suppress this message.

Triggered by:

* Drupal\Tests\jsonapi_filter_cache_tags\Functional\JsonApiFilterCacheTagsTest::testCacheTagCheckSums
  /var/www/html/web/modules/contrib/jsonapi_filter_cache_tags/tests/src/Functional/JsonApiFilterCacheTagsTest.php:142

* Drupal\Tests\jsonapi_filter_cache_tags\Functional\JsonApiFilterCacheTagsTest::testCacheTagHeaders
  /var/www/html/web/modules/contrib/jsonapi_filter_cache_tags/tests/src/Functional/JsonApiFilterCacheTagsTest.php:163
🇬🇧United Kingdom Eli-T Manchester

testNodeExemptedByIpAddress() now works locally but not in CI.

🇬🇧United Kingdom Eli-T Manchester

Also, phpunit is mandatory, but phpunit (next major) is not. We should consider making it so.

🇬🇧United Kingdom Eli-T Manchester

Further work needed.

  • testNodeExemptedByPath() works locally but not on CI.
  • testNodeExemptedByIpAddress() does not work at all - need a way to predict the IP address that a call to drupalGet() in a browser test will be received from, so we can put it in the maintenance exempt config.
🇬🇧United Kingdom Eli-T Manchester

OK, this was due to an actual bug in the module, see commit https://git.drupalcode.org/project/maintenance_exempt/-/commit/2db4a3c32...

Adding more tests.

🇬🇧United Kingdom Eli-T Manchester

Further work is needed - tests do not yet add exemptions.

It's also unclear why setting site into maintenance mode, then calling $this->assertSession() causes the tests to fail with the following issue

1) Drupal\Tests\maintenance_exempt\Functional\ExemptionsTest::testNodesNotAccessible
Exception: Deprecated function: preg_quote(): Passing null to parameter #1 ($str) of type string is deprecated
Drupal\Core\Path\PathMatcher->matchPath()() (Line: 82)


/var/www/html/web/core/lib/Drupal/Core/Test/HttpClientMiddleware/TestHttpClientMiddleware.php:55
/var/www/html/vendor/guzzlehttp/promises/src/Promise.php:209
/var/www/html/vendor/guzzlehttp/promises/src/Promise.php:158
/var/www/html/vendor/guzzlehttp/promises/src/TaskQueue.php:52
/var/www/html/vendor/guzzlehttp/promises/src/Promise.php:251
/var/www/html/vendor/guzzlehttp/promises/src/Promise.php:227
/var/www/html/vendor/guzzlehttp/promises/src/Promise.php:272
/var/www/html/vendor/guzzlehttp/promises/src/Promise.php:229
/var/www/html/vendor/guzzlehttp/promises/src/Promise.php:69
/var/www/html/vendor/guzzlehttp/guzzle/src/Client.php:189
/var/www/html/web/core/tests/Drupal/Tests/DrupalTestBrowser.php:139
/var/www/html/vendor/symfony/browser-kit/AbstractBrowser.php:369
/var/www/html/vendor/behat/mink-browserkit-driver/src/BrowserKitDriver.php:122
/var/www/html/vendor/behat/mink/src/Session.php:175
/var/www/html/web/core/tests/Drupal/Tests/UiHelperTrait.php:275
/var/www/html/web/modules/contrib/maintenance_exempt/tests/src/Functional/ExemptionsTest.php:86

ERRORS!
Tests: 2, Assertions: 8, Errors: 1.
🇬🇧United Kingdom Eli-T Manchester

eli-t created an issue.

🇬🇧United Kingdom Eli-T Manchester

eli-t made their first commit to this issue’s fork.

🇬🇧United Kingdom Eli-T Manchester

Everything compliant and mandatory.

Have discussed with @malcomio and agreed that aiming for compliance is the correct approach for this module rather than turning PHPStan/CSpell off.

Just need to actually test these changes now.

🇬🇧United Kingdom Eli-T Manchester

PHPStan issues also fixed.

🇬🇧United Kingdom Eli-T Manchester

Cspell now passes. PHPStan still to do.

🇬🇧United Kingdom Eli-T Manchester

Awesome - that's merged in. Let's get the two widget issues complete, update the documentation and get a new release out!

🇬🇧United Kingdom Eli-T Manchester

The following needs addressing:

  • Gitlab is running against D9/D10 - needs D11 and not D9
  • Cspell doesn't like all the test data
  • There are minor PHPCS issues
  • Tests fail in a weird way
🇬🇧United Kingdom Eli-T Manchester

This also seems to work with the additions to jsonapi_reference_field_widget_info_alter in Add select list widget Needs work and #3314975: Add radio buttons widget .

🇬🇧United Kingdom Eli-T Manchester

I think this is probably a good idea. Let's give it a try.

🇬🇧United Kingdom Eli-T Manchester

I have reverted the change directly on the 2.0.x branch.

🇬🇧United Kingdom Eli-T Manchester

Agrre that validation via pagination is prohibitive.

Let's back this out for now so we can release an alpha supporting Drupal 11.

Production build 0.71.5 2024