From 2a6a22be9fb7996999914d5077c3b22e26bc4026 Mon Sep 17 00:00:00 2001 From: Torben Dannhauer Date: Mon, 20 Jul 2026 07:17:55 +0200 Subject: [PATCH] fix(timeobjects): skip missing optional drivers without error spam Weather and FacebookEvents depend on Composer suggest packages. When those are not installed, listTimeObjectCategories now skips them quietly instead of logging an error on every category probe. --- src/Api.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Api.php b/src/Api.php index 58d5774..ef5c007 100644 --- a/src/Api.php +++ b/src/Api.php @@ -38,13 +38,27 @@ public function listTimeObjectCategories() $injector = $GLOBALS['injector']; $factory = $injector->getInstance(DriverFactory::class); $logger = $injector->getInstance(LoggerInterface::class); - $tests = ['Weather' => _("Weather"), - 'FacebookEvents' => _("Facebook Events")]; + // Drivers depend on optional Composer suggest packages. Missing + // packages are normal — skip without error spam. ensure() also + // returns false when the matching Horde conf is disabled. + $tests = [ + 'Weather' => [ + 'title' => _("Weather"), + 'requires' => 'Horde_Service_Weather', + ], + 'FacebookEvents' => [ + 'title' => _("Facebook Events"), + 'requires' => 'Horde_Service_Facebook', + ], + ]; $drivers = []; - foreach ($tests as $driver => $description) { + foreach ($tests as $driver => $meta) { + if (!class_exists($meta['requires'])) { + continue; + } try { if ($factory->create($driver)->ensure()) { - $drivers[$driver] = ['title' => $description, 'type' => 'single']; + $drivers[$driver] = ['title' => $meta['title'], 'type' => 'single']; } } catch (Exception $e) { $logger->error(