akaunting/app/Utilities/Versions.php

161 lines
3.8 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;
2020-03-12 15:13:03 +03:00
use GrahamCampbell\Markdown\Facades\Markdown;
2020-02-21 11:45:37 +03:00
use Illuminate\Support\Arr;
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;
}
$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;
}
2019-11-20 13:35:43 +03:00
$output .= '<h2><span class="badge badge-pill badge-success">' . $release->tag_name . '</span></h2>';
2017-09-14 22:21:00 +03:00
2020-03-12 15:13:03 +03:00
$output .= Markdown::convertToHtml($release->body);
2017-09-14 22:21:00 +03:00
$output .= '<hr>';
}
return $output;
}
2020-02-21 11:45:37 +03:00
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)
2017-09-14 22:21:00 +03:00
{
// Get data from cache
2019-12-17 16:27:50 +03:00
$versions = Cache::get('versions');
2017-09-14 22:21:00 +03:00
2019-12-17 16:27:50 +03:00
if (!empty($versions)) {
return $versions;
2017-09-14 22:21:00 +03:00
}
$info = Info::all();
2019-12-17 16:27:50 +03:00
$versions = [];
2017-09-14 22:21:00 +03:00
// Check core first
$url = 'core/version/' . $info['akaunting'] . '/' . $info['php'] . '/' . $info['mysql'] . '/' . $info['companies'];
2019-12-17 16:27:50 +03:00
$versions['core'] = static::getLatestVersion($url, $info['akaunting']);
2017-09-14 22:21:00 +03:00
2020-02-21 11:45:37 +03:00
$modules = Arr::wrap($modules);
2017-09-14 22:21:00 +03:00
// Then modules
foreach ($modules as $module) {
2020-02-21 11:45:37 +03:00
if (is_string($module)) {
$module = module($module);
}
2020-05-28 03:07:20 +03:00
if (!$module instanceof \Akaunting\Module\Module) {
2020-02-21 11:45:37 +03:00
continue;
}
2017-09-14 22:21:00 +03:00
$alias = $module->get('alias');
$version = $module->get('version');
$url = 'apps/' . $alias . '/version/' . $version . '/' . $info['akaunting'];
2017-09-14 22:21:00 +03:00
2019-12-17 16:27:50 +03:00
$versions[$alias] = static::getLatestVersion($url, $version);
2017-09-14 22:21:00 +03:00
}
2019-12-17 16:27:50 +03:00
Cache::put('versions', $versions, Date::now()->addHour(6));
2017-09-14 22:21:00 +03:00
2019-12-17 16:27:50 +03:00
return $versions;
2017-09-14 22:21:00 +03:00
}
2020-12-24 02:16:00 +03:00
public static function getLatestVersion($url, $latest)
2017-09-14 22:21:00 +03:00
{
2019-12-04 18:10:38 +03:00
if (!$data = static::getResponseData('GET', $url, ['timeout' => 10])) {
2017-10-27 09:38:55 +03:00
return $latest;
}
2017-09-14 22:21:00 +03:00
2019-12-04 18:10:38 +03:00
if (!is_object($data)) {
2017-10-27 09:38:55 +03:00
return $latest;
2017-09-14 22:21:00 +03:00
}
2019-12-04 18:10:38 +03:00
return $data->latest;
2017-09-14 22:21:00 +03:00
}
2020-12-24 02:16:00 +03:00
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;
}
}