Squashed commit of the following: commit 74ed84617fcbecf661695763323e50d049a88db7 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:46:29 2018 +0000 Test passes so remove the dump statement commit a7d3323be02da64f76e8ec88713e3de84a13ded7 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:40:35 2018 +0000 Values with spaces need to be quoted commit 58a120bb238f14346793c388b948b7351d3b51fd Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:37:23 2018 +0000 We need a diplay name for the tests to work now we are using strict type checking commit b46f177053bd697db9a4835d073f2f37e088b26f Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:31:29 2018 +0000 Get travis to show more info about failing test commit 60323f3ce5a0561329a1721ee94821571cdcc86a Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:23:27 2018 +0000 Remove un-used namnepsace imports commit 096d3505920bc94ff8677c77430eca0aae0be58a Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:21:55 2018 +0000 we need php7.2 for object type-hint commit bb818bc19c73d02d510af9f002199f5718a54608 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:15:48 2018 +0000 Added lots of strict_types
137 lines
4.2 KiB
PHP
137 lines
4.2 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use Illuminate\Http\Response;
|
||
use App\Models\{Article, Note};
|
||
|
||
class FeedsController extends Controller
|
||
{
|
||
/**
|
||
* Returns the blog RSS feed.
|
||
*
|
||
* @return \Illuminate\Http\Response
|
||
*/
|
||
public function blogRss(): Response
|
||
{
|
||
$articles = Article::where('published', '1')->latest('updated_at')->take(20)->get();
|
||
$buildDate = $articles->first()->updated_at->toRssString();
|
||
|
||
return response()
|
||
->view('articles.rss', compact('articles', 'buildDate'))
|
||
->header('Content-Type', 'application/rss+xml; charset=utf-8');
|
||
}
|
||
|
||
/**
|
||
* Returns the blog Atom feed.
|
||
*
|
||
* @return \Illuminate\Http\Response
|
||
*/
|
||
public function blogAtom(): Response
|
||
{
|
||
$articles = Article::where('published', '1')->latest('updated_at')->take(20)->get();
|
||
|
||
return response()
|
||
->view('articles.atom', compact('articles'))
|
||
->header('Content-Type', 'application/atom+xml; charset=utf-8');
|
||
}
|
||
|
||
/**
|
||
* Returns the notes RSS feed.
|
||
*
|
||
* @return \Illuminate\Http\Response
|
||
*/
|
||
public function notesRss(): Response
|
||
{
|
||
$notes = Note::latest()->take(20)->get();
|
||
$buildDate = $notes->first()->updated_at->toRssString();
|
||
|
||
return response()
|
||
->view('notes.rss', compact('notes', 'buildDate'))
|
||
->header('Content-Type', 'application/rss+xml; charset=utf-8');
|
||
}
|
||
|
||
/**
|
||
* Returns the notes Atom feed.
|
||
*
|
||
* @return \Illuminate\Http\Response
|
||
*/
|
||
public function notesAtom(): Response
|
||
{
|
||
$notes = Note::latest()->take(20)->get();
|
||
|
||
return response()
|
||
->view('notes.atom', compact('notes'))
|
||
->header('Content-Type', 'application/atom+xml; charset=utf-8');
|
||
}
|
||
|
||
/** @todo sort out return type for json responses */
|
||
|
||
/**
|
||
* Returns the blog JSON feed.
|
||
*
|
||
* @return \Illuminate\Http\JsonResponse
|
||
*/
|
||
public function blogJson()
|
||
{
|
||
$articles = Article::where('published', '1')->latest('updated_at')->take(20)->get();
|
||
$data = [
|
||
'version' => 'https://jsonfeed.org/version/1',
|
||
'title' => 'The JSON Feed for ' . config('app.display_name') . '’s blog',
|
||
'home_page_url' => config('app.url') . '/blog',
|
||
'feed_url' => config('app.url') . '/blog/feed.json',
|
||
'items' => [],
|
||
];
|
||
|
||
foreach ($articles as $key => $article) {
|
||
$data['items'][$key] = [
|
||
'id' => config('app.url') . $article->link,
|
||
'title' => $article->title,
|
||
'url' => config('app.url') . $article->link,
|
||
'content_html' => $article->main,
|
||
'date_published' => $article->created_at->tz('UTC')->toRfc3339String(),
|
||
'date_modified' => $article->updated_at->tz('UTC')->toRfc3339String(),
|
||
'author' => [
|
||
'name' => config('app.display_name'),
|
||
],
|
||
];
|
||
}
|
||
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* Returns the notes JSON feed.
|
||
*
|
||
* @return \Illuminate\Http\JsonResponse
|
||
*/
|
||
public function notesJson()
|
||
{
|
||
$notes = Note::latest()->take(20)->get();
|
||
$data = [
|
||
'version' => 'https://jsonfeed.org/version/1',
|
||
'title' => 'The JSON Feed for ' . config('app.display_name') . '’s notes',
|
||
'home_page_url' => config('app.url') . '/notes',
|
||
'feed_url' => config('app.url') . '/notes/feed.json',
|
||
'items' => [],
|
||
];
|
||
|
||
foreach ($notes as $key => $note) {
|
||
$data['items'][$key] = [
|
||
'id' => $note->longurl,
|
||
'title' => $note->getOriginal('note'),
|
||
'url' => $note->longurl,
|
||
'content_html' => $note->note,
|
||
'date_published' => $note->created_at->tz('UTC')->toRfc3339String(),
|
||
'date_modified' => $note->updated_at->tz('UTC')->toRfc3339String(),
|
||
'author' => [
|
||
'name' => config('app.display_name'),
|
||
],
|
||
];
|
||
}
|
||
|
||
return $data;
|
||
}
|
||
}
|