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') -