From 0190813012f36d6854a66f9ee5168b818b3865c5 Mon Sep 17 00:00:00 2001 From: James Brooks Date: Tue, 31 May 2016 18:02:10 +0100 Subject: [PATCH] Dashboard RSS --- .../Providers/AppServiceProvider.php | 16 ++ .../Dashboard/DashboardController.php | 21 ++- app/Integrations/Feed.php | 68 +++++++ resources/views/dashboard/index.blade.php | 175 ++++++++++-------- 4 files changed, 203 insertions(+), 77 deletions(-) create mode 100644 app/Integrations/Feed.php diff --git a/app/Foundation/Providers/AppServiceProvider.php b/app/Foundation/Providers/AppServiceProvider.php index 40c35aa4..8b7c9757 100644 --- a/app/Foundation/Providers/AppServiceProvider.php +++ b/app/Foundation/Providers/AppServiceProvider.php @@ -15,6 +15,7 @@ use AltThree\Bus\Dispatcher; use CachetHQ\Cachet\Bus\Middleware\UseDatabaseTransactions; use CachetHQ\Cachet\Dates\DateFactory; use CachetHQ\Cachet\Integrations\Credits; +use CachetHQ\Cachet\Integrations\Feed; use CachetHQ\Cachet\Integrations\Releases; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Str; @@ -55,6 +56,7 @@ class AppServiceProvider extends ServiceProvider { $this->registerDateFactory(); $this->registerCredits(); + $this->registerFeed(); $this->registerReleases(); } @@ -87,6 +89,20 @@ class AppServiceProvider extends ServiceProvider }); } + /** + * Register the feed class. + * + * @return void + */ + protected function registerFeed() + { + $this->app->singleton(Feed::class, function ($app) { + $cache = $app['cache.store']; + + return new Feed($cache); + }); + } + /** * Register the releases class. * diff --git a/app/Http/Controllers/Dashboard/DashboardController.php b/app/Http/Controllers/Dashboard/DashboardController.php index ec103531..952fb090 100644 --- a/app/Http/Controllers/Dashboard/DashboardController.php +++ b/app/Http/Controllers/Dashboard/DashboardController.php @@ -11,6 +11,7 @@ namespace CachetHQ\Cachet\Http\Controllers\Dashboard; +use CachetHQ\Cachet\Integrations\Feed; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\Subscriber; @@ -36,12 +37,22 @@ class DashboardController extends Controller protected $timeZone; /** - * Creates a new dashboard controller. + * The feed integration. + * + * @var \CachetHQ\Cachet\Integrations\Feed + */ + protected $feed; + + /** + * Creates a new dashboard controller instance. + * + * @param \CachetHQ\Cachet\Integrations\Feed $feed * * @return void */ - public function __construct() + public function __construct(Feed $feed) { + $this->feed = $feed; $this->startDate = new Date(); $this->dateTimeZone = Config::get('cachet.timezone'); } @@ -56,12 +67,16 @@ class DashboardController extends Controller $components = Component::orderBy('order')->get(); $incidents = $this->getIncidents(); $subscribers = $this->getSubscribers(); + $feed = $this->feed->entries(); + + dd($feed); return View::make('dashboard.index') ->withPageTitle(trans('dashboard.dashboard')) ->withComponents($components) ->withIncidents($incidents) - ->withSubscribers($subscribers); + ->withSubscribers($subscribers) + ->withFeed($feed); } /** diff --git a/app/Integrations/Feed.php b/app/Integrations/Feed.php new file mode 100644 index 00000000..53136628 --- /dev/null +++ b/app/Integrations/Feed.php @@ -0,0 +1,68 @@ +cache = $cache; + $this->url = $url ?: static::URL; + } + + /** + * Returns the entries. + * + * @return array + */ + public function entries() + { + return $this->cache->remember('feeds', 2880, function () { + return new SimpleXmlElement((new Client())->get($this->url, [ + 'headers' => ['Accept' => 'application/rss+xml', 'User-Agent' => defined('CACHET_VERSION') ? 'cachet/'.constant('CACHET_VERSION') : 'cachet'], + ])->getBody()->getContents()); + }); + } +} diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php index 1f98adf8..874e4a93 100644 --- a/resources/views/dashboard/index.blade.php +++ b/resources/views/dashboard/index.blade.php @@ -1,86 +1,113 @@ @extends('layout.dashboard') @section('content') -
- - - {{ trans('dashboard.dashboard') }} - +
+ -
-
-
- -
+ + {{ trans('dashboard.dashboard') }} + +
+
+
+
+
-
-
-

{{ trans('dashboard.components.component_statuses') }}

-
-
- @forelse($components as $component) -
-
-
-
-

{{ $component->name }}

-
-
- @foreach(trans('cachet.components.status') as $statusID => $status) -
- -
- @endforeach -
+
+
+
+

{{ trans('dashboard.components.component_statuses') }}

+
+
+ @forelse($components as $component) +
+ +
+
+

{{ $component->name }}

- - -
- @empty - - @endforelse -
-
-
-
- -
-
-
-
- {{ $incidents->map(function($incident) { return count($incident); })->sum() }} - {{ trans('dashboard.incidents.incidents') }} -
-
-
-
-
-
- -
-
- -
-
+
+ @foreach(trans('cachet.components.status') as $statusID => $status) +
+ +
+ @endforeach +
+
+ +
+ @empty + + @endforelse
- @if(Session::get('setup.done')) - @include('dashboard.partials.welcome-modal') - - @endif + +
+
+
+
+ {{ $incidents->map(function($incident) { return count($incident); })->sum() }} + {{ trans('dashboard.incidents.incidents') }} +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+ Support Cachet + Check out our Patreon page! +
+
+
+ +
+
+
+ Support Cachet + Check out our Patreon page! +
+
+
    + @foreach($feed->entries()['channel']['item'] as $item) + + @endforeach +
+
+
+
+
+
+@if(Session::get('setup.done')) +@include('dashboard.partials.welcome-modal') + +@endif @stop