11<?php
22
3- use Psr \Http \Message \ResponseInterface as Response ;
4- use Psr \Http \Message \ServerRequestInterface as Request ;
3+ declare (strict_types=1 );
54
6- $ feed = flextype ( ' registry ' )-> get ( ' plugins.feed.settings.feed ' ) ;
5+ namespace Flextype \ Plugin \ Feed ;
76
8- if (isset ($ feed ) and count ($ feed ) > 0 ) {
9- foreach ($ feed as $ item ) {
7+ use Flextype \Plugin \Feed \Console \Commands \Feed \FeedGenerateCommand ;
8+ use Psr \Http \Message \ResponseInterface ;
9+ use Psr \Http \Message \ServerRequestInterface ;
10+ use function Flextype \console ;
11+ use function Flextype \registry ;
12+ use function Flextype \emitter ;
13+ use function Flextype \cache ;
14+ use function Flextype \app ;
15+ use function Glowy \Strings \strings ;
1016
11- $ cacheID = strings ('feed-collection- ' . $ item ['id ' ])->hash ()->toString ();
17+ /**
18+ * Ensure vendor libraries exist
19+ */
20+ ! is_file ($ feedAutoload = __DIR__ . '/vendor/autoload.php ' ) and exit ('Please run: <i>composer install</i> for feed plugin ' );
1221
13- flextype ('emitter ' )->addListener ('onEntriesCreate ' , fn () => flextype ('cache ' )->delete ($ cacheID ));
14- flextype ('emitter ' )->addListener ('onEntriesDelete ' , fn () => flextype ('cache ' )->delete ($ cacheID ));
15- flextype ('emitter ' )->addListener ('onEntriesMove ' , fn () => flextype ('cache ' )->delete ($ cacheID ));
16- flextype ('emitter ' )->addListener ('onEntriesCopy ' , fn () => flextype ('cache ' )->delete ($ cacheID ));
17- flextype ('emitter ' )->addListener ('onEntriesUpdate ' , fn () => flextype ('cache ' )->delete ($ cacheID ));
22+ /**
23+ * Register The Auto Loader
24+ *
25+ * Composer provides a convenient, automatically generated class loader for
26+ * our application. We just need to utilize it! We'll simply require it
27+ * into the script here so that we don't have to worry about manual
28+ * loading any of our classes later on. It feels nice to relax.
29+ * Register The Auto Loader
30+ */
31+ $ feedLoader = require_once $ feedAutoload ;
1832
19- flextype ()->get ($ item ['options ' ]['route ' ], function (Request $ request , Response $ response , array $ args ) use ($ item , $ cacheID ) {
33+ // Add feed generate console command
34+ console ()->add (new FeedGenerateCommand ());
2035
21- if ( flextype ( ' cache ' )->has ( $ cacheID )) {
22- $ entries = flextype ( ' cache ' )-> get ( $ cacheID );
23- } else {
24- $ entries = flextype ( ' entries ' )
25- -> fetch ( $ item [ ' id ' ], $ item [ ' options ' ])
26- -> sortBy ( ' published_at ' , ' DESC ' );
36+ $ feeds = registry ( )->get ( ' plugins.feed.settings.feeds ' );
37+
38+ if ( is_array ( $ feeds ) && count ( $ feeds ) > 0 ) {
39+ foreach ( $ feeds as $ feed ) {
40+
41+ $ cacheID = strings ( ' feed-collection- ' . $ feed [ ' id ' ] . ' - ' . json_encode ( $ feed [ ' options ' ]))-> hash ()-> toString ( );
2742
28- flextype ('cache ' )->set ($ cacheID , $ entries );
43+ // Delete feed collection from cache on these events:
44+ emitter ()->addListener ('onEntriesCreate ' , fn () => cache ()->delete ($ cacheID ));
45+ emitter ()->addListener ('onEntriesDelete ' , fn () => cache ()->delete ($ cacheID ));
46+ emitter ()->addListener ('onEntriesMove ' , fn () => cache ()->delete ($ cacheID ));
47+ emitter ()->addListener ('onEntriesCopy ' , fn () => cache ()->delete ($ cacheID ));
48+ emitter ()->addListener ('onEntriesUpdate ' , fn () => cache ()->delete ($ cacheID ));
49+
50+ app ()->get ($ feed ['options ' ]['feed ' ]['route ' ], function (ServerRequestInterface $ request , ResponseInterface $ response ) use ($ feed , $ cacheID ) {
51+
52+ if (cache ()->has ($ cacheID )) {
53+ $ entries = cache ()->get ($ cacheID );
54+ } else {
55+ $ entries = entries ()->fetch ($ feed ['id ' ], $ feed ['options ' ])->sortBy ('published_at ' , 'DESC ' );
56+ cache ()->set ($ cacheID , $ entries );
2957 }
3058
31- switch ($ item ['options ' ]['format ' ]) {
59+ switch ($ feed ['options ' ][ ' feed ' ]['format ' ]) {
3260 case 'rss ' :
3361 $ response = $ response ->withHeader ('Content-Type ' , 'application/rss+xml ' );
34- $ template = ' plugins/feed/templates/feed.rss.html ' ;
62+ $ template = isset ( $ feed [ ' options ' ][ ' feed ' ][ ' template ' ]) ? $ feed [ ' options ' ][ ' feed ' ][ ' template ' ] : ' plugins/feed/views /templates/feed.rss.html ' ;
3563 break ;
3664 case 'atom ' :
3765 $ response = $ response ->withHeader ('Content-Type ' , 'application/atom+xml ' );
38- $ template = ' plugins/feed/templates/feed.atom.html ' ;
66+ $ template = isset ( $ feed [ ' options ' ][ ' feed ' ][ ' template ' ]) ? $ feed [ ' options ' ][ ' feed ' ][ ' template ' ] : ' plugins/feed/views /templates/feed.atom.html ' ;
3967 break ;
4068 case 'json ' :
4169 default :
4270 $ response = $ response ->withHeader ('Content-Type ' , 'application/json ' );
43- $ template = ' plugins/feed/templates/feed.json.html ' ;
71+ $ template = isset ( $ feed [ ' options ' ][ ' feed ' ][ ' template ' ]) ? $ feed [ ' options ' ][ ' feed ' ][ ' template ' ] : ' plugins/feed/views /templates/feed.json.html ' ;
4472 break ;
4573 }
4674
47- return flextype ('twig ' )->render ($ response , $ template , ['entries ' => $ entries , 'item ' => $ item ]);
75+ $ response ->withStatus (200 );
76+ $ response ->getBody ()->write (twig ()->fetch ($ template , ['entries ' => $ entries , 'feed ' => $ feed ]));
77+
78+ return $ response ;
4879 });
4980 }
50- }
81+ }
0 commit comments