# Stappenplan voor upgrade

Update drush:

```
ddev composer require drush/drush -W
```

Module upgrade\_status installeren:

```
ddev composer require drupal/upgrade_status -W
ddev drush en upgrade_status
```

De upgrade status pagina openen:

`/admin/reports/upgrade-status`

**!!!Al het nodige uitvoeren dat op deze pagina wordt aangegeven.!!!**

Sommige aanpassingen kunnen automatisch gebeuren met Drupal rector te gebruiken:

[https://mglaman.dev/blog/phpstan-drupal-drupal-check-drupal-rector-upgradestatus-oh-my](https://mglaman.dev/blog/phpstan-drupal-drupal-check-drupal-rector-upgradestatus-oh-my)

```
ddev composer require --dev phpstan/phpstan \
  phpstan/extension-installer \
  mglaman/phpstan-drupal \
  phpstan/phpstan-deprecation-rules
```

```
ddev composer require --dev palantirnet/drupal-rector
```

in root:

```
cp vendor/palantirnet/drupal-rector/rector.php rector.php
```

test:

```
ddev php vendor/bin/rector process web/modules/custom --dry-run
```

gebruik / toepassen:

```
ddev php vendor/bin/rector process web/modules/custom
```

Daarna verdergaan op `/admin/reports/upgrade-status`

Als de upgrade status zegt dat alles ok is, kijk dan eerst even om eventuele meldingen in de statusrapportage pagina op te lossen: `admin/reports/status`

Om Webform libraries te updaten:

```
ddev drush webform:libraries:download
```

Als daar alles opgelost is begint het echte updaten naar D9. Volgende instructies zijn gebaseerd op deze link: [https://www.drupal.org/docs/upgrading-drupal/upgrading-from-drupal-8-to-drupal-9-or-later](https://www.drupal.org/docs/upgrading-drupal/upgrading-from-drupal-8-to-drupal-9-or-later)

```
ddev composer require 'drupal/core-recommended:^9' 'drupal/core-composer-scaffold:^9' 'drupal/core-project-message:^9' 'drupal/core:^9' --update-with-dependencies --no-update
```

```
ddev composer update --with-all-dependencies
```

Indien je een melding krijgt van een module waarvan een D9 compatibele versie is, die niet D8 compatibel is:

```
Problem 1
    - Root composer.json requires drupal/imageapi_optimize ^2.0@beta -> satisfiable by drupal/imageapi_optimize[2.0.0-beta1].
    - drupal/imageapi_optimize 2.0.0-beta1 requires drupal/core ^8.2 -> found drupal/core[8.2.0-beta1, ..., 8.9.x-dev] but it conflicts with your root composer.json require (^9).
```

Dan kan je gewoon de module naar de laatste versie updaten:

```
ddev composer require drupal/permissions_by_term --no-update
```

Doe dit voor alle modules die een melding geven en waarvan de laatste nieuwe versie wel D9 compatibel is. Of kijk gewoon op /admin/reports/updates en doe dit voor elke module die niet groen is.

Nakijken aan welke modules het ligt dat je niet kan updaten naar nieuwste D9 versie:

```
ddev composer prohibits drupal/core 9.4.6
```

Dan kan je eventuele custom modules de requirements aanpassen en dan de contrib modules die opgelijst zijn terug updaten via:

```
ddev composer require drupal/better_exposed_filters --no-update
ddev composer require drupal/devel --no-update
ddev composer require drupal/honeypot --no-update
ddev composer require drupal/imageapi_optimize --no-update
...
```

Indien je zo een melding krijgt van enkel 1 module, en er is wel een patch om de module D9 compatibel te maken, maar geen D9 compatibele versie:

```
Problem 1
    - drupal/domain_menu_access dev-1.x requires drupal/core ~8.0 -> found drupal/core[8.0.0-beta6, ..., 8.9.x-dev] but it conflicts with your root composer.json require (^9).
    - drupal/domain_menu_access 1.x-dev is an alias of drupal/domain_menu_access dev-1.x and thus requires it to be installed too.
    - Root composer.json requires drupal/domain_menu_access 1.x-dev@dev -> satisfiable by drupal/domain_menu_access[1.x-dev (alias of dev-1.x)].
```

Dan moet je drupal lenient gebruiken:

```
ddev composer require mglaman/composer-drupal-lenient
```

Patch toevoegen in composer.json bij patches sectie

```
ddev composer config --merge --json extra.drupal-lenient.allowed-list '["drupal/cookiepro"]'
ddev composer require drupal/cookiepro:2.0.1
```

Als er problemen zijn met applyen van patches, zoek dan de issues op en kijk of de patches niet meer nodig zijn in de nieuwere drupal versie of dat er anders een nieuwere versie van de patch is die werkt met de huidige drupal versie.

Als de composer update gelukt is, voer dan de database updates uit.

```
ddev drush updb -y
```

Als je deze error krijgt:

```
[preflight] Unable to decode /app/composer.json
```

Dan is er waarschijnlijk ergens een foutje in je composer.json. Haal alle comments eruit, kijk na of er niet ergens een komma teveel of te weinig staat enz.

Als je deze melding krijgt:

```
Unable to parse modules/contrib/rabbit_hole/modules/rh_eck/rh_eck.info.yml Duplicate key "type" detected at line 7 (near "type: module").
```

web/modules/contrib/rabbit\_hole/modules/rh\_eck/rh\_eck.info.yml aanpassen en handmatig dubbele lijn weghalen:

type: module

zodat dit er maar 1 keer in staat ipv 2 keer.

Als je de module better\_exposed\_filters gebruikt, moet je deze modules toevoegen via composer:

```
ddev composer require drupal/jquery_ui
ddev composer require drupal/jquery_ui_slider
ddev composer require drupal/jquery_ui_touch_punch
ddev composer require drupal/jquery_ui_datepicker
```

En dan enablen:

```
ddev drush en jquery_ui
ddev drush en jquery_ui_slider
ddev drush en jquery_ui_touch_punch
ddev drush en jquery_ui_datepicker
```

maar ook voordat je een drush cim zou willen doen toevoegen in config/sync/core.extension.yml:

```
jquery_ui: 0
jquery_ui_slider: 0
jquery_ui_touch_punch: 0
jquery_ui_datepicker: 0
```

En dan moet je ook nog jquery-ui-touch-punch in je libraies folder steken: Download [https://github.com/furf/jquery-ui-touch-punch](https://github.com/furf/jquery-ui-touch-punch) in libraries folder steken zodat je dit hebt: `web/libraries/jquery-ui-touch-punch/jquery.ui.touch-punch.min.js`

Na aanpassen composer.json:

`ddev composer update --with-all-dependencies --prefer-dist`

Als alles gelukt is:

```
ddev drush en devel_entity_updates
```

```
ddev drush entup
```

```
ddev drush updb -y
```

Ook het project in GitLab bewerken, Settings -&gt; General en daar de Topic instellen op 'Drupal 9'

Indien volgende melding:

<p class="callout warning">The "image\_multicrop" plugin does not exist. Valid plugin IDs</p>

dan:

```
ddev drush cex -y
```

in folder config zoeken naar '`image_multicrop`' en vervangen door '`image`'

```
ddev drush cim -y
```

en commando `ddev drush multi_crop:migrateToMediaContextualCrop` opnieuw uitvoeren

Indien klaar, image style nakijken:

`/admin/structure/media/manage/image/display`

Aangepaste weergave toevoegen: cropped (indien nog niet actief)

De Cropped weergave bewerken (/admin/structure/media/manage/image/display/cropped)

Opmaak: Cropped Image (Image style: max\_1300x1300)

Indien klaar dan config committen en pushen en daarna mag de module uitgeschakeld worden

comitten, pushen, en dan

`ddev composer remove drupal/multi_crop`