From c4ebd3883cc157c6853e17754ee23ef9a1673e3b Mon Sep 17 00:00:00 2001 From: j3nsch Date: Sun, 15 Mar 2026 18:20:47 +0100 Subject: [PATCH 01/22] #1439 Run tests with PHP 8.2 --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 82a33f5ef..5252b0deb 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: - versions: [{php: '8.1', solr: '9.9.0'}] + versions: [{php: '8.1', solr: '9.9.0'}, {php: '8.2', solr: '9.9.0'}] fail-fast: false name: PHP ${{ matrix.versions.php }} Test From 897cc44508842ef6486fb9bf1c9ee4f4aee28203 Mon Sep 17 00:00:00 2001 From: j3nsch Date: Mon, 16 Mar 2026 08:17:36 +0100 Subject: [PATCH 02/22] #1439 Fix deprecated usage of vars in strings --- .../Collection/AbstractCollectionCommand.php | 8 ++++---- .../Application/Console/Collection/CopyCommand.php | 8 ++++---- .../Application/Console/Collection/MoveCommand.php | 6 +++--- .../Console/Collection/RemoveCommand.php | 14 +++++++------- .../Console/Collection/MoveCommandTest.php | 6 +++--- .../frontdoor/controllers/IndexControllerTest.php | 6 +++--- .../rss/controllers/IndexControllerTest.php | 2 +- .../controllers/BrowseControllerTest.php | 2 +- .../solrsearch/controllers/IndexControllerTest.php | 2 +- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/library/Application/Console/Collection/AbstractCollectionCommand.php b/library/Application/Console/Collection/AbstractCollectionCommand.php index f18e857e4..ad5fe8589 100644 --- a/library/Application/Console/Collection/AbstractCollectionCommand.php +++ b/library/Application/Console/Collection/AbstractCollectionCommand.php @@ -115,14 +115,14 @@ protected function processOptions(InputInterface $input) if ($srcRoleName !== null && $srcColNumber !== null) { $role = CollectionRole::fetchByName($srcRoleName); if ($role === null) { - throw new Exception("CollectionRole with name '${srcRoleName}' not found."); + throw new Exception("CollectionRole with name '{$srcRoleName}' not found."); } $collections = Collection::getModelRepository()->fetchCollectionsByRoleNumber( $role->getId(), $srcColNumber ); if (count($collections) === 0) { - throw new Exception("No collection found for role '${srcRoleName}' and number '$srcColNumber'."); + throw new Exception("No collection found for role '{$srcRoleName}' and number '$srcColNumber'."); } $this->sourceCol = $collections[0]; } @@ -137,14 +137,14 @@ protected function processOptions(InputInterface $input) if ($destRoleName !== null && $destColNumber !== null) { $role = CollectionRole::fetchByName($destRoleName); if ($role === null) { - throw new Exception("CollectionRole with name '${destRoleName}' not found."); + throw new Exception("CollectionRole with name '{$destRoleName}' not found."); } $collections = Collection::getModelRepository()->fetchCollectionsByRoleNumber( $role->getId(), $destColNumber ); if (count($collections) === 0) { - throw new Exception("No collection found for role '${destRoleName}' and number '$destColNumber'."); + throw new Exception("No collection found for role '{$destRoleName}' and number '$destColNumber'."); } $this->destCol = $collections[0]; } diff --git a/library/Application/Console/Collection/CopyCommand.php b/library/Application/Console/Collection/CopyCommand.php index 612642fc9..8294ee418 100644 --- a/library/Application/Console/Collection/CopyCommand.php +++ b/library/Application/Console/Collection/CopyCommand.php @@ -75,7 +75,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $sourceCount = count($sourceDocuments); if ($sourceCount === 0) { - $output->writeln("Collection (ID = ${sourceId}) does not contain documents."); + $output->writeln("Collection (ID = {$sourceId}) does not contain documents."); $output->writeln(''); $output->writeln(' "' . $sourceCol->getDisplayName() . '"'); $output->writeln(''); @@ -87,15 +87,15 @@ protected function execute(InputInterface $input, OutputInterface $output): int $moveCount = count($moveDocuments); if ($moveCount === 0) { - $output->writeln("Destination collection already contains all the documents (${sourceCount}) of source collection."); + $output->writeln("Destination collection already contains all the documents ({$sourceCount}) of source collection."); return self::SUCCESS; } - $output->writeln("Copy documents (${moveCount}) from source collection (ID = ${sourceId})"); + $output->writeln("Copy documents ({$moveCount}) from source collection (ID = {$sourceId})"); $output->writeln(''); $output->writeln(' "' . $sourceCol->getDisplayName() . '"'); $output->writeln(''); - $output->writeln("to destination collection (ID = ${destId})"); + $output->writeln("to destination collection (ID = {$destId})"); $output->writeln(''); $output->writeln(' "' . $destCol->getDisplayName() . '"'); $output->writeln(''); diff --git a/library/Application/Console/Collection/MoveCommand.php b/library/Application/Console/Collection/MoveCommand.php index 9670d913e..d9a05d2fa 100644 --- a/library/Application/Console/Collection/MoveCommand.php +++ b/library/Application/Console/Collection/MoveCommand.php @@ -75,18 +75,18 @@ protected function execute(InputInterface $input, OutputInterface $output): int $sourceCount = count($sourceDocuments); if ($sourceCount === 0) { - $output->writeln("Collection (ID = ${sourceId}) does not contain documents."); + $output->writeln("Collection (ID = {$sourceId}) does not contain documents."); $output->writeln(''); $output->writeln(' "' . $sourceCol->getDisplayName() . '"'); $output->writeln(''); return self::SUCCESS; } - $output->writeln("Move documents (${sourceCount}) from source collection (ID = ${sourceId})"); + $output->writeln("Move documents ({$sourceCount}) from source collection (ID = {$sourceId})"); $output->writeln(''); $output->writeln(' "' . $sourceCol->getDisplayName() . '"'); $output->writeln(''); - $output->writeln("to destination collection (ID = ${destId})"); + $output->writeln("to destination collection (ID = {$destId})"); $output->writeln(''); $output->writeln(' "' . $destCol->getDisplayName() . '"'); $output->writeln(''); diff --git a/library/Application/Console/Collection/RemoveCommand.php b/library/Application/Console/Collection/RemoveCommand.php index adea74888..106458aa6 100644 --- a/library/Application/Console/Collection/RemoveCommand.php +++ b/library/Application/Console/Collection/RemoveCommand.php @@ -210,7 +210,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $targetCount = count($targetDocuments); if ($targetCount === 0) { - $output->writeln("Collection (ID = ${targetId}) does not contain documents."); + $output->writeln("Collection (ID = {$targetId}) does not contain documents."); $output->writeln(''); $output->writeln(' "' . $targetCol->getDisplayName() . '"'); $output->writeln(''); @@ -220,7 +220,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $removeDocuments = null; if ($filterCol === null) { - $output->writeln("Remove all documents (${targetCount}) from collection (ID = ${targetId})"); + $output->writeln("Remove all documents ({$targetCount}) from collection (ID = {$targetId})"); $output->writeln(''); $output->writeln(' "' . $targetCol->getDisplayName() . '"'); $output->writeln(''); @@ -231,7 +231,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $filterCount = count($filterDocuments); if ($filterCount === 0) { - $output->writeln("The filter collection (ID = ${filterId}) does not contain any documents."); + $output->writeln("The filter collection (ID = {$filterId}) does not contain any documents."); $output->writeln(''); $output->writeln(' "' . $filterCol->getDisplayName() . '"'); $output->writeln(''); @@ -242,22 +242,22 @@ protected function execute(InputInterface $input, OutputInterface $output): int $removeCount = count($removeDocuments); if ($removeCount === 0) { - $output->writeln("Non of the documents in the filter collection (ID = ${filterId})"); + $output->writeln("Non of the documents in the filter collection (ID = {$filterId})"); $output->writeln(''); $output->writeln(' "' . $filterCol->getDisplayName() . '"'); $output->writeln(''); - $output->writeln("are present in the target collection (ID= ${targetId})"); + $output->writeln("are present in the target collection (ID= {$targetId})"); $output->writeln(''); $output->writeln(' "' . $targetCol->getDisplayName() . '"'); $output->writeln(''); return self::FAILURE; } - $output->writeln("Remove documents (${filterCount}) in collection (ID = ${filterId})"); + $output->writeln("Remove documents ({$filterCount}) in collection (ID = {$filterId})"); $output->writeln(''); $output->writeln(' "' . $filterCol->getDisplayName() . '"'); $output->writeln(''); - $output->writeln("from collection (ID= ${targetId})"); + $output->writeln("from collection (ID= {$targetId})"); $output->writeln(''); $output->writeln(' "' . $targetCol->getDisplayName() . '"'); $output->writeln(''); diff --git a/tests/library/Application/Console/Collection/MoveCommandTest.php b/tests/library/Application/Console/Collection/MoveCommandTest.php index 15a12a80e..3a1fae133 100644 --- a/tests/library/Application/Console/Collection/MoveCommandTest.php +++ b/tests/library/Application/Console/Collection/MoveCommandTest.php @@ -157,7 +157,7 @@ public function testMoveDocumentsFromEmptyCollection() $colId1 = $col2->getId(); - $this->assertStringContainsString("Collection (ID = ${colId1}) does not contain documents.", $output); + $this->assertStringContainsString("Collection (ID = {$colId1}) does not contain documents.", $output); } public function testCollectionIdNotFound() @@ -217,7 +217,7 @@ public function testSourceCollectionUsingUnknownColNumberNotFound() $this->assertCount(0, $col2->getDocumentIds()); $this->expectException(Exception::class); - $this->expectExceptionMessage("No collection found for role '${roleName}' and number 'col3'."); + $this->expectExceptionMessage("No collection found for role '{$roleName}' and number 'col3'."); $this->tester->execute([ '--no-interaction' => true, @@ -265,7 +265,7 @@ public function testDestinationCollectionUsingUnknownColNumberNotFound() $this->assertCount(0, $col2->getDocumentIds()); $this->expectException(Exception::class); - $this->expectExceptionMessage("No collection found for role '${roleName}' and number 'col3'."); + $this->expectExceptionMessage("No collection found for role '{$roleName}' and number 'col3'."); $this->tester->execute([ '--no-interaction' => true, diff --git a/tests/modules/frontdoor/controllers/IndexControllerTest.php b/tests/modules/frontdoor/controllers/IndexControllerTest.php index e29dd2875..c8e08acbe 100644 --- a/tests/modules/frontdoor/controllers/IndexControllerTest.php +++ b/tests/modules/frontdoor/controllers/IndexControllerTest.php @@ -1586,11 +1586,11 @@ public function testRenderingGndSubjectLink() $config = $this->getConfig(); $gndLinkUrl = $config->gnd->baseUrl . '4130303-9'; - $this->dispatch("/frontdoor/index/index/docId/${docId}"); + $this->dispatch("/frontdoor/index/index/docId/{$docId}"); - $this->assertXpath("//a[@href=\"${gndLinkUrl}\"]"); + $this->assertXpath("//a[@href=\"{$gndLinkUrl}\"]"); $this->assertXpathContentContains('//em[contains(@class,"subject")]', 'Bauhaus'); - $this->assertXpathContentContains("//a[@href=\"${gndLinkUrl}\"]", 'GND'); + $this->assertXpathContentContains("//a[@href=\"{$gndLinkUrl}\"]", 'GND'); $this->assertXpathContentContains('//em[contains(@class, "subject")]', 'mytag'); $this->assertNotXpathContentContains('//a', 'mytag'); // no link for 'mytag' diff --git a/tests/modules/rss/controllers/IndexControllerTest.php b/tests/modules/rss/controllers/IndexControllerTest.php index 489daf72c..05a537d1f 100644 --- a/tests/modules/rss/controllers/IndexControllerTest.php +++ b/tests/modules/rss/controllers/IndexControllerTest.php @@ -69,7 +69,7 @@ public function testUnavailableSolrServerReturns503() $this->dispatch('/rss/index/index/searchtype/all'); $body = $this->getResponse()->getBody(); - $this->assertStringNotContainsString("http://${host}:${port}/solr/corethatdoesnotexist", $body); + $this->assertStringNotContainsString("http://{$host}:{$port}/solr/corethatdoesnotexist", $body); $this->assertStringContainsString("The search service is currently not available.", $body); $this->assertResponseCode(503); diff --git a/tests/modules/solrsearch/controllers/BrowseControllerTest.php b/tests/modules/solrsearch/controllers/BrowseControllerTest.php index 9a9986852..f3b79b8e1 100644 --- a/tests/modules/solrsearch/controllers/BrowseControllerTest.php +++ b/tests/modules/solrsearch/controllers/BrowseControllerTest.php @@ -305,7 +305,7 @@ public function testUnavailableServiceReturnsHttpCode503() $this->dispatch('/solrsearch/browse/doctypes'); $body = $this->getResponse()->getBody(); - // $this->assertStringNotContainsString("http://${host}:${port}/solr/corethatdoesnotexist", $body); + // $this->assertStringNotContainsString("http://{$host}:{$port}/solr/corethatdoesnotexist", $body); $this->assertStringContainsString("exception 'Application_SearchException' with message 'error_search_unavailable'", $body); $this->assertResponseCode(503); } diff --git a/tests/modules/solrsearch/controllers/IndexControllerTest.php b/tests/modules/solrsearch/controllers/IndexControllerTest.php index d93efdabb..30aad05f9 100644 --- a/tests/modules/solrsearch/controllers/IndexControllerTest.php +++ b/tests/modules/solrsearch/controllers/IndexControllerTest.php @@ -720,7 +720,7 @@ public function testUnavailableSolrServerReturns503() $this->dispatch('/solrsearch/browse/doctypes'); $body = $this->getResponse()->getBody(); - $this->assertStringNotContainsString("http://${host}:${port}/solr/corethatdoesnotexist", $body); + $this->assertStringNotContainsString("http://{$host}:{$port}/solr/corethatdoesnotexist", $body); $this->assertStringContainsString('The search service is currently not available.', $body); $this->assertResponseCode(503); } From dae062e8e762979daaa84b8fd2223f9f67e7ca30 Mon Sep 17 00:00:00 2001 From: j3nsch Date: Fri, 20 Mar 2026 11:09:26 +0100 Subject: [PATCH 03/22] #1439 Use zf1-future 1.25.* --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 777fb596d..1b9a87be0 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ "ext-readline": "*", "ext-sockets": "*", "ext-yaml": "*", - "opus4/zf1-future": "1.21.*", + "opus4/zf1-future": "1.25.*", "jpgraph/jpgraph": "dev-master", "opus4-repo/opus4-common": "dev-master as 4.8.1", "opus4-repo/framework": "dev-master as 4.8.1", From e4c935dc80eecb99ed9d977fe233c78addf83d3d Mon Sep 17 00:00:00 2001 From: j3nsch Date: Fri, 20 Mar 2026 11:20:09 +0100 Subject: [PATCH 04/22] #1439 Fix dependency conflicts --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 1b9a87be0..b3c72befc 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ "ext-readline": "*", "ext-sockets": "*", "ext-yaml": "*", - "opus4/zf1-future": "1.25.*", + "opus4/zf1-future": "1.25.0.x-dev as 1.21.4.x-dev", "jpgraph/jpgraph": "dev-master", "opus4-repo/opus4-common": "dev-master as 4.8.1", "opus4-repo/framework": "dev-master as 4.8.1", From 8d0f35a0a05acd55c4dff07c267f9be471d91652 Mon Sep 17 00:00:00 2001 From: j3nsch Date: Fri, 20 Mar 2026 12:53:34 +0100 Subject: [PATCH 05/22] #1439 Setup missing resource for test --- tests/modules/admin/forms/Document/NoteTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/modules/admin/forms/Document/NoteTest.php b/tests/modules/admin/forms/Document/NoteTest.php index 9c5633268..3c307b702 100644 --- a/tests/modules/admin/forms/Document/NoteTest.php +++ b/tests/modules/admin/forms/Document/NoteTest.php @@ -37,6 +37,8 @@ */ class Admin_Form_Document_NoteTest extends ControllerTestCase { + protected $additionalResources = ['database']; + public function testCreateForm() { $form = new Admin_Form_Document_Note(); From b55b8622b577c4739f1ffa382b401f258a085146 Mon Sep 17 00:00:00 2001 From: j3nsch Date: Fri, 20 Mar 2026 21:20:11 +0100 Subject: [PATCH 06/22] #1439 Fix disabling translation for tests --- tests/modules/ControllerTestCaseTest.php | 7 ------ .../modules/admin/forms/Document/NoteTest.php | 1 + tests/support/ControllerTestCase.php | 22 ++++--------------- 3 files changed, 5 insertions(+), 25 deletions(-) diff --git a/tests/modules/ControllerTestCaseTest.php b/tests/modules/ControllerTestCaseTest.php index 183b70013..a66903190 100644 --- a/tests/modules/ControllerTestCaseTest.php +++ b/tests/modules/ControllerTestCaseTest.php @@ -179,13 +179,6 @@ public function testDisableEnableTranslation() $translator = Application_Translate::getInstance(); $this->assertFalse($translator->isTranslated('LastName')); - - $this->enableTranslation(); - - $translator = Application_Translate::getInstance(); - $this->assertTrue($translator->isTranslated('LastName')); - - $this->assertSame($defaultTranslator, $translator); } public function testGetWorkspacePath() diff --git a/tests/modules/admin/forms/Document/NoteTest.php b/tests/modules/admin/forms/Document/NoteTest.php index 3c307b702..b0ce6572a 100644 --- a/tests/modules/admin/forms/Document/NoteTest.php +++ b/tests/modules/admin/forms/Document/NoteTest.php @@ -37,6 +37,7 @@ */ class Admin_Form_Document_NoteTest extends ControllerTestCase { + /** @var string[] */ protected $additionalResources = ['database']; public function testCreateForm() diff --git a/tests/support/ControllerTestCase.php b/tests/support/ControllerTestCase.php index e29f0fb0e..8759861f2 100644 --- a/tests/support/ControllerTestCase.php +++ b/tests/support/ControllerTestCase.php @@ -36,6 +36,7 @@ use Opus\Common\DocumentInterface; use Opus\Common\File; use Opus\Common\FileInterface; +use Opus\Common\Log\LogService; use Opus\Common\LoggingTrait; use Opus\Common\Model\ModelException; use Opus\Common\Model\ModelInterface; @@ -81,9 +82,6 @@ class ControllerTestCase extends TestCase /** @var array */ private $tempFiles = []; - /** @var Application_Translate|null */ - private $translatorBackup; - /** @var string */ private $workspacePath; @@ -1095,31 +1093,19 @@ public function setBaseUrl($baseUrl) */ public function disableTranslation() { - if ($this->translatorBackup === null) { - $this->translatorBackup = Application_Translate::getInstance(); - } + $logService = LogService::getInstance(); + $logger = $logService->getLog('translation'); $translate = new Application_Translate([ 'adapter' => 'array', 'content' => [], 'locale' => 'auto', + 'log' => $logger, ]); Application_Translate::setInstance($translate); } - /** - * Resets translations with original (bootstrap) translation object. - * - * This function restores translation if disableTranslation has been called before. - */ - public function enableTranslation() - { - if ($this->translatorBackup !== null) { - Application_Translate::setInstance($this->translatorBackup); - } - } - /** * Allow the given user (identified by his or her name) to access the given module. * Returns true if access permission was added; otherwise false. From 3ccd200f32658c5c4bbae333f5c49835af9a7afb Mon Sep 17 00:00:00 2001 From: j3nsch Date: Fri, 20 Mar 2026 21:47:11 +0100 Subject: [PATCH 07/22] #1439 Fix dynamic property --- library/Application/Controller/Plugin/SecurityRealm.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/Application/Controller/Plugin/SecurityRealm.php b/library/Application/Controller/Plugin/SecurityRealm.php index 409e394b7..94effc112 100644 --- a/library/Application/Controller/Plugin/SecurityRealm.php +++ b/library/Application/Controller/Plugin/SecurityRealm.php @@ -40,6 +40,9 @@ */ class Application_Controller_Plugin_SecurityRealm extends Zend_Controller_Plugin_Abstract { + /** @var array */ + private $groups; + /** * Determine the current User's security role and set up Realm. * From 92ec6f1571117837021f1523090861394c12524b Mon Sep 17 00:00:00 2001 From: j3nsch Date: Fri, 20 Mar 2026 22:10:16 +0100 Subject: [PATCH 08/22] #1439 Fix dynamic property --- library/Application/Util/BrowsingParams.php | 3 +++ tests/modules/frontdoor/models/AuthorsTest.php | 2 +- tests/modules/oai/models/DocumentListTest.php | 14 +++++++------- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/library/Application/Util/BrowsingParams.php b/library/Application/Util/BrowsingParams.php index 5a82fef7d..3f43a6a16 100644 --- a/library/Application/Util/BrowsingParams.php +++ b/library/Application/Util/BrowsingParams.php @@ -34,6 +34,9 @@ class Application_Util_BrowsingParams /** @var Zend_Controller_Request_Http */ private $request; + /** @var Zend_Log */ + private $log; + /** * @param Zend_Controller_Request_Http $request * @param Zend_Log $log diff --git a/tests/modules/frontdoor/models/AuthorsTest.php b/tests/modules/frontdoor/models/AuthorsTest.php index 4d473500e..1db737d06 100644 --- a/tests/modules/frontdoor/models/AuthorsTest.php +++ b/tests/modules/frontdoor/models/AuthorsTest.php @@ -236,7 +236,7 @@ public function testGetContactableAuthorsNoAuthors() $author->setFirstName('John'); $author->setLastName('Doe'); $author->setEmail('doe@example.org'); - $this->authorId = $author->store(); + $author->store(); $linkPerson = $doc->addPersonAuthor($author); $linkPerson->setAllowEmailContact(false); diff --git a/tests/modules/oai/models/DocumentListTest.php b/tests/modules/oai/models/DocumentListTest.php index 29e6a7656..5f5fa124c 100644 --- a/tests/modules/oai/models/DocumentListTest.php +++ b/tests/modules/oai/models/DocumentListTest.php @@ -76,9 +76,9 @@ public function testIntervalOAIPMHQueries() $file = $this->createOpusTestFile('article.txt'); $file->setVisibleInOai(1); $doc->addFile($file); - $this->docId = $doc->store(); + $docId = $doc->store(); - $doc = Document::get($this->docId); + $doc = Document::get($docId); $serverDateModified = $doc->getServerDateModified(); $today = new DateTime(); @@ -120,8 +120,8 @@ public function testIntervalOAIPMHQueries() $docIds = $docListModel->query($oaiRequest); $this->assertTrue( - in_array($this->docId, $docIds), - "Response must contain document id $this->docId: " . var_export($interval, true) + in_array($docId, $docIds), + "Response must contain document id {$docId}: " . var_export($interval, true) ); } } @@ -134,9 +134,9 @@ public function testIntervalOAIPMHQueryWithoutTestDoc() { $doc = $this->createTestDocument(); $doc->setServerState('published'); - $this->docId = $doc->store(); + $docId = $doc->store(); - $doc = Document::get($this->docId); + $doc = Document::get($docId); $serverDateModified = $doc->getServerDateModified(); $today = new DateTime(); @@ -179,7 +179,7 @@ public function testIntervalOAIPMHQueryWithoutTestDoc() $docListModel = new Oai_Model_DocumentList($server); $docIds = $docListModel->query($oaiRequest); - $this->assertFalse(in_array($this->docId, $docIds), "Response must NOT contain document id $this->docId: " . var_export($interval, true)); + $this->assertFalse(in_array($docId, $docIds), "Response must NOT contain document id {$docId}: " . var_export($interval, true)); } } From 7062524153542fff222b6a4b7efd06103f3756b9 Mon Sep 17 00:00:00 2001 From: j3nsch Date: Mon, 23 Mar 2026 08:48:18 +0100 Subject: [PATCH 09/22] #1439 Vagrantfile switch to PHP 8.2 --- Vagrantfile | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index fb2c3baa0..5c6159425 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -2,10 +2,10 @@ # vi: set ft=ruby : $software = <