├── .circleci └── config.yml ├── .cursor └── rules │ └── common.mdc ├── .cursorindexingignore ├── .ddev ├── addon-metadata │ ├── adminer │ │ └── manifest.yaml │ ├── elasticsearch │ │ └── manifest.yaml │ └── varnish │ │ └── manifest.yaml ├── commands │ ├── host │ │ └── adminer │ ├── varnish │ │ ├── varnishadm │ │ ├── varnishd │ │ ├── varnishhist │ │ ├── varnishlog │ │ ├── varnishncsa │ │ ├── varnishstat │ │ ├── varnishtest │ │ └── varnishtop │ └── web │ │ ├── grumphp-command.sh │ │ ├── phpunit-command.sh │ │ └── syncdb ├── config.yaml ├── docker-compose.adminer.yaml ├── docker-compose.adminer_norouter.yaml ├── docker-compose.elasticsearch8.yaml ├── docker-compose.elasticvue.yaml ├── docker-compose.varnish.yaml ├── docker-compose.varnish_extras.yaml ├── elasticsearch │ ├── config │ │ └── elasticsearch8.yml │ └── elasticsearch-setup.sh └── varnish │ └── default.vcl ├── .env.example ├── .eslintignore ├── .eslintrc.json ├── .github ├── dependabot.yml └── pull_request_template.md ├── .gitignore ├── .lando.yml ├── .lando ├── .env ├── adminer.conf ├── adminer.php ├── adminer.sh ├── drupal.sh ├── my.cnf ├── php.ini ├── phpunit.sh ├── varnish.vcl └── xdebug.sh ├── .markdownlint.json ├── .prettierrc.json ├── .stylelintrc.json ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── LICENSE ├── README.md ├── composer.json ├── config ├── local │ ├── .htaccess │ ├── announcements_feed.settings.yml │ ├── dblog.settings.yml │ ├── stage_file_proxy.settings.yml │ └── views.view.watchdog.yml ├── main │ ├── .htaccess │ └── stage_file_proxy.settings.yml ├── production │ └── .htaccess ├── silta │ ├── .htaccess │ ├── dblog.settings.yml │ ├── stage_file_proxy.settings.yml │ └── views.view.watchdog.yml └── sync │ ├── .htaccess │ ├── admin_toolbar.settings.yml │ ├── admin_toolbar_tools.settings.yml │ ├── automated_cron.settings.yml │ ├── block.block.claro_breadcrumbs.yml │ ├── block.block.claro_content.yml │ ├── block.block.claro_help.yml │ ├── block.block.claro_local_actions.yml │ ├── block.block.claro_messages.yml │ ├── block.block.claro_page_title.yml │ ├── block.block.claro_primary_local_tasks.yml │ ├── block.block.claro_secondary_local_tasks.yml │ ├── block.block.olivero_account_menu.yml │ ├── block.block.olivero_breadcrumbs.yml │ ├── block.block.olivero_content.yml │ ├── block.block.olivero_help.yml │ ├── block.block.olivero_main_menu.yml │ ├── block.block.olivero_messages.yml │ ├── block.block.olivero_page_title.yml │ ├── block.block.olivero_powered.yml │ ├── block.block.olivero_primary_admin_actions.yml │ ├── block.block.olivero_primary_local_tasks.yml │ ├── block.block.olivero_secondary_local_tasks.yml │ ├── block.block.olivero_site_branding.yml │ ├── block.block.olivero_syndicate.yml │ ├── block_content.type.basic.yml │ ├── claro.settings.yml │ ├── comment.settings.yml │ ├── comment.type.comment.yml │ ├── config_split.config_split.local.yml │ ├── config_split.config_split.main.yml │ ├── config_split.config_split.production.yml │ ├── config_split.config_split.silta.yml │ ├── core.base_field_override.node.page.promote.yml │ ├── core.date_format.fallback.yml │ ├── core.date_format.html_date.yml │ ├── core.date_format.html_datetime.yml │ ├── core.date_format.html_month.yml │ ├── core.date_format.html_time.yml │ ├── core.date_format.html_week.yml │ ├── core.date_format.html_year.yml │ ├── core.date_format.html_yearless_date.yml │ ├── core.date_format.long.yml │ ├── core.date_format.medium.yml │ ├── core.date_format.olivero_medium.yml │ ├── core.date_format.short.yml │ ├── core.entity_form_display.block_content.basic.default.yml │ ├── core.entity_form_display.comment.comment.default.yml │ ├── core.entity_form_display.node.article.default.yml │ ├── core.entity_form_display.node.page.default.yml │ ├── core.entity_form_display.user.user.default.yml │ ├── core.entity_form_mode.user.register.yml │ ├── core.entity_view_display.block_content.basic.default.yml │ ├── core.entity_view_display.comment.comment.default.yml │ ├── core.entity_view_display.node.article.default.yml │ ├── core.entity_view_display.node.article.rss.yml │ ├── core.entity_view_display.node.article.teaser.yml │ ├── core.entity_view_display.node.page.default.yml │ ├── core.entity_view_display.node.page.teaser.yml │ ├── core.entity_view_display.user.user.compact.yml │ ├── core.entity_view_display.user.user.default.yml │ ├── core.entity_view_mode.block_content.full.yml │ ├── core.entity_view_mode.comment.full.yml │ ├── core.entity_view_mode.node.full.yml │ ├── core.entity_view_mode.node.rss.yml │ ├── core.entity_view_mode.node.search_index.yml │ ├── core.entity_view_mode.node.search_result.yml │ ├── core.entity_view_mode.node.teaser.yml │ ├── core.entity_view_mode.taxonomy_term.full.yml │ ├── core.entity_view_mode.user.compact.yml │ ├── core.entity_view_mode.user.full.yml │ ├── core.extension.yml │ ├── core.menu.static_menu_link_overrides.yml │ ├── editor.editor.basic_html.yml │ ├── editor.editor.full_html.yml │ ├── field.field.block_content.basic.body.yml │ ├── field.field.comment.comment.comment_body.yml │ ├── field.field.node.article.body.yml │ ├── field.field.node.article.comment.yml │ ├── field.field.node.article.field_image.yml │ ├── field.field.node.article.field_tags.yml │ ├── field.field.node.page.body.yml │ ├── field.field.user.user.user_picture.yml │ ├── field.settings.yml │ ├── field.storage.block_content.body.yml │ ├── field.storage.comment.comment_body.yml │ ├── field.storage.node.body.yml │ ├── field.storage.node.comment.yml │ ├── field.storage.node.field_image.yml │ ├── field.storage.node.field_tags.yml │ ├── field.storage.user.user_picture.yml │ ├── field_ui.settings.yml │ ├── file.settings.yml │ ├── filter.format.basic_html.yml │ ├── filter.format.full_html.yml │ ├── filter.format.plain_text.yml │ ├── filter.format.restricted_html.yml │ ├── filter.settings.yml │ ├── image.settings.yml │ ├── image.style.large.yml │ ├── image.style.medium.yml │ ├── image.style.thumbnail.yml │ ├── image.style.wide.yml │ ├── menu_ui.settings.yml │ ├── node.settings.yml │ ├── node.type.article.yml │ ├── node.type.page.yml │ ├── olivero.settings.yml │ ├── purge.logger_channels.yml │ ├── purge.plugins.yml │ ├── purge_queuer_coretags.settings.yml │ ├── system.action.comment_delete_action.yml │ ├── system.action.comment_publish_action.yml │ ├── system.action.comment_save_action.yml │ ├── system.action.comment_unpublish_action.yml │ ├── system.action.node_delete_action.yml │ ├── system.action.node_make_sticky_action.yml │ ├── system.action.node_make_unsticky_action.yml │ ├── system.action.node_promote_action.yml │ ├── system.action.node_publish_action.yml │ ├── system.action.node_save_action.yml │ ├── system.action.node_unpromote_action.yml │ ├── system.action.node_unpublish_action.yml │ ├── system.action.taxonomy_term_publish_action.yml │ ├── system.action.taxonomy_term_unpublish_action.yml │ ├── system.action.user_add_role_action.administrator.yml │ ├── system.action.user_add_role_action.content_editor.yml │ ├── system.action.user_block_user_action.yml │ ├── system.action.user_cancel_user_action.yml │ ├── system.action.user_remove_role_action.administrator.yml │ ├── system.action.user_remove_role_action.content_editor.yml │ ├── system.action.user_unblock_user_action.yml │ ├── system.advisories.yml │ ├── system.cron.yml │ ├── system.date.yml │ ├── system.diff.yml │ ├── system.feature_flags.yml │ ├── system.file.yml │ ├── system.image.gd.yml │ ├── system.image.yml │ ├── system.logging.yml │ ├── system.mail.yml │ ├── system.maintenance.yml │ ├── system.menu.account.yml │ ├── system.menu.admin.yml │ ├── system.menu.footer.yml │ ├── system.menu.main.yml │ ├── system.menu.tools.yml │ ├── system.performance.yml │ ├── system.rss.yml │ ├── system.site.yml │ ├── system.theme.global.yml │ ├── system.theme.yml │ ├── taxonomy.settings.yml │ ├── taxonomy.vocabulary.tags.yml │ ├── text.settings.yml │ ├── update.settings.yml │ ├── user.flood.yml │ ├── user.mail.yml │ ├── user.role.administrator.yml │ ├── user.role.anonymous.yml │ ├── user.role.authenticated.yml │ ├── user.role.content_editor.yml │ ├── user.settings.yml │ ├── varnish_purger.settings.c6013ef2d0.yml │ ├── views.settings.yml │ ├── views.view.archive.yml │ ├── views.view.block_content.yml │ ├── views.view.comment.yml │ ├── views.view.comments_recent.yml │ ├── views.view.content.yml │ ├── views.view.content_recent.yml │ ├── views.view.files.yml │ ├── views.view.frontpage.yml │ ├── views.view.glossary.yml │ ├── views.view.taxonomy_term.yml │ ├── views.view.user_admin_people.yml │ ├── views.view.who_s_new.yml │ └── views.view.who_s_online.yml ├── drush ├── Commands │ ├── PolicyCommands.php │ └── SiltaAliasAlterCommands.php ├── drush.yml └── sites │ └── self.site.yml ├── grumphp.yml ├── load.environment.php ├── package-lock.json ├── package.json ├── phpcs.xml ├── phpstan.neon ├── phpunit.xml ├── recipes └── .gitignore ├── scripts └── syncdb.sh ├── silta ├── nginx.Dockerfile ├── nginx.Dockerfile.dockerignore ├── php.Dockerfile ├── php.Dockerfile.dockerignore ├── shell.Dockerfile ├── shell.Dockerfile.dockerignore ├── silta-main.yml ├── silta-prod.secrets ├── silta-prod.yml ├── silta.secrets └── silta.yml └── web ├── modules └── custom │ └── phpunit_example │ ├── phpunit_example.info.yml │ ├── phpunit_example.module │ ├── src │ └── AddClass.php │ └── tests │ └── src │ └── Unit │ └── AddClassTest.php └── sites ├── default └── settings.php └── development.services.yml /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | orbs: 4 | # Include the Silta orb. 5 | # @see https://circleci.com/developer/orbs/orb/silta/silta 6 | silta: silta/silta@1 7 | 8 | executors: 9 | silta: 10 | docker: 11 | - image: wunderio/silta-cicd:circleci-php8.3-node22-composer2-v1 12 | 13 | # Define shared branch filters as reusable anchors. 14 | branch-filters: 15 | ignored-branches: &ignored-branches 16 | branches: 17 | ignore: 18 | - production 19 | - main 20 | - /dependabot\/.*/ 21 | # Remove the following filters from actual project configuration. 22 | - /^10\..*/ 23 | - /^11\..*/ 24 | 25 | workflows: 26 | commit: 27 | jobs: 28 | - approval: 29 | type: approval 30 | name: approve-deployment 31 | filters: 32 | <<: *ignored-branches 33 | 34 | - silta/drupal-validate: 35 | name: validate 36 | executor: silta 37 | post-validation: 38 | - run: echo "You can add additional validation here!" 39 | 40 | - silta/analyze: 41 | name: analyze 42 | context: analyze 43 | sources: web 44 | 45 | # Build job for feature environments. 46 | # Other jobs defined below extend this job. 47 | - silta/drupal-build: &build 48 | name: build 49 | executor: silta 50 | codebase-build: 51 | - silta/drupal-composer-install 52 | - silta/npm-install-build 53 | context: silta_dev 54 | requires: 55 | - validate 56 | - analyze 57 | - approve-deployment 58 | filters: 59 | <<: *ignored-branches 60 | 61 | # Deploy job for feature environments. 62 | - silta/drupal-deploy: &deploy 63 | name: deploy 64 | executor: silta 65 | silta_config: silta/silta.yml,silta/silta.secrets 66 | pre-release: 67 | - silta/decrypt-files: 68 | files: silta/silta.secrets 69 | # SEC_DRUPAL_PROJECT_SILTA_DEV holds the secret key for decryption purposes. 70 | # This is stored in CircleCI as an environment variable and also in LastPass. 71 | secret_key_env: SEC_DRUPAL_PROJECT_SILTA_DEV 72 | context: silta_dev 73 | # Make sure that `requires` is always set to override the default value in `main` and `production` build jobs. 74 | # This is to avoid requiring the `approve-deployment` job which breaks the deployment. 75 | # This is because the `main` and `production` environments are filtered out from the default `build` job. 76 | # Use `requires: []` to override the default value when no other jobs are required. 77 | requires: 78 | - build 79 | filters: 80 | <<: *ignored-branches 81 | 82 | # Build job for main environment. 83 | - silta/drupal-build: 84 | <<: *build 85 | name: build-main 86 | requires: 87 | - validate 88 | - analyze 89 | filters: 90 | branches: 91 | only: 92 | - main 93 | 94 | # Deploy job for main environment. 95 | # Extends the job defined for feature environments. 96 | - silta/drupal-deploy: 97 | <<: *deploy 98 | name: deploy-main 99 | silta_config: silta/silta.yml,silta/silta.secrets,silta/silta-main.yml 100 | requires: 101 | - build-main 102 | filters: 103 | branches: 104 | only: 105 | - main 106 | 107 | # Build job for production environment. 108 | # Extends the job defined for feature environments. 109 | - silta/drupal-build: 110 | <<: *build 111 | name: build-prod 112 | context: silta_finland 113 | requires: 114 | - validate 115 | - analyze 116 | filters: 117 | branches: 118 | only: production 119 | 120 | # Deploy job for production environment. 121 | # Extends the job defined for feature environments. 122 | - silta/drupal-deploy: 123 | <<: *deploy 124 | name: deploy-prod 125 | silta_config: silta/silta.yml,silta/silta-prod.yml,silta/silta-prod.secrets 126 | pre-release: 127 | - silta/decrypt-files: 128 | files: silta/silta-prod.secrets 129 | # SEC_DRUPAL_PROJECT_SILTA_FINLAND holds the secret key for decryption purposes. 130 | # This is stored in CircleCI as an environment variable and also in LastPass. 131 | secret_key_env: SEC_DRUPAL_PROJECT_SILTA_FINLAND 132 | context: silta_finland 133 | requires: 134 | - build-prod 135 | filters: 136 | branches: 137 | only: production 138 | 139 | # This enables validation on dependabot PRs 140 | # Build job for dependabot environments. 141 | # Extends the job defined for feature environments. 142 | #- silta/drupal-build: 143 | # <<: *build 144 | # name: build-dependabot 145 | # skip-deployment: true 146 | # filters: 147 | # branches: 148 | # only: /dependabot\/.*/ 149 | -------------------------------------------------------------------------------- /.cursor/rules/common.mdc: -------------------------------------------------------------------------------- 1 | --- 2 | description: Common rules for using Cursor AI Code Editor in Wunder Drupal projects 3 | globs: 4 | alwaysApply: true 5 | --- 6 | 7 | # Common rules for using Cursor AI Code Editor in Wunder Drupal projects 8 | 9 | ## File Organization 10 | - Keep all rule files in @.cursor/rules/ directory 11 | - Use .mdc extension for rule files 12 | - Name files descriptively (e.g., common.mdc) 13 | - Each rule file should focus on a specific component or feature 14 | - Use @.cursorindexingignore to exclude files from Cursor's indexing: 15 | - Database dumps and large binary files 16 | - Environment-specific configuration files 17 | - Drupal's generated files and directories 18 | - Vendor directories and dependencies 19 | - Temporary files, logs, and cache files 20 | - Sensitive deployment files: 21 | - silta/*.secrets 22 | 23 | ## Key Project Files 24 | - **Configuration & Setup** 25 | - @.lando.yml - Local development environment configuration (Lando) 26 | - @.ddev/config.yaml - Local development environment configuration (DDEV) 27 | - @composer.json - PHP dependencies and project configuration 28 | - @README.md - Project documentation and setup instructions 29 | - @.env.example - Example environment variables template 30 | - @phpstan.neon - PHP Static Analysis configuration 31 | - @phpcs.xml - PHP Code Sniffer ruleset 32 | - @grumphp.yml - Git hooks and code quality checks 33 | 34 | - **Deployment & CI/CD** 35 | - @.circleci/config.yml - CircleCI configuration for CI/CD pipelines 36 | - @silta/silta.yml - Kubernetes deployment configuration 37 | - @silta/silta-main.yml - Main environment specific configuration 38 | - @silta/silta-prod.yml - Production environment specific configuration 39 | 40 | - **Utilities & Scripts** 41 | - @scripts/syncdb.sh - Database synchronization tool (supports both DDEV and Lando) 42 | - @.lando/xdebug.sh - Xdebug configuration script for Lando 43 | - DDEV commands: 44 | - `ddev start` - Start the development environment 45 | - `ddev composer install` - Install PHP dependencies 46 | - `ddev drush` - Run Drush commands 47 | - `ddev xdebug` - Configure Xdebug 48 | 49 | - **Drupal Specific** 50 | - @web/sites/default/settings.php - Drupal settings 51 | - @drush/ - Drush commands and configuration 52 | 53 | ## Documentation 54 | - Use markdown for documentation 55 | - Reference files with @ prefix for better IDE integration 56 | - Document dependencies and versions 57 | - Note breaking changes 58 | - Include future considerations 59 | - Keep documentation up to date with code changes, especially @README.md 60 | - Document version constraints and requirements 61 | - Keep Cursor code functionality related rules up to date with code changes (@.cursor/rules/*.mdc) 62 | - Reference specific rules when applicable, see: @.cursor/rules/ 63 | - When proposing code changes, always include a git commit message following the format defined in Git Commits section 64 | 65 | ## Git Commits 66 | Prefix commit message with JIRA ticket number from branch name, following [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification. 67 | Format commit messages using the following types: 68 | 69 | - feat: New feature (correlates with MINOR in semantic versioning) 70 | - fix: Bug fix (correlates with PATCH in semantic versioning) 71 | - docs: Documentation changes 72 | - style: Changes that do not affect the meaning of the code 73 | - refactor: Code changes that neither fix a bug nor add a feature 74 | - perf: Performance improvements 75 | - test: Adding missing tests or correcting existing tests 76 | - build: Changes that affect the build system or external dependencies 77 | - ci: Changes to CI configuration files and scripts 78 | - chore: Other changes that don't modify src or test files 79 | 80 | Breaking changes must be indicated by appending a ! after the type/scope or including "BREAKING CHANGE:" in the footer. 81 | 82 | When providing commit messages, always use Cursor's code block feature (the code block button in the editor or triple backticks in markdown). This creates a copyable code block with the "Copy" button that allows for one-click copying with exact formatting including hyphens. Always provide just the commit message itself without any surrounding explanations: 83 | 84 | ``` 85 | QAG-xxxx: (type) Concise description of changes 86 | 87 | - First change detail with hyphen for GitHub markdown compatibility 88 | - Second change detail 89 | - Third change detail 90 | 91 | Refs: file1.ext, file2.ext 92 | ``` 93 | 94 | ### Git Diff for Commit Messages 95 | When creating commit messages, always analyze the actual changes using `git diff` for the specific file(s) modified: 96 | 97 | - **Use `git diff --staged | cat` as the default approach** to see all staged changes. This ensures you capture all modifications intended for the commit. 98 | - Use `git diff ` to see specific changes to a file 99 | - Review the diff output to identify: 100 | - What functionality was added, modified, or removed 101 | - Which files were affected 102 | - The scope and impact of the changes 103 | - Ensure commit message bullet points accurately reflect the changes visible in the diff 104 | - Be specific about what changed and why, based on the actual code modifications 105 | 106 | ## Development Environment 107 | 108 | ### Code Standards 109 | - PHP version: 8.3+ (as specified in @composer.json) 110 | - Follow Drupal coding standards (defined in @phpcs.xml) 111 | - Follow PHP Static Analysis rules (defined in @phpstan.neon) 112 | - Use GrumPHP for enforcing code quality standards (@grumphp.yml) 113 | - Group related changes by component 114 | - Use consistent naming conventions 115 | - Comment complex logic 116 | - Consider backward compatibility 117 | 118 | ### Technology Stack 119 | - **Core Technologies** 120 | - Drupal 121 | - PHP via Nginx 122 | - MariaDB 123 | 124 | - **Development Tools** 125 | - Xdebug 126 | - PHPStan 127 | - PHPCS/PHPCBF with WunderDrupal and WunderSecurity rulesets 128 | - GrumPHP for Git hooks 129 | - Composer for PHP dependencies 130 | - NPM for front-end assets 131 | 132 | - **Infrastructure** 133 | - DDEV for local development (containerized environment with Nginx, PHP, MariaDB) 134 | - Additional services: Adminer, Elasticsearch, Kibana, Mailpit, Varnish 135 | - Configuration in @.ddev/config.yaml and related service files 136 | - Lando for local development (containerized environment with Nginx, PHP, MariaDB) 137 | - Additional services: Adminer, Elasticsearch, Kibana, Mailpit, Varnish 138 | - Configuration in @.lando.yml 139 | - Silta deployment system (Wunder's Kubernetes deployment solution) [@wunderio/silta](https://github.com/wunderio/silta) 140 | - Helm charts for Kubernetes orchestration 141 | - Docker containerization (Nginx and PHP containers) 142 | - Google Cloud Platform (GCP) infrastructure 143 | - Kubernetes-based autoscaling (2-10 replicas in production) 144 | - Varnish caching (configurable) 145 | - CircleCI for continuous integration 146 | -------------------------------------------------------------------------------- /.cursorindexingignore: -------------------------------------------------------------------------------- 1 | # Drupal generated files and directories 2 | web/sites/*/files/ 3 | web/sites/*/private/ 4 | web/sites/*/translations/ 5 | web/sites/*/tmp/ 6 | web/sites/simpletest/ 7 | web/sites/default/settings.local.php 8 | web/sites/*/services*.yml 9 | web/core/ 10 | 11 | # Vendor directories and dependencies 12 | vendor/ 13 | node_modules/ 14 | web/libraries/ 15 | web/modules/contrib/ 16 | web/themes/contrib/ 17 | 18 | # Database dumps and large binary files 19 | *.sql 20 | *.sql.gz 21 | *.sqlite 22 | *.tar 23 | *.tar.gz 24 | *.zip 25 | *.bz2 26 | *.pdf 27 | *.doc 28 | *.docx 29 | *.ppt 30 | *.pptx 31 | *.xls 32 | *.xlsx 33 | *.mp4 34 | *.mp3 35 | *.avi 36 | *.mov 37 | *.png 38 | *.jpg 39 | *.jpeg 40 | *.gif 41 | *.ico 42 | *.ttf 43 | *.eot 44 | *.woff 45 | *.woff2 46 | 47 | # Environment-specific configuration files 48 | .env 49 | .env.* 50 | !.env.example 51 | .editorconfig 52 | 53 | # Temporary files, logs, and cache files 54 | tmp/ 55 | temp/ 56 | .sass-cache/ 57 | *.log 58 | logs/ 59 | *.cache 60 | .eslintcache 61 | .cache/ 62 | .phpunit.result.cache 63 | .phpunit.cache/ 64 | 65 | # IDE and Editor files 66 | .idea/ 67 | .vscode/ 68 | .DS_Store 69 | Thumbs.db 70 | 71 | # Sensitive deployment files 72 | silta/*.secrets 73 | 74 | # Lando and DDEV files 75 | .lando/data-mailpit/ 76 | 77 | # Package lock files (large files with minimal value for indexing) 78 | composer.lock 79 | package-lock.json 80 | yarn.lock 81 | -------------------------------------------------------------------------------- /.ddev/addon-metadata/adminer/manifest.yaml: -------------------------------------------------------------------------------- 1 | name: adminer 2 | repository: ddev/ddev-adminer 3 | version: v1.1.0 4 | install_date: "2025-03-12T09:43:10+02:00" 5 | project_files: 6 | - docker-compose.adminer.yaml 7 | - docker-compose.adminer_norouter.yaml 8 | - commands/host/adminer 9 | global_files: [] 10 | removal_actions: [] 11 | -------------------------------------------------------------------------------- /.ddev/addon-metadata/elasticsearch/manifest.yaml: -------------------------------------------------------------------------------- 1 | name: elasticsearch 2 | repository: ddev/ddev-elasticsearch 3 | version: v0.3.2 4 | install_date: "2025-03-21T10:53:19+02:00" 5 | project_files: 6 | - elasticsearch/ 7 | - docker-compose.elasticsearch8.yaml 8 | global_files: [] 9 | removal_actions: [] 10 | -------------------------------------------------------------------------------- /.ddev/addon-metadata/varnish/manifest.yaml: -------------------------------------------------------------------------------- 1 | name: varnish 2 | repository: ddev/ddev-varnish 3 | version: v0.2.3 4 | install_date: "2024-08-13T15:59:06+03:00" 5 | project_files: 6 | - docker-compose.varnish.yaml 7 | - varnish 8 | - commands/varnish 9 | global_files: [] 10 | removal_actions: 11 | - | 12 | #ddev-nodisplay 13 | if [ -f docker-compose.varnish_extras.yaml ]; then 14 | if grep -q '#ddev-generated' docker-compose.varnish_extras.yaml; then 15 | rm -f docker-compose.varnish_extras.yaml 16 | else 17 | echo "Unwilling to remove '$DDEV_APPROOT/.ddev/docker-compose.varnish_extras.yaml' because it does not have #ddev-generated in it; you can manually delete it if it is safe to delete." 18 | fi 19 | fi 20 | -------------------------------------------------------------------------------- /.ddev/commands/host/adminer: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## #ddev-generated: If you want to edit and own this file, remove this line. 4 | ## Description: Launch a browser with Adminer 5 | ## Usage: adminer 6 | ## Example: "ddev adminer" 7 | 8 | DDEV_ADMINER_PORT=9100 9 | DDEV_ADMINER_HTTPS_PORT=9101 10 | 11 | if [ ${DDEV_PRIMARY_URL%://*} = "http" ] || [ -n "${GITPOD_WORKSPACE_ID:-}" ] || [ "${CODESPACES:-}" = "true" ]; then 12 | ddev launch :$DDEV_ADMINER_PORT 13 | else 14 | ddev launch :$DDEV_ADMINER_HTTPS_PORT 15 | fi 16 | -------------------------------------------------------------------------------- /.ddev/commands/varnish/varnishadm: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## #ddev-generated 4 | ## Description: Control a running Varnish instance 5 | ## Usage: varnishadm [flags] [args] 6 | ## Example: "ddev varnishadm" 7 | 8 | # This example runs inside the varnish container. 9 | # Note that this requires that /mnt/ddev_config be mounted 10 | # into the varnish container. 11 | 12 | varnishadm "$@" 13 | -------------------------------------------------------------------------------- /.ddev/commands/varnish/varnishd: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## #ddev-generated 4 | ## Description: Varnish-cli 5 | ## Usage: varnishd [flags] [args] 6 | ## Example: "ddev varnishd -d" for CLI in foreground. 7 | ## Example: "ddev varnishd -T" to connect with varnishadm or telnet. 8 | ## Example: "ddev varnishd -M" to connect back to a listening service pushing the CLI to that service. 9 | 10 | # This example runs inside the varnish container. 11 | # Note that this requires that /mnt/ddev_config be mounted 12 | # into the varnish container. 13 | 14 | varnishd "$@" 15 | -------------------------------------------------------------------------------- /.ddev/commands/varnish/varnishhist: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## #ddev-generated 4 | ## Description: Display Varnish request histogram 5 | ## Usage: varnishhist [flags] [args] 6 | ## Example: "ddev varnishhist" 7 | 8 | # This example runs inside the varnish container. 9 | # Note that this requires that /mnt/ddev_config be mounted 10 | # into the varnish container. 11 | 12 | varnishhist "$@" 13 | -------------------------------------------------------------------------------- /.ddev/commands/varnish/varnishlog: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## #ddev-generated 4 | ## Description: Display Varnish logs 5 | ## Usage: varnishlog [flags] [args] 6 | ## Example: "ddev varnishlog" 7 | 8 | # This example runs inside the varnish container. 9 | # Note that this requires that /mnt/ddev_config be mounted 10 | # into the varnish container. 11 | 12 | varnishlog "$@" 13 | -------------------------------------------------------------------------------- /.ddev/commands/varnish/varnishncsa: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## #ddev-generated 4 | ## Description: Display Varnish logs in Apache / NCSA combined log format 5 | ## Usage: varnishncsa [flags] [args] 6 | ## Example: "ddev varnishncsa" 7 | 8 | # This example runs inside the varnish container. 9 | # Note that this requires that /mnt/ddev_config be mounted 10 | # into the varnish container. 11 | 12 | varnishncsa "$@" 13 | -------------------------------------------------------------------------------- /.ddev/commands/varnish/varnishstat: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## #ddev-generated 4 | ## Description: Display Varnish Cache statistics 5 | ## Usage: varnishstat [flags] [args] 6 | ## Example: "ddev varnishstat" 7 | 8 | # This example runs inside the varnish container. 9 | # Note that this requires that /mnt/ddev_config be mounted 10 | # into the varnish container. 11 | 12 | varnishstat "$@" 13 | -------------------------------------------------------------------------------- /.ddev/commands/varnish/varnishtest: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## #ddev-generated 4 | ## Description: Test program for Varnish 5 | ## Usage: varnishtest [flags] [args] 6 | ## Example: "ddev varnishtest" 7 | 8 | # This example runs inside the varnish container. 9 | # Note that this requires that /mnt/ddev_config be mounted 10 | # into the varnish container. 11 | 12 | varnishtest "$@" 13 | -------------------------------------------------------------------------------- /.ddev/commands/varnish/varnishtop: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## #ddev-generated 4 | ## Description: Display Varnish log entry ranking 5 | ## Usage: varnishtop [flags] [args] 6 | ## Example: "ddev varnishtop" 7 | 8 | # This example runs inside the varnish container. 9 | # Note that this requires that /mnt/ddev_config be mounted 10 | # into the varnish container. 11 | 12 | varnishtop "$@" 13 | -------------------------------------------------------------------------------- /.ddev/commands/web/grumphp-command.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Description: Run a GrumPHP command. 4 | ## Usage: grumphp 5 | ## Example: "ddev grumphp" 6 | 7 | php /var/www/html/vendor/bin/grumphp "$@" 8 | -------------------------------------------------------------------------------- /.ddev/commands/web/phpunit-command.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ## Description: Run PHPUnit commands. 4 | ## Usage: phpunit 5 | ## Example: "ddev phpunit" 6 | 7 | php /var/www/html/vendor/bin/phpunit -c /var/www/html/phpunit.xml --testdox 8 | -------------------------------------------------------------------------------- /.ddev/commands/web/syncdb: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ## Description: Sync database from remote environment 3 | ## Usage: syncdb [environment] [options] 4 | ## Example: ddev syncdb main --force 5 | ## ExecRaw: true 6 | ## 7 | ## Options: 8 | ## --force Skip confirmation prompts 9 | ## --backup Create a backup of the local database before overwriting 10 | ## --no-sanitize Skip database sanitization 11 | 12 | # Just call the main syncdb.sh script with all arguments 13 | cd /var/www/html 14 | ./scripts/syncdb.sh "$@" 15 | -------------------------------------------------------------------------------- /.ddev/config.yaml: -------------------------------------------------------------------------------- 1 | name: drupal-project 2 | type: drupal11 3 | docroot: web 4 | php_version: "8.3" 5 | webserver_type: nginx-fpm 6 | xdebug_enabled: false 7 | additional_hostnames: [] 8 | additional_fqdns: [] 9 | database: 10 | type: mariadb 11 | version: "10.6" 12 | use_dns_when_possible: true 13 | composer_version: "2" 14 | nodejs_version: "20" 15 | # Prevents DDEV from managing settings.php and other Drupal settings files. 16 | disable_settings_management: true 17 | web_environment: 18 | - DB_NAME=db 19 | - DB_USER=db 20 | - DB_PASS=db 21 | - DB_HOST=db 22 | - DRUSH_OPTIONS_URI=https://drupal-project.ddev.site 23 | - ENVIRONMENT_NAME=ddev 24 | - EXEC_GRUMPHP_COMMAND=ddev php 25 | - HASH_SALT=notsosecurehash 26 | - ELASTICSEARCH_HOST=elasticsearch 27 | - VARNISH_ADMIN_HOST=varnish 28 | - VARNISH_ADMIN_PORT=80 29 | - SMTP_ADDRESS=localhost:1025 30 | 31 | corepack_enable: false 32 | hooks: 33 | post-start: 34 | - exec: "composer install" 35 | - exec: "npm ci" 36 | - exec-host: | 37 | # Run the Elasticsearch plugin setup script 38 | ddev exec -s elasticsearch /mnt/ddev_config/elasticsearch/elasticsearch-setup.sh 39 | 40 | # Check for the restart marker file 41 | if [ -f .ddev/elasticsearch/restart_needed ]; then 42 | echo "Elasticsearch plugins installed. Restarting elasticsearch container..." 43 | docker restart ddev-${DDEV_SITENAME}-elasticsearch 44 | rm .ddev/elasticsearch/restart_needed 45 | fi 46 | -------------------------------------------------------------------------------- /.ddev/docker-compose.adminer.yaml: -------------------------------------------------------------------------------- 1 | #ddev-generated 2 | services: 3 | adminer: 4 | container_name: ddev-${DDEV_SITENAME}-adminer 5 | image: ${ADMINER_DOCKER_IMAGE:-adminer:standalone} 6 | environment: 7 | - ADMINER_DEFAULT_DRIVER=${ADMINER_DEFAULT_DRIVER:-${DDEV_DATABASE_FAMILY:-server}} 8 | - ADMINER_DEFAULT_SERVER=${ADMINER_DEFAULT_SERVER:-db} 9 | - ADMINER_DEFAULT_DB=${ADMINER_DEFAULT_DB:-db} 10 | - ADMINER_DEFAULT_USERNAME=${ADMINER_DEFAULT_USERNAME:-db} 11 | - ADMINER_DEFAULT_PASSWORD=${ADMINER_DEFAULT_PASSWORD:-db} 12 | - ADMINER_PLUGINS=${ADMINER_PLUGINS:-tables-filter} 13 | - ADMINER_DESIGN=${ADMINER_DESIGN:-} 14 | - VIRTUAL_HOST=$DDEV_HOSTNAME 15 | - HTTP_EXPOSE=9100:8080 16 | - HTTPS_EXPOSE=9101:8080 17 | labels: 18 | com.ddev.site-name: ${DDEV_SITENAME} 19 | com.ddev.approot: $DDEV_APPROOT 20 | volumes: 21 | - ".:/mnt/ddev_config" 22 | - "ddev-global-cache:/mnt/ddev-global-cache" 23 | depends_on: 24 | - db 25 | configs: 26 | - source: adminer-index.php 27 | target: /var/www/html/index.php 28 | 29 | configs: 30 | adminer-index.php: 31 | content: | 32 | $$_ENV['ADMINER_DEFAULT_DRIVER'], 41 | 'server' => $$_ENV['ADMINER_DEFAULT_SERVER'], 42 | 'db' => $$_ENV['ADMINER_DEFAULT_DB'], 43 | 'username' => $$_ENV['ADMINER_DEFAULT_USERNAME'], 44 | 'password' => $$_ENV['ADMINER_DEFAULT_PASSWORD'], 45 | ]; 46 | } 47 | include './adminer.php'; 48 | ?> 49 | -------------------------------------------------------------------------------- /.ddev/docker-compose.adminer_norouter.yaml: -------------------------------------------------------------------------------- 1 | #ddev-generated 2 | # If omit_containers[ddev-router] then this file will be replaced 3 | # with another with a `ports` statement to directly expose port 8080 to 9100 4 | services: {} 5 | -------------------------------------------------------------------------------- /.ddev/docker-compose.elasticsearch8.yaml: -------------------------------------------------------------------------------- 1 | #ddev-generated 2 | services: 3 | elasticsearch: 4 | container_name: ddev-${DDEV_SITENAME}-elasticsearch 5 | hostname: ${DDEV_SITENAME}-elasticsearch 6 | image: elasticsearch:8.10.2 7 | expose: 8 | - "9200" 9 | - "9300" 10 | environment: 11 | - ES_JAVA_OPTS=-Xms512m -Xmx512m 12 | - discovery.type=single-node 13 | - bootstrap.memory_lock=true 14 | - VIRTUAL_HOST=$DDEV_HOSTNAME 15 | - HTTP_EXPOSE=9200:9200 16 | - HTTPS_EXPOSE=9201:9200 17 | - ELASTICSEARCH_PLUGINS=analysis-icu 18 | labels: 19 | com.ddev.site-name: ${DDEV_SITENAME} 20 | com.ddev.approot: $DDEV_APPROOT 21 | volumes: 22 | - elasticsearch:/usr/share/elasticsearch/data 23 | - ".:/mnt/ddev_config" 24 | - ./elasticsearch/config/elasticsearch8.yml:/usr/share/elasticsearch/config/elasticsearch.yml 25 | healthcheck: 26 | test: ["CMD-SHELL", "curl --fail -s elasticsearch:9200"] 27 | 28 | volumes: 29 | elasticsearch: 30 | -------------------------------------------------------------------------------- /.ddev/docker-compose.elasticvue.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | elasticvue: 3 | image: "cars10/elasticvue:1.0.4" 4 | #command: /docker-entrypoint.sh nginx -g 'daemon off;' 5 | container_name: ddev-${DDEV_SITENAME}-elasticvue 6 | labels: 7 | com.ddev.site-name: ${DDEV_SITENAME} 8 | com.ddev.approot: ${DDEV_APPROOT} 9 | environment: 10 | - 'ELASTICVUE_CLUSTERS=[{"name": "dev cluster", "uri": "http://${DDEV_SITENAME}.ddev.site:9200/", "password": "", "user": ""}]' 11 | - VIRTUAL_HOST=$DDEV_HOSTNAME 12 | - HTTP_EXPOSE=9005:8080 13 | web: 14 | links: 15 | - elasticvue:elasticvue 16 | - elasticsearch:elasticsearch -------------------------------------------------------------------------------- /.ddev/docker-compose.varnish.yaml: -------------------------------------------------------------------------------- 1 | #ddev-generated 2 | services: 3 | varnish: 4 | container_name: ddev-${DDEV_SITENAME}-varnish 5 | image: varnish:6.0 6 | # These labels ensure this service is discoverable by ddev. 7 | labels: 8 | com.ddev.site-name: ${DDEV_SITENAME} 9 | com.ddev.approot: $DDEV_APPROOT 10 | environment: 11 | # This defines the host name the service should be accessible from. This 12 | # will be sitename.ddev.site. 13 | # This is the first half of the trick that puts varnish "in front of" the 14 | # web container, just by switching the names. 15 | - VIRTUAL_HOST=$DDEV_HOSTNAME 16 | # This defines the ports the service should be accessible from at 17 | # sitename.ddev.site. 18 | - HTTPS_EXPOSE=443:80,8026:8025 19 | - HTTP_EXPOSE=80:80,8025:8025 20 | volumes: 21 | # This exposes a mount to the host system `.ddev/varnish` directory where 22 | # your default.vcl should be. 23 | - "./varnish:/etc/varnish" 24 | - ".:/mnt/ddev_config" 25 | depends_on: 26 | - web 27 | # Add mailhog support 28 | expose: 29 | - "8025" 30 | entrypoint: 31 | /usr/local/bin/docker-varnish-entrypoint -a 0.0.0.0:8025 -------------------------------------------------------------------------------- /.ddev/docker-compose.varnish_extras.yaml: -------------------------------------------------------------------------------- 1 | #ddev-generated 2 | # This is the second half of the trick that puts varnish "in front of" the web 3 | # container, just by switching the names. 4 | services: 5 | web: 6 | environment: 7 | - VIRTUAL_HOST=novarnish.drupal-project.ddev.site 8 | -------------------------------------------------------------------------------- /.ddev/elasticsearch/config/elasticsearch8.yml: -------------------------------------------------------------------------------- 1 | # This file contains the configuration settings for Elasticsearch 8. 2 | # For more information, see https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html 3 | 4 | # https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#cluster-name 5 | cluster.name: "docker-cluster" 6 | 7 | # https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#network.host 8 | network.host: 0.0.0.0 9 | 10 | # Disable security features 11 | # https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#general-security-settings 12 | xpack.security.enabled: false 13 | xpack.security.autoconfiguration.enabled: false 14 | xpack.security.enrollment.enabled: false 15 | 16 | # CORS settings 17 | http.cors.enabled: true 18 | http.cors.allow-origin: "*" 19 | -------------------------------------------------------------------------------- /.ddev/elasticsearch/elasticsearch-setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Exit if no plugins specified 4 | [ -z "$ELASTICSEARCH_PLUGINS" ] && echo "No plugins specified in ELASTICSEARCH_PLUGINS" && exit 0 5 | 6 | echo "Installing Elasticsearch plugins: $ELASTICSEARCH_PLUGINS" 7 | needs_restart=false 8 | 9 | # Process each plugin 10 | for plugin in $ELASTICSEARCH_PLUGINS; do 11 | # Skip if already installed 12 | if bin/elasticsearch-plugin list | grep -q "$plugin"; then 13 | echo "✓ Plugin $plugin already installed" 14 | continue 15 | fi 16 | 17 | # Install plugin 18 | echo "Installing $plugin plugin..." 19 | if bin/elasticsearch-plugin install "$plugin"; then 20 | chown -R elasticsearch:root "/usr/share/elasticsearch/plugins/$plugin" && \ 21 | chmod -R 755 "/usr/share/elasticsearch/plugins/$plugin" && \ 22 | echo "✓ Plugin $plugin installed successfully" && \ 23 | needs_restart=true 24 | else 25 | echo "✗ Failed to install plugin $plugin" 26 | exit 1 27 | fi 28 | done 29 | 30 | # Signal for restart if needed 31 | if [ "$needs_restart" = true ]; then 32 | echo "New plugins were installed. Elasticsearch needs to be restarted." 33 | 34 | # Create a marker file in the mounted config directory (visible to host) 35 | touch /mnt/ddev_config/elasticsearch/restart_needed 36 | fi 37 | 38 | exit 0 39 | -------------------------------------------------------------------------------- /.ddev/varnish/default.vcl: -------------------------------------------------------------------------------- 1 | # For a more advanced example see https://github.com/mattiasgeniar/varnish-6.0-configuration-templates 2 | vcl 4.1; 3 | import std; 4 | 5 | # Define an ACL for trusted purge clients 6 | acl purge { 7 | "127.0.0.1"; 8 | "::1"; 9 | "web"; 10 | } 11 | 12 | backend default { 13 | .host = "web"; 14 | .port = "80"; 15 | } 16 | 17 | # @see: https://github.com/wunderio/charts/blob/master/drupal/templates/varnish-configmap-vcl.yaml 18 | # The routine when we deliver the HTTP request to the user 19 | # Last chance to modify headers that are sent to the client. 20 | sub vcl_deliver { 21 | # Called before a cached object is delivered to the client. 22 | 23 | # Add debug header to see if it's a HIT/MISS and the number of hits, disable when not needed. 24 | if (obj.hits > 0) { 25 | set resp.http.X-W-Cache = "HIT"; 26 | set resp.http.X-W-Cache-Hits = obj.hits; 27 | } else { 28 | set resp.http.X-W-Cache = "MISS"; 29 | } 30 | } 31 | 32 | sub vcl_recv { 33 | if (std.port(server.ip) == 8025) { 34 | return (synth(750)); 35 | } 36 | 37 | # Handle PURGE requests for Drupal's varnish_purger module 38 | if (req.method == "PURGE") { 39 | # Allow PURGE requests from trusted clients only 40 | if (!client.ip ~ purge) { 41 | return (synth(403, "Access denied.")); 42 | } 43 | 44 | # Purge by Cache-Tags header 45 | if (req.http.Cache-Tags) { 46 | ban("obj.http.Cache-Tags ~ " + req.http.Cache-Tags); 47 | return (synth(200, "Purge executed.")); 48 | } 49 | 50 | # For URL-based purging 51 | return (hash); 52 | } 53 | 54 | # Handle BAN requests for Drupal's cache tags 55 | if (req.method == "BAN") { 56 | # Allow BAN requests from trusted clients only 57 | if (!client.ip ~ purge) { 58 | return (synth(403, "Access denied.")); 59 | } 60 | 61 | # Ban by Cache-Tags header (sent by Drupal's varnish_purger module) 62 | if (req.http.Cache-Tags) { 63 | ban("obj.http.Cache-Tags ~ " + req.http.Cache-Tags); 64 | return (synth(200, "Ban added.")); 65 | } 66 | 67 | return (synth(403, "Invalid ban request")); 68 | } 69 | } 70 | 71 | sub vcl_hit { 72 | if (req.method == "PURGE") { 73 | # We found the object in cache, now invalidate it 74 | set req.http.X-Purge-URL = req.url; 75 | set req.http.X-Purge-Host = req.http.host; 76 | return (synth(200, "Purged " + req.url)); 77 | } 78 | } 79 | 80 | sub vcl_miss { 81 | if (req.method == "PURGE") { 82 | # Object not in cache, but we still respond with a success 83 | set req.http.X-Purge-URL = req.url; 84 | set req.http.X-Purge-Host = req.http.host; 85 | return (synth(200, "Purged " + req.url + " (not in cache)")); 86 | } 87 | } 88 | 89 | sub vcl_synth { 90 | if (resp.status == 750) { 91 | set resp.status = 301; 92 | set resp.http.location = req.http.X-Forwarded-Proto + "://novarnish." + req.http.Host + req.url; 93 | set resp.reason = "Moved"; 94 | return (deliver); 95 | } 96 | } 97 | 98 | # Store the Cache-Tags header from backend responses 99 | sub vcl_backend_response { 100 | if (beresp.http.Cache-Tags) { 101 | set beresp.http.Cache-Tags = beresp.http.Cache-Tags; 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # 2 | # Copy and rename this file to /.lando/.env 3 | # If you need personal variables which are not committed to git, then copy it to 4 | # .env and edit .lando.yml and enable that file to be used. 5 | # 6 | 7 | # A common use case is to supply database creds via the environment. Edit settings.php 8 | # like so: 9 | # 10 | # $databases['default']['default'] = [ 11 | # 'database' => $_ENV['MYSQL_DATABASE'], 12 | # 'driver' => 'mysql', 13 | # 'host' => $_ENV['MYSQL_HOSTNAME'], 14 | # 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', 15 | # 'password' => $_ENV['MYSQL_PASSWORD'], 16 | # 'port' => $_ENV['MYSQL_PORT'], 17 | # 'prefix' => '', 18 | # 'username' => $_ENV['MYSQL_USER'], 19 | # ]; 20 | # 21 | # Uncomment and populate as needed. 22 | # MYSQL_DATABASE= 23 | # MYSQL_HOSTNAME= 24 | # MYSQL_PASSWORD= 25 | # MYSQL_PORT= 26 | # MYSQL_USER= 27 | 28 | # Another common use case is to set Drush's --uri via environment. 29 | # DRUSH_OPTIONS_URI=http://example.com 30 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | *.min.js 4 | *.bundle.js 5 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "airbnb", 4 | "prettier", 5 | "plugin:prettier/recommended" 6 | ], 7 | "plugins": ["prettier"], 8 | "root": true, 9 | "env": { 10 | "es6": true, 11 | "browser": true, 12 | "jest": true 13 | }, 14 | "globals": { 15 | "Drupal": true 16 | }, 17 | "rules": { 18 | "strict": "off", 19 | "prettier/prettier": "error" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: composer 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "03:00" 8 | open-pull-requests-limit: 10 9 | - package-ecosystem: npm 10 | directory: "/" 11 | schedule: 12 | interval: daily 13 | time: "03:00" 14 | open-pull-requests-limit: 10 15 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Ticket QAG-XXX 2 | 3 | ## Changes 4 | 5 | - [Explain what changes were made in this PR] 6 | 7 | ## Testing 8 | 9 | Enviroment: [Feature environment URL] 10 | 11 | Login: [`drush uli` command] 12 | 13 | Instructions: 14 | 15 | - [Step by step instructions to test the changes] 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore directories generated by Composer 2 | /.editorconfig 3 | /.gitattributes 4 | /vendor/ 5 | /web/_ping.php 6 | /web/.gitignore 7 | /web/core/ 8 | /web/modules/.gitignore 9 | /web/modules/contrib/ 10 | /web/themes/.gitignore 11 | /web/themes/contrib/ 12 | /web/profiles/.gitignore 13 | /web/profiles/contrib/ 14 | /web/libraries/ 15 | /web/sites/.gitignore 16 | /web/sites/default/.gitignore 17 | 18 | # Ignore local configuration 19 | /web/sites/*/settings.local.php 20 | 21 | # Ignore Drupal's file directory 22 | /web/sites/*/files/ 23 | 24 | # Ignore testing directories. 25 | /web/sites/simpletest 26 | /web/tmp 27 | 28 | # Ignore database dumps 29 | *.sql 30 | *.sql.gz 31 | 32 | # Ignore files generated by PhpStorm 33 | /.idea/ 34 | 35 | # Ignore files generated by OS 36 | .DS_Store 37 | 38 | # Ignore .env files as they are personal 39 | /.env 40 | 41 | # Ignore node modules 42 | node_modules 43 | 44 | # Ignore Lando data volumes 45 | /.lando/data-* 46 | -------------------------------------------------------------------------------- /.lando.yml: -------------------------------------------------------------------------------- 1 | name: drupal-project 2 | recipe: drupal11 3 | 4 | config: 5 | php: "8.3" 6 | via: nginx 7 | webroot: web 8 | xdebug: off 9 | config: 10 | php: .lando/php.ini 11 | database: .lando/my.cnf 12 | 13 | tooling: 14 | composer: 15 | description: "Runs Composer commands" 16 | cmd: 17 | - appserver: /usr/local/bin/composer 18 | drupal: 19 | description: "Runs Drupal core script with provided arguments" 20 | cmd: 21 | - appserver: /app/.lando/drupal.sh 22 | grumphp: 23 | description: "Runs grumphp commands" 24 | cmd: 25 | - appserver: ./vendor/bin/grumphp 26 | npm: 27 | description: "Runs npm commands" 28 | service: node 29 | phpunit: 30 | description: "Runs PHPUnit commands" 31 | user: www-data 32 | cmd: 33 | - appserver: "php /app/vendor/bin/phpunit -c /app/phpunit.xml --testdox" 34 | regenerate-phpunit-config: 35 | description: "Regenerates fresh PHPUnit configuration." 36 | cmd: 37 | - appserver: /app/.lando/phpunit.sh 38 | syncdb: 39 | description: "Synchronizes local database with remote environment" 40 | cmd: 41 | - appserver: /app/scripts/syncdb.sh 42 | varnishadm: 43 | description: "Runs varnishadm commands" 44 | service: varnish 45 | user: root 46 | xdebug: 47 | description: "Loads Xdebug in the selected mode" 48 | cmd: 49 | - appserver: /app/.lando/xdebug.sh 50 | user: root 51 | 52 | services: 53 | adminer: 54 | type: lando 55 | services: 56 | image: dehy/adminer 57 | command: /bin/s6-svscan /etc/services.d 58 | overrides: 59 | volumes: 60 | # Mount Adminer configuration files. 61 | - ./.lando/adminer.conf:/etc/php8/php-fpm.d/www_overrides.conf 62 | - ./.lando/adminer.php:/var/www/html/adminer.php 63 | run_as_root: 64 | - /app/.lando/adminer.sh 65 | appserver: 66 | # Install dependencies when building lando. 67 | build: 68 | - "composer install" 69 | # Uncomment if you need a specific timezone for example for integrations 70 | #run_as_root: 71 | # - ln -snf /usr/share/zoneinfo/Europe/Helsinki /etc/localtime 72 | # - echo "Europe/Helsinki" > /etc/timezone 73 | # Uncomment this if you need to edit files inside the container 74 | #build_as_root: 75 | # - apt update -y 76 | # - apt install vim -y 77 | overrides: 78 | environment: 79 | # Database credentials are defined in the .lando/.env file 80 | # to be available in both the adminer and appserver containers. 81 | DRUSH_OPTIONS_URI: https://drupal-project.lndo.site 82 | SMTP_ADDRESS: mailpit:1025 83 | ENVIRONMENT_NAME: lando 84 | EXEC_GRUMPHP_COMMAND: "lando php" 85 | HASH_SALT: notsosecurehash 86 | ELASTICSEARCH_HOST: elasticsearch 87 | VARNISH_ADMIN_HOST: varnish 88 | # Support debugging with XDEBUG 3. 89 | XDEBUG_MODE: 90 | PHP_IDE_CONFIG: serverName=appserver 91 | # PHPUnit settings. @see: .lando/phpunit.sh 92 | MINK_DRIVER_ARGS_WEBDRIVER: '["chrome", {"browserName":"chrome","chromeOptions":{"args":["--disable-gpu","--headless"]}}, "http://chrome:9515"]' 93 | chrome: 94 | type: lando 95 | services: 96 | image: drupalci/webdriver-chromedriver:production 97 | command: chromedriver --log-path=/tmp/chromedriver.log --verbose --whitelisted-ips= 98 | database: 99 | type: "mariadb:10.6.20" 100 | # Assign a static port if you need to access the database from your host machine. 101 | # @see: https://docs.lando.dev/guides/external-access.html 102 | # portforward: 34567 103 | # elasticsearch: 104 | # type: lando 105 | # services: 106 | # image: "docker.elastic.co/elasticsearch/elasticsearch:8.10.2" 107 | # command: "/bin/tini -- /usr/local/bin/docker-entrypoint.sh eswrapper" 108 | # user: elasticsearch 109 | # environment: 110 | # ES_JAVA_OPTS: "-Xms512m -Xmx512m" 111 | # discovery.type: "single-node" 112 | # bootstrap.memory_lock: "true" 113 | # http.cors.enabled: "true" 114 | # http.cors.allow-origin: "'*'" 115 | # # Disable authentication in local development 116 | # xpack.security.enabled: "false" 117 | # xpack.security.enrollment.enabled: "false" 118 | # ulimits: 119 | # memlock: 120 | # soft: "-1" 121 | # hard: "-1" 122 | # ports: 123 | # - "9200:9200" 124 | # volumes: 125 | # - esdata:/usr/share/elasticsearch/data 126 | # # Install ES plugins. 127 | # build_as_root: 128 | # - elasticsearch-plugin install analysis-icu 129 | # volumes: 130 | # esdata: 131 | # driver: local 132 | # kibana: 133 | # type: lando 134 | # services: 135 | # image: "docker.elastic.co/kibana/kibana:8.10.2" 136 | # command: "/bin/tini -- /usr/local/bin/kibana-docker" 137 | # user: kibana 138 | # ports: 139 | # - "5601:5601" 140 | mailpit: 141 | type: lando 142 | api: 3 143 | ssl: true 144 | sslExpose: false 145 | services: 146 | image: axllent/mailpit 147 | volumes: 148 | - .lando/data-mailpit:/data 149 | ports: 150 | - "8025" # Web UI 151 | - "1025" # SMTP 152 | environment: 153 | MP_MAX_MESSAGES: 5000 154 | MP_DATA_FILE: /data/mailpit.db 155 | MP_SMTP_AUTH_ACCEPT_ANY: 1 156 | MP_SMTP_AUTH_ALLOW_INSECURE: 1 157 | command: "/mailpit" 158 | node: 159 | type: "node:20" 160 | build: 161 | - "npm install" 162 | varnish: 163 | type: "varnish:6" 164 | backends: 165 | - appserver_nginx 166 | config: 167 | vcl: .lando/varnish.vcl 168 | ssl: true 169 | overrides: 170 | environment: 171 | ADMIN_PORT: ":6082" 172 | VARNISH_ALLOW_UNRESTRICTED_PURGE: "true" 173 | 174 | proxy: 175 | adminer: 176 | - adminer.drupal-project.lndo.site 177 | mailpit: 178 | - mail.lndo.site:8025 179 | # elasticsearch: 180 | # - elasticsearch.lndo.site:9200 181 | # kibana: 182 | # - kibana.lndo.site:5601 183 | varnish: 184 | - varnish.drupal-project.lndo.site 185 | 186 | events: 187 | post-db-import: 188 | - appserver: "cd $LANDO_WEBROOT && drush cache:rebuild -y && drush @local user:login" 189 | 190 | env_file: 191 | - .lando/.env 192 | # uncomment when you need a personal .env file which is not committed to the repository 193 | # - .env 194 | 195 | # Tested with Lando version 196 | version: v3.21 197 | -------------------------------------------------------------------------------- /.lando/.env: -------------------------------------------------------------------------------- 1 | # Inject additional environment variables into every Lando service 2 | # @see: https://docs.lando.dev/config/env.html#environment-files 3 | DB_NAME=drupal11 4 | DB_USER=drupal11 5 | DB_PASS=drupal11 6 | DB_HOST=database 7 | -------------------------------------------------------------------------------- /.lando/adminer.conf: -------------------------------------------------------------------------------- 1 | ; Override Adminer default PHP-FPM settings. 2 | [www] 3 | 4 | ; Allow environment variables to be passed to PHP-FPM. 5 | clear_env = no 6 | -------------------------------------------------------------------------------- /.lando/adminer.php: -------------------------------------------------------------------------------- 1 | Adminer'; 22 | } 23 | 24 | /** 25 | * Overwrite the connection parameters. 26 | */ 27 | public function credentials() 28 | { 29 | // Server, username and password for connecting to database. 30 | return array(getenv('DB_HOST'), getenv('DB_USER'), getenv('DB_PASS')); 31 | } 32 | 33 | /** 34 | * Overwrite the user authorization. 35 | */ 36 | public function login($login, $password) 37 | { 38 | // Don't validate credentials submitted via form. 39 | return true; 40 | } 41 | 42 | /** 43 | * Adjust the original form to autologin and preselect Drupal database. 44 | */ 45 | function loginForm() { 46 | ob_start(); 47 | Adminer::loginForm(); 48 | $original_form = ob_get_clean(); 49 | 50 | // Preselect Drupal db. 51 | $original_form = str_replace('name="auth[db]" value=""', 'name="auth[db]" value="' . getenv('DB_NAME') . '"', $original_form); 52 | 53 | // Add id attribute to the submit button to target it with js in next 54 | // section. 55 | $submit_button_id = 'adminer-login-submit-button'; 56 | echo str_replace("type='submit'", "type='submit' id='{$submit_button_id}'", $original_form); 57 | 58 | // Add js to autosubmit the form. 59 | echo ''; 60 | echo 'document.addEventListener("DOMContentLoaded", function() {'; 61 | echo "var submit_button = document.getElementById('{$submit_button_id}');"; 62 | 63 | // Check if the submit button is found. 64 | echo 'if (submit_button) {'; 65 | // Trigger a click event on the submit button to submit the form'; 66 | echo 'submit_button.click();'; 67 | echo '}'; 68 | echo '});'; 69 | echo ''; 70 | } 71 | 72 | } 73 | 74 | return new AutoLogin; 75 | } 76 | 77 | include_once './adminer_library.php'; 78 | -------------------------------------------------------------------------------- /.lando/adminer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -exu 3 | 4 | # Copy & rename versioned Adminer library file. 5 | cd /var/www/html 6 | find . -type f -name 'adminer-*' -print0 | xargs -0 -I{} cp -f {} adminer_library.php 7 | 8 | chown -R www-data:www-data /var/www/html 9 | chmod -R +x /var/www/html 10 | -------------------------------------------------------------------------------- /.lando/drupal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Description: run the Drupal core script with provided arguments 4 | ## Usage: drupal 5 | ## Example: lando drupal generate-theme my-theme 6 | 7 | cd ${LANDO_WEBROOT} 8 | 9 | php core/scripts/drupal "$@" 10 | -------------------------------------------------------------------------------- /.lando/my.cnf: -------------------------------------------------------------------------------- 1 | [mysqld] 2 | # @see: https://www.drupal.org/docs/getting-started/system-requirements/setting-the-mysql-transaction-isolation-level 3 | transaction_isolation="READ-COMMITTED" 4 | -------------------------------------------------------------------------------- /.lando/php.ini: -------------------------------------------------------------------------------- 1 | [PHP] 2 | 3 | ; Xdebug settings required for PhpStorm. 4 | xdebug.start_with_request = yes 5 | -------------------------------------------------------------------------------- /.lando/phpunit.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -exu 3 | 4 | # Configure PHPUnit tests for the Lando environment. 5 | # @see: https://agile.coop/blog/drupal-phpunit-tests-lando/ 6 | # 7 | # Initially this was part of lando build process but we decided 8 | # to commit the phpunit.xml. Still the functionality of this 9 | # script could be useful as it always gets the latest distributed 10 | # configuration from core. From time to time it wouldn't hurt 11 | # try and update the file with 'lando regenerate-phpunit-config'. 12 | 13 | PHPUNIT_CONFIG=/app/phpunit.xml 14 | 15 | if [ -f "$PHPUNIT_CONFIG" ]; then 16 | rm "$PHPUNIT_CONFIG" 17 | fi 18 | 19 | cd /app 20 | cp -n web/core/phpunit.xml.dist "$PHPUNIT_CONFIG" 21 | sed -i 's|tests\/bootstrap\.php|./web/core/tests/bootstrap.php|g' "$PHPUNIT_CONFIG" 22 | sed -i 's|\.\/tests\/|./web/core/tests/|g' "$PHPUNIT_CONFIG" 23 | sed -i 's|directory>\.\/|directory>./web/core/|g' "$PHPUNIT_CONFIG" 24 | sed -i 's|directory>\.\.\/|directory>./web/core/|g' "$PHPUNIT_CONFIG" 25 | sed -i 's|||g' "$PHPUNIT_CONFIG" 26 | sed -i 's|||g' "$PHPUNIT_CONFIG" 27 | sed -i 's|.\/web\/core\/tests\/TestSuites\/UnitTestSuite.php<\/file>|.\/web\/modules\/custom\/*\/tests\/src\/Unit<\/directory>|g' "$PHPUNIT_CONFIG" 28 | sed -i 's|.\/web\/core\/tests\/TestSuites\/KernelTestSuite.php<\/file>|.\/web\/modules\/custom\/*\/tests\/src\/Kernel<\/directory>|g' "$PHPUNIT_CONFIG" 29 | sed -i 's|.\/web\/core\/tests\/TestSuites\/FunctionalTestSuite.php<\/file>|.\/web\/modules\/custom\/*\/tests\/src\/Functional<\/directory>|g' "$PHPUNIT_CONFIG" 30 | sed -i 's|.\/web\/core\/tests\/TestSuites\/FunctionalJavascriptTestSuite.php<\/file>|.\/web\/modules\/custom\/*\/tests\/src\/FunctionalJavascript<\/directory>|g' "$PHPUNIT_CONFIG" 31 | sed -i '/.\/web\/core\/tests\/TestSuites\/BuildTestSuite.php<\/file>/d' "$PHPUNIT_CONFIG" 32 | vendor/bin/phpunit --migrate-configuration 33 | rm phpunit.xml.bak 34 | -------------------------------------------------------------------------------- /.lando/varnish.vcl: -------------------------------------------------------------------------------- 1 | # @see: https://github.com/wunderio/charts/blob/master/drupal/templates/varnish-configmap-vcl.yaml 2 | # The routine when we deliver the HTTP request to the user 3 | # Last chance to modify headers that are sent to the client 4 | sub vcl_deliver { 5 | # Called before a cached object is delivered to the client. 6 | 7 | # Add debug header to see if it's a HIT/MISS and the number of hits, disable when not needed. 8 | if (obj.hits > 0) { 9 | set resp.http.X-W-Cache = "HIT"; 10 | set resp.http.X-W-Cache-Hits = obj.hits; 11 | } else { 12 | set resp.http.X-W-Cache = "MISS"; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.lando/xdebug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Helper script to control Xdebug. 5 | # 6 | # Usage: 7 | # lando xdebug 8 | # where modes are listed at https://xdebug.org/docs/all_settings#mode. 9 | # 10 | 11 | set -eu 12 | 13 | # List of allowed Xdebug modes. 14 | ARRAY_ALLOWED_XDEBUG_MODES=( 15 | "off" 16 | "develop" 17 | "coverage" 18 | "debug" 19 | "gcstats" 20 | "profile" 21 | "trace" 22 | ) 23 | 24 | # Split the commands from imput to array using comma as delimiter. 25 | array_modes_from_input=$(echo "${1-}" | tr "," "\n") 26 | 27 | found_invalid_mode=false 28 | for mode_from_input in ${array_modes_from_input[@]}; do 29 | is_valid_mode=false 30 | for value in ${ARRAY_ALLOWED_XDEBUG_MODES[@]}; do 31 | if [ "$mode_from_input" == "$value" ]; then 32 | is_valid_mode=true 33 | fi 34 | done 35 | 36 | if [ "$is_valid_mode" == 'false' ] && [ "$found_invalid_mode" == 'false' ]; then 37 | found_invalid_mode=true 38 | fi 39 | done 40 | 41 | if [ "$#" -ne 1 ]; then 42 | echo "Xdebug has been turned off, please use the following syntax: 'lando xdebug '." 43 | echo "Valid modes: https://xdebug.org/docs/all_settings#mode." 44 | echo xdebug.mode = off > /usr/local/etc/php/conf.d/zzz-lando-xdebug.ini 45 | pkill -o -USR2 php-fpm 46 | elif [ "$found_invalid_mode" == 'true' ]; then 47 | echo "'$1' is invalid mode for Xdebug. Valid modes are: https://xdebug.org/docs/all_settings#mode." 48 | else 49 | mode="$1" 50 | echo xdebug.mode = "$mode" > /usr/local/etc/php/conf.d/zzz-lando-xdebug.ini 51 | pkill -o -USR2 php-fpm 52 | echo "Xdebug is loaded in "$mode" mode." 53 | fi 54 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": true, 3 | "MD033": { 4 | "allowed_elements": ["details", "summary"] 5 | }, 6 | "MD013": { 7 | "line_length": 300, 8 | "code_blocks": false, 9 | "tables": false, 10 | "headings": false 11 | }, 12 | "MD032": false 13 | } 14 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } 5 | -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-standard", 4 | "stylelint-config-prettier" 5 | ], 6 | "plugins": ["stylelint-prettier"], 7 | "rules": { 8 | "at-rule-no-unknown": [ true, { 9 | "ignoreAtRules": [ 10 | "include", 11 | "mixin", 12 | "extend", 13 | "if", 14 | "else", 15 | "each", 16 | "content", 17 | "import", 18 | "function", 19 | "return" 20 | ] 21 | }], 22 | "no-descending-specificity": null, 23 | "function-calc-no-invalid": null, 24 | "prettier/prettier": true 25 | } 26 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "stylelint.vscode-stylelint" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Listen for XDebug (9003)", 6 | "type": "php", 7 | "request": "launch", 8 | "port": 9003, 9 | "log": true, 10 | "pathMappings": { 11 | "/app/": "${workspaceFolder}/" 12 | } 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.fixAll.eslint": "explicit", 4 | "source.fixAll.stylelint": "explicit" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wunderio/drupal-project", 3 | "description": "Wunder's template for Drupal projects.", 4 | "type": "project", 5 | "license": "GPL-2.0-or-later", 6 | "homepage": "https://www.drupal.org/project/drupal", 7 | "support": { 8 | "docs": "https://www.drupal.org/docs/user_guide/en/index.html", 9 | "chat": "https://www.drupal.org/node/314178" 10 | }, 11 | "repositories": [ 12 | { 13 | "type": "composer", 14 | "url": "https://packages.drupal.org/8" 15 | } 16 | ], 17 | "require": { 18 | "php": ">=8.3", 19 | "composer/installers": "^2.3", 20 | "cweagans/composer-patches": "^1.7", 21 | "drupal/admin_toolbar": "^3.5", 22 | "drupal/config_split": "^2.0", 23 | "drupal/core-composer-scaffold": "^11.1", 24 | "drupal/core-recommended": "^11.1", 25 | "drupal/monolog": "^3.0", 26 | "drupal/purge": "^3.6", 27 | "drupal/simplei": "^3.0", 28 | "drupal/stage_file_proxy": "^3.1", 29 | "drupal/varnish_purge": "^2.3", 30 | "drush/drush": "^13.3", 31 | "vlucas/phpdotenv": "^5.6", 32 | "wunderio/drupal-ping": "^2.5", 33 | "wunderio/updates_log": "^2.5" 34 | }, 35 | "require-dev": { 36 | "drupal/core-dev": "^11.1", 37 | "wunderio/code-quality": "^3.0" 38 | }, 39 | "conflict": { 40 | "drupal/drupal": "*" 41 | }, 42 | "minimum-stability": "dev", 43 | "prefer-stable": true, 44 | "config": { 45 | "allow-plugins": { 46 | "composer/installers": true, 47 | "cweagans/composer-patches": true, 48 | "dealerdirect/phpcodesniffer-composer-installer": true, 49 | "drupal/core-composer-scaffold": true, 50 | "koodimonni/composer-dropin-installer": true, 51 | "php-http/discovery": true, 52 | "phpro/grumphp": true, 53 | "phpstan/extension-installer": true, 54 | "tbachert/spi": true 55 | }, 56 | "discard-changes": true, 57 | "process-timeout": 0, 58 | "sort-packages": true 59 | }, 60 | "autoload": { 61 | "files": ["load.environment.php"] 62 | }, 63 | "extra": { 64 | "drupal-scaffold": { 65 | "locations": { 66 | "web-root": "web/" 67 | }, 68 | "file-mapping": { 69 | "[web-root]/sites/development.services.yml": false 70 | } 71 | }, 72 | "installer-paths": { 73 | "web/core": [ 74 | "type:drupal-core" 75 | ], 76 | "web/libraries/{$name}": [ 77 | "type:drupal-library" 78 | ], 79 | "web/modules/contrib/{$name}": [ 80 | "type:drupal-module" 81 | ], 82 | "web/profiles/contrib/{$name}": [ 83 | "type:drupal-profile" 84 | ], 85 | "web/themes/contrib/{$name}": [ 86 | "type:drupal-theme" 87 | ], 88 | "drush/Commands/{$name}": [ 89 | "type:drupal-drush" 90 | ], 91 | "web/modules/custom/{$name}": [ 92 | "type:drupal-custom-module" 93 | ], 94 | "web/profiles/custom/{$name}": [ 95 | "type:drupal-custom-profile" 96 | ], 97 | "web/themes/custom/{$name}": [ 98 | "type:drupal-custom-theme" 99 | ] 100 | }, 101 | "composer-exit-on-patch-failure": true, 102 | "patches": {}, 103 | "dropin-paths": { 104 | "web/": [ 105 | "type:web-dropin", 106 | "package:wunderio/drupal-ping:_ping.php" 107 | ] 108 | } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /config/local/.htaccess: -------------------------------------------------------------------------------- 1 | # Deny all requests from Apache 2.4+. 2 | 3 | Require all denied 4 | 5 | 6 | # Deny all requests from Apache 2.0-2.2. 7 | 8 | Deny from all 9 | 10 | 11 | # Turn off all options we don't need. 12 | Options -Indexes -ExecCGI -Includes -MultiViews 13 | 14 | # Set the catch-all handler to prevent scripts from being executed. 15 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 16 | 17 | # Override the handler again if we're run later in the evaluation list. 18 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 19 | 20 | 21 | # If we know how to do it safely, disable the PHP engine entirely. 22 | 23 | php_flag engine off 24 | -------------------------------------------------------------------------------- /config/local/announcements_feed.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: 0G5pZBcxbg8ONYzNLd1RJIsvuFFewm9htnS4I-ABKJ8 3 | max_age: 86400 4 | cron_interval: 21600 5 | limit: 10 6 | -------------------------------------------------------------------------------- /config/local/dblog.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: e883aGsrt1wFrsydlYU584PZONCSfRy0DtkZ9KzHb58 3 | row_limit: 1000 4 | -------------------------------------------------------------------------------- /config/local/stage_file_proxy.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: LqXuXXQCTd1NWw7dGLef0PCi3_aEEWQuogAblo4hHaE 3 | hotlink: false 4 | origin: '' 5 | origin_dir: '' 6 | use_imagecache_root: true 7 | proxy_headers: '' 8 | verify: true 9 | excluded_extensions: '' 10 | -------------------------------------------------------------------------------- /config/main/.htaccess: -------------------------------------------------------------------------------- 1 | # Deny all requests from Apache 2.4+. 2 | 3 | Require all denied 4 | 5 | 6 | # Deny all requests from Apache 2.0-2.2. 7 | 8 | Deny from all 9 | 10 | 11 | # Turn off all options we don't need. 12 | Options -Indexes -ExecCGI -Includes -MultiViews 13 | 14 | # Set the catch-all handler to prevent scripts from being executed. 15 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 16 | 17 | # Override the handler again if we're run later in the evaluation list. 18 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 19 | 20 | 21 | # If we know how to do it safely, disable the PHP engine entirely. 22 | 23 | php_flag engine off 24 | -------------------------------------------------------------------------------- /config/main/stage_file_proxy.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: LqXuXXQCTd1NWw7dGLef0PCi3_aEEWQuogAblo4hHaE 3 | hotlink: false 4 | origin: '' 5 | origin_dir: '' 6 | use_imagecache_root: true 7 | proxy_headers: '' 8 | verify: true 9 | excluded_extensions: '' 10 | -------------------------------------------------------------------------------- /config/production/.htaccess: -------------------------------------------------------------------------------- 1 | # Deny all requests from Apache 2.4+. 2 | 3 | Require all denied 4 | 5 | 6 | # Deny all requests from Apache 2.0-2.2. 7 | 8 | Deny from all 9 | 10 | 11 | # Turn off all options we don't need. 12 | Options -Indexes -ExecCGI -Includes -MultiViews 13 | 14 | # Set the catch-all handler to prevent scripts from being executed. 15 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 16 | 17 | # Override the handler again if we're run later in the evaluation list. 18 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 19 | 20 | 21 | # If we know how to do it safely, disable the PHP engine entirely. 22 | 23 | php_flag engine off 24 | -------------------------------------------------------------------------------- /config/silta/.htaccess: -------------------------------------------------------------------------------- 1 | # Deny all requests from Apache 2.4+. 2 | 3 | Require all denied 4 | 5 | 6 | # Deny all requests from Apache 2.0-2.2. 7 | 8 | Deny from all 9 | 10 | 11 | # Turn off all options we don't need. 12 | Options -Indexes -ExecCGI -Includes -MultiViews 13 | 14 | # Set the catch-all handler to prevent scripts from being executed. 15 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 16 | 17 | # Override the handler again if we're run later in the evaluation list. 18 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 19 | 20 | 21 | # If we know how to do it safely, disable the PHP engine entirely. 22 | 23 | php_flag engine off 24 | -------------------------------------------------------------------------------- /config/silta/dblog.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: e883aGsrt1wFrsydlYU584PZONCSfRy0DtkZ9KzHb58 3 | row_limit: 1000 4 | -------------------------------------------------------------------------------- /config/silta/stage_file_proxy.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: LqXuXXQCTd1NWw7dGLef0PCi3_aEEWQuogAblo4hHaE 3 | hotlink: false 4 | origin: '' 5 | origin_dir: '' 6 | use_imagecache_root: true 7 | proxy_headers: '' 8 | verify: true 9 | excluded_extensions: '' 10 | -------------------------------------------------------------------------------- /config/sync/.htaccess: -------------------------------------------------------------------------------- 1 | # Deny all requests from Apache 2.4+. 2 | 3 | Require all denied 4 | 5 | 6 | # Deny all requests from Apache 2.0-2.2. 7 | 8 | Deny from all 9 | 10 | 11 | # Turn off all options we don't need. 12 | Options -Indexes -ExecCGI -Includes -MultiViews 13 | 14 | # Set the catch-all handler to prevent scripts from being executed. 15 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 16 | 17 | # Override the handler again if we're run later in the evaluation list. 18 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 19 | 20 | 21 | # If we know how to do it safely, disable the PHP engine entirely. 22 | 23 | php_flag engine off 24 | -------------------------------------------------------------------------------- /config/sync/admin_toolbar.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: jvTSppzcgH5wnzBhX5xnAExcp2I1CzkQ_aky65XNfYI 3 | menu_depth: 4 4 | -------------------------------------------------------------------------------- /config/sync/admin_toolbar_tools.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: WgdZsrd_5w9jlmcHV4R9dD2tG9OZEkYo4I_O8h7Gq8Q 3 | max_bundle_number: 20 4 | hoverintent_functionality: true 5 | show_local_tasks: false 6 | -------------------------------------------------------------------------------- /config/sync/automated_cron.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: fUksROt4FfkAU9BV4hV2XvhTBSS2nTNrZS4U7S-tKrs 3 | interval: 10800 4 | -------------------------------------------------------------------------------- /config/sync/block.block.claro_breadcrumbs.yml: -------------------------------------------------------------------------------- 1 | uuid: 651e07ca-4570-40dd-8a7b-672eda40beba 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - claro 9 | _core: 10 | default_config_hash: NjcxOBrPOiK5-38t56DwFBDVY4yer7YSlbRWXFuHe7A 11 | id: claro_breadcrumbs 12 | theme: claro 13 | region: breadcrumb 14 | weight: 0 15 | provider: null 16 | plugin: system_breadcrumb_block 17 | settings: 18 | id: system_breadcrumb_block 19 | label: Breadcrumbs 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.claro_content.yml: -------------------------------------------------------------------------------- 1 | uuid: 1bea4578-118d-46ed-b612-d0fee5088884 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - claro 9 | _core: 10 | default_config_hash: a0Yyx1GeyKarZ4T_yXQBR_ZFKnXiFLtxAb6gWLd8nr0 11 | id: claro_content 12 | theme: claro 13 | region: content 14 | weight: 0 15 | provider: null 16 | plugin: system_main_block 17 | settings: 18 | id: system_main_block 19 | label: 'Main page content' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.claro_help.yml: -------------------------------------------------------------------------------- 1 | uuid: 46be1d31-9fa7-449e-8414-c0610565f720 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - help 7 | theme: 8 | - claro 9 | _core: 10 | default_config_hash: jccFSSVqV0WCDb6NtML1VWAWTtDbZ-zn5YgTRMgMrIM 11 | id: claro_help 12 | theme: claro 13 | region: help 14 | weight: 0 15 | provider: null 16 | plugin: help_block 17 | settings: 18 | id: help_block 19 | label: Help 20 | label_display: '0' 21 | provider: help 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.claro_local_actions.yml: -------------------------------------------------------------------------------- 1 | uuid: 982fbd78-2c66-48f6-b9bc-3b400bafbb9b 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - claro 7 | _core: 8 | default_config_hash: CdXfDmRgAvms7EQovxxWPdYi0GitxeRbVtScYK16ZH0 9 | id: claro_local_actions 10 | theme: claro 11 | region: content 12 | weight: -10 13 | provider: null 14 | plugin: local_actions_block 15 | settings: 16 | id: local_actions_block 17 | label: 'Primary admin actions' 18 | label_display: '0' 19 | provider: core 20 | visibility: { } 21 | -------------------------------------------------------------------------------- /config/sync/block.block.claro_messages.yml: -------------------------------------------------------------------------------- 1 | uuid: c20e81db-ff7d-4716-8aa2-64228dd91958 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - claro 9 | _core: 10 | default_config_hash: '-Ac3ISpIT0PQ-whzD7_dw0SdKi6dAbRFNWdSjOiVDqg' 11 | id: claro_messages 12 | theme: claro 13 | region: highlighted 14 | weight: 0 15 | provider: null 16 | plugin: system_messages_block 17 | settings: 18 | id: system_messages_block 19 | label: 'Status messages' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.claro_page_title.yml: -------------------------------------------------------------------------------- 1 | uuid: c8be8ded-3850-4ade-b12b-8475e2b1b8ba 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - claro 7 | _core: 8 | default_config_hash: fNwDdW063tk_ktzSWzZVeQS9wzvLooVO280BQ9WrsIs 9 | id: claro_page_title 10 | theme: claro 11 | region: header 12 | weight: -30 13 | provider: null 14 | plugin: page_title_block 15 | settings: 16 | id: page_title_block 17 | label: 'Page title' 18 | label_display: '0' 19 | provider: core 20 | visibility: { } 21 | -------------------------------------------------------------------------------- /config/sync/block.block.claro_primary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | uuid: 17d81756-f6eb-4725-878b-618a76c7ac90 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - claro 7 | _core: 8 | default_config_hash: ACjBZI5shAMiiUpsz-inLYVXDqNNXRnSzAWV3kV_8Hw 9 | id: claro_primary_local_tasks 10 | theme: claro 11 | region: header 12 | weight: 0 13 | provider: null 14 | plugin: local_tasks_block 15 | settings: 16 | id: local_tasks_block 17 | label: 'Primary tabs' 18 | label_display: '0' 19 | provider: core 20 | primary: true 21 | secondary: false 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.claro_secondary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | uuid: ae18136a-93fe-4c56-bef1-0f8fc712c4f6 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - claro 7 | _core: 8 | default_config_hash: 2L0geP-ixCbCkEpW6BVF6H7vDUZN4ea07_Y9CociQm4 9 | id: claro_secondary_local_tasks 10 | theme: claro 11 | region: pre_content 12 | weight: 0 13 | provider: null 14 | plugin: local_tasks_block 15 | settings: 16 | id: local_tasks_block 17 | label: 'Secondary tabs' 18 | label_display: '0' 19 | provider: core 20 | primary: false 21 | secondary: true 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_account_menu.yml: -------------------------------------------------------------------------------- 1 | uuid: 28fe7782-3439-4583-bab3-dec5f77d457f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - system.menu.account 7 | module: 8 | - system 9 | theme: 10 | - olivero 11 | _core: 12 | default_config_hash: gmxYWWHmgbe0Pnv8y48ZLSLH5mEHejOjAP6RLxUfdzU 13 | id: olivero_account_menu 14 | theme: olivero 15 | region: secondary_menu 16 | weight: -4 17 | provider: null 18 | plugin: 'system_menu_block:account' 19 | settings: 20 | id: 'system_menu_block:account' 21 | label: 'User account menu' 22 | label_display: '0' 23 | provider: system 24 | level: 1 25 | depth: 1 26 | expand_all_items: false 27 | visibility: { } 28 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_breadcrumbs.yml: -------------------------------------------------------------------------------- 1 | uuid: 311026bd-de9f-49d8-8584-8bb6b614eba1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - olivero 9 | _core: 10 | default_config_hash: VhBzWb7lMRtIOg9G7VSw_0uopi-7zXeHq4vXqqV1HFE 11 | id: olivero_breadcrumbs 12 | theme: olivero 13 | region: breadcrumb 14 | weight: 0 15 | provider: null 16 | plugin: system_breadcrumb_block 17 | settings: 18 | id: system_breadcrumb_block 19 | label: Breadcrumbs 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_content.yml: -------------------------------------------------------------------------------- 1 | uuid: 1a90a148-f6a7-4a7c-ba06-b49309a96324 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - olivero 9 | _core: 10 | default_config_hash: erQSEZF2XUjNmgTl0uNRBzmg18ZGXwUcw2FhApoeuHk 11 | id: olivero_content 12 | theme: olivero 13 | region: content 14 | weight: 0 15 | provider: null 16 | plugin: system_main_block 17 | settings: 18 | id: system_main_block 19 | label: 'Main page content' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_help.yml: -------------------------------------------------------------------------------- 1 | uuid: b1d36a97-1742-416d-ad88-d6be1488d8dd 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - help 7 | theme: 8 | - olivero 9 | _core: 10 | default_config_hash: VfPFqqxfkomud5CO8DUijw85QIl9GIxh_nIxLOYESxg 11 | id: olivero_help 12 | theme: olivero 13 | region: content_above 14 | weight: 0 15 | provider: null 16 | plugin: help_block 17 | settings: 18 | id: help_block 19 | label: Help 20 | label_display: '0' 21 | provider: help 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_main_menu.yml: -------------------------------------------------------------------------------- 1 | uuid: 0d42fd86-a199-4a1e-9d66-c2d6d9ba8d65 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - system.menu.main 7 | module: 8 | - system 9 | theme: 10 | - olivero 11 | _core: 12 | default_config_hash: KWAiziL39uEzmOJEql_wbUP2RtqGceL3WM2CfxhMelE 13 | id: olivero_main_menu 14 | theme: olivero 15 | region: primary_menu 16 | weight: 0 17 | provider: null 18 | plugin: 'system_menu_block:main' 19 | settings: 20 | id: 'system_menu_block:main' 21 | label: 'Main navigation' 22 | label_display: '0' 23 | provider: system 24 | level: 1 25 | depth: 2 26 | expand_all_items: true 27 | visibility: { } 28 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_messages.yml: -------------------------------------------------------------------------------- 1 | uuid: f870396c-a1a7-4daa-9259-1f25491a9dd9 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - olivero 9 | _core: 10 | default_config_hash: BZ5tpW7H8X4PVGRm3MImTIHd2tN0eF7zOtp4SpRYUA0 11 | id: olivero_messages 12 | theme: olivero 13 | region: highlighted 14 | weight: -5 15 | provider: null 16 | plugin: system_messages_block 17 | settings: 18 | id: system_messages_block 19 | label: 'Status messages' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_page_title.yml: -------------------------------------------------------------------------------- 1 | uuid: c8a4a31e-0570-4c98-bc90-2f52af28ac02 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - olivero 7 | _core: 8 | default_config_hash: 6aOgWsNTXjqrDm98TXSAjP6qd2nCijD1xw45MrnbK-Y 9 | id: olivero_page_title 10 | theme: olivero 11 | region: content_above 12 | weight: -5 13 | provider: null 14 | plugin: page_title_block 15 | settings: 16 | id: page_title_block 17 | label: 'Page title' 18 | label_display: '0' 19 | provider: core 20 | visibility: { } 21 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_powered.yml: -------------------------------------------------------------------------------- 1 | uuid: 51e4c57f-7941-4809-8a10-5069dae84743 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - olivero 9 | _core: 10 | default_config_hash: eYL19CLDyinGTWYQfBD1DswWzglEotE_kHnHx3AxTXM 11 | id: olivero_powered 12 | theme: olivero 13 | region: footer_bottom 14 | weight: 0 15 | provider: null 16 | plugin: system_powered_by_block 17 | settings: 18 | id: system_powered_by_block 19 | label: 'Powered by Drupal' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_primary_admin_actions.yml: -------------------------------------------------------------------------------- 1 | uuid: 717c184a-bad0-41e4-ae80-89260533bda8 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - olivero 7 | _core: 8 | default_config_hash: Q9_2whdOj1YIomfvsIfopROW4FT_X5pY0DjdOiOaQ5U 9 | id: olivero_primary_admin_actions 10 | theme: olivero 11 | region: highlighted 12 | weight: -5 13 | provider: null 14 | plugin: local_actions_block 15 | settings: 16 | id: local_actions_block 17 | label: 'Primary admin actions' 18 | label_display: '0' 19 | provider: core 20 | visibility: { } 21 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_primary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | uuid: 14041033-2fcb-426a-a333-e01aec432586 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - olivero 7 | _core: 8 | default_config_hash: nGE3EoPQQaQCuqTUtZgw0-KIzmrqdKDzdNQf2JyPUt4 9 | id: olivero_primary_local_tasks 10 | theme: olivero 11 | region: highlighted 12 | weight: -4 13 | provider: null 14 | plugin: local_tasks_block 15 | settings: 16 | id: local_tasks_block 17 | label: 'Primary tabs' 18 | label_display: '0' 19 | provider: core 20 | primary: true 21 | secondary: false 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_secondary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | uuid: a76b8076-606d-494e-b231-eb414941ab74 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - olivero 7 | _core: 8 | default_config_hash: ydSxdq7R66I8UMC460rOzlfzvlUL4VRbdwc6z9DWaUI 9 | id: olivero_secondary_local_tasks 10 | theme: olivero 11 | region: highlighted 12 | weight: -2 13 | provider: null 14 | plugin: local_tasks_block 15 | settings: 16 | id: local_tasks_block 17 | label: 'Secondary tabs' 18 | label_display: '0' 19 | provider: core 20 | primary: false 21 | secondary: true 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_site_branding.yml: -------------------------------------------------------------------------------- 1 | uuid: 41dab30f-6309-47c3-950e-3980d0a68407 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - olivero 9 | _core: 10 | default_config_hash: n_nlgjggHVfQt2H__zvLOKB2YtjPDbQ5tHijF9LE1aM 11 | id: olivero_site_branding 12 | theme: olivero 13 | region: header 14 | weight: 0 15 | provider: null 16 | plugin: system_branding_block 17 | settings: 18 | id: system_branding_block 19 | label: 'Site branding' 20 | label_display: '0' 21 | provider: system 22 | use_site_logo: true 23 | use_site_name: true 24 | use_site_slogan: false 25 | visibility: { } 26 | -------------------------------------------------------------------------------- /config/sync/block.block.olivero_syndicate.yml: -------------------------------------------------------------------------------- 1 | uuid: 2d951ecb-09bb-4a0b-95a0-f8fc406a2196 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | theme: 8 | - olivero 9 | _core: 10 | default_config_hash: 0gq3VPg-_UM69FCCWurLFIrrnIjC2HLKhwo9iQNtcUo 11 | id: olivero_syndicate 12 | theme: olivero 13 | region: social 14 | weight: 0 15 | provider: null 16 | plugin: node_syndicate_block 17 | settings: 18 | id: node_syndicate_block 19 | label: 'RSS feed' 20 | label_display: '0' 21 | provider: node 22 | block_count: 10 23 | visibility: { } 24 | -------------------------------------------------------------------------------- /config/sync/block_content.type.basic.yml: -------------------------------------------------------------------------------- 1 | uuid: 43ed6471-f188-4d53-b94f-55491e9cba74 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: pQP5iQy4SdhAMVcjDUncCfkJmTofnHVtXrsMzx4k6Yk 7 | id: basic 8 | label: 'Basic block' 9 | revision: false 10 | description: 'A basic block contains a title and a body.' 11 | -------------------------------------------------------------------------------- /config/sync/claro.settings.yml: -------------------------------------------------------------------------------- 1 | third_party_settings: { } 2 | -------------------------------------------------------------------------------- /config/sync/comment.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: YNUW2Ij5uE7a4oaXp3i_2lvaFdYM1zNKPPfnEjB0jEc 3 | log_ip_addresses: false 4 | -------------------------------------------------------------------------------- /config/sync/comment.type.comment.yml: -------------------------------------------------------------------------------- 1 | uuid: 2aeea7bb-202e-4c6f-b208-382036fd3443 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: bqZsN31T2n0UjcbyCpOPi9D2iO0sAOHR7FnEs9qMvaA 7 | id: comment 8 | label: 'Default comments' 9 | target_entity_type_id: node 10 | description: 'Allows commenting on content' 11 | -------------------------------------------------------------------------------- /config/sync/config_split.config_split.local.yml: -------------------------------------------------------------------------------- 1 | uuid: bbfa8c19-d7ff-4de4-b126-c96097ef07aa 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | id: local 6 | label: Local 7 | description: 'Local configuration' 8 | weight: 0 9 | stackable: false 10 | no_patching: false 11 | storage: folder 12 | folder: ../config/local 13 | module: 14 | announcements_feed: 0 15 | dblog: 0 16 | stage_file_proxy: 0 17 | theme: { } 18 | complete_list: { } 19 | partial_list: { } 20 | -------------------------------------------------------------------------------- /config/sync/config_split.config_split.main.yml: -------------------------------------------------------------------------------- 1 | uuid: 35befd00-8e63-45fd-9dc8-67908fdc1fcb 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | id: main 6 | label: Main 7 | description: 'Main configuration' 8 | weight: 0 9 | stackable: false 10 | no_patching: false 11 | storage: folder 12 | folder: ../config/main 13 | module: 14 | stage_file_proxy: 0 15 | updates_log: 0 16 | monolog: 0 17 | theme: { } 18 | complete_list: { } 19 | partial_list: { } 20 | -------------------------------------------------------------------------------- /config/sync/config_split.config_split.production.yml: -------------------------------------------------------------------------------- 1 | uuid: fb379d3e-c4c8-4c1d-93f7-f0a22c0d3500 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | id: production 6 | label: Production 7 | description: 'Production configuration' 8 | weight: 0 9 | stackable: false 10 | no_patching: false 11 | storage: folder 12 | folder: ../config/production 13 | module: 14 | updates_log: 0 15 | monolog: 0 16 | theme: { } 17 | complete_list: { } 18 | partial_list: { } 19 | -------------------------------------------------------------------------------- /config/sync/config_split.config_split.silta.yml: -------------------------------------------------------------------------------- 1 | uuid: d692ad66-a4ef-4b27-90c5-227832f84f87 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | id: silta 6 | label: Silta 7 | description: 'Default configuration for feature environments in Silta' 8 | weight: 0 9 | stackable: false 10 | no_patching: false 11 | storage: folder 12 | folder: ../config/silta 13 | module: 14 | dblog: 0 15 | stage_file_proxy: 0 16 | theme: { } 17 | complete_list: { } 18 | partial_list: { } 19 | -------------------------------------------------------------------------------- /config/sync/core.base_field_override.node.page.promote.yml: -------------------------------------------------------------------------------- 1 | uuid: ea936838-ea78-41a6-8924-6f776bba975f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - node.type.page 7 | _core: 8 | default_config_hash: fPUEnm4T5zfZRr3ttDUqq7yCDd2uW3clWD-pvos4tlQ 9 | id: node.page.promote 10 | field_name: promote 11 | entity_type: node 12 | bundle: page 13 | label: 'Promoted to front page' 14 | description: '' 15 | required: false 16 | translatable: false 17 | default_value: 18 | - 19 | value: 0 20 | default_value_callback: '' 21 | settings: 22 | on_label: 'On' 23 | off_label: 'Off' 24 | field_type: boolean 25 | -------------------------------------------------------------------------------- /config/sync/core.date_format.fallback.yml: -------------------------------------------------------------------------------- 1 | uuid: c6816641-6ee1-416f-a28d-4788a97b91e6 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 7klS5IWXrwzVaPpYZFAs6wcx8U2FF1X73OfrtTsvuvE 7 | id: fallback 8 | label: 'Fallback date format' 9 | locked: true 10 | pattern: 'D, m/d/Y - H:i' 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.html_date.yml: -------------------------------------------------------------------------------- 1 | uuid: 634dc727-56c1-409d-8b82-072f87c5b6ca 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: EOQltUQPmgc6UQ2rcJ4Xi_leCEJj5ui0TR-12duS-Tk 7 | id: html_date 8 | label: 'HTML Date' 9 | locked: true 10 | pattern: Y-m-d 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.html_datetime.yml: -------------------------------------------------------------------------------- 1 | uuid: f93e890b-d9cf-4758-9cbb-59f7d5fd5076 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: jxfClwZIRXIdcvMrE--WkcZxDGUVoOIE3Sm2NRZlFuE 7 | id: html_datetime 8 | label: 'HTML Datetime' 9 | locked: true 10 | pattern: 'Y-m-d\TH:i:sO' 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.html_month.yml: -------------------------------------------------------------------------------- 1 | uuid: f6586de3-d73d-457a-814a-cfcee6404c9c 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: Z7KuCUwM_WdTNvLcoltuX3_8d-s-8FZkTN6KgNwF0eM 7 | id: html_month 8 | label: 'HTML Month' 9 | locked: true 10 | pattern: Y-m 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.html_time.yml: -------------------------------------------------------------------------------- 1 | uuid: e088cabe-76b7-4639-9c08-b8867027afd3 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: M7yqicYkU36hRy5p9drAaGBBihhUD1OyujFrAaQ93ZE 7 | id: html_time 8 | label: 'HTML Time' 9 | locked: true 10 | pattern: 'H:i:s' 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.html_week.yml: -------------------------------------------------------------------------------- 1 | uuid: 113a0324-9354-4d4d-b9ec-6a4dffe43a95 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: wKD4WsoV_wFgv2vgI4mcAAFSIzrye17ykzdwrnApkfY 7 | id: html_week 8 | label: 'HTML Week' 9 | locked: true 10 | pattern: Y-\WW 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.html_year.yml: -------------------------------------------------------------------------------- 1 | uuid: a449d751-c7bf-4efe-9769-fbf2593cf3ca 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: OjekiQuX9RbVQ2_8jOHBL94RgYLePqX7wpfNGgcQzrk 7 | id: html_year 8 | label: 'HTML Year' 9 | locked: true 10 | pattern: 'Y' 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.html_yearless_date.yml: -------------------------------------------------------------------------------- 1 | uuid: c6660c11-5f89-48fa-8cb0-978cf91cedc4 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 5VpawMrKPEPCkoO4YpPa0TDFO2dgiIHfTziJtwlmUxc 7 | id: html_yearless_date 8 | label: 'HTML Yearless date' 9 | locked: true 10 | pattern: m-d 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.long.yml: -------------------------------------------------------------------------------- 1 | uuid: d9f337ce-e619-4990-9942-4325edd4676c 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: og8sWXhBuHbLMw3CoiBEZjgqSyhFBFmcbUW_wLcfNbo 7 | id: long 8 | label: 'Default long date' 9 | locked: false 10 | pattern: 'l, F j, Y - H:i' 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.medium.yml: -------------------------------------------------------------------------------- 1 | uuid: 8bb5ce3f-ad80-402f-85ab-be22ab793dbb 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: nzL5d024NjXIX_8TlT6uFAu973lmfkmHklJC-2i9rAE 7 | id: medium 8 | label: 'Default medium date' 9 | locked: false 10 | pattern: 'D, m/d/Y - H:i' 11 | -------------------------------------------------------------------------------- /config/sync/core.date_format.olivero_medium.yml: -------------------------------------------------------------------------------- 1 | uuid: 24c61f43-32de-412f-864a-73db2dd45df5 2 | langcode: en 3 | status: true 4 | dependencies: 5 | enforced: 6 | theme: 7 | - olivero 8 | _core: 9 | default_config_hash: Mt6cmxUbDZ9XxD6p25WQ8tj3_JcX8ylfcddwZc8gcAE 10 | id: olivero_medium 11 | label: 'Olivero Medium' 12 | locked: false 13 | pattern: 'j F, Y' 14 | -------------------------------------------------------------------------------- /config/sync/core.date_format.short.yml: -------------------------------------------------------------------------------- 1 | uuid: d6f7c307-0ee6-440b-8906-e47e0f6c4cf1 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: AlzeyytA8InBgxIG9H2UDJYs3CG98Zj6yRsDKmlbZwA 7 | id: short 8 | label: 'Default short date' 9 | locked: false 10 | pattern: 'm/d/Y - H:i' 11 | -------------------------------------------------------------------------------- /config/sync/core.entity_form_display.block_content.basic.default.yml: -------------------------------------------------------------------------------- 1 | uuid: f150718d-5852-4708-8b7a-a36d099ce7b2 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - block_content.type.basic 7 | - field.field.block_content.basic.body 8 | module: 9 | - text 10 | _core: 11 | default_config_hash: jAps3FCxvKecABS_tgExbhCZrBLQB3bNPWw18WjE3ss 12 | id: block_content.basic.default 13 | targetEntityType: block_content 14 | bundle: basic 15 | mode: default 16 | content: 17 | body: 18 | type: text_textarea_with_summary 19 | weight: -4 20 | region: content 21 | settings: 22 | rows: 9 23 | summary_rows: 3 24 | placeholder: '' 25 | show_summary: false 26 | third_party_settings: { } 27 | info: 28 | type: string_textfield 29 | weight: -5 30 | region: content 31 | settings: 32 | size: 60 33 | placeholder: '' 34 | third_party_settings: { } 35 | hidden: { } 36 | -------------------------------------------------------------------------------- /config/sync/core.entity_form_display.comment.comment.default.yml: -------------------------------------------------------------------------------- 1 | uuid: ab1313e2-f1b1-4f29-80eb-f0370a013872 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - comment.type.comment 7 | - field.field.comment.comment.comment_body 8 | module: 9 | - text 10 | _core: 11 | default_config_hash: I0Pa0aQvT_jawlPo9oz4FE3h_ickc55dYKTPl6gILes 12 | id: comment.comment.default 13 | targetEntityType: comment 14 | bundle: comment 15 | mode: default 16 | content: 17 | author: 18 | weight: -2 19 | region: content 20 | comment_body: 21 | type: text_textarea 22 | weight: 11 23 | region: content 24 | settings: 25 | rows: 5 26 | placeholder: '' 27 | third_party_settings: { } 28 | subject: 29 | type: string_textfield 30 | weight: 10 31 | region: content 32 | settings: 33 | size: 60 34 | placeholder: '' 35 | third_party_settings: { } 36 | hidden: { } 37 | -------------------------------------------------------------------------------- /config/sync/core.entity_form_display.node.article.default.yml: -------------------------------------------------------------------------------- 1 | uuid: 9cf9f673-b383-4b83-abde-12a8d71cbbc0 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - field.field.node.article.body 7 | - field.field.node.article.comment 8 | - field.field.node.article.field_image 9 | - field.field.node.article.field_tags 10 | - image.style.thumbnail 11 | - node.type.article 12 | module: 13 | - comment 14 | - image 15 | - path 16 | - text 17 | _core: 18 | default_config_hash: ewbd6G2uX456-bgwseM2Q-KQG3RkASoyHmTh-XR3oLU 19 | id: node.article.default 20 | targetEntityType: node 21 | bundle: article 22 | mode: default 23 | content: 24 | body: 25 | type: text_textarea_with_summary 26 | weight: 2 27 | region: content 28 | settings: 29 | rows: 9 30 | summary_rows: 3 31 | placeholder: '' 32 | show_summary: false 33 | third_party_settings: { } 34 | comment: 35 | type: comment_default 36 | weight: 20 37 | region: content 38 | settings: { } 39 | third_party_settings: { } 40 | created: 41 | type: datetime_timestamp 42 | weight: 10 43 | region: content 44 | settings: { } 45 | third_party_settings: { } 46 | field_image: 47 | type: image_image 48 | weight: 1 49 | region: content 50 | settings: 51 | progress_indicator: throbber 52 | preview_image_style: thumbnail 53 | third_party_settings: { } 54 | field_tags: 55 | type: entity_reference_autocomplete_tags 56 | weight: 3 57 | region: content 58 | settings: 59 | match_operator: CONTAINS 60 | match_limit: 10 61 | size: 60 62 | placeholder: '' 63 | third_party_settings: { } 64 | path: 65 | type: path 66 | weight: 30 67 | region: content 68 | settings: { } 69 | third_party_settings: { } 70 | promote: 71 | type: boolean_checkbox 72 | weight: 15 73 | region: content 74 | settings: 75 | display_label: true 76 | third_party_settings: { } 77 | status: 78 | type: boolean_checkbox 79 | weight: 120 80 | region: content 81 | settings: 82 | display_label: true 83 | third_party_settings: { } 84 | sticky: 85 | type: boolean_checkbox 86 | weight: 16 87 | region: content 88 | settings: 89 | display_label: true 90 | third_party_settings: { } 91 | title: 92 | type: string_textfield 93 | weight: 0 94 | region: content 95 | settings: 96 | size: 60 97 | placeholder: '' 98 | third_party_settings: { } 99 | uid: 100 | type: entity_reference_autocomplete 101 | weight: 5 102 | region: content 103 | settings: 104 | match_operator: CONTAINS 105 | match_limit: 10 106 | size: 60 107 | placeholder: '' 108 | third_party_settings: { } 109 | hidden: { } 110 | -------------------------------------------------------------------------------- /config/sync/core.entity_form_display.node.page.default.yml: -------------------------------------------------------------------------------- 1 | uuid: 98e80548-2bf9-49ad-863b-14c3c801d082 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - field.field.node.page.body 7 | - node.type.page 8 | module: 9 | - path 10 | - text 11 | _core: 12 | default_config_hash: SfpLhPExzvR0MgFp0Wp7CrmgEnhcqQ-fXIWFhbf4ue0 13 | id: node.page.default 14 | targetEntityType: node 15 | bundle: page 16 | mode: default 17 | content: 18 | body: 19 | type: text_textarea_with_summary 20 | weight: 31 21 | region: content 22 | settings: 23 | rows: 9 24 | summary_rows: 3 25 | placeholder: '' 26 | show_summary: false 27 | third_party_settings: { } 28 | created: 29 | type: datetime_timestamp 30 | weight: 10 31 | region: content 32 | settings: { } 33 | third_party_settings: { } 34 | path: 35 | type: path 36 | weight: 30 37 | region: content 38 | settings: { } 39 | third_party_settings: { } 40 | promote: 41 | type: boolean_checkbox 42 | weight: 15 43 | region: content 44 | settings: 45 | display_label: true 46 | third_party_settings: { } 47 | status: 48 | type: boolean_checkbox 49 | weight: 120 50 | region: content 51 | settings: 52 | display_label: true 53 | third_party_settings: { } 54 | sticky: 55 | type: boolean_checkbox 56 | weight: 16 57 | region: content 58 | settings: 59 | display_label: true 60 | third_party_settings: { } 61 | title: 62 | type: string_textfield 63 | weight: -5 64 | region: content 65 | settings: 66 | size: 60 67 | placeholder: '' 68 | third_party_settings: { } 69 | uid: 70 | type: entity_reference_autocomplete 71 | weight: 5 72 | region: content 73 | settings: 74 | match_operator: CONTAINS 75 | match_limit: 10 76 | size: 60 77 | placeholder: '' 78 | third_party_settings: { } 79 | hidden: { } 80 | -------------------------------------------------------------------------------- /config/sync/core.entity_form_display.user.user.default.yml: -------------------------------------------------------------------------------- 1 | uuid: b5e0cfea-66b1-4c5a-851e-c6caeb6f0caa 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - field.field.user.user.user_picture 7 | - image.style.thumbnail 8 | module: 9 | - image 10 | - user 11 | _core: 12 | default_config_hash: FaQ9Ptcpxpg30AtiqRDtl_8zbJArHP1LPfug_s59TOA 13 | id: user.user.default 14 | targetEntityType: user 15 | bundle: user 16 | mode: default 17 | content: 18 | account: 19 | weight: -10 20 | region: content 21 | contact: 22 | weight: 5 23 | region: content 24 | language: 25 | weight: 0 26 | region: content 27 | timezone: 28 | weight: 6 29 | region: content 30 | user_picture: 31 | type: image_image 32 | weight: -1 33 | region: content 34 | settings: 35 | progress_indicator: throbber 36 | preview_image_style: thumbnail 37 | third_party_settings: { } 38 | hidden: { } 39 | -------------------------------------------------------------------------------- /config/sync/core.entity_form_mode.user.register.yml: -------------------------------------------------------------------------------- 1 | uuid: 48e8d398-91aa-4b05-877d-3731a9082588 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: 5pE_4hurqtIlZN3XDi7eTo5RG13BMG0Rh9HYlRI3h8U 9 | id: user.register 10 | label: Register 11 | description: '' 12 | targetEntityType: user 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.block_content.basic.default.yml: -------------------------------------------------------------------------------- 1 | uuid: 924ca08c-74f7-47c8-acfd-1038b3fe733b 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - block_content.type.basic 7 | - field.field.block_content.basic.body 8 | module: 9 | - text 10 | _core: 11 | default_config_hash: hBNNDTFwakREOTa6GGMqN899Iyrii0hInwSJtQ7Kj30 12 | id: block_content.basic.default 13 | targetEntityType: block_content 14 | bundle: basic 15 | mode: default 16 | content: 17 | body: 18 | type: text_default 19 | label: hidden 20 | settings: { } 21 | third_party_settings: { } 22 | weight: 0 23 | region: content 24 | hidden: { } 25 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.comment.comment.default.yml: -------------------------------------------------------------------------------- 1 | uuid: c91de7a1-d0e3-4f52-9bea-5f09a4d0df09 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - comment.type.comment 7 | - field.field.comment.comment.comment_body 8 | module: 9 | - text 10 | _core: 11 | default_config_hash: aBQUGsQ46M4048fIlFuTXwl2zV0j2cJX89CTUobh9hA 12 | id: comment.comment.default 13 | targetEntityType: comment 14 | bundle: comment 15 | mode: default 16 | content: 17 | comment_body: 18 | type: text_default 19 | label: hidden 20 | settings: { } 21 | third_party_settings: { } 22 | weight: 0 23 | region: content 24 | links: 25 | weight: 100 26 | region: content 27 | hidden: { } 28 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.node.article.default.yml: -------------------------------------------------------------------------------- 1 | uuid: e52c78e8-7db3-41e6-8d4d-12a38e3ac398 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - core.entity_view_display.comment.comment.default 7 | - field.field.node.article.body 8 | - field.field.node.article.comment 9 | - field.field.node.article.field_image 10 | - field.field.node.article.field_tags 11 | - image.style.wide 12 | - node.type.article 13 | module: 14 | - comment 15 | - image 16 | - text 17 | - user 18 | _core: 19 | default_config_hash: br6izr-iGEu--JvNbCJNtOBpRnxpFLXfoV5y61U9Nqc 20 | id: node.article.default 21 | targetEntityType: node 22 | bundle: article 23 | mode: default 24 | content: 25 | body: 26 | type: text_default 27 | label: hidden 28 | settings: { } 29 | third_party_settings: { } 30 | weight: 0 31 | region: content 32 | comment: 33 | type: comment_default 34 | label: above 35 | settings: 36 | view_mode: default 37 | pager_id: 0 38 | third_party_settings: { } 39 | weight: 110 40 | region: content 41 | field_image: 42 | type: image 43 | label: hidden 44 | settings: 45 | image_link: '' 46 | image_style: wide 47 | image_loading: 48 | attribute: eager 49 | third_party_settings: { } 50 | weight: -1 51 | region: content 52 | field_tags: 53 | type: entity_reference_label 54 | label: above 55 | settings: 56 | link: true 57 | third_party_settings: { } 58 | weight: 10 59 | region: content 60 | links: 61 | settings: { } 62 | third_party_settings: { } 63 | weight: 100 64 | region: content 65 | hidden: { } 66 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.node.article.rss.yml: -------------------------------------------------------------------------------- 1 | uuid: e9e25a25-e2eb-4aec-895c-365ed79579cf 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - core.entity_view_mode.node.rss 7 | - field.field.node.article.body 8 | - field.field.node.article.comment 9 | - field.field.node.article.field_image 10 | - field.field.node.article.field_tags 11 | - node.type.article 12 | module: 13 | - user 14 | _core: 15 | default_config_hash: 2rIr6K5Q0UQ9khg0zE_CK-PtJH76UL-BDDZcZnZzwCc 16 | id: node.article.rss 17 | targetEntityType: node 18 | bundle: article 19 | mode: rss 20 | content: 21 | links: 22 | weight: 100 23 | region: content 24 | hidden: 25 | body: true 26 | comment: true 27 | field_image: true 28 | field_tags: true 29 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.node.article.teaser.yml: -------------------------------------------------------------------------------- 1 | uuid: 0c4e1142-cc0a-4e42-ab1d-61c1c29bee11 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - core.entity_view_mode.node.teaser 7 | - field.field.node.article.body 8 | - field.field.node.article.comment 9 | - field.field.node.article.field_image 10 | - field.field.node.article.field_tags 11 | - image.style.medium 12 | - node.type.article 13 | module: 14 | - image 15 | - text 16 | - user 17 | _core: 18 | default_config_hash: O8PxzfG8DOHHRu6M23kwR6TDPq_MNfYQ10Mp367ICUQ 19 | id: node.article.teaser 20 | targetEntityType: node 21 | bundle: article 22 | mode: teaser 23 | content: 24 | body: 25 | type: text_summary_or_trimmed 26 | label: hidden 27 | settings: 28 | trim_length: 600 29 | third_party_settings: { } 30 | weight: 0 31 | region: content 32 | field_image: 33 | type: image 34 | label: hidden 35 | settings: 36 | image_link: content 37 | image_style: medium 38 | image_loading: 39 | attribute: lazy 40 | third_party_settings: { } 41 | weight: -1 42 | region: content 43 | field_tags: 44 | type: entity_reference_label 45 | label: above 46 | settings: 47 | link: true 48 | third_party_settings: { } 49 | weight: 10 50 | region: content 51 | links: 52 | weight: 100 53 | region: content 54 | hidden: 55 | comment: true 56 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.node.page.default.yml: -------------------------------------------------------------------------------- 1 | uuid: e294a63a-2dd5-4172-9e22-148466fa55d6 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - field.field.node.page.body 7 | - node.type.page 8 | module: 9 | - text 10 | - user 11 | _core: 12 | default_config_hash: M_Y8L5tfmhx7DR143E05YyZSpvgil6VFvqcfBWykalg 13 | id: node.page.default 14 | targetEntityType: node 15 | bundle: page 16 | mode: default 17 | content: 18 | body: 19 | type: text_default 20 | label: hidden 21 | settings: { } 22 | third_party_settings: { } 23 | weight: 100 24 | region: content 25 | links: 26 | weight: 101 27 | region: content 28 | hidden: { } 29 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.node.page.teaser.yml: -------------------------------------------------------------------------------- 1 | uuid: f503c56b-2e1a-40b3-8bc4-26e034cdf10c 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - core.entity_view_mode.node.teaser 7 | - field.field.node.page.body 8 | - node.type.page 9 | module: 10 | - text 11 | - user 12 | _core: 13 | default_config_hash: 8BgdRtLbtQ0F__o0FHSH0Mx5fvXOra9tfT1GmNKbRYw 14 | id: node.page.teaser 15 | targetEntityType: node 16 | bundle: page 17 | mode: teaser 18 | content: 19 | body: 20 | type: text_summary_or_trimmed 21 | label: hidden 22 | settings: 23 | trim_length: 600 24 | third_party_settings: { } 25 | weight: 100 26 | region: content 27 | links: 28 | weight: 101 29 | region: content 30 | hidden: { } 31 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.user.user.compact.yml: -------------------------------------------------------------------------------- 1 | uuid: bd46bf3c-c10f-4239-b698-9553412a25d1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - core.entity_view_mode.user.compact 7 | - field.field.user.user.user_picture 8 | - image.style.thumbnail 9 | module: 10 | - image 11 | - user 12 | _core: 13 | default_config_hash: 00zr_RBdTjPjBGITD3h4c1ESQZimjdVCcHGt1trLqIY 14 | id: user.user.compact 15 | targetEntityType: user 16 | bundle: user 17 | mode: compact 18 | content: 19 | user_picture: 20 | type: image 21 | label: hidden 22 | settings: 23 | image_style: thumbnail 24 | image_link: content 25 | image_loading: 26 | attribute: lazy 27 | third_party_settings: { } 28 | weight: 0 29 | region: content 30 | hidden: 31 | member_for: true 32 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_display.user.user.default.yml: -------------------------------------------------------------------------------- 1 | uuid: 991ae6e4-3138-4999-9dea-221f7e52892c 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - field.field.user.user.user_picture 7 | - image.style.thumbnail 8 | module: 9 | - image 10 | - user 11 | _core: 12 | default_config_hash: mZLyuWM9CQx2ZJVqFGSbzgFnHzudVbHBYmdU256A5Wk 13 | id: user.user.default 14 | targetEntityType: user 15 | bundle: user 16 | mode: default 17 | content: 18 | member_for: 19 | weight: 5 20 | region: content 21 | user_picture: 22 | type: image 23 | label: hidden 24 | settings: 25 | image_style: thumbnail 26 | image_link: content 27 | image_loading: 28 | attribute: lazy 29 | third_party_settings: { } 30 | weight: 0 31 | region: content 32 | hidden: { } 33 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.block_content.full.yml: -------------------------------------------------------------------------------- 1 | uuid: d839656c-fd6b-4bd9-be42-979fd0320d3b 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - block_content 7 | _core: 8 | default_config_hash: Q7yUUYeRLByl-MCGveKKF_KhAtNICLCMJuKWfugCvso 9 | id: block_content.full 10 | label: Full 11 | description: '' 12 | targetEntityType: block_content 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.comment.full.yml: -------------------------------------------------------------------------------- 1 | uuid: d388b737-a3fd-44a7-8533-d5124d8378b0 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - comment 7 | _core: 8 | default_config_hash: N4mUjXpPckUkVRY1PbKw4GGoL1i2ECU7PL3EreiKStk 9 | id: comment.full 10 | label: 'Full comment' 11 | description: '' 12 | targetEntityType: comment 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.node.full.yml: -------------------------------------------------------------------------------- 1 | uuid: 7097233a-dc47-46e4-9f19-028c67727bb6 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: QJ2aZ1xfVf59aq6Pz5X7fyUOa2HxuCoTwQ_RQjoulAU 9 | id: node.full 10 | label: 'Full content' 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.node.rss.yml: -------------------------------------------------------------------------------- 1 | uuid: e3a9c013-c399-4476-9e64-9297b4677bee 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: l8fiAFE3Kng_6bhLlUDnVTkTDzXWxzYFrCWTrngVXEA 9 | id: node.rss 10 | label: RSS 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.node.search_index.yml: -------------------------------------------------------------------------------- 1 | uuid: 97add285-fb98-4cf3-8b42-27d71464d90e 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: r_A0T3aTqGDwLyvoH7wLps-0PM--RHlS8UsiJe_Ac64 9 | id: node.search_index 10 | label: 'Search index' 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.node.search_result.yml: -------------------------------------------------------------------------------- 1 | uuid: 6ffc3a17-dd0a-4706-865f-a454cd7a2a21 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: d8wBEm7XvJ6H3S0IneDD9PfTBklPIH7GMpxElVemPf8 9 | id: node.search_result 10 | label: 'Search result highlighting input' 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.node.teaser.yml: -------------------------------------------------------------------------------- 1 | uuid: c79de970-ba50-44b0-8ba8-3f916518dac0 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: KgGJDZFpMaz_8bTv6fN1bXS3Qi5LWmRJI9R53kEGsNQ 9 | id: node.teaser 10 | label: Teaser 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.taxonomy_term.full.yml: -------------------------------------------------------------------------------- 1 | uuid: 7b6ed3e1-4960-4e5a-acc2-b448d85e605d 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - taxonomy 7 | _core: 8 | default_config_hash: iukUENpf8CFvjZbGGacKX_Ges0-lU9z6zvsd32P6kbo 9 | id: taxonomy_term.full 10 | label: 'Taxonomy term page' 11 | description: '' 12 | targetEntityType: taxonomy_term 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.user.compact.yml: -------------------------------------------------------------------------------- 1 | uuid: acb61a0a-b33b-4c8a-b928-ae69e755e5b9 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: TtD7OuGskOsQfoGyxXkrdtllBpR37J19d5BMQDZWJgA 9 | id: user.compact 10 | label: Compact 11 | description: '' 12 | targetEntityType: user 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.entity_view_mode.user.full.yml: -------------------------------------------------------------------------------- 1 | uuid: 0a967eac-4431-4299-99f0-60ba9780b272 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: ZbXunWS_xAvMZXFfinyvClDAb_RCVLt7gAzE3v16E-Q 9 | id: user.full 10 | label: 'User account' 11 | description: '' 12 | targetEntityType: user 13 | cache: true 14 | -------------------------------------------------------------------------------- /config/sync/core.extension.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: 4GIX5Esnc_umpXUBj4IIocRX7Mt5fPhm4AgXfE3E56E 3 | module: 4 | admin_toolbar: 0 5 | admin_toolbar_tools: 0 6 | automated_cron: 0 7 | block: 0 8 | block_content: 0 9 | breakpoint: 0 10 | ckeditor5: 0 11 | comment: 0 12 | config: 0 13 | config_split: 0 14 | contextual: 0 15 | datetime: 0 16 | dynamic_page_cache: 0 17 | editor: 0 18 | field: 0 19 | field_ui: 0 20 | file: 0 21 | filter: 0 22 | help: 0 23 | image: 0 24 | link: 0 25 | menu_link_content: 0 26 | menu_ui: 0 27 | mysql: 0 28 | node: 0 29 | options: 0 30 | page_cache: 0 31 | path: 0 32 | path_alias: 0 33 | purge: 0 34 | purge_processor_lateruntime: 0 35 | purge_queuer_coretags: 0 36 | purge_tokens: 0 37 | purge_ui: 0 38 | system: 0 39 | taxonomy: 0 40 | text: 0 41 | toolbar: 0 42 | update: 0 43 | user: 0 44 | varnish_purge_tags: 0 45 | varnish_purger: 0 46 | views_ui: 0 47 | views: 10 48 | standard: 1000 49 | theme: 50 | olivero: 0 51 | claro: 0 52 | profile: standard 53 | -------------------------------------------------------------------------------- /config/sync/core.menu.static_menu_link_overrides.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: CXhei_vpaZk-3f_Mj2cH0YmpK-ZpKHoSzVA3yZrDq0g 3 | definitions: 4 | contact__site_page: 5 | menu_name: footer 6 | parent: '' 7 | weight: 0 8 | expanded: false 9 | enabled: true 10 | -------------------------------------------------------------------------------- /config/sync/editor.editor.basic_html.yml: -------------------------------------------------------------------------------- 1 | uuid: 22166a6d-0e45-488d-9e70-60a7c46966bd 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - filter.format.basic_html 7 | module: 8 | - ckeditor5 9 | _core: 10 | default_config_hash: Qi2tIe-L97EutlMmhEvhsNxZOpOoA-RH82c4BQb5n4A 11 | format: basic_html 12 | editor: ckeditor5 13 | settings: 14 | toolbar: 15 | items: 16 | - bold 17 | - italic 18 | - '|' 19 | - link 20 | - '|' 21 | - bulletedList 22 | - numberedList 23 | - '|' 24 | - blockQuote 25 | - drupalInsertImage 26 | - '|' 27 | - heading 28 | - code 29 | - '|' 30 | - sourceEditing 31 | plugins: 32 | ckeditor5_heading: 33 | enabled_headings: 34 | - heading2 35 | - heading3 36 | - heading4 37 | - heading5 38 | - heading6 39 | ckeditor5_imageResize: 40 | allow_resize: true 41 | ckeditor5_list: 42 | properties: 43 | reversed: false 44 | startIndex: true 45 | multiBlock: true 46 | ckeditor5_sourceEditing: 47 | allowed_tags: 48 | - '' 49 | - '
' 50 | - '
' 51 | - '
' 52 | - '' 53 | - '
' 54 | - '