akaunting/app/Utilities/Versions.php

119 lines
2.7 KiB
PHP
Raw Normal View History

2017-09-14 22:21:00 +03:00
<?php
namespace App\Utilities;
use App\Traits\SiteApi;
use Cache;
use Date;
use Parsedown;
2018-05-25 06:11:53 +03:00
use GuzzleHttp\Exception\RequestException;
2017-09-14 22:21:00 +03:00
class Versions
{
use SiteApi;
public static function changelog()
{
$output = '';
$url = 'https://api.github.com/repos/akaunting/akaunting/releases';
$http = new \GuzzleHttp\Client(['verify' => false]);
$json = $http->get($url, ['timeout' => 30])->getBody()->getContents();
if (empty($json)) {
return $output;
}
$parsedown = new Parsedown();
2017-09-14 22:21:00 +03:00
$releases = json_decode($json);
foreach ($releases as $release) {
2017-11-23 23:28:35 +03:00
if (version_compare($release->tag_name, version('short'), '<=')) {
2017-09-14 22:21:00 +03:00
continue;
}
if ($release->prerelease == true) {
continue;
}
if (empty($release->body)) {
continue;
}
$output .= '<h2><span class="label label-success">'.$release->tag_name.'</span></h2>';
$output .= $parsedown->text($release->body);
2017-09-14 22:21:00 +03:00
$output .= '<hr>';
}
return $output;
}
public static function latest($modules = array())
{
// Get data from cache
$data = Cache::get('versions');
if (!empty($data)) {
2017-09-14 22:21:00 +03:00
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);
// Then modules
foreach ($modules as $module) {
$alias = $module->get('alias');
$version = $module->get('version');
$url = 'apps/' . $alias . '/version/' . $version . '/' . $info['akaunting'];
2017-09-14 22:21:00 +03:00
$data[$alias] = static::getLatestVersion($url);
}
Cache::put('versions', $data, Date::now()->addHour(6));
return $data;
}
public static function getLatestVersion($url)
{
2017-10-27 09:38:55 +03:00
$latest = '0.0.0';
2018-09-06 10:48:26 +03:00
$response = static::getRemote($url, ['timeout' => 10, 'referer' => true]);
2018-05-25 06:11:53 +03:00
// Exception
if ($response instanceof RequestException) {
return $latest;
}
2017-09-14 22:21:00 +03:00
2017-10-27 09:38:55 +03:00
// Bad response
if (!$response || ($response->getStatusCode() != 200)) {
2017-10-27 09:38:55 +03:00
return $latest;
}
2017-09-14 22:21:00 +03:00
2017-10-27 09:38:55 +03:00
$content = json_decode($response->getBody());
// Empty response
if (!is_object($content) || !is_object($content->data)) {
return $latest;
2017-09-14 22:21:00 +03:00
}
2017-10-27 09:38:55 +03:00
// Get the latest version
$latest = $content->data->latest;
2017-09-14 22:21:00 +03:00
return $latest;
}
}