config = $config; $this->configWriter = $configWriter; $this->entityManager = $entityManager; $this->requester = $requester; } public function run(): void { $config = $this->config; if ( !$config->get('adminNotifications') || !$config->get('adminNotificationsNewExtensionVersion') ) { return; } $query = $this->entityManager ->getQueryBuilder() ->select() ->from(Extension::ENTITY_TYPE) ->select(['id', 'name', 'version', 'checkVersionUrl']) ->where([ 'deleted' => false, 'isInstalled' => true, ]) ->order(['createdAt']) ->build(); $sth = $this->entityManager->getQueryExecutor()->execute($query); $latestReleases = []; while ($row = $sth->fetch()) { $url = !empty($row['checkVersionUrl']) ? $row['checkVersionUrl'] : null; $extensionName = $row['name']; $latestRelease = $this->requester->request($url, [ 'name' => $extensionName, ]); if (!empty($latestRelease) && !isset($latestRelease['error'])) { $latestReleases[$extensionName] = $latestRelease; } } $latestExtensionVersions = $config->get('latestExtensionVersions', []); $save = false; foreach ($latestReleases as $extensionName => $extensionData) { if (empty($latestExtensionVersions[$extensionName])) { $latestExtensionVersions[$extensionName] = $extensionData['version']; $save = true; continue; } if ($latestExtensionVersions[$extensionName] != $extensionData['version']) { $latestExtensionVersions[$extensionName] = $extensionData['version']; if (!empty($extensionData['notes'])) { //todo: create notification } $save = true; continue; } if (!empty($extensionData['notes'])) { //todo: find and modify notification } } if ($save) { $this->configWriter->set('latestExtensionVersions', $latestExtensionVersions); $this->configWriter->save(); } } }