From 75d739ffc6fdbbb3604e1020c6097e1362122e31 Mon Sep 17 00:00:00 2001 From: Awilum Date: Tue, 15 Oct 2019 17:17:44 +0300 Subject: [PATCH] feat(admin-plugin): YAML parsing will be cached in production #263 feat(admin-plugin): add plugins settings page #258 feat(admin-plugin): add plugins information page #257 --- .../app/Controllers/EntriesController.php | 12 ++-- .../app/Controllers/FieldsetsController.php | 4 +- .../app/Controllers/PluginsController.php | 43 ++++++++++- .../app/Controllers/SettingsController.php | 2 +- .../app/Controllers/ThemesController.php | 12 ++-- .../admin/app/Controllers/UsersController.php | 4 +- site/plugins/admin/lang/en_US.yaml | 2 + site/plugins/admin/routes/web.php | 1 + site/plugins/admin/views/partials/base.html | 7 ++ .../templates/content/entries/index.html | 2 +- .../templates/extends/fieldsets/index.html | 2 +- .../views/templates/extends/plugins/edit.html | 71 +++++++++++++++++++ .../templates/extends/plugins/index.html | 15 +--- 13 files changed, 142 insertions(+), 35 deletions(-) create mode 100644 site/plugins/admin/views/templates/extends/plugins/edit.html diff --git a/site/plugins/admin/app/Controllers/EntriesController.php b/site/plugins/admin/app/Controllers/EntriesController.php index c3b335df..6db1f69f 100644 --- a/site/plugins/admin/app/Controllers/EntriesController.php +++ b/site/plugins/admin/app/Controllers/EntriesController.php @@ -127,7 +127,7 @@ class EntriesController extends Controller if (count($fieldsets_list) > 0) { foreach ($fieldsets_list as $fieldset) { if ($fieldset['type'] == 'file' && $fieldset['extension'] == 'yaml') { - $fieldset_content = Parser::decode(Filesystem::read($fieldset['path']), 'yaml'); + $fieldset_content = $this->parser->decode(Filesystem::read($fieldset['path']), 'yaml'); if (isset($fieldset_content['sections']) && isset($fieldset_content['sections']['main']) && isset($fieldset_content['sections']['main']['fields'])) { $fieldsets[$fieldset['basename']] = $fieldset_content['title']; } @@ -281,7 +281,7 @@ class EntriesController extends Controller if (count($_fieldsets) > 0) { foreach ($_fieldsets as $fieldset) { if ($fieldset['type'] == 'file' && $fieldset['extension'] == 'yaml') { - $fieldset_content = Parser::decode(Filesystem::read($fieldset['path']), 'yaml'); + $fieldset_content = $this->parser->decode(Filesystem::read($fieldset['path']), 'yaml'); if (isset($fieldset_content['sections']) && isset($fieldset_content['sections']['main']) && isset($fieldset_content['sections']['main']['fields'])) { $fieldsets[$fieldset['basename']] = $fieldset_content['title']; } @@ -598,7 +598,7 @@ class EntriesController extends Controller // Fieldsets for current entry template $fieldsets_path = PATH['site'] . '/fieldsets/' . (isset($entry['fieldset']) ? $entry['fieldset'] : 'default') . '.yaml'; - $fieldsets = Parser::decode(Filesystem::read($fieldsets_path), 'yaml'); + $fieldsets = $this->parser->decode(Filesystem::read($fieldsets_path), 'yaml'); is_null($fieldsets) and $fieldsets = []; if ($type == 'source') { @@ -610,7 +610,7 @@ class EntriesController extends Controller 'i' => count($parts), 'last' => Arr::last($parts), 'id' => $this->getEntryID($query), - 'data' => Parser::encode($entry, 'frontmatter'), + 'data' => $this->parser->encode($entry, 'frontmatter'), 'type' => $type, 'menu_item' => 'entries', 'links' => [ @@ -752,12 +752,12 @@ class EntriesController extends Controller // Data from POST $data = $request->getParsedBody(); - $entry = Parser::decode($data['data'], 'frontmatter'); + $entry = $this->parser->decode($data['data'], 'frontmatter'); $entry['published_by'] = Session::get('uuid'); // Update entry - if (Filesystem::write(PATH['entries'] . '/' . $id . '/entry.md', Parser::encode($entry, 'frontmatter'))) { + if (Filesystem::write(PATH['entries'] . '/' . $id . '/entry.md', $this->parser->encode($entry, 'frontmatter'))) { $this->flash->addMessage('success', __('admin_message_entry_changes_saved')); } else { $this->flash->addMessage('error', __('admin_message_entry_changes_not_saved')); diff --git a/site/plugins/admin/app/Controllers/FieldsetsController.php b/site/plugins/admin/app/Controllers/FieldsetsController.php index 53b440be..cba7ddb1 100644 --- a/site/plugins/admin/app/Controllers/FieldsetsController.php +++ b/site/plugins/admin/app/Controllers/FieldsetsController.php @@ -95,7 +95,7 @@ class FieldsetsController extends Controller [ 'menu_item' => 'fieldsets', 'id' => $request->getQueryParams()['id'], - 'data' => Parser::encode($this->fieldsets->fetch($request->getQueryParams()['id']), 'yaml'), + 'data' => $this->parser->encode($this->fieldsets->fetch($request->getQueryParams()['id']), 'yaml'), 'links' => [ 'fieldsets' => [ 'link' => $this->router->pathFor('admin.fieldsets.index'), @@ -124,7 +124,7 @@ class FieldsetsController extends Controller $id = $request->getParsedBody()['id']; $data = $request->getParsedBody()['data']; - if ($this->fieldsets->update($request->getParsedBody()['id'], Parser::decode($data, 'yaml'))) { + if ($this->fieldsets->update($request->getParsedBody()['id'], $this->parser->decode($data, 'yaml'))) { $this->flash->addMessage('success', __('admin_message_fieldset_saved')); } else { $this->flash->addMessage('error', __('admin_message_fieldset_was_not_saved')); diff --git a/site/plugins/admin/app/Controllers/PluginsController.php b/site/plugins/admin/app/Controllers/PluginsController.php index 309a55ae..118edb7e 100644 --- a/site/plugins/admin/app/Controllers/PluginsController.php +++ b/site/plugins/admin/app/Controllers/PluginsController.php @@ -62,9 +62,9 @@ class PluginsController extends Controller $data = $request->getParsedBody(); // Update settings - $plugin_settings = Parser::decode(Filesystem::read(PATH['plugins'] . '/' . $data['plugin-key'] . '/' . 'settings.yaml'), 'yaml'); + $plugin_settings = $this->parser->decode(Filesystem::read(PATH['plugins'] . '/' . $data['plugin-key'] . '/' . 'settings.yaml'), 'yaml'); Arr::set($plugin_settings, 'enabled', ($data['plugin-status'] === 'true')); - Filesystem::write(PATH['plugins'] . '/' . $data['plugin-key'] . '/' . 'settings.yaml', Parser::encode($plugin_settings, 'yaml')); + Filesystem::write(PATH['plugins'] . '/' . $data['plugin-key'] . '/' . 'settings.yaml', $this->parser->encode($plugin_settings, 'yaml')); // Clear doctrine cache $this->cache->clear('doctrine'); @@ -72,4 +72,43 @@ class PluginsController extends Controller // Redirect to plugins index page return $response->withRedirect($this->router->pathFor('admin.plugins.index')); } + + /** + * Edit plugin + * + * @param Request $request PSR7 request + * @param Response $response PSR7 response + */ + public function edit(Request $request, Response $response) : Response + { + return $this->view->render( + $response, + 'plugins/admin/views/templates/extends/plugins/edit.html', + [ + 'menu_item' => 'plugins', + 'id' => $request->getQueryParams()['id'], + 'plugin_manifest' => $this->parser->decode(Filesystem::read(PATH['plugins'] . '/' . $request->getQueryParams()['id'] . '/plugin.yaml'), 'yaml'), + 'plugin_settings' => Filesystem::read(PATH['plugins'] . '/' . $request->getQueryParams()['id'] . '/settings.yaml'), + 'links' => [ + 'plugins' => [ + 'link' => $this->router->pathFor('admin.plugins.index'), + 'title' => __('admin_plugins'), + 'attributes' => ['class' => 'navbar-item'], + ], + 'fieldsets_editor' => [ + 'link' => $this->router->pathFor('admin.plugins.edit') . '?id=' . $request->getQueryParams()['id'], + 'title' => __('admin_plugin'), + 'attributes' => ['class' => 'navbar-item active'], + ], + ], + 'buttons' => [ + 'save_entry' => [ + 'link' => 'javascript:;', + 'title' => __('admin_save'), + 'attributes' => ['class' => 'js-save-form-submit float-right btn'], + ], + ], + ] + ); + } } diff --git a/site/plugins/admin/app/Controllers/SettingsController.php b/site/plugins/admin/app/Controllers/SettingsController.php index 735d72ed..84676e06 100644 --- a/site/plugins/admin/app/Controllers/SettingsController.php +++ b/site/plugins/admin/app/Controllers/SettingsController.php @@ -143,7 +143,7 @@ class SettingsController extends Controller Arr::set($data, 'entries.media.upload_images_width', (int) $data['entries']['media']['upload_images_width']); Arr::set($data, 'entries.media.upload_images_height', (int) $data['entries']['media']['upload_images_height']); - if (Filesystem::write(PATH['config']['site'] . '/settings.yaml', Parser::encode(array_merge($this->registry->get('settings'), $data), 'yaml'))) { + if (Filesystem::write(PATH['config']['site'] . '/settings.yaml', $this->parser->encode(array_merge($this->registry->get('settings'), $data), 'yaml'))) { $this->flash->addMessage('success', __('admin_message_settings_saved')); } else { $this->flash->addMessage('error', __('admin_message_settings_was_not_saved')); diff --git a/site/plugins/admin/app/Controllers/ThemesController.php b/site/plugins/admin/app/Controllers/ThemesController.php index 98905b1c..f75a8413 100644 --- a/site/plugins/admin/app/Controllers/ThemesController.php +++ b/site/plugins/admin/app/Controllers/ThemesController.php @@ -64,9 +64,9 @@ class ThemesController extends Controller $data = $request->getParsedBody(); // Update current theme settings - $theme_settings = Parser::decode(Filesystem::read(PATH['themes'] . '/' . $data['theme-id'] . '/' . 'settings.yaml'), 'yaml'); + $theme_settings = $this->parser->decode(Filesystem::read(PATH['themes'] . '/' . $data['theme-id'] . '/' . 'settings.yaml'), 'yaml'); Arr::set($theme_settings, 'enabled', ($data['theme-status'] === 'true')); - Filesystem::write(PATH['themes'] . '/' . $data['theme-id'] . '/' . 'settings.yaml', Parser::encode($theme_settings, 'yaml')); + Filesystem::write(PATH['themes'] . '/' . $data['theme-id'] . '/' . 'settings.yaml', $this->parser->encode($theme_settings, 'yaml')); // Get themes list $themes_list = $this->themes->getThemes(); @@ -82,16 +82,16 @@ class ThemesController extends Controller continue; } - $theme_settings = Parser::decode(Filesystem::read($theme_settings_file), 'yaml'); + $theme_settings = $this->parser->decode(Filesystem::read($theme_settings_file), 'yaml'); Arr::set($theme_settings, 'enabled', false); - Filesystem::write($theme_settings_file, Parser::encode($theme_settings, 'yaml')); + Filesystem::write($theme_settings_file, $this->parser->encode($theme_settings, 'yaml')); } } // Update theme in the site settings - $settings = Parser::decode(Filesystem::read(PATH['config']['site'] . '/settings.yaml'), 'yaml'); + $settings = $this->parser->decode(Filesystem::read(PATH['config']['site'] . '/settings.yaml'), 'yaml'); Arr::set($settings, 'theme', $data['theme-id']); - Filesystem::write(PATH['config']['site'] . '/settings.yaml', Parser::encode($settings, 'yaml')); + Filesystem::write(PATH['config']['site'] . '/settings.yaml', $this->parser->encode($settings, 'yaml')); // clear cache $this->cache->clear('doctrine'); diff --git a/site/plugins/admin/app/Controllers/UsersController.php b/site/plugins/admin/app/Controllers/UsersController.php index 4fd2f349..9f1e7091 100644 --- a/site/plugins/admin/app/Controllers/UsersController.php +++ b/site/plugins/admin/app/Controllers/UsersController.php @@ -67,7 +67,7 @@ class UsersController extends Controller $data = $request->getParsedBody(); if (Filesystem::has($_user_file = PATH['site'] . '/accounts/' . $data['username'] . '.yaml')) { - $user_file = Parser::decode(Filesystem::read($_user_file), 'yaml'); + $user_file = $this->parser->decode(Filesystem::read($_user_file), 'yaml', false); if (password_verify(trim($data['password']), $user_file['hashed_password'])) { Session::set('username', $user_file['username']); Session::set('role', $user_file['role']); @@ -135,7 +135,7 @@ class UsersController extends Controller // Create admin account if (Filesystem::write( PATH['site'] . '/accounts/' . $data['username'] . '.yaml', - Parser::encode([ + $this->parser->encode([ 'username' => $this->slugify->slugify($data['username']), 'hashed_password' => password_hash($data['password'], PASSWORD_BCRYPT), 'email' => $data['email'], diff --git a/site/plugins/admin/lang/en_US.yaml b/site/plugins/admin/lang/en_US.yaml index 93658cf8..19395936 100755 --- a/site/plugins/admin/lang/en_US.yaml +++ b/site/plugins/admin/lang/en_US.yaml @@ -252,3 +252,5 @@ admin_twig_charset: "Charset" admin_twig_cache: "Cache" admin_published_at: "Published at" admin_licence: "Licence" +admin_plugin: "Plugin" +admin_icon: "Icon" diff --git a/site/plugins/admin/routes/web.php b/site/plugins/admin/routes/web.php index 29e47392..dc9fe89e 100644 --- a/site/plugins/admin/routes/web.php +++ b/site/plugins/admin/routes/web.php @@ -43,6 +43,7 @@ $app->group('/' . $admin_route, function () use ($app) : void { // Plugins Controller $app->get('/plugins', 'PluginsController:index')->setName('admin.plugins.index'); + $app->get('/plugins/edit', 'PluginsController:edit')->setName('admin.plugins.edit'); $app->post('/plugins/update-status', 'PluginsController:pluginStatusProcess')->setName('admin.plugins.update-status'); // FieldsetsController diff --git a/site/plugins/admin/views/partials/base.html b/site/plugins/admin/views/partials/base.html index 17d87a5a..d8fe49ca 100644 --- a/site/plugins/admin/views/partials/base.html +++ b/site/plugins/admin/views/partials/base.html @@ -216,6 +216,13 @@ {% endif %} + {% if is_current_path('admin.plugins.index') or + is_current_path('admin.plugins.edit') %} +
+ / {{ id }} +
+ {% endif %} +
diff --git a/site/plugins/admin/views/templates/content/entries/index.html b/site/plugins/admin/views/templates/content/entries/index.html index 4ac1e7d6..d4eb5210 100644 --- a/site/plugins/admin/views/templates/content/entries/index.html +++ b/site/plugins/admin/views/templates/content/entries/index.html @@ -12,7 +12,7 @@ {% if entry.fieldset %} {% set fieldset_path = PATH_FIELDSETS ~ '/' ~ entry.fieldset ~ '.yaml' %} {% if filesystem_has(fieldset_path) %} - {% set fieldset = yaml_decode(filesystem_read(fieldset_path)) %} + {% set fieldset = parser_decode(filesystem_read(fieldset_path), 'yaml') %} {% if fieldset.icon %} {% else %} diff --git a/site/plugins/admin/views/templates/extends/fieldsets/index.html b/site/plugins/admin/views/templates/extends/fieldsets/index.html index 3843a623..dad73980 100644 --- a/site/plugins/admin/views/templates/extends/fieldsets/index.html +++ b/site/plugins/admin/views/templates/extends/fieldsets/index.html @@ -9,7 +9,7 @@ {% set fieldset_path = PATH_FIELDSETS ~ '/' ~ id ~ '.yaml' %} {% if filesystem_has(fieldset_path) %} - {% set fieldset = yaml_decode(filesystem_read(fieldset_path)) %} + {% set fieldset = parser_decode(filesystem_read(fieldset_path), 'yaml') %} {% if fieldset.icon %} {% else %} diff --git a/site/plugins/admin/views/templates/extends/plugins/edit.html b/site/plugins/admin/views/templates/extends/plugins/edit.html new file mode 100644 index 00000000..ff41de7a --- /dev/null +++ b/site/plugins/admin/views/templates/extends/plugins/edit.html @@ -0,0 +1,71 @@ +{% extends "plugins/admin/views/partials/base.html" %} + +{% block content %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{ tr('admin_name') }}:{{ plugin_manifest.name }}
{{ tr('admin_version') }}:{{ plugin_manifest.version }}
{{ tr('admin_description') }}:{{ plugin_manifest.description }}
{{ tr('admin_icon') }}:{{ plugin_manifest.icon }}
{{ tr('admin_author_name') }}:{{ plugin_manifest.author.name }}
{{ tr('admin_author_email') }}:{{ plugin_manifest.author.email }}
{{ tr('admin_author_url') }}:{{ plugin_manifest.author.url }}
{{ tr('admin_homepage') }}:{{ plugin_manifest.homepage }}
{{ tr('admin_bugs') }}:{{ plugin_manifest.bugs }}
{{ tr('admin_license') }}:{{ plugin_manifest.license }}
+ +
+
+ +

{{ tr('admin_settings') }}

+
+ +
+ {{ csrf() }} + + +
+
+
+ +
+
+
+
+ +
+
+ +{% endblock %} diff --git a/site/plugins/admin/views/templates/extends/plugins/index.html b/site/plugins/admin/views/templates/extends/plugins/index.html index 034823c6..0272f6a5 100644 --- a/site/plugins/admin/views/templates/extends/plugins/index.html +++ b/site/plugins/admin/views/templates/extends/plugins/index.html @@ -12,20 +12,7 @@ {% endif %} - {{ plugin.name }} - - {{ tr('admin_info') }} - + {{ plugin.name }}