From c6aec4e437f76c1d104459ed5316811a4c5b4626 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 14:49:21 +0300 Subject: [PATCH 01/18] Flextype Admin Panel: possibility to register two admins! #183 #182 --- .../admin/app/Controllers/UsersController.php | 88 ++++++++++++++----- 1 file changed, 67 insertions(+), 21 deletions(-) diff --git a/site/plugins/admin/app/Controllers/UsersController.php b/site/plugins/admin/app/Controllers/UsersController.php index 1e45f78d..f5bdca02 100644 --- a/site/plugins/admin/app/Controllers/UsersController.php +++ b/site/plugins/admin/app/Controllers/UsersController.php @@ -6,6 +6,8 @@ use Flextype\Component\Filesystem\Filesystem; use Flextype\Component\Session\Session; use Flextype\Component\Text\Text; use function Flextype\Component\I18n\__; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; /** * @property View $view @@ -23,7 +25,15 @@ class UsersController extends Controller ); } - public function login($request, $response) + /** + * Login page + * + * @param Request $request PSR7 request + * @param Response $response PSR7 response + * + * @return Response + */ + public function login(Request $request, Response $response) : Response { $users = $this->getUsers(); @@ -41,7 +51,15 @@ class UsersController extends Controller } } - public function loginProcess($request, $response) + /** + * Login page process + * + * @param Request $request PSR7 request + * @param Response $response PSR7 response + * + * @return Response + */ + public function loginProcess(Request $request, Response $response) : Response { $data = $request->getParsedBody(); @@ -61,22 +79,41 @@ class UsersController extends Controller } } - public function registration($request, $response) + /** + * Registration page + * + * @param Request $request PSR7 request + * @param Response $response PSR7 response + * + * @return Response + */ + public function registration(Request $request, Response $response) : Response { - if ((Session::exists('role') && Session::get('role') == 'admin')) { - return $response->withRedirect($this->router->pathFor('admin.entries.index')); + $users = $this->getUsers(); + + if ($users && count($users) > 0) { + return $response->withRedirect($this->router->pathFor('admin.users.login')); } else { - return $this->view->render( - $response, - 'plugins/admin/views/templates/users/registration.html' - ); + if ((Session::exists('role') && Session::get('role') == 'admin')) { + return $response->withRedirect($this->router->pathFor('admin.entries.index')); + } else { + return $this->view->render( + $response, + 'plugins/admin/views/templates/users/registration.html' + ); + } } } /** - * registrationProcess + * Registration page process + * + * @param Request $request PSR7 request + * @param Response $response PSR7 response + * + * @return Response */ - public function registrationProcess($request, $response) + public function registrationProcess(Request $request, Response $response) : Response { // Get POST data $data = $request->getParsedBody(); @@ -101,26 +138,35 @@ class UsersController extends Controller } /** - * logoutProcess + * Logout page process + * + * @param Request $request PSR7 request + * @param Response $response PSR7 response + * + * @return Response */ - public function logoutProcess($request, $response) + public function logoutProcess(Request $request, Response $response) : Response { Session::destroy(); return $response->withRedirect($this->router->pathFor('admin.users.login')); } - public function getUsers() + /** + * Get Users list + * + * @return array + */ + public function getUsers() : array { // Get Users Profiles - $users = Filesystem::listContents(PATH['site'] . '/accounts/'); + $users_list = Filesystem::listContents(PATH['site'] . '/accounts/'); - // Get Plugins List - $_users_list = Filesystem::listContents(PATH['plugins']); - $users_list = []; + // Users + $users = []; - foreach($_users_list as $user) { - if ($user['type'] == 'dir') { - $users_list[] = $user; + foreach($users_list as $user) { + if ($user['type'] == 'file' && $user['extension'] == 'json') { + $users[$user['basename']] = $user; } } From 606b4303ccaf81bd1bb99d6d0ddb8218ebb6d443 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 14:51:47 +0300 Subject: [PATCH 02/18] CHANGELOG UPDATES --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e429f82..fa5c8d69 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## [0.9.3] - 2019-07-07 +### Fixed +- Flextype Admin Panel: critical issue with possibility to register two admins! - fixed. #183 #182 + ## [0.9.2] - 2019-07-06 ### Added - Flextype Default Theme: pagination for blog entries added. #164 #165 From 04ee2ce0644966662dfb0ab68f8e9dcca00f4dbd Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 15:33:45 +0300 Subject: [PATCH 03/18] - Flextype Default Theme: issue with TypeError: undefined is not an object for lightbox - fixed. #182 --- site/themes/default/templates/partials/base.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/site/themes/default/templates/partials/base.html b/site/themes/default/templates/partials/base.html index 1a8d654f..cfd1964e 100644 --- a/site/themes/default/templates/partials/base.html +++ b/site/themes/default/templates/partials/base.html @@ -76,8 +76,11 @@ {{ emitter.emit('onThemeTail') }} From b14873885fb9414ff323dd9115fa5b2a04cf7fa0 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 15:34:45 +0300 Subject: [PATCH 04/18] CHANGELOG UPDATES --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa5c8d69..00538000 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## [0.9.3] - 2019-07-07 ### Fixed - Flextype Admin Panel: critical issue with possibility to register two admins! - fixed. #183 #182 +- Flextype Default Theme: issue with `TypeError: undefined is not an object` for lightbox - fixed. #182 ## [0.9.2] - 2019-07-06 ### Added From c565a12b3703cad3facccad01703c26f54bb0d03 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:14:18 +0300 Subject: [PATCH 05/18] Flextype Admin Panel: possibility to register two admins! #183 #182 --- site/plugins/admin/app/Controllers/UsersController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/plugins/admin/app/Controllers/UsersController.php b/site/plugins/admin/app/Controllers/UsersController.php index f5bdca02..622ad726 100644 --- a/site/plugins/admin/app/Controllers/UsersController.php +++ b/site/plugins/admin/app/Controllers/UsersController.php @@ -40,7 +40,7 @@ class UsersController extends Controller if ((Session::exists('role') && Session::get('role') == 'admin')) { return $response->withRedirect($this->router->pathFor('admin.entries.index')); } else { - if ($users && count($users) > 0) { + if (count($users) > 0) { return $this->container->get('view')->render( $response, 'plugins/admin/views/templates/users/login.html' @@ -91,7 +91,7 @@ class UsersController extends Controller { $users = $this->getUsers(); - if ($users && count($users) > 0) { + if (count($users) > 0) { return $response->withRedirect($this->router->pathFor('admin.users.login')); } else { if ((Session::exists('role') && Session::get('role') == 'admin')) { From cde91dd3a2f85f3e56f52be999244547caa2eae5 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:20:53 +0300 Subject: [PATCH 06/18] Flextype Core: Entries - issue with binding arguments inside method fetchAll() - fixed. #182 --- flextype/core/Entries.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/flextype/core/Entries.php b/flextype/core/Entries.php index 8451c077..46d9256b 100755 --- a/flextype/core/Entries.php +++ b/flextype/core/Entries.php @@ -178,6 +178,7 @@ class Entries // Bind: where if (isset($args['where']['key']) && isset($args['where']['expr']) && isset($args['where']['value'])) { + $bind_where = []; $bind_where['where']['key'] = $args['where']['key']; $bind_where['where']['expr'] = $expression[$args['where']['expr']]; $bind_where['where']['value'] = $args['where']['value']; @@ -187,6 +188,7 @@ class Entries // Bind: and where if (isset($args['and_where']['key']) && isset($args['and_where']['expr']) && isset($args['and_where']['value'])) { + $bind_and_where = []; $bind_and_where['and_where']['key'] = $args['and_where']['key']; $bind_and_where['and_where']['expr'] = $expression[$args['and_where']['expr']]; $bind_and_where['and_where']['value'] = $args['and_where']['value']; @@ -196,6 +198,7 @@ class Entries // Bind: or where if (isset($args['or_where']['key']) && isset($args['or_where']['expr']) && isset($args['or_where']['value'])) { + $bind_or_where = []; $bind_or_where['or_where']['key'] = $args['or_where']['key']; $bind_or_where['or_where']['expr'] = $expression[$args['or_where']['expr']]; $bind_or_where['or_where']['value'] = $args['or_where']['value']; @@ -205,6 +208,7 @@ class Entries // Bind: order by if (isset($args['order_by']['field']) && isset($args['order_by']['direction'])) { + $bind_order_by = []; $bind_order_by['order_by']['field'] = $args['order_by']['field']; $bind_order_by['order_by']['direction'] = $args['order_by']['direction']; } else { From 8d3886984fc5d3eb455bf4572ae41f10761e6fe9 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:23:30 +0300 Subject: [PATCH 07/18] CHANGELOG UPDATES --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00538000..8a2bae59 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Fixed - Flextype Admin Panel: critical issue with possibility to register two admins! - fixed. #183 #182 - Flextype Default Theme: issue with `TypeError: undefined is not an object` for lightbox - fixed. #182 +- Flextype Core: Entries - issue with binding arguments inside method fetchAll() - fixed. #182 ## [0.9.2] - 2019-07-06 ### Added From 32a0b57bc224f68f3ff8613a96338d441decc987 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:32:33 +0300 Subject: [PATCH 08/18] Flextype Core: Entries - issue with possible boolean false result from Filesystem::getTimestamp() inside method fetchAll() - fixed. #182 --- flextype/core/Entries.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flextype/core/Entries.php b/flextype/core/Entries.php index 46d9256b..71975571 100755 --- a/flextype/core/Entries.php +++ b/flextype/core/Entries.php @@ -230,7 +230,11 @@ class Entries // ignore ... } else { if ($current_entry['type'] == 'dir' && Filesystem::has($current_entry['path'] . '/entry.json')) { - $_entries_ids .= 'entry:' . ltrim(rtrim(str_replace(PATH['entries'], '', $current_entry['path']), '/'), '/') . ' timestamp:' . Filesystem::getTimestamp($current_entry['path'] . '/entry.json') . ' '; + if ($timestamp = Filesystem::getTimestamp($current_entry['path'] . '/entry.json')) { + $_entries_ids .= 'entry:' . ltrim(rtrim(str_replace(PATH['entries'], '', $current_entry['path']), '/'), '/') . ' timestamp:' . $timestamp; + } else { + $_entries_ids .= 'entry:' . ltrim(rtrim(str_replace(PATH['entries'], '', $current_entry['path']), '/'), '/'); + } } } } From a819bdae3c225d15f57812562b0b1ac4aa0ffe7c Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:38:38 +0300 Subject: [PATCH 09/18] CHANGELOG UPDATES --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a2bae59..c6eb8579 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - Flextype Admin Panel: critical issue with possibility to register two admins! - fixed. #183 #182 - Flextype Default Theme: issue with `TypeError: undefined is not an object` for lightbox - fixed. #182 - Flextype Core: Entries - issue with binding arguments inside method fetchAll() - fixed. #182 +- Flextype Core: Entries - issue with possible boolean false result from Filesystem::getTimestamp() inside method fetchAll() - fixed. #182 ## [0.9.2] - 2019-07-06 ### Added From 0ec370ec333050dfd174cb5421a173edf25d6534 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:41:07 +0300 Subject: [PATCH 10/18] Flextype Core: Entries - issue with possible boolean false result from Filesystem::getTimestamp() inside method fetch() - fixed. #182 --- flextype/core/Entries.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flextype/core/Entries.php b/flextype/core/Entries.php index 71975571..295a4c6d 100755 --- a/flextype/core/Entries.php +++ b/flextype/core/Entries.php @@ -70,7 +70,11 @@ class Entries // Create unique entry cache_id // Entry Cache ID = entry + entry file + entry file time stamp - $entry_cache_id = md5('entry' . $entry_file . Filesystem::getTimestamp($entry_file)); + if ($timestamp = Filesystem::getTimestamp($entry_file)) { + $entry_cache_id = md5('entry' . $entry_file . $timestamp); + } else { + $entry_cache_id = md5('entry' . $entry_file); + } // Try to get the requested entry from cache if ($this->flextype['cache']->contains($entry_cache_id)) { From 5956245eb74795e52ec2c885b8117fd60dae6d38 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:41:51 +0300 Subject: [PATCH 11/18] CHANGELOG UPDATES --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6eb8579..728ac62a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,10 @@ ## [0.9.3] - 2019-07-07 ### Fixed -- Flextype Admin Panel: critical issue with possibility to register two admins! - fixed. #183 #182 -- Flextype Default Theme: issue with `TypeError: undefined is not an object` for lightbox - fixed. #182 - Flextype Core: Entries - issue with binding arguments inside method fetchAll() - fixed. #182 - Flextype Core: Entries - issue with possible boolean false result from Filesystem::getTimestamp() inside method fetchAll() - fixed. #182 +- Flextype Core: Entries - issue with possible boolean false result from Filesystem::getTimestamp() inside method fetch() - fixed. #182 +- Flextype Admin Panel: critical issue with possibility to register two admins! - fixed. #183 #182 +- Flextype Default Theme: issue with `TypeError: undefined is not an object` for lightbox - fixed. #182 ## [0.9.2] - 2019-07-06 ### Added From 017aa3443ec11ef97872093570ba605390098174 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:55:49 +0300 Subject: [PATCH 12/18] Flextype Core: fix thumbnail image for Default Theme #182 --- site/themes/default/thumbnail.jpg | Bin 20149 -> 18741 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/site/themes/default/thumbnail.jpg b/site/themes/default/thumbnail.jpg index 85e41bac0964296b9478548fd26d6a72f42ccf0a..4e7020d159f7e2162cd94d016c7b8f37c83c41bd 100644 GIT binary patch literal 18741 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 SKd*-{ From 4961f50e6515384b91d753d3e9165d147572265e Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 16:56:18 +0300 Subject: [PATCH 13/18] CHANGELOG UPDATES --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 728ac62a..f0faba18 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Flextype Core: Entries - issue with possible boolean false result from Filesystem::getTimestamp() inside method fetch() - fixed. #182 - Flextype Admin Panel: critical issue with possibility to register two admins! - fixed. #183 #182 - Flextype Default Theme: issue with `TypeError: undefined is not an object` for lightbox - fixed. #182 +- Flextype Default Theme: fix thumbnail image for Default Theme #182 ## [0.9.2] - 2019-07-06 ### Added From 977e3e3a8cdd1a949fdba1a6c5082209aa8cb67c Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 17:35:00 +0300 Subject: [PATCH 14/18] README UPDATES --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e0974afd..3a6d1981 100755 --- a/README.md +++ b/README.md @@ -128,6 +128,7 @@ Flextype is open source, community driven project, and maintained by community! * [Github Repository](https://github.com/flextype/flextype) * [Discord](https://discord.gg/CCKPKVG) +* [Forum](http://forum.flextype.org) * [Vkontakte](https://vk.com/flextype) * [Twitter](https://twitter.com/getflextype) From ce6e209ae9963f7ea15ba8b4fd77a441d0194bb7 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 17:43:09 +0300 Subject: [PATCH 15/18] - Flextype Admin Panel: Left Navigation - active state for Templates area - fixed. #182 --- site/plugins/admin/app/Controllers/TemplatesController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/plugins/admin/app/Controllers/TemplatesController.php b/site/plugins/admin/app/Controllers/TemplatesController.php index 84821657..de4484d3 100644 --- a/site/plugins/admin/app/Controllers/TemplatesController.php +++ b/site/plugins/admin/app/Controllers/TemplatesController.php @@ -79,7 +79,7 @@ class TemplatesController extends Controller $response, 'plugins/admin/views/templates/extends/themes/templates/add.html', [ - 'menu_item' => 'templates', + 'menu_item' => 'themes', 'theme' => $theme, 'links' => [ 'themes' => [ @@ -153,7 +153,7 @@ class TemplatesController extends Controller $response, 'plugins/admin/views/templates/extends/themes/templates/edit.html', [ - 'menu_item' => 'templates', + 'menu_item' => 'themes', 'theme' => $theme, 'id' => $request->getQueryParams()['id'], 'data' => Filesystem::read(PATH['themes'] . '/' . $theme . '/' . $this->_type_location($type) . $request->getQueryParams()['id'] . '.html'), @@ -227,7 +227,7 @@ class TemplatesController extends Controller $response, 'plugins/admin/views/templates/extends/themes/templates/rename.html', [ - 'menu_item' => 'templates', + 'menu_item' => 'themes', 'theme' => $theme, 'types' => ['partial' => __('admin_partial'), 'template' => __('admin_template')], 'id_current' => $request->getQueryParams()['id'], From e4424093e1df97b0fdeb241156846c196989da38 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 17:43:40 +0300 Subject: [PATCH 16/18] CHANGELOG UPDATES --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0faba18..91dafebf 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,11 @@ - Flextype Core: Entries - issue with possible boolean false result from Filesystem::getTimestamp() inside method fetchAll() - fixed. #182 - Flextype Core: Entries - issue with possible boolean false result from Filesystem::getTimestamp() inside method fetch() - fixed. #182 - Flextype Admin Panel: critical issue with possibility to register two admins! - fixed. #183 #182 +- Flextype Admin Panel: Left Navigation - active state for Templates area - fixed. #182 - Flextype Default Theme: issue with `TypeError: undefined is not an object` for lightbox - fixed. #182 - Flextype Default Theme: fix thumbnail image for Default Theme #182 + ## [0.9.2] - 2019-07-06 ### Added - Flextype Default Theme: pagination for blog entries added. #164 #165 From ca23097154eea020acbc8b0fdf0e7bdc373d8b96 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 6 Jul 2019 19:59:52 +0300 Subject: [PATCH 17/18] - Flextype Admin Panel: general code cleanup and refactoring #182 --- .../admin/app/Middleware/AuthMiddleware.php | 27 ++++++++++++++++++- .../twig/GlobalVarsAdminTwigExtension.php | 3 +++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/site/plugins/admin/app/Middleware/AuthMiddleware.php b/site/plugins/admin/app/Middleware/AuthMiddleware.php index 4af8657f..9094ec0e 100644 --- a/site/plugins/admin/app/Middleware/AuthMiddleware.php +++ b/site/plugins/admin/app/Middleware/AuthMiddleware.php @@ -1,12 +1,37 @@ + * @link http://romanenko.digital + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Flextype; use Flextype\Component\Session\Session; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; +/** + * @property Router $router + */ class AuthMiddleware extends Middleware { - public function __invoke($request, $response, $next) + + /** + * __invoke + * + * @param Request $request PSR7 request + * @param Response $response PSR7 response + * @param callable $next Next middleware + * + * @return Response + */ + public function __invoke(Request $request, Response $response, $next) : Response { if (Session::exists('role') && Session::get('role') == 'admin') { $response = $next($request, $response); diff --git a/site/plugins/admin/twig/GlobalVarsAdminTwigExtension.php b/site/plugins/admin/twig/GlobalVarsAdminTwigExtension.php index 1b84ff73..47ffddb4 100644 --- a/site/plugins/admin/twig/GlobalVarsAdminTwigExtension.php +++ b/site/plugins/admin/twig/GlobalVarsAdminTwigExtension.php @@ -29,6 +29,9 @@ class GlobalVarsAdminTwigExtension extends \Twig_Extension implements \Twig_Exte $this->flextype = $flextype; } + /** + * Register Global variables in an extension + */ public function getGlobals() { return [ From f20c8d0003e023d830603d23b14b914c3bdcf9c5 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sun, 7 Jul 2019 09:33:21 +0300 Subject: [PATCH 18/18] Flextype 0.9.3 --- flextype/bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flextype/bootstrap.php b/flextype/bootstrap.php index 557a8a8a..a898b11f 100755 --- a/flextype/bootstrap.php +++ b/flextype/bootstrap.php @@ -21,7 +21,7 @@ use Flextype\Component\Filesystem\Filesystem; * * @var string */ -define('FLEXTYPE_VERSION', '0.9.2'); +define('FLEXTYPE_VERSION', '0.9.3'); /** * Start the session