diff --git a/app/Http/ViewComposers/Notifications.php b/app/Http/ViewComposers/Notifications.php new file mode 100644 index 000000000..58bbfb2fa --- /dev/null +++ b/app/Http/ViewComposers/Notifications.php @@ -0,0 +1,43 @@ +runningInConsole() || !env('APP_INSTALLED')) { + return; + } + + $path = Route::current()->uri(); + + if (empty($path)) { + return; + } + + $notifications = $this->getNotifications($path); + + if (empty($notifications)) { + return; + } + + // Push to a stack + foreach ($notifications as $notification) { + $view->getFactory()->startPush('content_content_start', $notification->message); + } + } +} diff --git a/app/Providers/ViewComposerServiceProvider.php b/app/Providers/ViewComposerServiceProvider.php index 0e690522a..83b3676af 100644 --- a/app/Providers/ViewComposerServiceProvider.php +++ b/app/Providers/ViewComposerServiceProvider.php @@ -24,6 +24,11 @@ class ViewComposerServiceProvider extends ServiceProvider ['partials.admin.content'], 'App\Http\ViewComposers\Suggestions' ); + // Notifications + View::composer( + ['partials.admin.content'], 'App\Http\ViewComposers\Notifications' + ); + // Add company info to menu View::composer( ['partials.admin.menu', 'partials.customer.menu'], 'App\Http\ViewComposers\Menu' diff --git a/app/Traits/Modules.php b/app/Traits/Modules.php index 977c2a49f..0fc41d6e6 100644 --- a/app/Traits/Modules.php +++ b/app/Traits/Modules.php @@ -438,6 +438,42 @@ trait Modules return $data; } + public function loadNotifications() + { + // Get data from cache + $data = Cache::get('notifications'); + + if (!empty($data)) { + return $data; + } + + $data = []; + + $url = 'apps/notifications'; + + $response = $this->getRemote($url, 'GET', ['timeout' => 30, 'referer' => true]); + + // Exception + if ($response instanceof RequestException) { + return false; + } + + // Bad response + if (!$response || ($response->getStatusCode() != 200)) { + return false; + } + + $notifications = json_decode($response->getBody())->data; + + foreach ($notifications as $notification) { + $data[$notification->path][] = $notification; + } + + Cache::put('notifications', $data, Date::now()->addHour(6)); + + return $data; + } + public function getSuggestions($path) { // Get data from cache @@ -454,6 +490,22 @@ trait Modules return false; } + public function getNotifications($path) + { + // Get data from cache + $data = Cache::get('notifications'); + + if (empty($data)) { + $data = $this->loadNotifications(); + } + + if (!empty($data) && array_key_exists($path, $data)) { + return $data[$path]; + } + + return false; + } + protected function getRemote($path, $method = 'GET', $data = array()) { $base = 'https://akaunting.com/api/';