diff --git a/app/Http/Controllers/ArticlesController.php b/app/Http/Controllers/ArticlesController.php index b88656e8..9f0c1afd 100644 --- a/app/Http/Controllers/ArticlesController.php +++ b/app/Http/Controllers/ArticlesController.php @@ -51,19 +51,4 @@ class ArticlesController extends Controller return redirect($article->link); } - - /** - * Returns the RSS feed. - * - * @return \Illuminate\Http\Response - */ - public function makeRSS() - { - $articles = Article::where('published', '1')->orderBy('updated_at', 'desc')->get(); - $buildDate = $articles->first()->updated_at->toRssString(); - - return response() - ->view('articles.rss', compact('articles', 'buildDate'), 200) - ->header('Content-Type', 'application/rss+xml'); - } } diff --git a/app/Http/Controllers/FeedsController.php b/app/Http/Controllers/FeedsController.php new file mode 100644 index 00000000..574ead24 --- /dev/null +++ b/app/Http/Controllers/FeedsController.php @@ -0,0 +1,133 @@ +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() + { + $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() + { + $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() + { + $notes = Note::latest()->take(20)->get(); + + return response() + ->view('notes.atom', compact('notes')) + ->header('Content-Type', 'application/atom+xml; charset=utf-8'); + } + + /** + * Returns the blog JSON feed. + * + * @return \Illuminate\Http\response + */ + 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\response + */ + 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; + } +} diff --git a/app/Note.php b/app/Note.php index 000ccd25..ceaa15c1 100644 --- a/app/Note.php +++ b/app/Note.php @@ -168,6 +168,16 @@ class Note extends Model return config('app.shorturl') . '/notes/' . $this->nb60id; } + /** + * Get the pubdate value for RSS feeds. + * + * @return string + */ + public function getPubdateAttribute() + { + return $this->updated_at->toRSSString(); + } + /** * Get the relavent client name assocaited with the client id. * diff --git a/changelog.md b/changelog.md index 5f1e15cb..403b229a 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## Version 0.5.10 (2017-06-09) + - Add a link to instagram account + - Add syndication feeds for articles/notes, supporting RSS/Atom/JSON (issue#52) + ## Version 0.5.9 (2017-05-31) - Mapping improvements - Basic place merging diff --git a/composer.lock b/composer.lock index 3eeff020..0704befa 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "aws/aws-sdk-php", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "af653f256d99ff372ce3e3be3048e7e5373ab1bc" + "reference": "ad2206be87d722de5a52b3d1b0d6549fe2980fc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/af653f256d99ff372ce3e3be3048e7e5373ab1bc", - "reference": "af653f256d99ff372ce3e3be3048e7e5373ab1bc", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ad2206be87d722de5a52b3d1b0d6549fe2980fc7", + "reference": "ad2206be87d722de5a52b3d1b0d6549fe2980fc7", "shasum": "" }, "require": { @@ -84,7 +84,7 @@ "s3", "sdk" ], - "time": "2017-05-18T20:44:27+00:00" + "time": "2017-06-07T22:44:10+00:00" }, { "name": "barnabywalters/mf-cleaner", @@ -786,16 +786,16 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.9.2", + "version": "v4.9.3", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "6d50e5282afdfdfc3e0ff6d192aff56c5629b3d4" + "reference": "95e1bae3182efc0f3422896a3236e991049dac69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/6d50e5282afdfdfc3e0ff6d192aff56c5629b3d4", - "reference": "6d50e5282afdfdfc3e0ff6d192aff56c5629b3d4", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/95e1bae3182efc0f3422896a3236e991049dac69", + "reference": "95e1bae3182efc0f3422896a3236e991049dac69", "shasum": "" }, "require": { @@ -829,7 +829,7 @@ "keywords": [ "html" ], - "time": "2017-03-13T06:30:53+00:00" + "time": "2017-06-03T02:28:16+00:00" }, { "name": "geo-io/interface", @@ -1464,16 +1464,16 @@ }, { "name": "laravel/framework", - "version": "v5.4.23", + "version": "v5.4.25", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "ad82327705658dbf5f0ce72805caa950dfbe150d" + "reference": "6bcc9b1f542b3deed16d51f6aa1fe318ab407c2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ad82327705658dbf5f0ce72805caa950dfbe150d", - "reference": "ad82327705658dbf5f0ce72805caa950dfbe150d", + "url": "https://api.github.com/repos/laravel/framework/zipball/6bcc9b1f542b3deed16d51f6aa1fe318ab407c2a", + "reference": "6bcc9b1f542b3deed16d51f6aa1fe318ab407c2a", "shasum": "" }, "require": { @@ -1589,20 +1589,20 @@ "framework", "laravel" ], - "time": "2017-05-11T20:10:35+00:00" + "time": "2017-06-07T13:35:12+00:00" }, { "name": "laravel/scout", - "version": "v3.0.4", + "version": "v3.0.5", "source": { "type": "git", "url": "https://github.com/laravel/scout.git", - "reference": "c822eaff08929439879407ffa27de7966f3c5926" + "reference": "547ff55530a16e31b3b1142dd4dfdb654ad2bae0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/scout/zipball/c822eaff08929439879407ffa27de7966f3c5926", - "reference": "c822eaff08929439879407ffa27de7966f3c5926", + "url": "https://api.github.com/repos/laravel/scout/zipball/547ff55530a16e31b3b1142dd4dfdb654ad2bae0", + "reference": "547ff55530a16e31b3b1142dd4dfdb654ad2bae0", "shasum": "" }, "require": { @@ -1649,20 +1649,20 @@ "laravel", "search" ], - "time": "2017-05-09T12:31:27+00:00" + "time": "2017-06-01T13:21:09+00:00" }, { "name": "laravel/tinker", - "version": "v1.0.0", + "version": "v1.0.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "3d5b675b55b24ccbf86395964042dbe061d5a965" + "reference": "7eb2e281395131897407285672ef5532e87e17f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/3d5b675b55b24ccbf86395964042dbe061d5a965", - "reference": "3d5b675b55b24ccbf86395964042dbe061d5a965", + "url": "https://api.github.com/repos/laravel/tinker/zipball/7eb2e281395131897407285672ef5532e87e17f9", + "reference": "7eb2e281395131897407285672ef5532e87e17f9", "shasum": "" }, "require": { @@ -1683,6 +1683,11 @@ "extra": { "branch-alias": { "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] } }, "autoload": { @@ -1707,7 +1712,7 @@ "laravel", "psysh" ], - "time": "2016-12-30T18:13:17+00:00" + "time": "2017-06-01T16:31:26+00:00" }, { "name": "lcobucci/jwt", @@ -1921,16 +1926,16 @@ }, { "name": "league/flysystem-aws-s3-v3", - "version": "1.0.15", + "version": "1.0.16", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "c947f36f977b495a57e857ae1630df0da35ec456" + "reference": "4cb99ce9207e7a5cb2233523d7c4175b091c4a66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c947f36f977b495a57e857ae1630df0da35ec456", - "reference": "c947f36f977b495a57e857ae1630df0da35ec456", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/4cb99ce9207e7a5cb2233523d7c4175b091c4a66", + "reference": "4cb99ce9207e7a5cb2233523d7c4175b091c4a66", "shasum": "" }, "require": { @@ -1964,7 +1969,7 @@ } ], "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "time": "2017-04-28T10:21:54+00:00" + "time": "2017-06-08T13:37:03+00:00" }, { "name": "martinbean/laravel-sluggable-trait", @@ -2010,23 +2015,25 @@ }, { "name": "mf2/mf2", - "version": "v0.3.0", + "version": "v0.3.2", "source": { "type": "git", "url": "https://github.com/indieweb/php-mf2.git", - "reference": "4fb2eb5365cbc0fd2e0c26ca748777d6c2539763" + "reference": "dc0d90d4ee30864bcf37cd3a8fc8db94f9134cc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/indieweb/php-mf2/zipball/4fb2eb5365cbc0fd2e0c26ca748777d6c2539763", - "reference": "4fb2eb5365cbc0fd2e0c26ca748777d6c2539763", + "url": "https://api.github.com/repos/indieweb/php-mf2/zipball/dc0d90d4ee30864bcf37cd3a8fc8db94f9134cc4", + "reference": "dc0d90d4ee30864bcf37cd3a8fc8db94f9134cc4", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "3.7.*" + "mf2/tests": "@dev", + "phpdocumentor/phpdocumentor": "v2.8.4", + "phpunit/phpunit": "4.8.*" }, "suggest": { "barnabywalters/mf-cleaner": "To more easily handle the canonical data php-mf2 gives you" @@ -2059,7 +2066,7 @@ "parser", "semantic" ], - "time": "2016-03-14T12:13:34+00:00" + "time": "2017-05-27T15:27:47+00:00" }, { "name": "monolog/monolog", @@ -2392,16 +2399,16 @@ }, { "name": "phaza/laravel-postgis", - "version": "3.1.2", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/njbarrett/laravel-postgis.git", - "reference": "f20044a05d52ba45feb6ae356eb54f65b167e504" + "reference": "64f279eb3972b8b6b77e3cb43170a4095da4515f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/njbarrett/laravel-postgis/zipball/f20044a05d52ba45feb6ae356eb54f65b167e504", - "reference": "f20044a05d52ba45feb6ae356eb54f65b167e504", + "url": "https://api.github.com/repos/njbarrett/laravel-postgis/zipball/64f279eb3972b8b6b77e3cb43170a4095da4515f", + "reference": "64f279eb3972b8b6b77e3cb43170a4095da4515f", "shasum": "" }, "require": { @@ -2438,7 +2445,7 @@ } ], "description": "Postgis extensions for laravel. Aims to make it easy to work with geometries from laravel models", - "time": "2017-05-21T06:19:14+00:00" + "time": "2017-05-23T09:38:08+00:00" }, { "name": "pmatseykanets/laravel-scout-postgres", @@ -2644,16 +2651,16 @@ }, { "name": "psy/psysh", - "version": "v0.8.5", + "version": "v0.8.6", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "38a9d21406597a0440690eafbcb0222f528c8ac6" + "reference": "7028d6d525fb183d50b249b7c07598e3d386b27d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/38a9d21406597a0440690eafbcb0222f528c8ac6", - "reference": "38a9d21406597a0440690eafbcb0222f528c8ac6", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7028d6d525fb183d50b249b7c07598e3d386b27d", + "reference": "7028d6d525fb183d50b249b7c07598e3d386b27d", "shasum": "" }, "require": { @@ -2683,7 +2690,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.9.x-dev" + "dev-develop": "0.8.x-dev" } }, "autoload": { @@ -2713,7 +2720,7 @@ "interactive", "shell" ], - "time": "2017-05-17T06:49:19+00:00" + "time": "2017-06-04T10:34:20+00:00" }, { "name": "ramsey/uuid", @@ -2898,16 +2905,16 @@ }, { "name": "symfony/console", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a7a17e0c6c3c4d70a211f80782e4b90ddadeaa38" + "reference": "70d2a29b2911cbdc91a7e268046c395278238b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a7a17e0c6c3c4d70a211f80782e4b90ddadeaa38", - "reference": "a7a17e0c6c3c4d70a211f80782e4b90ddadeaa38", + "url": "https://api.github.com/repos/symfony/console/zipball/70d2a29b2911cbdc91a7e268046c395278238b2e", + "reference": "70d2a29b2911cbdc91a7e268046c395278238b2e", "shasum": "" }, "require": { @@ -2915,10 +2922,16 @@ "symfony/debug": "~2.8|~3.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, "require-dev": { "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", "symfony/event-dispatcher": "~2.8|~3.0", "symfony/filesystem": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0", "symfony/process": "~2.8|~3.0" }, "suggest": { @@ -2930,7 +2943,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -2957,20 +2970,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-04-26T01:39:17+00:00" + "time": "2017-06-02T19:24:58+00:00" }, { "name": "symfony/css-selector", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "02983c144038e697c959e6b06ef6666de759ccbc" + "reference": "4d882dced7b995d5274293039370148e291808f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/02983c144038e697c959e6b06ef6666de759ccbc", - "reference": "02983c144038e697c959e6b06ef6666de759ccbc", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4d882dced7b995d5274293039370148e291808f2", + "reference": "4d882dced7b995d5274293039370148e291808f2", "shasum": "" }, "require": { @@ -2979,7 +2992,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3010,20 +3023,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2017-05-01T14:55:58+00:00" + "time": "2017-05-01T15:01:29+00:00" }, { "name": "symfony/debug", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "fd6eeee656a5a7b384d56f1072243fe1c0e81686" + "reference": "e9c50482841ef696e8fa1470d950a79c8921f45d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/fd6eeee656a5a7b384d56f1072243fe1c0e81686", - "reference": "fd6eeee656a5a7b384d56f1072243fe1c0e81686", + "url": "https://api.github.com/repos/symfony/debug/zipball/e9c50482841ef696e8fa1470d950a79c8921f45d", + "reference": "e9c50482841ef696e8fa1470d950a79c8921f45d", "shasum": "" }, "require": { @@ -3034,13 +3047,12 @@ "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", "symfony/http-kernel": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3067,29 +3079,32 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2017-04-19T20:17:50+00:00" + "time": "2017-06-01T21:01:25+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "b8a401f733b43251e1d088c589368b2a94155e40" + "reference": "4054a102470665451108f9b59305c79176ef98f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b8a401f733b43251e1d088c589368b2a94155e40", - "reference": "b8a401f733b43251e1d088c589368b2a94155e40", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4054a102470665451108f9b59305c79176ef98f0", + "reference": "4054a102470665451108f9b59305c79176ef98f0", "shasum": "" }, "require": { "php": ">=5.5.9" }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/expression-language": "~2.8|~3.0", "symfony/stopwatch": "~2.8|~3.0" }, @@ -3100,7 +3115,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3127,20 +3142,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-05-01T14:58:48+00:00" + "time": "2017-06-04T18:15:29+00:00" }, { "name": "symfony/finder", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9cf076f8f492f4b1ffac40aae9c2d287b4ca6930" + "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9cf076f8f492f4b1ffac40aae9c2d287b4ca6930", - "reference": "9cf076f8f492f4b1ffac40aae9c2d287b4ca6930", + "url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4", + "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4", "shasum": "" }, "require": { @@ -3149,7 +3164,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3176,20 +3191,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-04-12T14:13:17+00:00" + "time": "2017-06-01T21:01:25+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "9de6add7f731e5af7f5b2e9c0da365e43383ebef" + "reference": "80eb5a1f968448b77da9e8b2c0827f6e8d767846" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9de6add7f731e5af7f5b2e9c0da365e43383ebef", - "reference": "9de6add7f731e5af7f5b2e9c0da365e43383ebef", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/80eb5a1f968448b77da9e8b2c0827f6e8d767846", + "reference": "80eb5a1f968448b77da9e8b2c0827f6e8d767846", "shasum": "" }, "require": { @@ -3202,7 +3217,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3229,20 +3244,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2017-05-01T14:55:58+00:00" + "time": "2017-06-05T13:06:51+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "46e8b209abab55c072c47d72d5cd1d62c0585e05" + "reference": "be8280f7fa8e95b86514f1e1be997668a53b2888" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/46e8b209abab55c072c47d72d5cd1d62c0585e05", - "reference": "46e8b209abab55c072c47d72d5cd1d62c0585e05", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/be8280f7fa8e95b86514f1e1be997668a53b2888", + "reference": "be8280f7fa8e95b86514f1e1be997668a53b2888", "shasum": "" }, "require": { @@ -3250,18 +3265,22 @@ "psr/log": "~1.0", "symfony/debug": "~2.8|~3.0", "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8.13|~3.1.6|~3.2" + "symfony/http-foundation": "~3.3" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.3", + "symfony/var-dumper": "<3.3", + "twig/twig": "<1.34|<2.4,>=2" }, "require-dev": { + "psr/cache": "~1.0", "symfony/browser-kit": "~2.8|~3.0", "symfony/class-loader": "~2.8|~3.0", "symfony/config": "~2.8|~3.0", "symfony/console": "~2.8|~3.0", "symfony/css-selector": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/dom-crawler": "~2.8|~3.0", "symfony/expression-language": "~2.8|~3.0", "symfony/finder": "~2.8|~3.0", @@ -3270,7 +3289,7 @@ "symfony/stopwatch": "~2.8|~3.0", "symfony/templating": "~2.8|~3.0", "symfony/translation": "~2.8|~3.0", - "symfony/var-dumper": "~3.2" + "symfony/var-dumper": "~3.3" }, "suggest": { "symfony/browser-kit": "", @@ -3284,7 +3303,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3311,7 +3330,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2017-05-01T17:46:48+00:00" + "time": "2017-06-06T03:59:58+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -3374,16 +3393,16 @@ }, { "name": "symfony/process", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "999c2cf5061e627e6cd551dc9ebf90dd1d11d9f0" + "reference": "8e30690c67aafb6c7992d6d8eb0d707807dd3eaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/999c2cf5061e627e6cd551dc9ebf90dd1d11d9f0", - "reference": "999c2cf5061e627e6cd551dc9ebf90dd1d11d9f0", + "url": "https://api.github.com/repos/symfony/process/zipball/8e30690c67aafb6c7992d6d8eb0d707807dd3eaf", + "reference": "8e30690c67aafb6c7992d6d8eb0d707807dd3eaf", "shasum": "" }, "require": { @@ -3392,7 +3411,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3419,36 +3438,39 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-04-12T14:13:17+00:00" + "time": "2017-05-22T12:32:03+00:00" }, { "name": "symfony/routing", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "5029745d6d463585e8b487dbc83d6333f408853a" + "reference": "39804eeafea5cca851946e1eed122eb94459fdb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/5029745d6d463585e8b487dbc83d6333f408853a", - "reference": "5029745d6d463585e8b487dbc83d6333f408853a", + "url": "https://api.github.com/repos/symfony/routing/zipball/39804eeafea5cca851946e1eed122eb94459fdb4", + "reference": "39804eeafea5cca851946e1eed122eb94459fdb4", "shasum": "" }, "require": { "php": ">=5.5.9" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.3", + "symfony/yaml": "<3.3" }, "require-dev": { "doctrine/annotations": "~1.0", "doctrine/common": "~2.2", "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/expression-language": "~2.8|~3.0", "symfony/http-foundation": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/yaml": "~3.3" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -3461,7 +3483,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3494,20 +3516,20 @@ "uri", "url" ], - "time": "2017-04-12T14:13:17+00:00" + "time": "2017-06-02T09:51:43+00:00" }, { "name": "symfony/translation", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "f4a04d2df710f81515df576b2de06bdeee518b83" + "reference": "dc3b2a0c6cfff60327ba1c043a82092735397543" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f4a04d2df710f81515df576b2de06bdeee518b83", - "reference": "f4a04d2df710f81515df576b2de06bdeee518b83", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc3b2a0c6cfff60327ba1c043a82092735397543", + "reference": "dc3b2a0c6cfff60327ba1c043a82092735397543", "shasum": "" }, "require": { @@ -3515,13 +3537,14 @@ "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/yaml": "<3.3" }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", "symfony/intl": "^2.8.18|^3.2.5", - "symfony/yaml": "~2.8|~3.0" + "symfony/yaml": "~3.3" }, "suggest": { "psr/log": "To use logging capability in translator", @@ -3531,7 +3554,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3558,20 +3581,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2017-04-12T14:13:17+00:00" + "time": "2017-05-22T07:42:36+00:00" }, { "name": "symfony/var-dumper", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "fa47963ac7979ddbd42b2d646d1b056bddbf7bb8" + "reference": "347c4247a3e40018810b476fcd5dec36d46d08dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/fa47963ac7979ddbd42b2d646d1b056bddbf7bb8", - "reference": "fa47963ac7979ddbd42b2d646d1b056bddbf7bb8", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/347c4247a3e40018810b476fcd5dec36d46d08dc", + "reference": "347c4247a3e40018810b476fcd5dec36d46d08dc", "shasum": "" }, "require": { @@ -3583,7 +3606,7 @@ }, "require-dev": { "ext-iconv": "*", - "twig/twig": "~1.20|~2.0" + "twig/twig": "~1.34|~2.4" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", @@ -3592,7 +3615,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3626,7 +3649,7 @@ "debug", "dump" ], - "time": "2017-05-01T14:55:58+00:00" + "time": "2017-06-02T09:10:29+00:00" }, { "name": "themattharris/tmhoauth", @@ -3815,20 +3838,20 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v2.3.2", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "24e4f0261e352d3fd86d0447791b56ae49398674" + "reference": "de15d00a74696db62e1b4782474c27ed0c4fc763" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/24e4f0261e352d3fd86d0447791b56ae49398674", - "reference": "24e4f0261e352d3fd86d0447791b56ae49398674", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/de15d00a74696db62e1b4782474c27ed0c4fc763", + "reference": "de15d00a74696db62e1b4782474c27ed0c4fc763", "shasum": "" }, "require": { - "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*", + "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", "maximebf/debugbar": "~1.13.0", "php": ">=5.5.9", "symfony/finder": "~2.7|~3.0" @@ -3836,7 +3859,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ], + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facade" + } } }, "autoload": { @@ -3865,7 +3896,7 @@ "profiler", "webprofiler" ], - "time": "2017-01-19T08:19:49+00:00" + "time": "2017-06-01T17:46:08+00:00" }, { "name": "doctrine/instantiator", @@ -4797,16 +4828,16 @@ }, { "name": "phpunit/phpunit", - "version": "5.7.19", + "version": "5.7.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "69c4f49ff376af2692bad9cebd883d17ebaa98a1" + "reference": "3cb94a5f8c07a03c8b7527ed7468a2926203f58b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/69c4f49ff376af2692bad9cebd883d17ebaa98a1", - "reference": "69c4f49ff376af2692bad9cebd883d17ebaa98a1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3cb94a5f8c07a03c8b7527ed7468a2926203f58b", + "reference": "3cb94a5f8c07a03c8b7527ed7468a2926203f58b", "shasum": "" }, "require": { @@ -4824,7 +4855,7 @@ "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "^3.2", "sebastian/comparator": "^1.2.4", - "sebastian/diff": "~1.2", + "sebastian/diff": "^1.4.3", "sebastian/environment": "^1.3.4 || ^2.0", "sebastian/exporter": "~2.0", "sebastian/global-state": "^1.1", @@ -4875,7 +4906,7 @@ "testing", "xunit" ], - "time": "2017-04-03T02:22:27+00:00" + "time": "2017-05-22T07:42:55+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -5047,16 +5078,16 @@ }, { "name": "sebastian/diff", - "version": "1.4.2", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3c7d21999e815cdfac70c6c7d79d3a9cb1bc7bc2" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3c7d21999e815cdfac70c6c7d79d3a9cb1bc7bc2", - "reference": "3c7d21999e815cdfac70c6c7d79d3a9cb1bc7bc2", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { @@ -5095,7 +5126,7 @@ "keywords": [ "diff" ], - "time": "2017-05-18T13:44:30+00:00" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -5540,16 +5571,16 @@ }, { "name": "symfony/yaml", - "version": "v3.2.8", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "acec26fcf7f3031e094e910b94b002fa53d4e4d6" + "reference": "9752a30000a8ca9f4b34b5227d15d0101b96b063" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/acec26fcf7f3031e094e910b94b002fa53d4e4d6", - "reference": "acec26fcf7f3031e094e910b94b002fa53d4e4d6", + "url": "https://api.github.com/repos/symfony/yaml/zipball/9752a30000a8ca9f4b34b5227d15d0101b96b063", + "reference": "9752a30000a8ca9f4b34b5227d15d0101b96b063", "shasum": "" }, "require": { @@ -5564,7 +5595,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -5591,7 +5622,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2017-05-01T14:55:58+00:00" + "time": "2017-06-02T22:05:06+00:00" }, { "name": "theseer/fdomdocument", diff --git a/resources/views/articles/atom.blade.php b/resources/views/articles/atom.blade.php new file mode 100644 index 00000000..3a23d0fb --- /dev/null +++ b/resources/views/articles/atom.blade.php @@ -0,0 +1,20 @@ + + + Atom feed for {{ config('app.display_name') }}’s blog + + {{ config('app.url')}}/blog + {{ $articles[0]->updated_at->toAtomString() }} + + @foreach($articles as $article) + + {{ $article->title }} + + {{ config('app.url') }}{{ $article->link }} + {{ $article->updated_at->toAtomString() }} + {{ $article->main }} + + {{ config('app.display_name') }} + + + @endforeach + diff --git a/resources/views/articles/rss.blade.php b/resources/views/articles/rss.blade.php index 792d8989..dff5c1f8 100644 --- a/resources/views/articles/rss.blade.php +++ b/resources/views/articles/rss.blade.php @@ -2,9 +2,9 @@ {{ config('app.display_name') }} - + An RSS feed of the blog posts found on {{ config('url.longurl') }} - {{ config('app.url') }} + {{ config('app.url') }}/blog {{ $buildDate }} 1800 diff --git a/resources/views/master.blade.php b/resources/views/master.blade.php index 2ee7e08d..2d7efe92 100644 --- a/resources/views/master.blade.php +++ b/resources/views/master.blade.php @@ -6,6 +6,12 @@ + + + + + + diff --git a/resources/views/notes/atom.blade.php b/resources/views/notes/atom.blade.php new file mode 100644 index 00000000..97909302 --- /dev/null +++ b/resources/views/notes/atom.blade.php @@ -0,0 +1,20 @@ + + + Atom feed for {{ config('app.display_name') }}’s notes + + {{ config('app.url')}}/notes + {{ $notes[0]->updated_at->toAtomString() }} + + @foreach($notes as $note) + + {{ strip_tags($note->note) }} + + {{ $note->longurl }} + {{ $note->updated_at->toAtomString() }} + {{ $note->note }} + + {{ config('app.display_name') }} + + + @endforeach + diff --git a/resources/views/notes/index.blade.php b/resources/views/notes/index.blade.php index a2120865..d3087269 100644 --- a/resources/views/notes/index.blade.php +++ b/resources/views/notes/index.blade.php @@ -38,6 +38,7 @@ Notes «
  • I follow people I find interesting on Twitter
  • I push code to GitHub
  • I scrobble songs to last.fm that I listen to on Spotify
  • +
  • I post photos to Instagram
  • My usual online nickname is normally jonnybarnes for other services. Here’s a profile pic. I also have a PGP key, with fingerprint. You can email me at jonny at my domain, or message me on XMPP using the same address.

    diff --git a/resources/views/notes/rss.blade.php b/resources/views/notes/rss.blade.php new file mode 100644 index 00000000..6204748b --- /dev/null +++ b/resources/views/notes/rss.blade.php @@ -0,0 +1,26 @@ + + + + {{ config('app.display_name') }} + + An RSS feed of the notes found on {{ config('url.longurl') }} + {{ config('app.url') }}/notes + {{ $buildDate }} + 1800 + + @foreach($notes as $note) + + {{ strip_tags($note->note) }} + + note !!} + ]]> + + {{ $note->longurl }} + {{ $note->longurl}} + {{ $note->pubdate }} + + @endforeach + + + diff --git a/routes/web.php b/routes/web.php index d006be26..6e777391 100644 --- a/routes/web.php +++ b/routes/web.php @@ -88,12 +88,18 @@ Route::group(['domain' => config('url.longurl')], function () { }); //Blog pages using ArticlesController + Route::get('blog/feed.rss', 'FeedsController@blogRss'); + Route::get('blog/feed.atom', 'FeedsController@blogAtom'); + Route::get('blog/feed.json', 'FeedsController@blogJson'); Route::get('blog/s/{id}', 'ArticlesController@onlyIdInURL'); Route::get('blog/{year?}/{month?}', 'ArticlesController@index'); Route::get('blog/{year}/{month}/{slug}', 'ArticlesController@show'); //Notes pages using NotesController Route::get('notes', 'NotesController@index'); + Route::get('notes/feed.rss', 'FeedsController@notesRss'); + Route::get('notes/feed.atom', 'FeedsController@notesAtom'); + Route::get('notes/feed.json', 'FeedsController@notesJson'); Route::get('notes/{id}', 'NotesController@show'); Route::get('note/{id}', 'NotesController@redirect'); Route::get('notes/tagged/{tag}', 'NotesController@tagged'); @@ -136,8 +142,6 @@ Route::group(['domain' => config('url.longurl')], function () { Route::get('places', 'PlacesController@index'); Route::get('places/{slug}', 'PlacesController@show'); - Route::get('feed', 'ArticlesController@makeRSS'); - Route::get('search', 'SearchController@search'); }); diff --git a/tests/Feature/ArticlesRSSTest.php b/tests/Feature/ArticlesRSSTest.php deleted file mode 100644 index 5bb10e35..00000000 --- a/tests/Feature/ArticlesRSSTest.php +++ /dev/null @@ -1,22 +0,0 @@ -get('/feed'); - $response->assertHeader('Content-Type', 'application/rss+xml'); - } -} diff --git a/tests/Feature/FeedsTest.php b/tests/Feature/FeedsTest.php new file mode 100644 index 00000000..df6aa98c --- /dev/null +++ b/tests/Feature/FeedsTest.php @@ -0,0 +1,77 @@ +get('/blog/feed.rss'); + $response->assertHeader('Content-Type', 'application/rss+xml; charset=utf-8'); + } + + /** + * Test the notes RSS feed. + * + * @return void + */ + public function test_notes_rss_feed() + { + $response = $this->get('/notes/feed.rss'); + $response->assertHeader('Content-Type', 'application/rss+xml; charset=utf-8'); + } + + /** + * Test the blog RSS feed. + * + * @return void + */ + public function test_blog_atom_feed() + { + $response = $this->get('/blog/feed.atom'); + $response->assertHeader('Content-Type', 'application/atom+xml; charset=utf-8'); + } + + /** + * Test the notes RSS feed. + * + * @return void + */ + public function test_notes_atom_feed() + { + $response = $this->get('/notes/feed.atom'); + $response->assertHeader('Content-Type', 'application/atom+xml; charset=utf-8'); + } + + /** + * Test the blog JSON feed. + * + * @return void + */ + public function test_blog_json_feed() + { + $response = $this->get('/blog/feed.json'); + $response->assertHeader('Content-Type', 'application/json'); + } + + /** + * Test the notes JSON feed. + * + * @return void + */ + public function test_notes_json_feed() + { + $response = $this->get('/notes/feed.json'); + $response->assertHeader('Content-Type', 'application/json'); + } +}