getPlumrocketInstalledExtensions = $getPlumrocketInstalledExtensions; $this->getUpdates = $getUpdates; $this->getExtensionInformation = $getExtensionInformation; } /** * Get extensions updates information. * * @return array */ public function execute(): array { $extensions = $this->getPlumrocketInstalledExtensions->execute(); try { $updates = $this->getUpdates->execute($extensions); } catch (NotFoundException $e) { $updates = false; } $result = []; foreach ($extensions as $extensionName) { $extensionInfo = $this->getExtensionInformation->execute($extensionName); if ($extensionInfo->isService()) { continue; } $extensionData = [ 'moduleName' => $extensionInfo->getModuleName(), 'name' => $extensionInfo->getTitle() ?: $extensionName, 'documentation' => $extensionInfo->getDocumentationLink(), 'installedVersion' => $extensionInfo->getInstalledVersion(), ]; if (false !== $updates) { $extensionData['successFetchUpdates'] = true; $extensionData['updates'] = $updates[$extensionName]; } else { $extensionData['successFetchUpdates'] = false; $extensionData['updates'] = []; } $result[] = $extensionData; } usort( $result, static function ($extension1, $extension2) { $hasUpdates1 = empty($extension1['updates']); $hasUpdates2 = empty($extension2['updates']); if ($hasUpdates1 !== $hasUpdates2) { return $hasUpdates1 <=> $hasUpdates2; } return $extension1['name'] <=> $extension2['name']; } ); return $result; } }