false]); $json = $http->get($url, ['timeout' => 30])->getBody()->getContents(); if (empty($json)) { return $output; } $parsedown = new Parsedown(); $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 .= $parsedown->text($release->body); $output .= '
'; } return $output; } public static function latest($modules = array()) { // Get data from cache $data = Cache::get('versions'); if (!empty($data)) { return $data; } $info = Info::all(); // No data in cache, grab them from remote $data = array(); // Check core first $url = 'core/version/' . $info['akaunting'] . '/' . $info['php'] . '/' . $info['mysql'] . '/' . $info['companies']; $data['core'] = static::getLatestVersion($url); // API token required for modules if (!setting('general.api_token')) { Cache::put('versions', $data, Date::now()->addHour(6)); return $data; } // Then modules foreach ($modules as $module) { $alias = $module->get('alias'); $version = $module->get('version'); $url = 'apps/' . $alias . '/version/' . $version . '/' . $info['akaunting']; $data[$alias] = static::getLatestVersion($url); } Cache::put('versions', $data, Date::now()->addHour(6)); return $data; } public static function getLatestVersion($url) { $latest = '0.0.0'; $response = static::getRemote($url, ['timeout' => 30, 'referer' => true]); // Bad response if ($response->getStatusCode() != 200) { return $latest; } $content = json_decode($response->getBody()); // Empty response if (!is_object($content) || !is_object($content->data)) { return $latest; } // Get the latest version $latest = $content->data->latest; return $latest; } }