From ea43c3900b97c79e02a7f7a134f6709e7ea6ef86 Mon Sep 17 00:00:00 2001 From: Sergey Tolkachyov Date: Tue, 20 Aug 2024 13:47:23 +0400 Subject: [PATCH] v.2.0.0 --- .../admin/language/en-GB/com_swjprojects.ini | 2 +- .../language/en-GB/com_swjprojects.sys.ini | 2 +- .../admin/language/ru-RU/com_swjprojects.ini | 2 +- .../language/ru-RU/com_swjprojects.sys.ini | 2 +- .../admin/sql/install.mysql.utf8.sql | 2 +- .../admin/sql/uninstall.mysql.utf8.sql | 2 +- .../admin/sql/updates/mysql/1.1.0.sql | 2 +- .../admin/sql/updates/mysql/1.3.0.sql | 2 +- .../admin/sql/updates/mysql/1.5.0.sql | 2 +- .../admin/sql/updates/mysql/1.5.1.sql | 2 +- .../admin/sql/updates/mysql/1.5.5.sql | 2 +- .../admin/sql/updates/mysql/1.5.7.sql | 2 +- .../admin/sql/updates/mysql/1.6.0.sql | 2 +- .../admin/sql/updates/mysql/1.8.0.sql | 2 +- .../admin/sql/updates/mysql/1.9.0.sql | 2 +- .../src/Controller/CategoriesController.php | 2 +- .../src/Controller/CategoryController.php | 2 +- .../src/Controller/DisplayController.php | 2 +- .../src/Controller/DocumentController.php | 2 +- .../Controller/DocumentationController.php | 2 +- .../admin/src/Controller/ImagesController.php | 2 +- .../admin/src/Controller/KeyController.php | 2 +- .../admin/src/Controller/KeysController.php | 2 +- .../src/Controller/ProjectController.php | 2 +- .../src/Controller/ProjectsController.php | 2 +- .../src/Controller/VersionController.php | 2 +- .../src/Controller/VersionsController.php | 2 +- .../admin/src/Field/CategoriesField.php | 2 +- .../admin/src/Field/DocumentationField.php | 2 +- .../admin/src/Field/ImageField.php | 2 +- .../admin/src/Field/ImagesField.php | 2 +- .../admin/src/Field/JversionField.php | 2 +- com_swjprojects/admin/src/Field/KeyField.php | 2 +- .../src/Field/ProjectchangelogurlField.php | 2 +- .../admin/src/Field/ProjectsField.php | 2 +- .../src/Field/ProjectupdateserverurlField.php | 2 +- .../admin/src/Field/VersionsField.php | 2 +- .../admin/src/Helper/ImagesHelper.php | 2 +- .../admin/src/Helper/KeysHelper.php | 2 +- ...ojectsHelper.php => SWJProjectsHelper.php} | 2 +- .../admin/src/Helper/TranslationHelper.php | 2 +- .../admin/src/Model/CategoriesModel.php | 6 +- .../admin/src/Model/CategoryModel.php | 2 +- .../admin/src/Model/DocumentModel.php | 2 +- .../admin/src/Model/DocumentationModel.php | 2 +- com_swjprojects/admin/src/Model/KeyModel.php | 2 +- com_swjprojects/admin/src/Model/KeysModel.php | 2 +- .../admin/src/Model/ProjectModel.php | 2 +- .../admin/src/Model/ProjectsModel.php | 2 +- .../admin/src/Model/VersionModel.php | 2 +- .../admin/src/Model/VersionsModel.php | 2 +- .../admin/src/Table/CategoriesTable.php | 2 +- .../admin/src/Table/DocumentationTable.php | 2 +- com_swjprojects/admin/src/Table/KeysTable.php | 2 +- .../admin/src/Table/ProjectsTable.php | 2 +- .../admin/src/Table/VersionsTable.php | 2 +- .../admin/src/View/Categories/HtmlView.php | 2 +- .../admin/src/View/Category/HtmlView.php | 2 +- .../admin/src/View/Document/HtmlView.php | 2 +- .../admin/src/View/Documentation/HtmlView.php | 2 +- .../admin/src/View/Key/HtmlView.php | 2 +- .../admin/src/View/Keys/HtmlView.php | 2 +- .../admin/src/View/Project/HtmlView.php | 2 +- .../admin/src/View/Projects/HtmlView.php | 2 +- .../admin/src/View/Version/HtmlView.php | 2 +- .../admin/src/View/Versions/HtmlView.php | 2 +- .../admin/tmpl/categories/default.php | 2 +- com_swjprojects/admin/tmpl/category/edit.php | 2 +- com_swjprojects/admin/tmpl/document/edit.php | 2 +- .../admin/tmpl/documentation/default.php | 2 +- com_swjprojects/admin/tmpl/key/edit.php | 2 +- com_swjprojects/admin/tmpl/keys/default.php | 2 +- com_swjprojects/admin/tmpl/project/edit.php | 2 +- .../admin/tmpl/projects/default.php | 2 +- com_swjprojects/admin/tmpl/version/edit.php | 2 +- .../admin/tmpl/versions/default.php | 2 +- com_swjprojects/layouts/changelog/badge.php | 2 +- com_swjprojects/layouts/field/image.php | 2 +- com_swjprojects/layouts/field/images.php | 2 +- .../layouts/field/images/result.php | 2 +- com_swjprojects/layouts/field/key.php | 2 +- com_swjprojects/layouts/project/icons.php | 2 +- com_swjprojects/layouts/project/icons/ctr.php | 2 +- .../layouts/project/icons/downloads.php | 2 +- .../layouts/project/icons/downloadtype.php | 2 +- .../layouts/project/icons/hits.php | 2 +- .../layouts/project/icons/type.php | 2 +- com_swjprojects/layouts/project/urls.php | 2 +- .../layouts/project/urls/documentation.php | 2 +- .../layouts/project/urls/downloadorbuy.php | 2 +- .../layouts/project/urls/projectlink.php | 2 +- .../layouts/project/urls/versions.php | 2 +- com_swjprojects/layouts/toolbar/link.php | 2 +- com_swjprojects/layouts/translate/field.php | 2 +- .../layouts/translate/fieldset.php | 2 +- com_swjprojects/layouts/translate/input.php | 2 +- .../layouts/translate/switcher.php | 2 +- com_swjprojects/layouts/translate/text.php | 2 +- com_swjprojects/media/css/admin-j3.css | 2 +- com_swjprojects/media/css/admin-j4.css | 2 +- com_swjprojects/media/css/dragula.css | 2 +- com_swjprojects/media/css/field-image.css | 2 +- com_swjprojects/media/css/field-images.css | 2 +- com_swjprojects/media/css/site.css | 2 +- .../media/css/translate-switcher.css | 2 +- com_swjprojects/media/images/no-image.svg | 2 +- com_swjprojects/media/js/dragula.js | 2 +- com_swjprojects/media/js/field-image.js | 2 +- com_swjprojects/media/js/field-images.js | 2 +- com_swjprojects/media/js/field-key.js | 2 +- com_swjprojects/media/js/popup.js | 2 +- .../media/js/translate-switcher.js | 2 +- com_swjprojects/script.php | 877 ++++++++---------- .../site/language/en-GB/com_swjprojects.ini | 2 +- .../language/en-GB/com_swjprojects.sys.ini | 2 +- .../site/language/ru-RU/com_swjprojects.ini | 2 +- .../language/ru-RU/com_swjprojects.sys.ini | 2 +- .../site/src/Controller/DisplayController.php | 2 +- .../site/src/Helper/AssociationHelper.php | 2 +- .../site/src/Helper/ImagesHelper.php | 2 +- .../site/src/Helper/KeysHelper.php | 2 +- .../site/src/Helper/RouteHelper.php | 2 +- .../site/src/Model/DocumentModel.php | 2 +- .../site/src/Model/DocumentationModel.php | 2 +- .../site/src/Model/DownloadModel.php | 2 +- .../site/src/Model/JchangelogModel.php | 2 +- .../site/src/Model/JupdateModel.php | 2 +- .../site/src/Model/ProjectModel.php | 2 +- .../site/src/Model/ProjectsModel.php | 2 +- .../site/src/Model/VersionModel.php | 2 +- .../site/src/Model/VersionsModel.php | 2 +- com_swjprojects/site/src/Service/Router.php | 2 +- .../site/src/View/Document/HtmlView.php | 34 +- .../site/src/View/Documentation/HtmlView.php | 2 +- .../site/src/View/Download/HtmlView.php | 2 +- .../site/src/View/Jchangelog/HtmlView.php | 2 +- .../site/src/View/Jupdate/HtmlView.php | 2 +- .../site/src/View/Project/HtmlView.php | 56 +- .../site/src/View/Projects/HtmlView.php | 2 +- .../site/src/View/Version/HtmlView.php | 2 +- .../site/src/View/Versions/HtmlView.php | 2 +- .../site/tmpl/document/default.php | 95 +- .../site/tmpl/documentation/default.php | 2 +- .../site/tmpl/project/bootstrap5.xml | 24 + com_swjprojects/site/tmpl/project/default.php | 2 +- .../site/tmpl/project/default123.php | 15 + .../site/tmpl/project/default_j3.php | 261 ++++++ .../site/tmpl/project/default_j4.php | 269 ++++++ .../site/tmpl/projects/bootstrap5.xml | 40 + .../site/tmpl/projects/default.php | 2 +- .../site/tmpl/projects/default123.php | 15 + .../site/tmpl/projects/default_j3.php | 130 +++ .../site/tmpl/projects/default_j4.php | 137 +++ com_swjprojects/site/tmpl/version/default.php | 2 +- .../site/tmpl/versions/default.php | 2 +- com_swjprojects/swjprojects.xml | 6 +- language/en-GB/en-GB.pkg_swjprojects.sys.ini | 14 - language/en-GB/pkg_swjprojects.sys.ini | 20 + language/ru-RU/pkg_swjprojects.sys.ini | 20 + language/ru-RU/ru-RU.pkg_swjprojects.sys.ini | 14 - ...ies.ini => mod_swjprojects_categories.ini} | 2 +- ...ini => mod_swjprojects_categories.sys.ini} | 2 +- ...ies.ini => mod_swjprojects_categories.ini} | 2 +- ...ini => mod_swjprojects_categories.sys.ini} | 2 +- .../mod_swjprojects_categories.php | 50 - .../mod_swjprojects_categories.xml | 20 +- .../services/provider.php | 41 + .../src/Dispatcher/Dispatcher.php | 41 + .../Helper/SwjprojectscategoriesHelper.php | 67 ++ mod_swjprojects_categories/tmpl/default.php | 5 +- .../tmpl/list-group.php | 31 + ...jects.ini => mod_swjprojects_projects.ini} | 2 +- ...s.ini => mod_swjprojects_projects.sys.ini} | 2 +- ...jects.ini => mod_swjprojects_projects.ini} | 2 +- ...s.ini => mod_swjprojects_projects.sys.ini} | 2 +- .../mod_swjprojects_projects.php | 52 -- .../mod_swjprojects_projects.xml | 20 +- .../services/provider.php | 41 + .../src/Dispatcher/Dispatcher.php | 45 + .../src/Helper/SwjprojectsprojectsHelper.php | 57 ++ mod_swjprojects_projects/tmpl/default.php | 8 +- .../tmpl/swiper-carousel.php | 212 +++++ ...sions.ini => mod_swjprojects_versions.ini} | 2 +- ...s.ini => mod_swjprojects_versions.sys.ini} | 2 +- ...sions.ini => mod_swjprojects_versions.ini} | 2 +- ...s.ini => mod_swjprojects_versions.sys.ini} | 2 +- .../mod_swjprojects_versions.php | 39 - .../mod_swjprojects_versions.xml | 20 +- .../services/provider.php | 41 + .../src/Dispatcher/Dispatcher.php | 45 + .../src/Helper/SwjprojectsversionsHelper.php | 68 ++ mod_swjprojects_versions/tmpl/default.php | 2 +- .../tmpl/swiper-carousel.php | 158 ++++ pkg_swjprojects.xml | 23 +- .../en-GB/plg_content_swjprojects.sys.ini | 2 + .../ru-RU/plg_content_swjprojects.sys.ini | 2 + plg_content_swjprojects/script.php | 215 +++++ plg_content_swjprojects/services/provider.php | 50 + .../src/Extension/Swjprojects.php | 238 +++++ .../src/Fields/PlugininfoField.php | 106 +++ plg_content_swjprojects/swjprojects.xml | 35 + .../tmpl/bootstrap-card-horizontal.php | 58 ++ .../tmpl/bootstrap-card.php | 40 + plg_content_swjprojects/tmpl/default.php | 30 + plg_content_swjprojects/tmpl/link.php | 25 + ...g_editors-xtd_swjprojectseditorxtd.sys.ini | 2 + ...g_editors-xtd_swjprojectseditorxtd.sys.ini | 2 + .../media/js/swjprojectseditorxtd.js | 52 ++ .../script.php | 215 +++++ .../services/provider.php | 44 + .../src/Extension/Swjprojectseditorxtd.php | 265 ++++++ .../src/Fields/PlugininfoField.php | 108 +++ .../swjprojectseditorxtd.xml | 35 + script.php | 447 ++++++--- 214 files changed, 4298 insertions(+), 1100 deletions(-) rename com_swjprojects/admin/src/Helper/{SwjprojectsHelper.php => SWJProjectsHelper.php} (98%) create mode 100644 com_swjprojects/site/tmpl/project/bootstrap5.xml create mode 100644 com_swjprojects/site/tmpl/project/default123.php create mode 100644 com_swjprojects/site/tmpl/project/default_j3.php create mode 100644 com_swjprojects/site/tmpl/project/default_j4.php create mode 100644 com_swjprojects/site/tmpl/projects/bootstrap5.xml create mode 100644 com_swjprojects/site/tmpl/projects/default123.php create mode 100644 com_swjprojects/site/tmpl/projects/default_j3.php create mode 100644 com_swjprojects/site/tmpl/projects/default_j4.php delete mode 100644 language/en-GB/en-GB.pkg_swjprojects.sys.ini create mode 100644 language/en-GB/pkg_swjprojects.sys.ini create mode 100644 language/ru-RU/pkg_swjprojects.sys.ini delete mode 100644 language/ru-RU/ru-RU.pkg_swjprojects.sys.ini rename mod_swjprojects_categories/language/en-GB/{en-GB.mod_swjprojects_categories.ini => mod_swjprojects_categories.ini} (96%) rename mod_swjprojects_categories/language/en-GB/{en-GB.mod_swjprojects_categories.sys.ini => mod_swjprojects_categories.sys.ini} (94%) rename mod_swjprojects_categories/language/ru-RU/{ru-RU.mod_swjprojects_categories.ini => mod_swjprojects_categories.ini} (97%) rename mod_swjprojects_categories/language/ru-RU/{ru-RU.mod_swjprojects_categories.sys.ini => mod_swjprojects_categories.sys.ini} (94%) delete mode 100644 mod_swjprojects_categories/mod_swjprojects_categories.php create mode 100644 mod_swjprojects_categories/services/provider.php create mode 100644 mod_swjprojects_categories/src/Dispatcher/Dispatcher.php create mode 100644 mod_swjprojects_categories/src/Helper/SwjprojectscategoriesHelper.php create mode 100644 mod_swjprojects_categories/tmpl/list-group.php rename mod_swjprojects_projects/language/en-GB/{en-GB.mod_swjprojects_projects.ini => mod_swjprojects_projects.ini} (97%) rename mod_swjprojects_projects/language/en-GB/{en-GB.mod_swjprojects_projects.sys.ini => mod_swjprojects_projects.sys.ini} (94%) rename mod_swjprojects_projects/language/ru-RU/{ru-RU.mod_swjprojects_projects.ini => mod_swjprojects_projects.ini} (97%) rename mod_swjprojects_projects/language/ru-RU/{ru-RU.mod_swjprojects_projects.sys.ini => mod_swjprojects_projects.sys.ini} (94%) delete mode 100644 mod_swjprojects_projects/mod_swjprojects_projects.php create mode 100644 mod_swjprojects_projects/services/provider.php create mode 100644 mod_swjprojects_projects/src/Dispatcher/Dispatcher.php create mode 100644 mod_swjprojects_projects/src/Helper/SwjprojectsprojectsHelper.php create mode 100644 mod_swjprojects_projects/tmpl/swiper-carousel.php rename mod_swjprojects_versions/language/en-GB/{en-GB.mod_swjprojects_versions.ini => mod_swjprojects_versions.ini} (95%) rename mod_swjprojects_versions/language/en-GB/{en-GB.mod_swjprojects_versions.sys.ini => mod_swjprojects_versions.sys.ini} (94%) rename mod_swjprojects_versions/language/ru-RU/{ru-RU.mod_swjprojects_versions.ini => mod_swjprojects_versions.ini} (95%) rename mod_swjprojects_versions/language/ru-RU/{ru-RU.mod_swjprojects_versions.sys.ini => mod_swjprojects_versions.sys.ini} (94%) delete mode 100644 mod_swjprojects_versions/mod_swjprojects_versions.php create mode 100644 mod_swjprojects_versions/services/provider.php create mode 100644 mod_swjprojects_versions/src/Dispatcher/Dispatcher.php create mode 100644 mod_swjprojects_versions/src/Helper/SwjprojectsversionsHelper.php create mode 100644 mod_swjprojects_versions/tmpl/swiper-carousel.php create mode 100644 plg_content_swjprojects/language/en-GB/plg_content_swjprojects.sys.ini create mode 100644 plg_content_swjprojects/language/ru-RU/plg_content_swjprojects.sys.ini create mode 100644 plg_content_swjprojects/script.php create mode 100644 plg_content_swjprojects/services/provider.php create mode 100644 plg_content_swjprojects/src/Extension/Swjprojects.php create mode 100644 plg_content_swjprojects/src/Fields/PlugininfoField.php create mode 100644 plg_content_swjprojects/swjprojects.xml create mode 100644 plg_content_swjprojects/tmpl/bootstrap-card-horizontal.php create mode 100644 plg_content_swjprojects/tmpl/bootstrap-card.php create mode 100644 plg_content_swjprojects/tmpl/default.php create mode 100644 plg_content_swjprojects/tmpl/link.php create mode 100644 plg_editors-xtd_swjprojectseditorxtd/language/en-GB/plg_editors-xtd_swjprojectseditorxtd.sys.ini create mode 100644 plg_editors-xtd_swjprojectseditorxtd/language/ru-RU/plg_editors-xtd_swjprojectseditorxtd.sys.ini create mode 100644 plg_editors-xtd_swjprojectseditorxtd/media/js/swjprojectseditorxtd.js create mode 100644 plg_editors-xtd_swjprojectseditorxtd/script.php create mode 100644 plg_editors-xtd_swjprojectseditorxtd/services/provider.php create mode 100644 plg_editors-xtd_swjprojectseditorxtd/src/Extension/Swjprojectseditorxtd.php create mode 100644 plg_editors-xtd_swjprojectseditorxtd/src/Fields/PlugininfoField.php create mode 100644 plg_editors-xtd_swjprojectseditorxtd/swjprojectseditorxtd.xml diff --git a/com_swjprojects/admin/language/en-GB/com_swjprojects.ini b/com_swjprojects/admin/language/en-GB/com_swjprojects.ini index b11e53e1..bff1d31f 100644 --- a/com_swjprojects/admin/language/en-GB/com_swjprojects.ini +++ b/com_swjprojects/admin/language/en-GB/com_swjprojects.ini @@ -1,5 +1,5 @@ ; @package SW JProjects -; @version 2.0.0-alpha3 +; @version 2.0.0 ; @author Sergey Tolkachyov ; @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. ; @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/language/en-GB/com_swjprojects.sys.ini b/com_swjprojects/admin/language/en-GB/com_swjprojects.sys.ini index 58cb1681..73b227cc 100644 --- a/com_swjprojects/admin/language/en-GB/com_swjprojects.sys.ini +++ b/com_swjprojects/admin/language/en-GB/com_swjprojects.sys.ini @@ -1,5 +1,5 @@ ; @package SW JProjects -; @version 2.0.0-alpha3 +; @version 2.0.0 ; @author Sergey Tolkachyov ; @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. ; @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/language/ru-RU/com_swjprojects.ini b/com_swjprojects/admin/language/ru-RU/com_swjprojects.ini index 30cc340d..32d9dd87 100644 --- a/com_swjprojects/admin/language/ru-RU/com_swjprojects.ini +++ b/com_swjprojects/admin/language/ru-RU/com_swjprojects.ini @@ -1,5 +1,5 @@ ; @package SW JProjects -; @version 2.0.0-alpha3 +; @version 2.0.0 ; @author Sergey Tolkachyov ; @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. ; @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/language/ru-RU/com_swjprojects.sys.ini b/com_swjprojects/admin/language/ru-RU/com_swjprojects.sys.ini index 76e9e20c..f18bd2e2 100644 --- a/com_swjprojects/admin/language/ru-RU/com_swjprojects.sys.ini +++ b/com_swjprojects/admin/language/ru-RU/com_swjprojects.sys.ini @@ -1,5 +1,5 @@ ; @package SW JProjects -; @version 2.0.0-alpha3 +; @version 2.0.0 ; @author Sergey Tolkachyov ; @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. ; @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/install.mysql.utf8.sql b/com_swjprojects/admin/sql/install.mysql.utf8.sql index f58d113f..28173a3c 100644 --- a/com_swjprojects/admin/sql/install.mysql.utf8.sql +++ b/com_swjprojects/admin/sql/install.mysql.utf8.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/uninstall.mysql.utf8.sql b/com_swjprojects/admin/sql/uninstall.mysql.utf8.sql index 3f5e42a6..a2f0286a 100644 --- a/com_swjprojects/admin/sql/uninstall.mysql.utf8.sql +++ b/com_swjprojects/admin/sql/uninstall.mysql.utf8.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.1.0.sql b/com_swjprojects/admin/sql/updates/mysql/1.1.0.sql index b7cea0e6..0a14358d 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.1.0.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.1.0.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.3.0.sql b/com_swjprojects/admin/sql/updates/mysql/1.3.0.sql index 65829873..13609768 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.3.0.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.3.0.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.5.0.sql b/com_swjprojects/admin/sql/updates/mysql/1.5.0.sql index 2d1ee59a..e9d7ff69 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.5.0.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.5.0.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.5.1.sql b/com_swjprojects/admin/sql/updates/mysql/1.5.1.sql index 66df2567..74d130b5 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.5.1.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.5.1.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.5.5.sql b/com_swjprojects/admin/sql/updates/mysql/1.5.5.sql index 5422d46b..5c515a1a 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.5.5.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.5.5.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.5.7.sql b/com_swjprojects/admin/sql/updates/mysql/1.5.7.sql index d0b68b42..0ab3c5ea 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.5.7.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.5.7.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.6.0.sql b/com_swjprojects/admin/sql/updates/mysql/1.6.0.sql index 74b321d6..6835de30 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.6.0.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.6.0.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.8.0.sql b/com_swjprojects/admin/sql/updates/mysql/1.8.0.sql index 31183c35..d56c47fa 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.8.0.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.8.0.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/sql/updates/mysql/1.9.0.sql b/com_swjprojects/admin/sql/updates/mysql/1.9.0.sql index 162a4baa..d2dcd83b 100644 --- a/com_swjprojects/admin/sql/updates/mysql/1.9.0.sql +++ b/com_swjprojects/admin/sql/updates/mysql/1.9.0.sql @@ -1,6 +1,6 @@ /* * @package SW JProjects - * @version 2.0.0-alpha3 + * @version 2.0.0 * @author Sergey Tolkachyov * @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. * @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/com_swjprojects/admin/src/Controller/CategoriesController.php b/com_swjprojects/admin/src/Controller/CategoriesController.php index 125cc3b5..e43bc7e0 100644 --- a/com_swjprojects/admin/src/Controller/CategoriesController.php +++ b/com_swjprojects/admin/src/Controller/CategoriesController.php @@ -1,7 +1,7 @@ where($db->quoteName('c.alias') . '!=' . $db->quote('root')); // Join over translates - $translate = TranslationHelper::getDefault(); + $translate = TranslationHelper::getCurrent(); $query->select(array('t_c.title as title')) ->leftJoin($db->quoteName('#__swjprojects_translate_categories', 't_c') . ' ON t_c.id = c.id AND ' . $db->quoteName('t_c.language') . ' = ' . $db->quote($translate)); diff --git a/com_swjprojects/admin/src/Model/CategoryModel.php b/com_swjprojects/admin/src/Model/CategoryModel.php index 48356bcf..be0b4737 100644 --- a/com_swjprojects/admin/src/Model/CategoryModel.php +++ b/com_swjprojects/admin/src/Model/CategoryModel.php @@ -1,7 +1,7 @@ +
+ + +
+
+ + \ No newline at end of file diff --git a/mod_swjprojects_versions/language/en-GB/en-GB.mod_swjprojects_versions.ini b/mod_swjprojects_versions/language/en-GB/mod_swjprojects_versions.ini similarity index 95% rename from mod_swjprojects_versions/language/en-GB/en-GB.mod_swjprojects_versions.ini rename to mod_swjprojects_versions/language/en-GB/mod_swjprojects_versions.ini index 45b6cbc3..59faa39c 100644 --- a/mod_swjprojects_versions/language/en-GB/en-GB.mod_swjprojects_versions.ini +++ b/mod_swjprojects_versions/language/en-GB/mod_swjprojects_versions.ini @@ -1,5 +1,5 @@ ; @package SW JProjects -; @version 2.0.0-alpha3 +; @version 2.0.0 ; @author Sergey Tolkachyov ; @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. ; @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/mod_swjprojects_versions/language/en-GB/en-GB.mod_swjprojects_versions.sys.ini b/mod_swjprojects_versions/language/en-GB/mod_swjprojects_versions.sys.ini similarity index 94% rename from mod_swjprojects_versions/language/en-GB/en-GB.mod_swjprojects_versions.sys.ini rename to mod_swjprojects_versions/language/en-GB/mod_swjprojects_versions.sys.ini index 789b76e8..6058a5c2 100644 --- a/mod_swjprojects_versions/language/en-GB/en-GB.mod_swjprojects_versions.sys.ini +++ b/mod_swjprojects_versions/language/en-GB/mod_swjprojects_versions.sys.ini @@ -1,5 +1,5 @@ ; @package SW JProjects -; @version 2.0.0-alpha3 +; @version 2.0.0 ; @author Sergey Tolkachyov ; @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. ; @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/mod_swjprojects_versions/language/ru-RU/ru-RU.mod_swjprojects_versions.ini b/mod_swjprojects_versions/language/ru-RU/mod_swjprojects_versions.ini similarity index 95% rename from mod_swjprojects_versions/language/ru-RU/ru-RU.mod_swjprojects_versions.ini rename to mod_swjprojects_versions/language/ru-RU/mod_swjprojects_versions.ini index f3edf9f7..53b45863 100644 --- a/mod_swjprojects_versions/language/ru-RU/ru-RU.mod_swjprojects_versions.ini +++ b/mod_swjprojects_versions/language/ru-RU/mod_swjprojects_versions.ini @@ -1,5 +1,5 @@ ; @package SW JProjects -; @version 2.0.0-alpha3 +; @version 2.0.0 ; @author Sergey Tolkachyov ; @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. ; @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/mod_swjprojects_versions/language/ru-RU/ru-RU.mod_swjprojects_versions.sys.ini b/mod_swjprojects_versions/language/ru-RU/mod_swjprojects_versions.sys.ini similarity index 94% rename from mod_swjprojects_versions/language/ru-RU/ru-RU.mod_swjprojects_versions.sys.ini rename to mod_swjprojects_versions/language/ru-RU/mod_swjprojects_versions.sys.ini index ffdbd655..c93c6ec6 100644 --- a/mod_swjprojects_versions/language/ru-RU/ru-RU.mod_swjprojects_versions.sys.ini +++ b/mod_swjprojects_versions/language/ru-RU/mod_swjprojects_versions.sys.ini @@ -1,5 +1,5 @@ ; @package SW JProjects -; @version 2.0.0-alpha3 +; @version 2.0.0 ; @author Sergey Tolkachyov ; @сopyright Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. ; @license GNU/GPL license: https://www.gnu.org/copyleft/gpl.html diff --git a/mod_swjprojects_versions/mod_swjprojects_versions.php b/mod_swjprojects_versions/mod_swjprojects_versions.php deleted file mode 100644 index d1d57009..00000000 --- a/mod_swjprojects_versions/mod_swjprojects_versions.php +++ /dev/null @@ -1,39 +0,0 @@ -load('com_swjprojects', JPATH_SITE, $language->getTag(), true); - -// Prepare model -BaseDatabaseModel::addIncludePath(JPATH_SITE . '/components/com_swjprojects/models'); -$model = BaseDatabaseModel::getInstance('Versions', 'SWJProjectsModel', array('ignore_request' => true)); -$model->setState('project.id', $params->get('project', '')); -$model->setState('params', Factory::getApplication()->getParams()); -$model->setState('filter.published', 1); -$model->setState('list.limit', $params->get('limit', 5)); -$model->setState('list.start', 0); - -// Get items -$items = $model->getItems(); - -// Show module -require ModuleHelper::getLayoutPath($module->module, $params->get('layout', 'default')); \ No newline at end of file diff --git a/mod_swjprojects_versions/mod_swjprojects_versions.xml b/mod_swjprojects_versions/mod_swjprojects_versions.xml index beaeeafe..75a67cad 100644 --- a/mod_swjprojects_versions/mod_swjprojects_versions.xml +++ b/mod_swjprojects_versions/mod_swjprojects_versions.xml @@ -2,26 +2,28 @@ MOD_SWJPROJECTS_VERSIONS Sergey Tolkachyov - 18.08.2024 + 20.08.2024 Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. https://www.gnu.org/copyleft/gpl.html GNU/GPL + info@web-tolk.ru https://web-tolk.ru - https://web-tolk.ru - 2.0.0-alpha3 + 2.0.0 MOD_SWJPROJECTS_VERSIONS_DESCRIPTION + Joomla\Module\Swjprojectsversions - en-GB/en-GB.mod_swjprojects_versions.ini - en-GB/en-GB.mod_swjprojects_versions.sys.ini - ru-RU/ru-RU.mod_swjprojects_versions.ini - ru-RU/ru-RU.mod_swjprojects_versions.sys.ini + en-GB/mod_swjprojects_versions.ini + en-GB/mod_swjprojects_versions.sys.ini + ru-RU/mod_swjprojects_versions.ini + ru-RU/mod_swjprojects_versions.sys.ini - mod_swjprojects_versions.php + src + services tmpl -
+
+ * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +\defined('_JEXEC') or die; + +use Joomla\CMS\Extension\Service\Provider\HelperFactory; +use Joomla\CMS\Extension\Service\Provider\Module; +use Joomla\CMS\Extension\Service\Provider\ModuleDispatcherFactory; +use Joomla\DI\Container; +use Joomla\DI\ServiceProviderInterface; + +/** + * The footer module service provider. + * + * @since 4.4.0 + */ +return new class () implements ServiceProviderInterface { + /** + * Registers the service provider with a DI container. + * + * @param Container $container The DI container. + * + * @return void + * + * @since 4.4.0 + */ + public function register(Container $container): void + { + $container->registerServiceProvider(new ModuleDispatcherFactory('\\Joomla\\Module\\Swjprojectsversions')); + // Namespace модуля для хелпера + $container->registerServiceProvider(new HelperFactory('\\Joomla\\Module\\Swjprojectsversions\\Site\\Helper')); + $container->registerServiceProvider(new Module()); + } +}; diff --git a/mod_swjprojects_versions/src/Dispatcher/Dispatcher.php b/mod_swjprojects_versions/src/Dispatcher/Dispatcher.php new file mode 100644 index 00000000..72a37d78 --- /dev/null +++ b/mod_swjprojects_versions/src/Dispatcher/Dispatcher.php @@ -0,0 +1,45 @@ +getVersions($data['params'], $this->getApplication()); + + return $data; + } +} \ No newline at end of file diff --git a/mod_swjprojects_versions/src/Helper/SwjprojectsversionsHelper.php b/mod_swjprojects_versions/src/Helper/SwjprojectsversionsHelper.php new file mode 100644 index 00000000..46d4b915 --- /dev/null +++ b/mod_swjprojects_versions/src/Helper/SwjprojectsversionsHelper.php @@ -0,0 +1,68 @@ +bootComponent('com_swjprojects') + ->getMVCFactory() + ->createModel('Versions', 'Site', ['ignore_request' => true]); + + $model->setState('params', Factory::getApplication()->getParams()); + $model->setState('filter.published', 1); + $model->setState('list.limit', $params->get('limit', 5)); + + $ordering = $params->get('ordering'); + + if ($ordering === 'rand()') + { + $model->setState('list.ordering', Factory::getContainer()->get(DatabaseInterface::class)->getQuery(true)->Rand()); + } + else + { + $direction = $params->get('direction', 1) ? 'DESC' : 'ASC'; + $model->setState('list.direction', $direction); + $model->setState('list.ordering', $ordering); + } + + // Load language + $app->getLanguage()->load('com_swjprojects', JPATH_SITE); + + // Get items + $items = $model->getItems(); + + return $items; + } +} \ No newline at end of file diff --git a/mod_swjprojects_versions/tmpl/default.php b/mod_swjprojects_versions/tmpl/default.php index 372b926c..70d610ed 100644 --- a/mod_swjprojects_versions/tmpl/default.php +++ b/mod_swjprojects_versions/tmpl/default.php @@ -1,7 +1,7 @@ addStyleDeclaration($css); + +/** + * @var $wa \Joomla\CMS\WebAsset\WebAssetManager + */ +$wa = Factory::getApplication()->getDocument()->getWebAssetManager(); +/** + * You can download swiper js for Joomla + * @link https://web-tolk.ru + * or include swiper.js from CDN or other way you want + */ +$wa->useScript('swiper-bundle')->useStyle('swiper-bundle'); + +$unique = 'mod_swjprojects_header_'.$module->id; + +?> +
+
+ + $item) :?> +
+
+
+ + date, Text::_('DATE_FORMAT_LC3')); ?> + +
+
+

+ title; ?> +

+
+ +
+ download_type === 'paid'): ?> + + + + download_type === 'free'): ?> + + + + +
+
+
+ +
+ +
+ + +
+
+
+ \ No newline at end of file diff --git a/pkg_swjprojects.xml b/pkg_swjprojects.xml index 6baf7ec3..c0471698 100644 --- a/pkg_swjprojects.xml +++ b/pkg_swjprojects.xml @@ -3,31 +3,30 @@ PKG_SWJPROJECTS swjprojects Sergey Tolkachyov - 18.08.2024 + 20.08.2024 Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. https://www.gnu.org/copyleft/gpl.html GNU/GPL https://web-tolk.ru - https://web-tolk.ru - 2.0.0-alpha3 - PKG_SWJPROJECTS_DESCRIPTION + info@web-tolk.ru + 2.0.0 + PKG_SWJPROJECTS_DESC script.php - en-GB/en-GB.pkg_swjprojects.sys.ini - ru-RU/ru-RU.pkg_swjprojects.sys.ini + en-GB/pkg_swjprojects.sys.ini + ru-RU/pkg_swjprojects.sys.ini com_swjprojects - - - + mod_swjprojects_projects + mod_swjprojects_versions + mod_swjprojects_categories + plg_editors-xtd_swjprojectseditorxtd + plg_content_swjprojects https://web-tolk.ru/component/swjprojects/jupdate?element=pkg_swjprojects - - https://www.septdir.com/solutions/joomla/update?element=pkg_swjprojects - https://web-tolk.ru/jchangelog?element=pkg_swjprojects diff --git a/plg_content_swjprojects/language/en-GB/plg_content_swjprojects.sys.ini b/plg_content_swjprojects/language/en-GB/plg_content_swjprojects.sys.ini new file mode 100644 index 00000000..0d793535 --- /dev/null +++ b/plg_content_swjprojects/language/en-GB/plg_content_swjprojects.sys.ini @@ -0,0 +1,2 @@ +PLG_SWJPROJECTS="Content - SW JProjects" +PLG_SWJPROJECTS_DESC="Handles non-SEF links like index.php?option=com_swj projects.... Insert information about projects wherever content plugins work. Use the shortcode {swjprojects project_id=XXXX tmpl=XXXX}. Create your own output layouts in the tmpl folder of the plugin." \ No newline at end of file diff --git a/plg_content_swjprojects/language/ru-RU/plg_content_swjprojects.sys.ini b/plg_content_swjprojects/language/ru-RU/plg_content_swjprojects.sys.ini new file mode 100644 index 00000000..407e7546 --- /dev/null +++ b/plg_content_swjprojects/language/ru-RU/plg_content_swjprojects.sys.ini @@ -0,0 +1,2 @@ +PLG_SWJPROJECTS="Content - SW JProjects" +PLG_SWJPROJECTS_DESC="Обрабатывает non SEF ссылки вида index.php?option=com_swjprojects.... Вставляйте информацию о проектах везде, где работают плагины контента. Используйте шорт-код {swjprojects project_id=XXXX tmpl=XXXX}. Создавайте собственные макеты вывода в папке tmpl плагина." \ No newline at end of file diff --git a/plg_content_swjprojects/script.php b/plg_content_swjprojects/script.php new file mode 100644 index 00000000..85bb5678 --- /dev/null +++ b/plg_content_swjprojects/script.php @@ -0,0 +1,215 @@ +set(InstallerScriptInterface::class, new class ($container->get(AdministratorApplication::class)) implements InstallerScriptInterface { + /** + * The application object + * + * @var AdministratorApplication + * + * @since 1.0.0 + */ + protected AdministratorApplication $app; + + /** + * The Database object. + * + * @var DatabaseDriver + * + * @since 1.0.0 + */ + protected DatabaseDriver $db; + + /** + * Minimum Joomla version required to install the extension. + * + * @var string + * + * @since 1.0.0 + */ + protected string $minimumJoomla = '4.0'; + + /** + * Minimum PHP version required to install the extension. + * + * @var string + * + * @since 1.0.0 + */ + protected string $minimumPhp = '7.4'; + + /** + * Constructor. + * + * @param AdministratorApplication $app The application object. + * + * @since 1.0.0 + */ + public function __construct(AdministratorApplication $app) + { + $this->app = $app; + $this->db = Factory::getContainer()->get('DatabaseDriver'); + } + + /** + * Function called after the extension is installed. + * + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function install(InstallerAdapter $adapter): bool + { + $this->enablePlugin($adapter); + + return true; + } + + /** + * Function called after the extension is updated. + * + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function update(InstallerAdapter $adapter): bool + { + return true; + } + + /** + * Function called after the extension is uninstalled. + * + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function uninstall(InstallerAdapter $adapter): bool + { + + return true; + } + + /** + * Function called before extension installation/update/removal procedure commences. + * + * @param string $type The type of change (install or discover_install, update, uninstall) + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function preflight(string $type, InstallerAdapter $adapter): bool + { + // Check compatible + + return true; + } + + /** + * Function called after extension installation/update/removal procedure commences. + * + * @param string $type The type of change (install or discover_install, update, uninstall) + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function postflight(string $type, InstallerAdapter $adapter): bool + { + + return true; + + } + + /** + * Method to check compatible. + * + * @return boolean True on success, False on failure. + * + * @throws Exception + * + * @since 1.0.0 + */ + protected function checkCompatible(string $element): bool + { + $element = strtoupper($element); + // Check joomla version + if (!(new Version)->isCompatible($this->minimumJoomla)) + { + $this->app->enqueueMessage( + Text::sprintf($element . '_ERROR_COMPATIBLE_JOOMLA', $this->minimumJoomla), + 'error' + ); + + return false; + } + + // Check PHP + if (!(version_compare(PHP_VERSION, $this->minimumPhp) >= 0)) + { + $this->app->enqueueMessage( + Text::sprintf($element . '_ERROR_COMPATIBLE_PHP', $this->minimumPhp), + 'error' + ); + + return false; + } + + return true; + } + + /** + * Enable plugin after installation. + * + * @param InstallerAdapter $adapter Parent object calling object. + * + * @since 1.0.0 + */ + protected function enablePlugin(InstallerAdapter $adapter) + { + // Prepare plugin object + $plugin = new \stdClass(); + $plugin->type = 'plugin'; + $plugin->element = $adapter->getElement(); + $plugin->folder = (string) $adapter->getParent()->manifest->attributes()['group']; + $plugin->enabled = 1; + + // Update record + $this->db->updateObject('#__extensions', $plugin, ['type', 'element', 'folder']); + } + + }); + } +}; \ No newline at end of file diff --git a/plg_content_swjprojects/services/provider.php b/plg_content_swjprojects/services/provider.php new file mode 100644 index 00000000..756f7d50 --- /dev/null +++ b/plg_content_swjprojects/services/provider.php @@ -0,0 +1,50 @@ +set( + PluginInterface::class, + function (Container $container) { + $subject = $container->get(DispatcherInterface::class); + $config = (array) PluginHelper::getPlugin('content', 'swjprojects'); + $plugin = new Swjprojects($subject, $config); + $plugin->setApplication(Factory::getApplication()); + $plugin->setDatabase($container->get(DatabaseInterface::class)); + return $plugin; + } + ); + } +}; \ No newline at end of file diff --git a/plg_content_swjprojects/src/Extension/Swjprojects.php b/plg_content_swjprojects/src/Extension/Swjprojects.php new file mode 100644 index 00000000..199574f1 --- /dev/null +++ b/plg_content_swjprojects/src/Extension/Swjprojects.php @@ -0,0 +1,238 @@ + 'onContentPrepare', + ]; + } + + /** + * Plugin that change short code to project data with specified layout + * + * @param string $context The context of the content being passed to the plugin. + * @param object $project The project object. Note $project->text is also available + * @param mixed $params The project params + * @param integer $limitstart The 'page' number + * + * @return void + * + * @since 1.6 + */ + + public function onContentPrepare(ContentPrepareEvent $event) + { + + // Don't run if in the API Application + // Don't run this plugin when the content is being indexed + if (!$this->getApplication()->isClient('site') || $event->getContext() === 'com_finder.indexer') + { + return; + } + + // Get content item + $project = $event->getItem(); + + // If the item does not have a text property there is nothing to do + if (!property_exists($project, 'text')) + { + return; + } + + //Проверка есть ли строка замены в контенте + if (strpos($project->text, 'swjproject') === false) + { + return; + } + + + $regex = '/{swjprojects\s(.*?)}/i'; + preg_match_all($regex, $project->text, $short_codes); + + $i = 0; + $short_code_params = []; + + foreach ($short_codes[1] as $short_code) + { + + $settings = explode(" ", $short_code); + + foreach ($settings as $param) + { + $param = explode("=", $param); + $short_code_params[$param[0]] = $param[1]; + + } + + if (!empty($short_code_params["project_id"])) + { + + $html = ''; + + $tmpl = (!empty($short_code_params["tmpl"]) ? $short_code_params["tmpl"] : 'default'); + + try + { + $insert_project = $this->getProject((int) $short_code_params["project_id"]); + + + if ($insert_project) + { + + ob_start(); + if (file_exists(JPATH_SITE . '/plugins/content/swjprojects/tmpl/' . $tmpl . '.php')) + { + + require JPATH_SITE . '/plugins/content/swjprojects/tmpl/' . $tmpl . '.php'; + } + else + { + require JPATH_SITE . '/plugins/content/swjprojects/tmpl/default.php'; + } + + $html = ob_get_clean(); + + } + } + catch (Exception $e) + { + + } + + $project->text = str_replace($short_codes[0][$i], $html, $project->text); + + } + else + { + return; + } + $i++; + } + + $project = $this->doSefLink($project); + + } + + /** + * @param int $pk project id + * + * @return bool|object + * + * @throws Exception + * @since 2.0.1 + * @see \Joomla\Component\SWJProjects\Site\Model\ProjectModel + */ + private function getProject(int $pk) + { + $model = $this->getApplication() + ->bootComponent('com_swjprojects') + ->getMVCFactory() + ->createModel('Project', 'Site', ['ignore_request' => true]); + $params = ComponentHelper::getParams('com_swjprojects'); + $model->setState('params', $params); + $project = $model->getItem($pk); + + return $project; + } + + /** + * Do SEF links from index.php?option=com_swjprojects..... + * + * @param $project + * + * @return mixed + * + * @since 2.0.0 + */ + private function doSefLink($project) + { + $prefix = $this->getApplication()->getDocument()->getType() === 'feed' ? Uri::root() : ''; + + // Replace index.php URI by SEF URI. + if (strpos($project->text, 'href="' . $prefix . 'index.php?option=com_swjprojects') !== false) + { + preg_match_all('#href="' . $prefix . 'index.php\?option=com_swjprojects([^"]+)"#m', $project->text, $matches); + + foreach ($matches[1] as $urlQueryString) + { + $uri = new Uri(Uri::root() . '/index.php?option=com_swjprojects' . $urlQueryString); + $view = $uri->getVar('view'); + + if ($view == 'project') + { + + $project_id = $uri->getVar('id'); + if ($project_id && strpos($project_id, ':') !== false) + { + $id = explode(':', $project_id); + $project_id = $id[0]; + } + + $cat_id = $uri->getVar('catid'); + if ($cat_id && strpos($cat_id, ':') !== false) + { + $id = explode(':', $cat_id); + $cat_id = $id[0]; + } + + $project->text = str_replace( + $matches[0], + 'href="' . $prefix . Route::_(RouteHelper::getProjectRoute($project_id,$cat_id)) . '"', + $project->text + ); + } + } + + } + + return $project; + } +} \ No newline at end of file diff --git a/plg_content_swjprojects/src/Fields/PlugininfoField.php b/plg_content_swjprojects/src/Fields/PlugininfoField.php new file mode 100644 index 00000000..e0b1fdfb --- /dev/null +++ b/plg_content_swjprojects/src/Fields/PlugininfoField.php @@ -0,0 +1,106 @@ +form->getData(); + $element = $data->get('element'); + $folder = $data->get('folder'); + + + $doc = Factory::getApplication()->getDocument(); + $doc->addStyleDeclaration(" + .wt-b24-plugin-info{ + box-shadow: 0 .5rem 1rem rgba(0,0,0,.15); + padding:1rem; + margin-bottom: 2rem; + display:flex; + + } + .plugin-info-img{ + margin-right:auto; + max-width: 100%; + } + .plugin-info-img svg:hover * { + cursor:pointer; + } + "); + + $wt_plugin_info = simplexml_load_file(JPATH_SITE."/plugins/".$folder."/".$element."/".$element.".xml"); + + + + ?> + + getLabel(); + } + +} \ No newline at end of file diff --git a/plg_content_swjprojects/swjprojects.xml b/plg_content_swjprojects/swjprojects.xml new file mode 100644 index 00000000..c882344d --- /dev/null +++ b/plg_content_swjprojects/swjprojects.xml @@ -0,0 +1,35 @@ + + + PLG_SWJPROJECTS + Sergey Tolkachyov + 20.08.2024 + Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + info@web-tolk.ru + https://web-tolk.ru + 2.0.0 + PLG_SWJPROJECTS_DESC + Joomla\Plugin\Content\Swjprojects + script.php + + language + services + src + tmpl + swjprojects.xml + + + en-GB/plg_content_swjprojects.sys.ini + ru-RU/plg_content_swjprojects.sys.ini + + + +
+ +
+
+
+
\ No newline at end of file diff --git a/plg_content_swjprojects/tmpl/bootstrap-card-horizontal.php b/plg_content_swjprojects/tmpl/bootstrap-card-horizontal.php new file mode 100644 index 00000000..a1a5ec7b --- /dev/null +++ b/plg_content_swjprojects/tmpl/bootstrap-card-horizontal.php @@ -0,0 +1,58 @@ +"; +// print_r($insert_project); +// echo ""; +$icon = $insert_project->images->get('icon'); +$cover = $insert_project->images->get('cover'); + +?> + +
+
+ +
+ 'img-fluid rounded-start' + ]; + echo HTMLHelper::image($icon, $insert_project->title, $img_attribs); + ?> +
+ +
+
+

title; ?>

+ introtext) ? '

' . $insert_project->introtext . '

' : ''; ?> + 'btn btn-primary', + 'target' => '_blank', + ]; + // $url, $text, $attributes + echo HTMLHelper::link($insert_project->link, Text::_('JDETAILS'), $link_attribs); + ?> +
+
+
+
\ No newline at end of file diff --git a/plg_content_swjprojects/tmpl/bootstrap-card.php b/plg_content_swjprojects/tmpl/bootstrap-card.php new file mode 100644 index 00000000..68d803f2 --- /dev/null +++ b/plg_content_swjprojects/tmpl/bootstrap-card.php @@ -0,0 +1,40 @@ +"; +// print_r($insert_project); +// echo ""; + +?> +
+
+

title; ?>

+ introtext) ? '

'. $insert_project->introtext.'

' : ''; ?> + 'btn btn-primary', + 'target' => '_blank', + ]; + // $url, $text, $attributes + echo HTMLHelper::link($insert_project->link, Text::_('JDETAILS'), $link_attribs); + ?> +
+
\ No newline at end of file diff --git a/plg_content_swjprojects/tmpl/default.php b/plg_content_swjprojects/tmpl/default.php new file mode 100644 index 00000000..fa9f7058 --- /dev/null +++ b/plg_content_swjprojects/tmpl/default.php @@ -0,0 +1,30 @@ +"; +// print_r($insert_project); +// echo ""; + +?> +

title; ?>

+
+introtext; ?> +
+ diff --git a/plg_content_swjprojects/tmpl/link.php b/plg_content_swjprojects/tmpl/link.php new file mode 100644 index 00000000..e0ea2a7a --- /dev/null +++ b/plg_content_swjprojects/tmpl/link.php @@ -0,0 +1,25 @@ +"; +// print_r($insert_project); +// echo ""; + +?> +title; ?> diff --git a/plg_editors-xtd_swjprojectseditorxtd/language/en-GB/plg_editors-xtd_swjprojectseditorxtd.sys.ini b/plg_editors-xtd_swjprojectseditorxtd/language/en-GB/plg_editors-xtd_swjprojectseditorxtd.sys.ini new file mode 100644 index 00000000..09caf2b0 --- /dev/null +++ b/plg_editors-xtd_swjprojectseditorxtd/language/en-GB/plg_editors-xtd_swjprojectseditorxtd.sys.ini @@ -0,0 +1,2 @@ +PLG_SWJPROJECTSEDITORXTD = "Editors-Xtd - SW JProjects" +PLG_SWJPROJECTSEDITORXTD_DESC = "Editor button plugin for inserting projects using the SW JProjects content plugin." \ No newline at end of file diff --git a/plg_editors-xtd_swjprojectseditorxtd/language/ru-RU/plg_editors-xtd_swjprojectseditorxtd.sys.ini b/plg_editors-xtd_swjprojectseditorxtd/language/ru-RU/plg_editors-xtd_swjprojectseditorxtd.sys.ini new file mode 100644 index 00000000..efb9af51 --- /dev/null +++ b/plg_editors-xtd_swjprojectseditorxtd/language/ru-RU/plg_editors-xtd_swjprojectseditorxtd.sys.ini @@ -0,0 +1,2 @@ +PLG_SWJPROJECTSEDITORXTD = "Editors-Xtd - SW JProjects" +PLG_SWJPROJECTSEDITORXTD_DESC = "Плагин кнопки редактора для вставки проектов SW JProjects с помощью плагина контента SW JProjects." \ No newline at end of file diff --git a/plg_editors-xtd_swjprojectseditorxtd/media/js/swjprojectseditorxtd.js b/plg_editors-xtd_swjprojectseditorxtd/media/js/swjprojectseditorxtd.js new file mode 100644 index 00000000..b0952e1c --- /dev/null +++ b/plg_editors-xtd_swjprojectseditorxtd/media/js/swjprojectseditorxtd.js @@ -0,0 +1,52 @@ +/** + * @package SW JProjects + * @version 2.0.0 + * @Author Sergey Tolkachyov, https://web-tolk.ru + * @copyright Copyright (C) 2024 Sergey Tolkachyov + * @license GNU/GPL http://www.gnu.org/licenses/gpl-3.0.html + * @since 1.0.0 + */ + +(() => { + document.addEventListener('DOMContentLoaded', () => { + // Get the elements + const elements = document.querySelectorAll('[data-project-id]'); + + for (let i = 0, l = elements.length; l > i; i += 1) { + // Listen for click event + elements[i].addEventListener('click', event => { + event.preventDefault(); + const { + target + } = event; + + const project_id = target.getAttribute('data-project-id'); + const project_title = target.getAttribute('data-project-title'); + const tmpl = document.getElementById('swjprojectseditorxtd_layout').value; + + if (!Joomla.getOptions('xtd-swjprojectseditorxtd')) { + // Something went wrong! + // @TODO Close the modal + return false; + } + + const { + editor + } = Joomla.getOptions('xtd-swjprojectseditorxtd'); + + let linkString = ''; + if (tmpl === '--none--') { + linkString = '' + project_title + ''; + } else { + linkString = "{swjprojects project_id=" + project_id + " tmpl=" + tmpl + "}"; + } + + window.parent.Joomla.editors.instances[editor].replaceSelection(linkString); + + if (window.parent.Joomla.Modal) { + window.parent.Joomla.Modal.getCurrent().close(); + } + }); + } + }); +})(); diff --git a/plg_editors-xtd_swjprojectseditorxtd/script.php b/plg_editors-xtd_swjprojectseditorxtd/script.php new file mode 100644 index 00000000..85bb5678 --- /dev/null +++ b/plg_editors-xtd_swjprojectseditorxtd/script.php @@ -0,0 +1,215 @@ +set(InstallerScriptInterface::class, new class ($container->get(AdministratorApplication::class)) implements InstallerScriptInterface { + /** + * The application object + * + * @var AdministratorApplication + * + * @since 1.0.0 + */ + protected AdministratorApplication $app; + + /** + * The Database object. + * + * @var DatabaseDriver + * + * @since 1.0.0 + */ + protected DatabaseDriver $db; + + /** + * Minimum Joomla version required to install the extension. + * + * @var string + * + * @since 1.0.0 + */ + protected string $minimumJoomla = '4.0'; + + /** + * Minimum PHP version required to install the extension. + * + * @var string + * + * @since 1.0.0 + */ + protected string $minimumPhp = '7.4'; + + /** + * Constructor. + * + * @param AdministratorApplication $app The application object. + * + * @since 1.0.0 + */ + public function __construct(AdministratorApplication $app) + { + $this->app = $app; + $this->db = Factory::getContainer()->get('DatabaseDriver'); + } + + /** + * Function called after the extension is installed. + * + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function install(InstallerAdapter $adapter): bool + { + $this->enablePlugin($adapter); + + return true; + } + + /** + * Function called after the extension is updated. + * + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function update(InstallerAdapter $adapter): bool + { + return true; + } + + /** + * Function called after the extension is uninstalled. + * + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function uninstall(InstallerAdapter $adapter): bool + { + + return true; + } + + /** + * Function called before extension installation/update/removal procedure commences. + * + * @param string $type The type of change (install or discover_install, update, uninstall) + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function preflight(string $type, InstallerAdapter $adapter): bool + { + // Check compatible + + return true; + } + + /** + * Function called after extension installation/update/removal procedure commences. + * + * @param string $type The type of change (install or discover_install, update, uninstall) + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function postflight(string $type, InstallerAdapter $adapter): bool + { + + return true; + + } + + /** + * Method to check compatible. + * + * @return boolean True on success, False on failure. + * + * @throws Exception + * + * @since 1.0.0 + */ + protected function checkCompatible(string $element): bool + { + $element = strtoupper($element); + // Check joomla version + if (!(new Version)->isCompatible($this->minimumJoomla)) + { + $this->app->enqueueMessage( + Text::sprintf($element . '_ERROR_COMPATIBLE_JOOMLA', $this->minimumJoomla), + 'error' + ); + + return false; + } + + // Check PHP + if (!(version_compare(PHP_VERSION, $this->minimumPhp) >= 0)) + { + $this->app->enqueueMessage( + Text::sprintf($element . '_ERROR_COMPATIBLE_PHP', $this->minimumPhp), + 'error' + ); + + return false; + } + + return true; + } + + /** + * Enable plugin after installation. + * + * @param InstallerAdapter $adapter Parent object calling object. + * + * @since 1.0.0 + */ + protected function enablePlugin(InstallerAdapter $adapter) + { + // Prepare plugin object + $plugin = new \stdClass(); + $plugin->type = 'plugin'; + $plugin->element = $adapter->getElement(); + $plugin->folder = (string) $adapter->getParent()->manifest->attributes()['group']; + $plugin->enabled = 1; + + // Update record + $this->db->updateObject('#__extensions', $plugin, ['type', 'element', 'folder']); + } + + }); + } +}; \ No newline at end of file diff --git a/plg_editors-xtd_swjprojectseditorxtd/services/provider.php b/plg_editors-xtd_swjprojectseditorxtd/services/provider.php new file mode 100644 index 00000000..7a458a81 --- /dev/null +++ b/plg_editors-xtd_swjprojectseditorxtd/services/provider.php @@ -0,0 +1,44 @@ +set( + PluginInterface::class, + function (Container $container) { + $subject = $container->get(DispatcherInterface::class); + $config = (array) PluginHelper::getPlugin('editors-xtd', 'Swjprojectseditorxtd'); + $plugin = new Swjprojectseditorxtd($subject, $config); + $plugin->setApplication(Factory::getApplication()); + return $plugin; + } + ); + } +}; \ No newline at end of file diff --git a/plg_editors-xtd_swjprojectseditorxtd/src/Extension/Swjprojectseditorxtd.php b/plg_editors-xtd_swjprojectseditorxtd/src/Extension/Swjprojectseditorxtd.php new file mode 100644 index 00000000..76981e82 --- /dev/null +++ b/plg_editors-xtd_swjprojectseditorxtd/src/Extension/Swjprojectseditorxtd.php @@ -0,0 +1,265 @@ +getApplication(); + if (!$app->isClient('administrator')) + { + return; + } + + $user = $app->getIdentity(); + + // Can create in any category (component permission) or at least in one category + $canCreateRecords = $user->authorise('core.create', 'com_swjprojects') + || count($user->getAuthorisedCategories('com_swjprojects', 'core.create')) > 0; + + // Instead of checking edit on all records, we can use **same** check as the form editing view + $values = (array) Factory::getApplication()->getUserState('com_swjprojects.edit.project.id'); + $isEditingRecords = count($values); + + // This ACL check is probably a double-check (form view already performed checks) + $hasAccess = $canCreateRecords || $isEditingRecords; + if (!$hasAccess) + { + return; + } + + $link = 'index.php?option=com_ajax&plugin=swjprojectseditorxtd&group=editors-xtd&format=html&tmpl=component&' . Session::getFormToken() . '=1&editor=' . $name; + + $button = new CMSObject; + $button->modal = true; + $button->class = 'btn'; + $button->link = $link; + $button->text = '{SW JProjects}'; + $button->name = 'file-add'; + $button->options = [ + 'height' => '400px', + 'width' => '800px', + 'modalWidth' => '90', + ]; + + return $button; + } + + return; + } + + /** + * Method working with Joomla com_ajax. Return a HTML form for product selection + * @return string product selection HTML form + * @throws \Exception + */ + public function onAjaxSwjprojectseditorxtd(Event $event) + { + $app = $this->getApplication(); + + if ($app->isClient('site')) + { + Session::checkToken('get') or die(Text::_('JINVALID_TOKEN')); + } + + $doc = $app->getDocument(); + $doc->getWebAssetManager() + ->useScript('core') + ->registerAndUseScript( + 'swjprojectseditorxtd', 'plg_editors-xtd_swjprojectseditorxtd/swjprojectseditorxtd.js' + ); + + $editor = $app->getInput()->get('editor', ''); + $swjprojectseditorxtd = Folder::files(JPATH_SITE . "/plugins/content/swjprojects/tmpl"); + $layout_options = [ + 0 => HTMLHelper::_('select.option', '--none--', Text::_('JNONE')) + ]; + foreach ($swjprojectseditorxtd as $file) + { + if (File::getExt($file) == "php") + { + $wt_layout = File::stripExt($file); + $layout_options[] = HTMLHelper::_('select.option', $wt_layout, $wt_layout); + } + } + + if (!empty($editor)) + { + + $doc->addScriptOptions('xtd-swjprojectseditorxtd', array('editor' => $editor)); + } + + $context = 'com_swjprojects.projects'; + + $limit = $app->getInput()->get('limit', $app->get('list_limit'), 'int'); + + + $limitstart = $app->getInput()->get('limitstart', 0, 'int'); + + $projects_model = $app->bootComponent('com_swjprojects') + ->getMVCFactory() + ->createModel('Projects', 'Administrator', ['ignore_request' => true]); + + $projects_model->setState('context', $context); + $projects_model->setState('list.start', $limitstart); + $projects_model->setState('list.limit', $limit); + $projects_model->setState('list.direction', 'asc'); + + $filter = $app->getInput()->get('filter', [], 'array'); + $filter_search = (!empty($filter['search'])) ? $filter['search'] : ''; + $projects_model->setState('filter.search', $filter_search); + + $projects = $projects_model->getItems(); + + ?> +
+ + + + + + + + +
+
+
+ + 'form-select', + 'aria-label' => 'Choose layout' + ]; + + echo HTMLHelper::_("select.genericlist", $layout_options, $name = "swjprojectseditorxtd_layout", $attribs, $key = 'value', $text = 'text', $selected = 0); + + ?> +
+ +
+ +
+ +
+
+ getPagination()->getLimitBox(); ?> +
+
+
+ + /> + + +
+
+
+
+ +
+
+
+

title; ?>

+
+ +
+
+ +
+
+ getPagination()->getListFooter(); ?> +
+
+ + + form->getData(); + $element = $data->get('element'); + $folder = $data->get('folder'); + + + $doc = Factory::getApplication()->getDocument(); + $doc->addStyleDeclaration(" + .wt-b24-plugin-info{ + box-shadow: 0 .5rem 1rem rgba(0,0,0,.15); + padding:1rem; + margin-bottom: 2rem; + display:flex; + + } + .plugin-info-img{ + margin-right:auto; + max-width: 100%; + } + .plugin-info-img svg:hover * { + cursor:pointer; + } + "); + + $wt_plugin_info = simplexml_load_file(JPATH_SITE."/plugins/".$folder."/".$element."/".$element.".xml"); + + + + ?> + + getLabel(); + } + +} + +?> \ No newline at end of file diff --git a/plg_editors-xtd_swjprojectseditorxtd/swjprojectseditorxtd.xml b/plg_editors-xtd_swjprojectseditorxtd/swjprojectseditorxtd.xml new file mode 100644 index 00000000..30deeeb9 --- /dev/null +++ b/plg_editors-xtd_swjprojectseditorxtd/swjprojectseditorxtd.xml @@ -0,0 +1,35 @@ + + + PLG_SWJPROJECTSEDITORXTD + Sergey Tolkachyov + 20.08.2024 + Copyright (c) 2018 - 2024 Sergey Tolkachyov. All rights reserved. + GNU General Public License version 3 + info@web-tolk.ru + https://web-tolk.ru + 2.0.0 + PLG_SWJPROJECTSEDITORXTD_DESC + Joomla\Plugin\EditorsXtd\Swjprojectseditorxtd + script.php + + js + + + en-GB/plg_editors-xtd_swjprojectseditorxtd.sys.ini + ru-RU/plg_editors-xtd_swjprojectseditorxtd.sys.ini + + + src + services + language + swjprojectseditorxtd.xml + + + +
+ +
+
+
+
diff --git a/script.php b/script.php index f2d5cd0b..62611ca2 100644 --- a/script.php +++ b/script.php @@ -1,176 +1,325 @@ checkCompatible()) return false; + $container->set(InstallerScriptInterface::class, new class ($container->get(AdministratorApplication::class)) implements InstallerScriptInterface { - // Check update server - if ($type == 'update') - { - $this->checkUpdateServer(); - } + /** + * The application object + * + * @var AdministratorApplication + * + * @since 1.0.0 + */ + protected AdministratorApplication $app; - return true; - } + /** + * The Database object. + * + * @var DatabaseDriver + * + * @since 1.0.0 + */ + protected DatabaseDriver $db; - /** - * Method to check compatible. - * - * @throws Exception - * - * @return boolean True on success, false on failure. - * - * @since 1.2.0 - */ - protected function checkCompatible() - { - // Check old joomla - if (!class_exists('Joomla\CMS\Version')) - { - Factory::getApplication()->enqueueMessage(Text::sprintf('PKG_SWJPROJECTS_ERROR_COMPATIBLE_JOOMLA', - $this->minimumJoomla), 'error'); + /** + * Minimum Joomla version required to install the extension. + * + * @var string + * + * @since 1.0.0 + */ + protected string $minimumJoomla = '4.2.7'; - return false; - } + /** + * Minimum PHP version required to install the extension. + * + * @var string + * + * @since 1.0.0 + */ + protected string $minimumPhp = '7.4'; - $app = Factory::getApplication(); - $jversion = new Version(); + /** + * Constructor. + * + * @param AdministratorApplication $app The application object. + * + * @since 1.0.0 + */ + public function __construct(AdministratorApplication $app) + { + $this->app = $app; + $this->db = Factory::getContainer()->get('DatabaseDriver'); + } - // Check php - if (!(version_compare(PHP_VERSION, $this->minimumPhp) >= 0)) - { - $app->enqueueMessage(Text::sprintf('PKG_SWJPROJECTS_ERROR_COMPATIBLE_PHP', $this->minimumPhp), - 'error'); + /** + * This method is called after a component is installed. + * + * @param \stdClass $installer - Parent object calling this method. + * + * @return void + */ + public function install(InstallerAdapter $adapter): bool + { - return false; - } + return true; - // Check joomla version - if (!$jversion->isCompatible($this->minimumJoomla)) - { - $app->enqueueMessage(Text::sprintf('PKG_SWJPROJECTS_ERROR_COMPATIBLE_JOOMLA', $this->minimumJoomla), - 'error'); + } - return false; - } + /** + * Function called after the extension is uninstalled. + * + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function uninstall(InstallerAdapter $adapter): bool + { - return true; - } + return true; + } - /** - * Method to check update server and change if need. - * - * @since 1.2.0 - */ - protected function checkUpdateServer() - { - $old = array( - 'https://www.septdir.com/jupdate?element=pkg_swjprojects', - 'https://www.septdir.com/marketplace/joomla/update?element=pkg_swjprojects', - 'https://www.septdir.com/solutions/joomla/update?element=pkg_swjprojects' - ); - $new = 'https://web-tolk.ru/component/swjprojects/jupdate?element=pkg_swjprojects'; - - $db = Factory::getDbo(); - $query = $db->getQuery(true) - ->select(array('update_site_id', 'location')) - ->from($db->quoteName('#__update_sites')) - ->where($db->quoteName('name') . ' = ' . $db->quote('SW JProjects')); - $current = $db->setQuery($query)->loadObject(); - - if (in_array($current->location, $old)) - { - $current->location = $new; - $db->updateObject('#__update_sites', $current, array('update_site_id')); - } - } + /** + * Function called after the extension is updated. + * + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function update(InstallerAdapter $adapter): bool + { - /** - * This method is called when extension is updated. - * - * @param InstallerAdapter $parent Parent object calling object. - * - * @since 1.3.0 - */ - public function update($parent) - { - // Unset package id for JLSitemap plugin - $db = Factory::getDbo(); - $query = $db->getQuery(true) - ->select('extension_id') - ->from($db->quoteName('#__extensions')) - ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) - ->where($db->quoteName('folder') . ' = ' . $db->quote('jlsitemap')) - ->where('package_id <> 0'); - if ($plugin = $db->setQuery($query)->loadResult()) - { - $db->setQuery('UPDATE #__extensions SET package_id = 0 WHERE extension_id = ' . $plugin)->execute(); - } - - echo Text::_('PKG_SWJPROJECTS_WHATS_NEW'); - } + return true; - /** - * This method is called when extension is updated. - * - * @param InstallerAdapter $parent Parent object calling object. - * - * @since 1.8.0 - */ - public function install ($parent){ - echo Text::_('PKG_SWJPROJECTS_WHATS_NEW'); - } + } + + /** + * Function called before extension installation/update/removal procedure commences. + * + * @param string $type The type of change (install or discover_install, update, uninstall) + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function preflight(string $type, InstallerAdapter $adapter): bool + { + + // Check compatible + if (!$this->checkCompatible($adapter->getElement())) + { + return false; + } + + return true; + + } + + + /** + * Function called after extension installation/update/removal procedure commences. + * + * @param string $type The type of change (install or discover_install, update, uninstall) + * @param InstallerAdapter $adapter The adapter calling this method + * + * @return boolean True on success + * + * @since 1.0.0 + */ + public function postflight(string $type, InstallerAdapter $adapter): bool + { + // Check key params + + $smile = ''; + if ($type != 'uninstall') + { + $smiles = ['☺', '😀', '😉', '😍', '😎', '😊', '🙏']; + $smile_key = array_rand($smiles, 1); + $smile = $smiles[$smile_key]; + // Check keys only on install or update + $this->checkKeysParams(); + } + + $element = strtoupper($adapter->getElement()); + $type = strtoupper($type); + $html = ' +
+
+

' . $smile . ' ' . Text::_($element . '_AFTER_' . $type) . '
' . Text::_($element) . '

+ ' . Text::_($element . '_DESC'); + + $html .= Text::_($element . '_WHATS_NEW'); - function postflight($type, $parent) - { + $html .= '
+ - } -} \ No newline at end of file + '; + $this->app->enqueueMessage($html, 'info'); + + return true; + } + + /** + * Enable plugin after installation. + * + * @param InstallerAdapter $adapter Parent object calling object. + * + * @since 1.0.0 + */ + protected function enablePlugin(InstallerAdapter $adapter) + { + // Prepare plugin object + $plugin = new \stdClass(); + $plugin->type = 'plugin'; + $plugin->element = $adapter->getElement(); + $plugin->folder = (string) $adapter->getParent()->manifest->attributes()['group']; + $plugin->enabled = 1; + + // Update record + $this->db->updateObject('#__extensions', $plugin, ['type', 'element', 'folder']); + } + + /** + * Method to check compatible. + * + * @throws Exception + * + * @return boolean True on success, False on failure. + * + * @since 1.0.0 + */ + protected function checkCompatible(string $element): bool + { + $element = strtoupper($element); + // Check joomla version + if (!(new Version)->isCompatible($this->minimumJoomla)) + { + $this->app->enqueueMessage( + Text::sprintf($element.'_ERROR_COMPATIBLE_JOOMLA', $this->minimumJoomla), + 'error' + ); + + return false; + } + + // Check PHP + if (!(version_compare(PHP_VERSION, $this->minimumPhp) >= 0)) + { + $this->app->enqueueMessage( + Text::sprintf($element.'_ERROR_COMPATIBLE_PHP', $this->minimumPhp), + 'error' + ); + + return false; + } + + return true; + } + + + /** + * Method to check keys params and set defaults if don't exist. + * + * @throws Exception + * + * @since 1.3.0 + */ + protected function checkKeysParams() + { + $params = $this->getComponentParams(); + $update = false; + \JLoader::registerNamespace('Joomla\Component\SWJProjects\Administrator\Helper', JPATH_ADMINISTRATOR.'/components/com_swjprojects/src/Helper'); + // Length + if (empty($params->get('key_length'))) + { + $params->set('key_length', 16); + $update = true; + } + + // Characters + if (empty($params->get('key_characters'))) + { + $params->set('key_characters', implode(',', Joomla\Component\SWJProjects\Administrator\Helper\KeysHelper::getCharacters())); + $update = true; + } + + // Master + if (empty($params->get('key_master'))) + { + $params->set('key_master', Joomla\Component\SWJProjects\Administrator\Helper\KeysHelper::generateKey(128)); + $update = true; + } + + // Update + if ($update) + { + $component = new \stdClass(); + $component->element = 'com_swjprojects'; + $component->params = $params->toString(); + + $this->db->updateObject('#__extensions', $component, array('element')); + } + } + + /** + * Method to get component params. + * + * @return Registry Component params registry. + * + * @since 1.3.1 + */ + protected function getComponentParams() + { + $db = $this->db; + $query = $db->getQuery(true) + ->select('params') + ->from('#__extensions') + ->where($db->quoteName('element') . ' = ' . $db->quote('com_swjprojects')); + + return new Registry($db->setQuery($query)->loadResult()); + } + + }); + } +}; \ No newline at end of file