diff --git a/app/Helpers/Update/UpdateTrait.php b/app/Helpers/Update/UpdateTrait.php index 2828dead4a..91aaa47c8a 100644 --- a/app/Helpers/Update/UpdateTrait.php +++ b/app/Helpers/Update/UpdateTrait.php @@ -24,7 +24,9 @@ declare(strict_types=1); namespace FireflyIII\Helpers\Update; +use Carbon\Carbon; use FireflyIII\Services\FireflyIIIOrg\Update\UpdateRequestInterface; +use FireflyIII\Services\FireflyIIIOrg\Update\UpdateResponse; use FireflyIII\Support\Facades\FireflyConfig; use Illuminate\Support\Facades\Log; @@ -38,15 +40,17 @@ trait UpdateTrait * 'message' => 'A new version is available. * 'level' => 'info' / 'success' / 'error' */ - public function getLatestRelease(): array + public function getLatestRelease(): UpdateResponse { Log::debug('Now in getLatestRelease()'); /** @var UpdateRequestInterface $checker */ $checker = app(UpdateRequestInterface::class); $channelConfig = FireflyConfig::get('update_channel', 'stable'); - $channel = (string) $channelConfig->data; + $channel = (string)$channelConfig->data; + $build = Carbon::createFromTimestamp(config('firefly.build_time'), config('app.timezone')); + $version = config('firefly.version'); - return $checker->getUpdateInformation($channel); + return $checker->getUpdateInformation($version, $build, $channel); } } diff --git a/app/Http/Controllers/Admin/UpdateController.php b/app/Http/Controllers/Admin/UpdateController.php index 4bdf1b2851..4cd485d462 100644 --- a/app/Http/Controllers/Admin/UpdateController.php +++ b/app/Http/Controllers/Admin/UpdateController.php @@ -48,7 +48,7 @@ class UpdateController extends Controller { parent::__construct(); $this->middleware(static function ($request, $next) { - app('view')->share('title', (string) trans('firefly.system_settings')); + app('view')->share('title', (string)trans('firefly.system_settings')); app('view')->share('mainTitleIcon', 'fa-hand-spock-o'); return $next($request); @@ -61,24 +61,24 @@ class UpdateController extends Controller * * @return Factory|View */ - public function index(): Factory|\Illuminate\Contracts\View\View + public function index(): Factory | \Illuminate\Contracts\View\View { - $subTitle = (string) trans('firefly.update_check_title'); + $subTitle = (string)trans('firefly.update_check_title'); $subTitleIcon = 'fa-star'; $permission = FireflyConfig::get('permission_update_check', -1); $channel = FireflyConfig::get('update_channel', 'stable'); $selected = $permission->data; $channelSelected = $channel->data; $options = [ - -1 => (string) trans('firefly.updates_ask_me_later'), - 0 => (string) trans('firefly.updates_do_not_check'), - 1 => (string) trans('firefly.updates_enable_check'), + -1 => (string)trans('firefly.updates_ask_me_later'), + 0 => (string)trans('firefly.updates_do_not_check'), + 1 => (string)trans('firefly.updates_enable_check'), ]; - $channelOptions = [ - 'stable' => (string) trans('firefly.update_channel_stable'), - 'beta' => (string) trans('firefly.update_channel_beta'), - 'alpha' => (string) trans('firefly.update_channel_alpha'), + $channelOptions = [ + 'stable' => (string)trans('firefly.update_channel_stable'), + 'beta' => (string)trans('firefly.update_channel_beta'), + 'alpha' => (string)trans('firefly.update_channel_alpha'), ]; return view('settings.update.index', [ @@ -94,16 +94,16 @@ class UpdateController extends Controller /** * Post new settings. */ - public function post(Request $request): Redirector|RedirectResponse + public function post(Request $request): Redirector | RedirectResponse { - $checkForUpdates = (int) $request->get('check_for_updates'); + $checkForUpdates = (int)$request->get('check_for_updates'); $channel = $request->get('update_channel'); $channel = in_array($channel, ['stable', 'beta', 'alpha'], true) ? $channel : 'stable'; FireflyConfig::set('permission_update_check', $checkForUpdates); FireflyConfig::set('last_update_check', Carbon::now()->getTimestamp()); FireflyConfig::set('update_channel', $channel); - session()->flash('success', (string) trans('firefly.configuration_updated')); + session()->flash('success', (string)trans('firefly.configuration_updated')); return redirect(route('settings.update-check')); } @@ -114,8 +114,23 @@ class UpdateController extends Controller public function updateCheck(): RedirectResponse { $release = $this->getLatestRelease(); + $level = 'info'; + $message = trans('firefly.no_new_release_available'); + if ('' !== $release->getError()) { + $level = 'error'; + $message = $release->getError(); + } + if ($release->isNewVersionAvailable()) { + // if running develop, slightly different message. + if (str_contains(config('firefly.version'), 'develop')) { + $message = trans('firefly.update_current_dev_older', ['version' => config('firefly.version'), 'new_version' => $release->getNewVersion()]); + } + if (!str_contains(config('firefly.version'), 'develop')) { + $message = trans('firefly.update_new_version_alert', ['your_version' => config('firefly.version'), 'new_version' => $release->getNewVersion(), 'date' => $release->getPublishedAt()->format('Y-m-d H:i:s')]); + } + } - session()->flash($release['level'], $release['message']); + session()->flash($level, $message); return redirect(route('settings.update-check')); } diff --git a/app/Listeners/Security/System/ChecksForNewVersion.php b/app/Listeners/Security/System/ChecksForNewVersion.php index e8f070a15f..8eccc1ce13 100644 --- a/app/Listeners/Security/System/ChecksForNewVersion.php +++ b/app/Listeners/Security/System/ChecksForNewVersion.php @@ -45,8 +45,8 @@ class ChecksForNewVersion implements ShouldQueue Log::debug(sprintf('Now in %s', __METHOD__)); // should not check for updates: - $permission = FireflyConfig::get('permission_update_check', -1); - $value = (int) $permission->data; + $permission = FireflyConfig::get('permission_update_check', -1); + $value = (int)$permission->data; if (1 !== $value) { Log::debug('Update check is not enabled.'); $this->warnToCheckForUpdates($event); @@ -55,8 +55,8 @@ class ChecksForNewVersion implements ShouldQueue } /** @var UserRepositoryInterface $repository */ - $repository = app(UserRepositoryInterface::class); - $user = $event->user; + $repository = app(UserRepositoryInterface::class); + $user = $event->user; if (!$repository->hasRole($user, 'owner')) { Log::debug('User is not admin, done.'); @@ -75,9 +75,24 @@ class ChecksForNewVersion implements ShouldQueue } // last check time was more than a week ago. Log::debug('Have not checked for a new version in a week!'); - $release = $this->getLatestRelease(); + $release = $this->getLatestRelease(); + $level = 'info'; + $message = trans('firefly.no_new_release_available'); + if ('' !== $release->getError()) { + $level = 'error'; + $message = $release->getError(); + } + if ($release->isNewVersionAvailable()) { + // if running develop, slightly different message. + if (str_contains(config('firefly.version'), 'develop')) { + $message = trans('firefly.update_current_dev_older', ['version' => config('firefly.version'), 'new_version' => $release->getNewVersion()]); + } + if (!str_contains(config('firefly.version'), 'develop')) { + $message = trans('firefly.update_new_version_alert', ['your_version' => config('firefly.version'), 'new_version' => $release->getNewVersion(), 'date' => $release->getPublishedAt()->format('Y-m-d H:i:s')]); + } + } - session()->flash($release['level'], $release['message']); + session()->flash($level, $message); FireflyConfig::set('last_update_check', Carbon::now()->getTimestamp()); } @@ -89,8 +104,8 @@ class ChecksForNewVersion implements ShouldQueue private function warnToCheckForUpdates(SystemRequestedVersionCheck $event): void { /** @var UserRepositoryInterface $repository */ - $repository = app(UserRepositoryInterface::class); - $user = $event->user; + $repository = app(UserRepositoryInterface::class); + $user = $event->user; if (!$repository->hasRole($user, 'owner')) { Log::debug('User is not admin, done.'); @@ -104,16 +119,16 @@ class ChecksForNewVersion implements ShouldQueue Log::debug(sprintf('Last warning time is %d, current time is %d, difference is %d', $lastCheckTime->data, $now, $diff)); if ($diff < (604800 * 4)) { Log::debug(sprintf( - 'Warned about updates less than four weeks ago (on %s).', - Carbon::createFromTimestamp($lastCheckTime->data)->format('Y-m-d H:i:s') - )); + 'Warned about updates less than four weeks ago (on %s).', + Carbon::createFromTimestamp($lastCheckTime->data)->format('Y-m-d H:i:s') + )); return; } // last check time was more than a week ago. Log::debug('Have warned about a new version in four weeks!'); - session()->flash('info', (string) trans('firefly.disabled_but_check')); + session()->flash('info', (string)trans('firefly.disabled_but_check')); FireflyConfig::set('last_update_warning', Carbon::now()->getTimestamp()); } } diff --git a/app/Services/FireflyIIIOrg/Update/GitHubUpdateRequest.php b/app/Services/FireflyIIIOrg/Update/GitHubUpdateRequest.php index a6bbdbf29c..5b6ebcbc20 100644 --- a/app/Services/FireflyIIIOrg/Update/GitHubUpdateRequest.php +++ b/app/Services/FireflyIIIOrg/Update/GitHubUpdateRequest.php @@ -31,7 +31,7 @@ class GitHubUpdateRequest implements UpdateRequestInterface private string $currentVersion = '1.0.0'; private Carbon $currentBuild; private string $channel = 'stable'; - private bool $localDebug = true; + private bool $localDebug = false; #[\Override] public function getUpdateInformation(string $currentVersion, Carbon $currentBuild, string $channel): UpdateResponse diff --git a/app/Support/Cronjobs/UpdateCheckCronjob.php b/app/Support/Cronjobs/UpdateCheckCronjob.php index 4c39ea5cf8..b3f34d3fc0 100644 --- a/app/Support/Cronjobs/UpdateCheckCronjob.php +++ b/app/Support/Cronjobs/UpdateCheckCronjob.php @@ -41,8 +41,8 @@ class UpdateCheckCronjob extends AbstractCronjob Log::debug('Now in checkForUpdates()'); // should not check for updates: - $permission = FireflyConfig::get('permission_update_check', -1); - $value = (int) $permission->data; + $permission = FireflyConfig::get('permission_update_check', -1); + $value = (int)$permission->data; if (1 !== $value) { Log::debug('Update check is not enabled.'); // get stuff from job: @@ -56,9 +56,9 @@ class UpdateCheckCronjob extends AbstractCronjob // TODO this is duplicate. /** @var Configuration $lastCheckTime */ - $lastCheckTime = FireflyConfig::get('last_update_check', Carbon::now()->getTimestamp()); - $now = Carbon::now()->getTimestamp(); - $diff = $now - $lastCheckTime->data; + $lastCheckTime = FireflyConfig::get('last_update_check', Carbon::now()->getTimestamp()); + $now = Carbon::now()->getTimestamp(); + $diff = $now - $lastCheckTime->data; Log::debug(sprintf('Last check time is %d, current time is %d, difference is %d', $lastCheckTime->data, $now, $diff)); if ($diff < 604800 && false === $this->force) { // get stuff from job: @@ -74,13 +74,13 @@ class UpdateCheckCronjob extends AbstractCronjob } // last check time was more than a week ago. Log::debug('Have not checked for a new version in a week!'); - $release = $this->getLatestRelease(); - if ('error' === $release['level']) { + $release = $this->getLatestRelease(); + if ('' !== $release->getError()) { // get stuff from job: $this->jobFired = true; $this->jobErrored = true; $this->jobSucceeded = false; - $this->message = $release['message']; + $this->message = $release->getError(); return; } @@ -88,6 +88,15 @@ class UpdateCheckCronjob extends AbstractCronjob $this->jobFired = true; $this->jobErrored = false; $this->jobSucceeded = false; - $this->message = $release['message']; + $this->message = trans('firefly.no_new_release_available');; + if ($release->isNewVersionAvailable()) { + // if running develop, slightly different message. + if (str_contains(config('firefly.version'), 'develop')) { + $this->message = trans('firefly.update_current_dev_older', ['version' => config('firefly.version'), 'new_version' => $release->getNewVersion()]); + } + if (!str_contains(config('firefly.version'), 'develop')) { + $this->message = trans('firefly.update_new_version_alert', ['your_version' => config('firefly.version'), 'new_version' => $release->getNewVersion(), 'date' => $release->getPublishedAt()->format('Y-m-d H:i:s')]); + } + } } }