. */ declare(strict_types=1); namespace FireflyIII\Handlers\Events; use FireflyConfig; use FireflyIII\Events\RequestedVersionCheckStatus; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Services\Github\Object\Release; use FireflyIII\Services\Github\Request\UpdateRequest; use FireflyIII\User; use Log; /** * Class VersionCheckEventHandler */ class VersionCheckEventHandler { /** * @param RequestedVersionCheckStatus $event */ public function checkForUpdates(RequestedVersionCheckStatus $event) { // in Sandstorm, cannot check for updates: $sandstorm = 1 === intval(getenv('SANDSTORM')); if ($sandstorm === true) { return; } /** @var User $user */ $user = $event->user; if (!$user->hasRole('owner')) { return; } $permission = FireflyConfig::get('permission_update_check', -1); $lastCheckTime = FireflyConfig::get('last_update_check', time()); $now = time(); if ($now - $lastCheckTime->data < 604800) { Log::debug(sprintf('Checked for updates less than a week ago (on %s).', date('Y-m-d H:i:s', $lastCheckTime->data))); return; } // last check time was more than a week ago. Log::debug('Have not checked for a new version in a week!'); // have actual permission? if ($permission->data === -1) { // never asked before. session()->flash('info', strval(trans('firefly.check_for_updates_permission', ['link' => route('admin.update-check')]))); return; } $current = config('firefly.version'); /** @var UpdateRequest $request */ $request = app(UpdateRequest::class); $check = -2; $first = new Release(['id' => '0', 'title' => '0', 'updated' => '2017-01-01', 'content' => '']); try { $request->call(); $releases = $request->getReleases(); // first entry should be the latest entry: /** @var Release $first */ $first = reset($releases); $check = version_compare($current, $first->getTitle()); FireflyConfig::set('last_update_check', time()); } catch (FireflyException $e) { Log::error(sprintf('Could not check for updates: %s', $e->getMessage())); } $string = 'no result: ' . $check; if ($check === -2) { $string = strval(trans('firefly.update_check_error')); } if ($check === -1) { // there is a new FF version! $monthAndDayFormat = (string)trans('config.month_and_day'); $string = strval( trans( 'firefly.update_new_version_alert', ['your_version' => $current, 'new_version' => $first->getTitle(), 'date' => $first->getUpdated()->formatLocalized($monthAndDayFormat)] ) ); } if ($check !== 0) { // flash info session()->flash('info', $string); } } }