Difference between revisions of "Drupal"

From Wasya Wiki
Jump to: navigation, search
(evaluating)
 
(24 intermediate revisions by the same user not shown)
Line 6: Line 6:
  
 
   composer create-project drupal/recommended-project:9.5.10 html
 
   composer create-project drupal/recommended-project:9.5.10 html
 +
 +
  COMPOSER_PROCESS_TIMEOUT=2000 composer install
 +
 +
  composer create-project drupal/recommended-project:10.6.7 html
 +
  composer update "drupal/core-*" --with-all-dependencies
 +
  composer require drupal/core-recommended:10.6.7 drupal/core-composer-scaffold:10.6.7 drupal/core-project-message:10.6.7 --update-with-all-dependencies
 +
  composer require drush/drush
 +
  composer require drupal/openid_connect:^1.0
 +
  drush cr
  
 
   composer require 'drupal/devel:^5.1'
 
   composer require 'drupal/devel:^5.1'
Line 24: Line 33:
 
   composer require 'drupal/keycloak:^2.2@beta'
 
   composer require 'drupal/keycloak:^2.2@beta'
 
   composer require 'drupal/nodeaccess:^2.0@alpha'
 
   composer require 'drupal/nodeaccess:^2.0@alpha'
  composer require 'drupal/backup_migrate:^5.1' ## was 5.0
 
 
   composer require 'drupal/email_registration:^2.0@RC'
 
   composer require 'drupal/email_registration:^2.0@RC'
 
   composer require 'drupal/content_access:^2.0'
 
   composer require 'drupal/content_access:^2.0'
 
   composer require 'drupal/social_media:^2.0'
 
   composer require 'drupal/social_media:^2.0'
 
   composer require 'drupal/wordpress_migrate:^3.0@alpha'
 
   composer require 'drupal/wordpress_migrate:^3.0@alpha'
  composer require 'drupal/migrate_tools:^6.0'
 
 
   composer require 'drupal/codefilter:^2.0'
 
   composer require 'drupal/codefilter:^2.0'
 
   composer require 'drupal/views_taxonomy_term_name_depth:^7.2'
 
   composer require 'drupal/views_taxonomy_term_name_depth:^7.2'
 
   composer require 'drupal/pathauto:^1.12'
 
   composer require 'drupal/pathauto:^1.12'
  composer require 'drupal/metatag:^2.0'
 
 
   composer require 'drupal/twig_tweak:^3.3'
 
   composer require 'drupal/twig_tweak:^3.3'
 
   composer require 'drupal/simplenews:^4.0'
 
   composer require 'drupal/simplenews:^4.0'
    # composer require 'drupal/migrate_plus:^6.0' ## didn't need it the second time
 
 
   composer require 'drupal/ctools:^4.0'
 
   composer require 'drupal/ctools:^4.0'
   composer require 'drupal/commerce:^2.40'
+
 
 +
   composer require 'drupal/commerce:^2.40' ## drupal 9.5
 
     composer require drupal/inline_entity_form @RC --no-update
 
     composer require drupal/inline_entity_form @RC --no-update
 
     apt install php-bcmath php8.1-bcmath
 
     apt install php-bcmath php8.1-bcmath
 
     composer require 'drupal/commerce_stripe:^1.1'
 
     composer require 'drupal/commerce_stripe:^1.1'
 
     composer require 'drupal/commerce_recurring:^1.0@RC'
 
     composer require 'drupal/commerce_recurring:^1.0@RC'
 +
  composer require 'drupal/commerce:^3.3'  ## drupal 10
 +
    composer require drupal/inline_entity_form @RC --no-update
 +
    composer require 'drupal/commerce_stripe:^2.2'
 +
    composer require 'drupal/commerce_recurring:^1.0@RC'
 +
 +
 
   composer require 'drupal/linkit:^6.0'
 
   composer require 'drupal/linkit:^6.0'
 
   composer require 'drupal/redirect_after_login:^3.0'
 
   composer require 'drupal/redirect_after_login:^3.0'
Line 61: Line 73:
 
   composer require 'drupal/views_tree:^2.0@RC'
 
   composer require 'drupal/views_tree:^2.0@RC'
 
   composer require 'drupal/vote_up_down:^1.0@alpha'
 
   composer require 'drupal/vote_up_down:^1.0@alpha'
 +
    composer require 'drupal/votingapi:^3.0@beta'
 
   composer require 'drupal/formblock:^2.0@beta'
 
   composer require 'drupal/formblock:^2.0@beta'
 
   composer require 'drupal/views_pdf:^3.0@alpha'
 
   composer require 'drupal/views_pdf:^3.0@alpha'
Line 93: Line 106:
 
   # composer require drupal/views_show_more ## I don't use it?
 
   # composer require drupal/views_show_more ## I don't use it?
 
   composer require 'drupal/matomo:^2.0@alpha'
 
   composer require 'drupal/matomo:^2.0@alpha'
 +
  composer require 'drupal/paragraphs:^1.20'
 +
    composer require drupal/search_api_db
 +
    composer require drupal/search_api
 +
    composer require 'drupal/entity_usage:^2.0@beta'
 +
    composer require drupal/entity_browser
 +
    composer require drupal/svg_image_field
 +
  composer require 'drupal/admin_toolbar:^3.6'
  
=== evaluating ===
+
== evaluating ==
  
 
   composer require 'drupal/seo_checklist:^5.2'
 
   composer require 'drupal/seo_checklist:^5.2'
Line 104: Line 124:
 
   composer require 'drupal/queue_mail:^1.7'
 
   composer require 'drupal/queue_mail:^1.7'
 
   composer require 'drupal/googlelogin-googlelogin:^9.5'
 
   composer require 'drupal/googlelogin-googlelogin:^9.5'
 +
  composer require 'drupal/dark_mode_toggle:^1.0'
 +
  composer require 'drupal/imce:^3.1'
 +
  composer require 'drupal/bootstrap_barrio:^5.5'
 +
 +
== not gonna use ==
 +
  composer require 'drupal/backup_migrate:^5.1' ## was 5.0 ## so-so, unused
 +
  composer require 'drupal/migrate_tools:^6.0' ## unused
 +
  # composer require 'drupal/migrate_plus:^6.0' ## didn't need it the second time
  
 
Not gonna use ebt_core, because (1) they have way too many modules, it should have been just one, and (2) their "hero" module doesn't honor container and isn't a hero.
 
Not gonna use ebt_core, because (1) they have way too many modules, it should have been just one, and (2) their "hero" module doesn't honor container and isn't a hero.
  
   composer require 'drupal/layout_library:^1.0@beta'
+
   # composer require 'drupal/layout_library:^1.0@beta' ## looks poor, just use blocks
   composer require 'drupal/section_library:^2.0'
+
   # composer require 'drupal/section_library:^2.0' ## looks poor, just use blocks
  
 
== Upgrade 9 to 10 ==
 
== Upgrade 9 to 10 ==
Line 114: Line 142:
 
   composer require 'drupal/upgrade_status:^4.3'
 
   composer require 'drupal/upgrade_status:^4.3'
 
   composer require drupal/core-recommended:^10 drupal/core-composer-scaffold:^10 drupal/core-project-message:^10 --update-with-all-dependencies
 
   composer require drupal/core-recommended:^10 drupal/core-composer-scaffold:^10 drupal/core-project-message:^10 --update-with-all-dependencies
 +
    composer require drupal/core-recommended:10.6.7 drupal/core-composer-scaffold drupal/core-project-message -W
 +
    composer require drupal/typed_data:^2.0 -W
  
 
   composer update --with-all-dependencies
 
   composer update --with-all-dependencies
Line 136: Line 166:
  
 
   composer require 'drupal/examples:^4.0'
 
   composer require 'drupal/examples:^4.0'
 
== Configure Apache ==
 
 
<pre>
 
<Directory /var/www/>
 
    Options Indexes FollowSymLinks MultiViews
 
    AllowOverride All
 
    Order allow,deny
 
    allow from all
 
</Directory>
 
</pre>
 
  
 
== Configure s3fs ==
 
== Configure s3fs ==
Line 250: Line 269:
 
   mkv sfv avi mp3 mp4 webm mov
 
   mkv sfv avi mp3 mp4 webm mov
 
   zip tar gz
 
   zip tar gz
 +
 +
== set password ==
 +
 +
drush user:password USERNAME NEW_PASSWORD
  
 
== change ownership ==
 
== change ownership ==
Line 292: Line 315:
 
'
 
'
 
</pre>
 
</pre>
 
  
 
= Testing =
 
= Testing =
Line 325: Line 347:
 
   ../vendor/bin/phpunit  -c ../phpunit.xml modules/ish_drupal_module/tests/src/Functional/CurrentUserBlockTest.php
 
   ../vendor/bin/phpunit  -c ../phpunit.xml modules/ish_drupal_module/tests/src/Functional/CurrentUserBlockTest.php
 
   ../vendor/bin/phpunit  -c ../phpunit.xml modules/ish_drupal_module/tests/src/Functional/CurrentUserBlockTest.php -v --debug
 
   ../vendor/bin/phpunit  -c ../phpunit.xml modules/ish_drupal_module/tests/src/Functional/CurrentUserBlockTest.php -v --debug
 +
 +
= update =
 +
== 10 to 10 ==
 +
  composer require \
 +
  drupal/core-recommended:10.6.7 \
 +
  drupal/core-composer-scaffold:10.6.7 \
 +
  drupal/core-project-message:10.6.7 \
 +
  --update-with-all-dependencies

Latest revision as of 00:39, 23 April 2026

Install & Configure

 composer create-project drupal/recommended-project:9.5.10 html
 COMPOSER_PROCESS_TIMEOUT=2000 composer install
 composer create-project drupal/recommended-project:10.6.7 html
 composer update "drupal/core-*" --with-all-dependencies
 composer require drupal/core-recommended:10.6.7 drupal/core-composer-scaffold:10.6.7 drupal/core-project-message:10.6.7 --update-with-all-dependencies
 composer require drush/drush
 composer require drupal/openid_connect:^1.0
 drush cr
 composer require 'drupal/devel:^5.1'
 composer require 'drupal/s3fs:^3.3'
 # composer require 'wasya-co/consent_popup: 1.0.4.x-dev'
 composer require 'drupal/consent_popup:^1.0'
 composer require 'drush/drush:^11.6'
 composer require 'drupal/metatag:^2.0'
 composer require 'drupal/redirect:^1.9'
 composer require 'drupal/superfish:^1.6'
 composer require 'drupal/webform:^6.0'
 composer require 'drupal/captcha:^1.14'
 composer require 'drupal/typed_data:^1.0@alpha'
 composer require 'drupal/rules:^3.0@alpha'
 composer require 'drupal/smtp:^1.2'
 composer require 'drupal/hal:^1.0'
 composer require 'drupal/restui:^1.21'
 composer require 'drupal/keycloak:^2.2@beta'
 composer require 'drupal/nodeaccess:^2.0@alpha'
 composer require 'drupal/email_registration:^2.0@RC'
 composer require 'drupal/content_access:^2.0'
 composer require 'drupal/social_media:^2.0'
 composer require 'drupal/wordpress_migrate:^3.0@alpha'
 composer require 'drupal/codefilter:^2.0'
 composer require 'drupal/views_taxonomy_term_name_depth:^7.2'
 composer require 'drupal/pathauto:^1.12'
 composer require 'drupal/twig_tweak:^3.3'
 composer require 'drupal/simplenews:^4.0'
 composer require 'drupal/ctools:^4.0'
 composer require 'drupal/commerce:^2.40' ## drupal 9.5
   composer require drupal/inline_entity_form @RC --no-update
   apt install php-bcmath php8.1-bcmath
   composer require 'drupal/commerce_stripe:^1.1'
   composer require 'drupal/commerce_recurring:^1.0@RC'
 composer require 'drupal/commerce:^3.3'  ## drupal 10
   composer require drupal/inline_entity_form @RC --no-update
   composer require 'drupal/commerce_stripe:^2.2'
   composer require 'drupal/commerce_recurring:^1.0@RC'


 composer require 'drupal/linkit:^6.0'
 composer require 'drupal/redirect_after_login:^3.0'
 composer require 'drupal/symfony_mailer:^1.4'
 composer require 'drupal/custom_search:^1.0@beta'
 composer require 'drupal/fullcalendar_view:^5.2' 
 composer require 'drupal/date_recur:^3.3@RC'
 composer require 'drupal/date_recur_modular:^3.1'
 composer require 'drupal/colorbox:2.0.2'
 composer require 'drupal/tagclouds:^2.0'
 composer require 'drupal/filelog:^3.0'
 composer require 'drupal/message:^1.6'
 composer require 'drupal/flag:^4.0@beta'
 composer require 'drupal/message_subscribe:^1.4'
 composer require 'drupal/message_digest:^1.5'
 composer require 'drupal/message_ui:^1.3'
 composer require 'drupal/layout_builder_usage_reports:^1.0'
 composer require 'drupal/views_tree:^2.0@RC'
 composer require 'drupal/vote_up_down:^1.0@alpha'
   composer require 'drupal/votingapi:^3.0@beta'
 composer require 'drupal/formblock:^2.0@beta'
 composer require 'drupal/views_pdf:^3.0@alpha'
 composer require 'drupal/field_permissions:^1.4'
 composer require 'drupal/scheduler:^2.2'
 composer require 'drupal/simplenews_scheduler:^4.0@alpha'
 composer require 'drupal/insert_view:^2.1'
 composer require drush/drush
 composer require 'drupal/keycloak:^1.8'
 composer require 'drupal/simple_oauth:^5.2'
 composer require 'drupal/group:^1.6'
   composer require 'drupal/group_join_link:^1.0'
 composer require 'drupal/social_auth:^4.1'
   composer require 'drupal/social_auth_google:^4.0' 
   composer require 'drupal/social_auth_facebook:^4.0'
   composer require 'drupal/social_auth_linkedin:^4.0'
   composer require 'drupal/social_auth_microsoft:^4.0'
 composer require 'drupal/twilio:^3.0@alpha'
 composer require 'drupal/smssystem:^1.1'
 composer require 'drupal/upgrade_status:^4.3'
 composer require 'drupal/smsframework:^2.3'
 composer require symfony/dom-crawler symfony/css-selector
 composer require drupal/markdown
 composer require drupal/markdown_easy
 composer require 'drupal/crm_core:3.x-dev@dev'
 composer require 'drupal/name:^1.0@RC'
 composer require 'drupal/dynamic_entity_reference:^2.0@alpha'
 composer require 'drupal/default_content:^2.0@beta'
 composer require --dev drupal/core-dev
 composer require 'drupal/single_content_sync:^1.4' ## yep its this one
 # composer require drupal/views_show_more ## I don't use it?
 composer require 'drupal/matomo:^2.0@alpha'
 composer require 'drupal/paragraphs:^1.20'
   composer require drupal/search_api_db
   composer require drupal/search_api
   composer require 'drupal/entity_usage:^2.0@beta'
   composer require drupal/entity_browser
   composer require drupal/svg_image_field
 composer require 'drupal/admin_toolbar:^3.6'

evaluating

 composer require 'drupal/seo_checklist:^5.2'
 composer require 'drupal/yoast_seo:^1.9'
 composer require 'drupal/tvi:^2.0' ## From: https://www.drupal.org/project/tvi
 composer require 'drupal/advanced_text_formatter:^3.0@RC'
 composer require 'drupal/token_filter:^2.1'
 composer require 'drupal/form_mode_control:^2.4'
 composer require 'drupal/queue_mail:^1.7'
 composer require 'drupal/googlelogin-googlelogin:^9.5'
 composer require 'drupal/dark_mode_toggle:^1.0'
 composer require 'drupal/imce:^3.1'
 composer require 'drupal/bootstrap_barrio:^5.5'

not gonna use

 composer require 'drupal/backup_migrate:^5.1' ## was 5.0 ## so-so, unused
 composer require 'drupal/migrate_tools:^6.0' ## unused
 # composer require 'drupal/migrate_plus:^6.0' ## didn't need it the second time

Not gonna use ebt_core, because (1) they have way too many modules, it should have been just one, and (2) their "hero" module doesn't honor container and isn't a hero.

 # composer require 'drupal/layout_library:^1.0@beta' ## looks poor, just use blocks
 # composer require 'drupal/section_library:^2.0' ## looks poor, just use blocks

Upgrade 9 to 10

 composer require 'drupal/upgrade_status:^4.3'
 composer require drupal/core-recommended:^10 drupal/core-composer-scaffold:^10 drupal/core-project-message:^10 --update-with-all-dependencies
   composer require drupal/core-recommended:10.6.7 drupal/core-composer-scaffold drupal/core-project-message -W
   composer require drupal/typed_data:^2.0 -W
 composer update --with-all-dependencies

Setting up dev environment


 composer require --dev --no-update symfony/filesystem:4.4.42
 composer require --dev drupal/core-dev:9.5.11 --with-all-dependencies
   composer require --dev behat/mink jcalderonzumba/mink-phantomjs-driver
   composer update -W
   composer update symfony/filesystem:4.4.42 drush/drush -W
   composer require --dev drupal/core-dev -W
   composer require --dev phpspec/prophecy-phpunit:^2
 

Not useful:

 composer require 'drupal/examples:^4.0'

Configure s3fs

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketVersions"
            ],
            "Resource": [
                "arn:aws:s3:::<ze bucket>"
            ]
        },
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject",
                "s3:GetObjectVersion",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::<ze bucket>/*"
            ]
        }
    ]
}


Disable caching

From: https://www.drupal.org/docs/develop/development-tools/disable-caching

  • Add the settings.local.php and
  • Modify development.services.yml:
parameters:
  http.response.debug_cacheability_headers: true
  twig.config:
    debug: true
    auto_reload: true
    cache: false
services:
  cache.backend.null:
    class: Drupal\Core\Cache\NullBackendFactory

cleanup template debug

Use in twig:

  |preg_replace('/<!--.*?-->/s','')|striptags|replace({"\n":"","\r":"","\t":""})

ReST



curl --include \
  --request POST \
  --user admin:<> \
  --header 'Content-type: application/hal+json' \
  http://pi.local/node?_format=hal_json \
  --data-binary '{
    "_links": {
      "type":{"href":"http://pi.local/rest/type/node/article"}
    },
    "title":[{"value":"Node +++ 123 bac +++" }],
    "body":[{"value": "<b>hello, wor</b>ld!", "format": "full_html" }],
    "type":[{"target_id":"article"}],
    "status": [{"value": 1}],
    "_embedded": {
      "http://pi.local/rest/relation/node/article/field_issue": [
        { "uuid": [{ "value": "56229a95-d675-43e1-99b1-f9e11b5579c5" }] }
      ],
      "http://pi.local/rest/relation/node/article/field_tags": [
        { "uuid": [{ "value": "45646a7d-1a16-42e8-b758-f6e1c8d976f7" }] },
        { "uuid": [{ "value": "834e34e2-05ae-498d-b876-453798872ce1" }] }
      ]
    }

  }'

Default Attachments

 txt pdf doc docx html csv xlsx xlsm sh json svg
 cer pem pub key kdbx
 png jpg jpeg gif
 mkv sfv avi mp3 mp4 webm mov
 zip tar gz

set password

drush user:password USERNAME NEW_PASSWORD

change ownership

of all simplenews_issue

drush php:eval "
\$nids = \Drupal::entityQuery('node')
  ->condition('type', 'simplenews_issue')
  ->accessCheck(FALSE)
  ->execute();

\$storage = \Drupal::entityTypeManager()->getStorage('node');
\$nodes = \$storage->loadMultiple(\$nids);

foreach (\$nodes as \$node) {
  \$node->setOwnerId(252);
  \$node->save();
}
"

of all content with "generated" in title:

drush php:eval '
$nids = \Drupal::entityQuery("node")
  ->condition("title", "%enerated%", "LIKE")
  ->accessCheck(FALSE)
  ->execute();

$storage = \Drupal::entityTypeManager()->getStorage("node");
$nodes = $storage->loadMultiple($nids);

foreach ($nodes as $node) {
  $node->setOwnerId(129);
  $node->save();
}

print "Updated " . count($nodes) . " nodes\n";
'

Testing

From: https://www.drupal.org/docs/develop/automated-testing/phpunit-in-drupal/running-phpunit-tests

For me, in my drupal images and containers, drupal is installed in the following folder, which is also my workdir:

 WORKDIR /var/www/html

The below is optional, I call the specific phpunit executable every time:

 export PATH="$PATH:/var/www/html/vendor/bin"

You need to change minimum stability to "dev" for the testing libraries to be loaded.

DO NOT RUN THIS IN PRODUCTION!

 composer require --dev phpunit/phpunit # trash
   composer require --dev phpunit/phpunit:^9.5 --with-all-dependencies
 composer require --dev drupal/core-dev
   composer require --dev drupal/core-dev --update-with-all-dependencies # trash
 composer require --dev behat/mink:1.8.0 --with-all-dependencies
 composer require --dev symfony/phpunit-bridge
 composer require --dev phpspec/prophecy-phpunit
 composer require --dev behat/mink-browserkit-driver

Copy and configure phpunit.xml:

 phpunit --testsuite unit --filter CurrentUserBlock # trash?
 cd /var/www/html
 ../vendor/bin/phpunit  -c ../phpunit.xml modules/ish_drupal_module/tests/src/Functional/CurrentUserBlockTest.php
 ../vendor/bin/phpunit  -c ../phpunit.xml modules/ish_drupal_module/tests/src/Functional/CurrentUserBlockTest.php -v --debug

update

10 to 10

 composer require \
 drupal/core-recommended:10.6.7 \
 drupal/core-composer-scaffold:10.6.7 \
 drupal/core-project-message:10.6.7 \
 --update-with-all-dependencies