Sets in Dolibarr 18 unter PHP8.x

Im Dezember 2023 hatte ich Dolibarr von 16.0.3 auf 18.0.3 gebracht und gleichzeitig PHP von 7.4 auf 8.1 umgestellt. Nach den Updates hatte alles gut ausgesehen. Gestern musste ich feststellen, dass ich bei den Produkten im Tab „Sets“ nichts mehr angezeigt bekomme. Offenbar hatte ich bisher kein Set aufgerufen. Mittlerweile funktioniert es wieder. Ich dokumentiere hier, was ich gemacht habe, für den Fall, dass jemand das gleiche Problem hat. Vermutlich ist es weitgehend unabhängig von der Dolibarr-Version und liegt in erster Linie am PHP-Upgrade. Aber nachdem PHP7 schon seit langem keine Sicherheitsupdates mehr bekommt, gab es keine Alternative zum Umstieg auf PHP8.

Im Error-Log des Webservers fand ich folgenden Eintrag:

FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: array_push(): Argument #1 ($array) must be of type array, int given in /var/www/dolibarr/htdocs/product/class/product.class.php:5017"

Nach einigem Suchen fand ich in Github einen Patch von Eldy, der jedoch noch nicht in die stabile Version von Dolibarr eingeflossen ist. Daher habe ich die Änderung manuell vorgenommen. In der in der Fehlermeldung erwähnten Datei die Zeile

$listofchilds = $this->getChildsArbo($rec['rowid'], 0, $level + 1, array_push($parents, $rec['rowid']));

durch folgendes ersetzen:

$parents[] = $rec['rowid'];
$listofchilds = $this->getChildsArbo($rec['rowid'], 0, $level + 1, $parents,);

Danach konnte ich die Sets wieder verwenden. Spätestens in Dolibarr 19 sollte es dann automatisch drinnen sein.