From e36805c206d67cb20b4eb43e5661789753b26a8c Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Mon, 19 Nov 2018 22:12:09 -0500 Subject: [PATCH] Add Custom Pages feature - Add config/pages directory - Add new custom pages controller and route - Add generated links in the footer --- config/.gitignore | 4 +++- config/pages/.gitignore | 4 ++++ src/classes/Controllers/Web/Page.php | 28 ++++++++++++++++++++++++++++ src/classes/Routes/Web/BaseRoute.php | 1 + src/classes/Routes/Web/Pages.php | 18 ++++++++++++++++++ src/routes.php | 9 +++++++++ src/templates/layout.phtml | 5 +++++ 7 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 config/pages/.gitignore create mode 100644 src/classes/Controllers/Web/Page.php create mode 100644 src/classes/Routes/Web/Pages.php diff --git a/config/.gitignore b/config/.gitignore index 86d0cb2..eb87103 100644 --- a/config/.gitignore +++ b/config/.gitignore @@ -1,4 +1,6 @@ # Ignore everything in this directory * # Except this file -!.gitignore \ No newline at end of file +!.gitignore +# And the pages subdirectory +!pages diff --git a/config/pages/.gitignore b/config/pages/.gitignore new file mode 100644 index 0000000..5e7d273 --- /dev/null +++ b/config/pages/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore diff --git a/src/classes/Controllers/Web/Page.php b/src/classes/Controllers/Web/Page.php new file mode 100644 index 0000000..53cc31d --- /dev/null +++ b/src/classes/Controllers/Web/Page.php @@ -0,0 +1,28 @@ + + */ +class Page extends BaseController +{ + /** + * @var string + */ + private $pageFile; + + public function __construct( + string $pageFile + ) + { + $this->pageFile = $pageFile; + } + + public function render(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args): array + { + $content = file_get_contents($this->pageFile); + + return ['content' => $content]; + } +} diff --git a/src/classes/Routes/Web/BaseRoute.php b/src/classes/Routes/Web/BaseRoute.php index e5ec853..633bbef 100644 --- a/src/classes/Routes/Web/BaseRoute.php +++ b/src/classes/Routes/Web/BaseRoute.php @@ -27,6 +27,7 @@ abstract class BaseRoute public function __invoke(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args): \Slim\Http\Response { $defaults = [ + 'pages' => glob(__DIR__ . '/../../../../config/pages/*.html'), 'version' => file_get_contents(__DIR__ . '/../../../../VERSION'), 'languages' => $this->container->settings['i18n']['locales'], 'lang' => $request->getAttribute('locale'), diff --git a/src/classes/Routes/Web/Pages.php b/src/classes/Routes/Web/Pages.php new file mode 100644 index 0000000..e90bb03 --- /dev/null +++ b/src/classes/Routes/Web/Pages.php @@ -0,0 +1,18 @@ + + */ +class Pages extends BaseRoute +{ + public function __construct(\Slim\Container $container, $pageFile) + { + parent::__construct($container); + + $this->controller = new \Friendica\Directory\Controllers\Web\Page( + $pageFile + ); + } +} diff --git a/src/routes.php b/src/routes.php index c5fecbf..b1b8113 100644 --- a/src/routes.php +++ b/src/routes.php @@ -36,4 +36,13 @@ $app->get('/VERSION', function (Request $request, Response $response) { return $response; }); + +foreach(glob(__DIR__ . '/../config/pages/*.html') as $page) { + $app->get('/' . strtolower(basename($page, '.html')), function (Request $request, Response $response, $args) use ($page) { + $route = new \Friendica\Directory\Routes\Web\Pages($this, $page); + + return $route($request, $response, $args); + }); +} + $app->get('/[{account_type}]', \Friendica\Directory\Routes\Web\Directory::class)->setName('directory'); diff --git a/src/templates/layout.phtml b/src/templates/layout.phtml index e7f528e..b8ecce6 100644 --- a/src/templates/layout.phtml +++ b/src/templates/layout.phtml @@ -96,6 +96,11 @@ + + +