*/ class FeedController extends Controller { /** * Feed facade. * * @var \Roumen\Feed\Feed */ protected $feed; /** * Create a new feed controller instance. * * @return void */ public function __construct(Feed $feed) { $this->feed = $feed; $this->feed->title = Config::get('setting.app_name'); $this->feed->description = trans('cachet.feed'); $this->feed->link = Str::canonicalize(Config::get('setting.app_domain')); $this->feed->ctype = 'text/xml'; $this->feed->setDateFormat('datetime'); } /** * Generates an Atom feed of all incidents. * * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group * * @return \Illuminate\Http\Response */ public function atomAction(ComponentGroup $group = null) { return $this->feedAction($group, false); } /** * Generates a Rss feed of all incidents. * * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group * * @return \Illuminate\Http\Response */ public function rssAction(ComponentGroup $group = null) { $this->feed->lang = Config::get('setting.app_locale'); return $this->feedAction($group, true); } /** * Generates a Rss feed of all incidents. * * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group * @param bool $isRss * * @return \Illuminate\Http\Response */ private function feedAction(ComponentGroup $group = null, $isRss = true) { if ($group) { $group->components->map(function ($component) use ($isRss) { $component->incidents()->visible()->orderBy('occurred_at', 'desc')->get()->map(function ($incident) use ($isRss) { $this->feedAddItem($incident, $isRss); }); }); } else { Incident::visible()->orderBy('occurred_at', 'desc')->get()->map(function ($incident) use ($isRss) { $this->feedAddItem($incident, $isRss); }); } return $this->feed->render($isRss ? 'rss' : 'atom'); } /** * Adds an item to the feed. * * @param \CachetHQ\Cachet\Models\Incident $incident * @param bool $isRss */ private function feedAddItem(Incident $incident, $isRss) { $incident = AutoPresenter::decorate($incident); $this->feed->add( $incident->name, Config::get('setting.app_name'), Str::canonicalize(cachet_route('incident', [$incident->id])), $isRss ? $incident->getWrappedObject()->occurred_at->toRssString() : $incident->getWrappedObject()->occurred_at->toAtomString(), Markdown::convertToHtml($incident->message), null, [], $isRss ? $incident->human_status : null ); } }