false]); $json = $http->get($url, ['timeout' => 30])->getBody()->getContents(); if (empty($json)) { return $output; } $releases = json_decode($json); foreach ($releases as $release) { if (version_compare($release->tag_name, version('short'), '<=')) { continue; } if ($release->prerelease == true) { continue; } if (empty($release->body)) { continue; } $output .= '

' . $release->tag_name . '

'; $output .= Markdown::convertToHtml($release->body); $output .= '
'; } return $output; } public static function latest($alias) { $versions = static::all($alias); if (empty($versions[$alias]) || empty($versions[$alias]->data)) { return false; } return $versions[$alias]->data->latest; } public static function all($modules = null) { // Get data from cache $versions = Cache::get('versions'); if (!empty($versions)) { return $versions; } $info = Info::all(); $versions = []; // Check core first $url = 'core/version/' . $info['akaunting'] . '/' . $info['php'] . '/' . $info['mysql'] . '/' . $info['companies']; $versions['core'] = static::getLatestVersion($url, $info['akaunting']); $modules = Arr::wrap($modules); // Then modules foreach ($modules as $module) { if (is_string($module)) { $module = module($module); } if (!$module instanceof \Akaunting\Module\Module) { continue; } $alias = $module->get('alias'); $version = $module->get('version'); $url = 'apps/' . $alias . '/version/' . $version . '/' . $info['akaunting']; $versions[$alias] = static::getLatestVersion($url, $version); } Cache::put('versions', $versions, Date::now()->addHour(6)); return $versions; } public static function getLatestVersion($url, $latest) { if (!$data = static::getResponseData('GET', $url, ['timeout' => 10])) { return $latest; } if (!is_object($data)) { return $latest; } return $data->latest; } public static function getUpdates() { // Get data from cache $updates = Cache::get('updates'); if (!empty($updates)) { return $updates; } $updates = []; $modules = module()->all(); $versions = static::all($modules); foreach ($versions as $alias => $latest_version) { if ($alias == 'core') { $installed_version = version('short'); } else { $module = module($alias); if (!$module instanceof \Akaunting\Module\Module) { continue; } $installed_version = $module->get('version'); } if (version_compare($installed_version, $latest_version, '>=')) { continue; } $updates[$alias] = $latest_version; } Cache::put('updates', $updates, Date::now()->addHour(6)); return $updates; } public static function shouldUpdate($listener_version, $old_version, $new_version): bool { // Don't update if "listener" is same or lower than "old" version if (version_compare($listener_version, $old_version, '<=')) { return false; } // Don't update if "listener" is higher than "new" version if (version_compare($listener_version, $new_version, '>')) { return false; } return true; } }