From b7ceed7cf6603f4f7a50fb6493fb068e9f6b8ced Mon Sep 17 00:00:00 2001 From: Awilum Date: Mon, 11 Jan 2021 15:39:38 +0300 Subject: [PATCH] feat(code): initial code base commit --- CHANGELOG.md | 2 ++ README.md | 5 ++-- plugin.php | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ plugin.yaml | 19 +++++++++++++++ settings.yaml | 3 +++ 5 files changed, 90 insertions(+), 3 deletions(-) create mode 100755 CHANGELOG.md create mode 100644 plugin.php create mode 100644 plugin.yaml create mode 100644 settings.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100755 index 0000000..7e65a2a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2 @@ +# v1.0.0, 2021-01-11 +* Initial release diff --git a/README.md b/README.md index 7422f34..bb8797d 100755 --- a/README.md +++ b/README.md @@ -29,11 +29,11 @@ The following dependencies need to be downloaded and installed for Feed Plugin. |---|---|---| | enabled | true | true or false to disable the plugin | | priority | 100 | Feed plugin priority | -| feed | [] | feed specific data | +| feed | [] | Feed specific data | ### Usage -Inside `project/config/plugin/feed/settings.yaml` you may create unlimited feed for you entries. +Inside `project/config/plugins/feed/settings.yaml` you may create unlimited feed for you entries. Lets create RSS, ATOM and JSON feed for blog collection: @@ -78,7 +78,6 @@ You may easily display feed urls from example above in TWIG templates: JSON ``` - ## LICENSE [The MIT License (MIT)](https://github.com/flextype-plugins/feed/blob/master/LICENSE.txt) Copyright (c) 2021 [Sergey Romanenko](https://github.com/Awilum) diff --git a/plugin.php b/plugin.php new file mode 100644 index 0000000..226ff70 --- /dev/null +++ b/plugin.php @@ -0,0 +1,64 @@ +get('plugins.feed.settings.feed'); + +if (isset($feed) and count($feed) > 0) { + foreach (flextype('registry')->get('plugins.feed.settings.feed') as $item) { + + $cacheID = strings('feed-collection-' . $item['id'])->hash()->toString(); + + flextype('emitter')->addListener('onEntriesCreate', function () use ($cacheID) { + flextype('cache')->delete($cacheID); + }); + + flextype('emitter')->addListener('onEntriesDelete', function () use ($cacheID) { + flextype('cache')->delete($cacheID); + }); + + flextype('emitter')->addListener('onEntriesMove', function () use ($cacheID) { + flextype('cache')->delete($cacheID); + }); + + flextype('emitter')->addListener('onEntriesCopy', function () use ($cacheID) { + flextype('cache')->delete($cacheID); + }); + + flextype('emitter')->addListener('onEntriesUpdate', function () use ($cacheID) { + flextype('cache')->delete($cacheID); + }); + + flextype()->get($item['options']['route'], function (Request $request, Response $response, array $args) use ($item, $cacheID) { + + if (flextype('cache')->has($cacheID)) { + $entries = flextype('cache')->get($cacheID); + } else { + $entries = flextype('entries') + ->fetch($item['id'], $item['options']) + ->sortBy('published_at', 'DESC'); + + flextype('cache')->set($cacheID, $entries); + } + + switch ($item['options']['format']) { + case 'rss': + $response = $response->withHeader('Content-Type', 'application/rss+xml'); + $template = 'plugins/feed/templates/feed.rss.html'; + break; + case 'atom': + $response = $response->withHeader('Content-Type', 'application/atom+xml'); + $template = 'plugins/feed/templates/feed.atom.html'; + break; + case 'json': + default: + $response = $response->withHeader('Content-Type', 'application/json'); + $template = 'plugins/feed/templates/feed.json.html'; + break; + } + + return flextype('twig')->render($response, $template, ['entries' => $entries, 'item' => $item]); + }); + } +} diff --git a/plugin.yaml b/plugin.yaml new file mode 100644 index 0000000..4c89175 --- /dev/null +++ b/plugin.yaml @@ -0,0 +1,19 @@ +name: Feed +version: 1.0.0 +description: Feed plugin for Flextype +author: + name: Sergey Romanenko + email: awilum@yandex.ru + url: https://flextype.org +homepage: https://github.com/flextype-plugins/feed +documentation: https://github.com/flextype-plugins/feed +changelog: https://github.com/flextype-plugins/feed/blob/master/CHANGELOG.md +bugs: https://github.com/flextype-plugins/feed/issues +icon: + name: map-marked-alt + set: "fontawesome|solid" +license: MIT + +dependencies: + flextype: 0.9.15 + twig: '>=2.0.0' diff --git a/settings.yaml b/settings.yaml new file mode 100644 index 0000000..c2c8c8a --- /dev/null +++ b/settings.yaml @@ -0,0 +1,3 @@ +enabled: true +priority: 100 +feed: []