From f5faa5aaa2691b8a0bdd57e7ee7d8f0feadcfae2 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 23 Feb 2026 11:03:47 +0100 Subject: [PATCH 1/2] Search and replace --- composer.json | 1 + composer.lock | 87 ++++++++++++++++++- config/sync/core.extension.yml | 1 + config/sync/scanner.admin_settings.yml | 25 ++++++ .../user.role.os2loop_user_administrator.yml | 2 + ...user.role.os2loop_user_document_author.yml | 2 + ...s2loop_user_document_collection_editor.yml | 2 + ...os2loop_user_documentation_coordinator.yml | 2 + .../sync/user.role.os2loop_user_manager.yml | 2 + .../user.role.os2loop_user_post_author.yml | 2 + 10 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 config/sync/scanner.admin_settings.yml diff --git a/composer.json b/composer.json index 90caa407f..3ccd3b16e 100644 --- a/composer.json +++ b/composer.json @@ -42,6 +42,7 @@ "drupal/pathauto": "^1.12", "drupal/rdf": "^2.1", "drupal/redirect": "^1.9", + "drupal/scanner": "^1.0", "drupal/search_api": "^1.29", "drupal/search_api_autocomplete": "^1.7", "drupal/simple_menu_permissions": "^2.0", diff --git a/composer.lock b/composer.lock index 6f3c20b57..564464ea6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "da696a8d7bbdea02e4afb254211528fc", + "content-hash": "f2b2eaaf256daa2a3d7c9ac660bb7e4c", "packages": [ { "name": "asm89/stack-cors", @@ -4169,6 +4169,89 @@ "source": "https://git.drupalcode.org/project/redirect" } }, + { + "name": "drupal/scanner", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/scanner.git", + "reference": "8.x-1.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/scanner-8.x-1.0.zip", + "reference": "8.x-1.0", + "shasum": "11bd8ee51c4209d6163e3db93e16f944f7237217" + }, + "require": { + "drupal/core": "^9 || ^10" + }, + "require-dev": { + "drupal/paragraphs": "^1" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.0", + "datestamp": "1734828144", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "aasarava", + "homepage": "https://www.drupal.org/user/181407" + }, + { + "name": "codebymikey", + "homepage": "https://www.drupal.org/user/3573206" + }, + { + "name": "damienmckenna", + "homepage": "https://www.drupal.org/user/108450" + }, + { + "name": "fizk", + "homepage": "https://www.drupal.org/user/473174" + }, + { + "name": "mikeyr", + "homepage": "https://www.drupal.org/user/715156" + }, + { + "name": "mpearrow", + "homepage": "https://www.drupal.org/user/13144" + }, + { + "name": "shreya shetty", + "homepage": "https://www.drupal.org/user/2943029" + }, + { + "name": "smustgrave", + "homepage": "https://www.drupal.org/user/3252890" + }, + { + "name": "starbow", + "homepage": "https://www.drupal.org/user/33290" + } + ], + "description": "Perform search and replace on chosen text fields.", + "homepage": "https://drupal.org/project/scanner", + "keywords": [ + "Drupal" + ], + "support": { + "source": "https://git.drupalcode.org/project/scanner", + "issues": "https://drupal.org/project/issues/scanner" + } + }, { "name": "drupal/search_api", "version": "1.40.0", @@ -17676,5 +17759,5 @@ "php": "^8.3" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/config/sync/core.extension.yml b/config/sync/core.extension.yml index 26d05e403..62e608707 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -85,6 +85,7 @@ module: path_alias: 0 redirect: 0 rest: 0 + scanner: 0 search_api: 0 search_api_autocomplete: 0 search_api_db: 0 diff --git a/config/sync/scanner.admin_settings.yml b/config/sync/scanner.admin_settings.yml new file mode 100644 index 000000000..324a06fa9 --- /dev/null +++ b/config/sync/scanner.admin_settings.yml @@ -0,0 +1,25 @@ +_core: + default_config_hash: tZBqRctRg3fdrKB6LcLAmuNHmveOvaLmbIqRhaKTrBE +word_boundaries: auto +scanner_mode: true +scanner_wholeword: true +scanner_regex: false +scanner_published: false +scanner_pathauto: false +scanner_language: all +enabled_content_types: + 'node:os2loop_documents_collection': 'node:os2loop_documents_collection' + 'node:os2loop_documents_document': 'node:os2loop_documents_document' + 'node:os2loop_external': 'node:os2loop_external' + 'node:os2loop_page': 'node:os2loop_page' + 'node:os2loop_post': 'node:os2loop_post' + 'node:os2loop_question': 'node:os2loop_question' + 'node:os2loop_section_page': 'node:os2loop_section_page' +fields_of_selected_content_type: + 'node:os2loop_documents_collection:title': 'node:os2loop_documents_collection:title' + 'node:os2loop_documents_document:title': 'node:os2loop_documents_document:title' + 'node:os2loop_external:title': 'node:os2loop_external:title' + 'node:os2loop_page:title': 'node:os2loop_page:title' + 'node:os2loop_post:title': 'node:os2loop_post:title' + 'node:os2loop_question:title': 'node:os2loop_question:title' + 'node:os2loop_section_page:title': 'node:os2loop_section_page:title' diff --git a/config/sync/user.role.os2loop_user_administrator.yml b/config/sync/user.role.os2loop_user_administrator.yml index 255f7e42e..094840905 100644 --- a/config/sync/user.role.os2loop_user_administrator.yml +++ b/config/sync/user.role.os2loop_user_administrator.yml @@ -49,6 +49,7 @@ dependencies: - path - pathauto - redirect + - scanner - simple_menu_permissions - system - taxonomy @@ -166,6 +167,7 @@ permissions: - 'notify of path changes' - 'os2loop see notify users option' - 'os2loop send alert' + - 'perform search and replace' - 'revert all revisions' - 'revert os2loop_documents_collection revisions' - 'revert os2loop_documents_document revisions' diff --git a/config/sync/user.role.os2loop_user_document_author.yml b/config/sync/user.role.os2loop_user_document_author.yml index 712280ca3..f6a33a33e 100644 --- a/config/sync/user.role.os2loop_user_document_author.yml +++ b/config/sync/user.role.os2loop_user_document_author.yml @@ -18,6 +18,7 @@ dependencies: - node - os2loop_alert - paragraphs + - scanner - system - toolbar - view_unpublished @@ -41,6 +42,7 @@ permissions: - 'edit own os2loop_documents_document content' - 'flag os2loop_upvote_correct_answer' - 'os2loop send alert' + - 'perform search only' - 'unflag os2loop_upvote_correct_answer' - 'update any media' - 'use text format os2loop_documents_body' diff --git a/config/sync/user.role.os2loop_user_document_collection_editor.yml b/config/sync/user.role.os2loop_user_document_collection_editor.yml index 0d2cf1f25..a8ca0726f 100644 --- a/config/sync/user.role.os2loop_user_document_collection_editor.yml +++ b/config/sync/user.role.os2loop_user_document_collection_editor.yml @@ -18,6 +18,7 @@ dependencies: - os2loop_alert - os2loop_messages - paragraphs + - scanner - system - toolbar - view_unpublished @@ -44,6 +45,7 @@ permissions: - 'flag os2loop_upvote_correct_answer' - 'os2loop see notify users option' - 'os2loop send alert' + - 'perform search only' - 'unflag os2loop_upvote_correct_answer' - 'update any media' - 'use text format os2loop_documents_body' diff --git a/config/sync/user.role.os2loop_user_documentation_coordinator.yml b/config/sync/user.role.os2loop_user_documentation_coordinator.yml index ca1568226..b43a1cae6 100644 --- a/config/sync/user.role.os2loop_user_documentation_coordinator.yml +++ b/config/sync/user.role.os2loop_user_documentation_coordinator.yml @@ -21,6 +21,7 @@ dependencies: - node - os2loop_alert - paragraphs + - scanner - system - taxonomy - toolbar @@ -48,6 +49,7 @@ permissions: - 'edit terms in os2loop_tag' - 'flag os2loop_upvote_correct_answer' - 'os2loop send alert' + - 'perform search and replace' - 'unflag os2loop_upvote_correct_answer' - 'update any media' - 'use text format os2loop_documents_body' diff --git a/config/sync/user.role.os2loop_user_manager.yml b/config/sync/user.role.os2loop_user_manager.yml index 0a88582b9..36d3a3663 100644 --- a/config/sync/user.role.os2loop_user_manager.yml +++ b/config/sync/user.role.os2loop_user_manager.yml @@ -36,6 +36,7 @@ dependencies: - os2loop_messages - paragraphs - path + - scanner - simple_menu_permissions - system - taxonomy @@ -104,6 +105,7 @@ permissions: - 'flag os2loop_upvote_correct_answer' - 'os2loop see notify users option' - 'os2loop send alert' + - 'perform search and replace' - 'revert os2loop_post revisions' - 'translate interface' - 'unflag os2loop_upvote_correct_answer' diff --git a/config/sync/user.role.os2loop_user_post_author.yml b/config/sync/user.role.os2loop_user_post_author.yml index f770d179a..850529419 100644 --- a/config/sync/user.role.os2loop_user_post_author.yml +++ b/config/sync/user.role.os2loop_user_post_author.yml @@ -14,6 +14,7 @@ dependencies: - media - node - os2loop_alert + - scanner - system - toolbar id: os2loop_user_post_author @@ -37,6 +38,7 @@ permissions: - 'edit own os2loop_post content' - 'flag os2loop_upvote_correct_answer' - 'os2loop send alert' + - 'perform search only' - 'revert os2loop_post revisions' - 'unflag os2loop_upvote_correct_answer' - 'update any media' From 4d4e7289070cc0f0c8a769d9221638bc0cdbab8f Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 23 Feb 2026 11:12:38 +0100 Subject: [PATCH 2/2] Added check for field --- CHANGELOG.md | 2 ++ .../os2loop/modules/os2loop_messages/src/Helper/Helper.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c837136da..beb5a3040 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +- [PR-380](https://github.com/itk-dev/os2loop/pull/380) + Added search and replace in content - [PR-377](https://github.com/itk-dev/os2loop/pull/377) - Security update - Code cleanup diff --git a/web/profiles/custom/os2loop/modules/os2loop_messages/src/Helper/Helper.php b/web/profiles/custom/os2loop/modules/os2loop_messages/src/Helper/Helper.php index d21a9b542..2cb1cde04 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_messages/src/Helper/Helper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_messages/src/Helper/Helper.php @@ -88,7 +88,7 @@ private function createMessage(EntityInterface $entity, string $operation, bool return; } $message->set('os2loop_message_node_refer', $entity); - if (isset($entity->revision_log->value)) { + if ($message->hasField('os2loop_revision_message') && isset($entity->revision_log->value)) { $message->set('os2loop_revision_message', $entity->revision_log->value); } }