Een hart voor de Drupal Community

Bij make it fly geloven we sterk in Drupal en Open Source software in het algemeen. We maken dagelijks gebruik van vele open source componenten en de vele Drupal modules die beschikbaar zijn. We dragen actief ons steentje bij aan de community door zelf patches, modules en documentatie te voorzien, daarnaast zijn enkele teamleden ook actief in de Drupal User Group vzw.

Een overzicht van onze bijdragen aan de Drupal community vind je terug op onze Drupal.org pagina. Naast het actief meerwerken aan de Drupal community, zetten we ook andere ontwikkelaars op weg door vragen te beantwoorden op Drupal Answers.

  1. Hide tocbot block if empty

    Fons

    I have been looking into this because it indeed would be an improvement to the module if no empty block:

    <div class="js-toc-block"></div>

    would be rendered.

    The only way to fix this, in my opinion, is to do a DOM check on the contentSelector if it has any headingSelectors and if not don't even bother rendering the div.

  2. Strip ? characters out of automatically generated id's

    Fons

    Problem/Motivation

    I've noted when checking the create automatic ids checkbox with heading selector h2, h3

    <h2>Is this a test?</h2>

    Would generate an id with a ? in it which is normally not allowed id format.

  3. Time-out in ContextUploader

    Brecht Ceyssens

    The only thing I want to prevent are timeouts and errors in our logs. These are caused by uploadAndMatchContextSync because it uses the wait method to check status of the (slow?) matching process on Smartling side.

    That's why I would split the functionality up in 2 steps/queues but keep all existing logic, that way we give Smartling the time it needs to finish processing without failing on our side:

    1. trigger uploadAndMatchContext, retrieve the processUid and create a new item in a separate queue
      • queue worker uses DelayedRequeueException instead of waiting in the PHP process itself
      • when process is finished, fetch all information using uploadAndMatchContext again and log messages
      • trigger (improved) uploadContextMissingResources

    The major difference it that the waiting part is not done in PHP but in a queue with the correct exceptions, that won't block the queue. Processing of other queue items will continue while waiting for slow ones.

    Part of my comment here https://www.drupal.org/project/tmgmt_smartling/issues/3546398 is related to this topic as well:

    I think uploading all of these assets one by one also makes the process incredibly slow. Why not use Guzzle http client instead of curl commands directly after which you could easily execute async upload commands for all of those assets: https://docs.guzzlephp.org/en/stable/quickstart.html#concurrent-requests

  4. Long translatable string in user interface translations

    Randal

    Hmm, after further investigation, setting this to a non-translatable data type also removes its config translatability. The question is, does this need to be translatable at all?

    If not: I feel like this patch is a valid fix, if not: we should find a different solution to store the excluded entities, perhaps in an array (sequence/mapping) rather than a long unbroken string?

  5. Long translatable string in user interface translations

    Randal

    Problem/Motivation

    Upon installing this module, the config item "notifications_widget.settings:excluded_entities" adds a long unbroken translatable string to the user interface translation.

    There are two problems with this:

    1. The user interface translation table gets stretched out, the left column being incredibly long leaving nearly no space for the content input on both Claro and Gin
    2. Config should not be translatable in the user interface translation, the translation is luckily not used anywhere, but it still shouldn't be in there.

    Steps to reproduce

    1. Install the module
    2. Visit the user interface translation page
    3. If the string isn't on the first page, look for the default value by searching for: "block,block_content_type"

    Proposed resolution

    We should change the data type from "text" (which is translatable) to "string" (which isn't).

    Data model changes

    (Ha, I get to use this heading for once) The "excluded_entities"-key in the "notifications_widget.settings"-config should be a non-translatable data type.

  6. JQuery downgrade

    Fons

    Hello thank you for the information.

    I just did a quick scan and I don't see any dependencies that are stated in the Sticky module (except for using the latest version of the Sticky library).

    {
        "type": "package",
        "package": {
            "name": "garand/sticky",
            "version": "1.0.4",
            "type": "drupal-library",
            "source": {
                "url": "https://github.com/garand/sticky.git",
                "type": "git",
                "reference": "1.0.4"
            }
        }
    },
    
  7. .is-active-li jumps from first to last item on touching the scroll

    Fons

    After a lot of debugging I think I found the issue.

    When I set

    options.headingsOffset = 1;

    in the tocbot-init.js file just before tocbot.init() everything works great. Looks like it gets passed as text instead of a number and Tocbot doesn't throw an error and just doesn't work well then.

    I'll dig deeper and look for a patch but if anyone else has this issue in the meantime this information could be helpful.

  8. .is-active-li jumps from first to last item on touching the scroll

    Fons

    Tested with some older Tocbot libraries but all three instances have the same issue.

    I have already debugged so much that I don't know where to look anymore to be honest.

    Will look into the tocbot-init.js once more. If I don't find anything there I think a fresh pair of eyes/someone smarter than me is needed.

  9. .is-active-li jumps from first to last item on touching the scroll

    Fons

    Problem/Motivation

    I've noticed a problem with Tocbot when using it in Drupal 11.3, I first thought it were my settings or theme specific css but that doesn't seem to be the case.

    I could reproduce this in three different environments, with different theming and tocbot settings:

    • My own environment
    • A clean Drupal 11 install
    • A clean Drupal 11 install with the umami profile installed

    I also tested this with tocbot from CDN and tocbot installed locally with composer (latest version).

    I've recorded 3 videos to illustrate.

    Steps to reproduce

    Install Tocbot, set it up as you would and touch the scroll.

  10. Support core mail as well

    Sven Decabooter

    Problem/Motivation

    This module requires the symfony_mailer module. Refactor the logic so it supports core mail by default. Only if symfony_mailer module exist, build the email that way. Or provide a configuration page to select the email sending method.

  11. Track advancedqueue events issue

    Sven Decabooter

    Problem/Motivation

    Keep track of the process in #3255444: Events on job states, to make sure this module uses the events that will eventually be added to the advancedqueue module.

  12. Cron keep processing the same (old) items

    Brecht Ceyssens

    Here an example of translation submissions that are fetched in tmgmt_smartling_cron.

    {"response":{"statusCode":200,"headers":{"Content-Type":@"0":"application\/json;charset=utf-8","Date":@"0":"Fri, 12 Sep 2025 12:31:04 GMT","Server":@"0":"Apache-Coyote\/1.1","set-cookie":@"0":"_csrf=IzDlPv20Y1Uo1Y1iDIcnvWeV; Path=\/","Vary":@"0":"Accept-Encoding","X-Application-Context":@"0":"api-gateway:aws,redis:8443","X-Content-Type-Options":@"0":"nosniff","X-Frame-Options":@"0":"DENY","X-SL-RequestId":@"0":"2ab19f80-e5e6-4731-8f4a-5f2528811308","X-XSS-Protection":@"0":"1; mode=block","1":"1; mode=block","transfer-encoding":@"0":"chunked","Connection":@"0":"keep-alive"},"body":"{\"response\":{\"code\":\"SUCCESS\",\"data\":{\"items\":[{\"translationRequestUid\":\"67d3ed0b5adb\",\"percentComplete\":100,\"lastErrorMessage\":null,\"state\":\"Completed\",\"projectId\":\"60ab0f659\",\"bucketName\":\"66d7fbbb9e401\",\"version\":1058,\"translationSubmissionUid\":\"2ec5a5e47526\",\"targetAssetKey\":@\"tmgmt_job_id\":\"12786\",\"customTranslationData\":@\"batch_uid\":\"25kbxi9abdba\",\"batch_execute_on_job\":\"13320\",\"targetLocaleId\":\"fr-BE\",\"localeLastModifiedDate\":\"2025-09-01T10:18:52Z\",\"submitterName\":\"cron\",\"lastExportedDate\":\"2025-09-12T12:16:08Z\",\"submittedDate\":null,\"createdDate\":\"2025-08-25T08:31:03Z\",\"modifiedDate\":\"2025-09-12T12:16:08Z\"},{\"translationRequestUid\":\"67d3ed0b5adb\",\"percentComplete\":100,\"lastErrorMessage\":null,\"state\":\"Translated\",\"projectId\":\"60ab0f659\",\"bucketName\":\"66d7fbbb9e401\",\"version\":10,\"translationSubmissionUid\":\"fd58627cb484\",\"targetAssetKey\":@\"tmgmt_job_id\":\"12783\",\"customTranslationData\":@\"batch_uid\":\"25kbxi9abdba\",\"batch_execute_on_job\":\"13320\",\"targetLocaleId\":\"fr-BE\",\"localeLastModifiedDate\":\"2025-09-01T10:18:52Z\",\"submitterName\":\"cron\",\"lastExportedDate\":\"2025-05-27T06:55:11Z\",\"submittedDate\":\"2025-08-25T08:31:05.000Z\",\"createdDate\":\"2025-05-27T06:52:05Z\",\"modifiedDate\":\"2025-09-01T10:18:53Z\"}]}}}"}}
    

    We haven't digged deeper, but we see that the file_id is not set and there are no other related entries in the logs. Do you have an idea what this could cause?

  13. Smartling failed to create an audit log record

    Brecht Ceyssens

    @loparev where are these audit logs used for anyway? Is it necessary for Smartling's handling? I suppose it belongs to https://help.smartling.com/hc/en-us/articles/26782577087771--Introductio... but I can't seem to find it in the Smartling backend nor in the API documentation.

  14. Time-out in ContextUploader

    Brecht Ceyssens

    To prevent locking the process: isn't it possible to do the upload, capture the processUuid from contexts/upload-and-match-async and put that in another queue so we can use DelayedRequeueException to "wait" for the process to finish?

Sven Decabooter - Drupal Developer

"Onze teamleden bouwen zelf ook mee aan ons geliefde Drupal, en daar zijn we trots op"

Sven Decabooter
Drupal developer

Betrouwbare technologie, naadloze prestaties. Dat zijn onze Drupal-oplossingen.